class Minjs::ECMA262::LexEnv

class of Lexical Environment

@see www.ecma-international.org/ecma-262 ECMA262 10.2

Attributes

outer[R]
record[RW]
type[R]

Public Class Methods

new(options = {}) click to toggle source
# File lib/minjs/ecma262/env.rb, line 58
def initialize(options = {})
  @outer = options[:outer]
  @type = (options[:type] || :declarative)
  if options[:record]
    @record = ObjectEnvRecord.new
  elsif options[:type] == :declarative
    @record = DeclarativeEnvRecord.new
  elsif options[:type] == :object or true
    @record = ObjectEnvRecord.new
  end
end
new_declarative_env(e) click to toggle source

NewDeclarativeEnvironment(E)

@see www.ecma-international.org/ecma-262 ECMA262 10.2.2.2

# File lib/minjs/ecma262/env.rb, line 80
def self.new_declarative_env(e)
  env = LexEnv.new(outer: e, type: :declarative)
end

Public Instance Methods

debug() click to toggle source

debug

# File lib/minjs/ecma262/env.rb, line 99
def debug
  STDERR.puts @record.binding.keys.join(", ")
end
new_declarative_env(outer = nil) click to toggle source

NewDeclarativeEnvironment(E)

@see www.ecma-international.org/ecma-262 ECMA262 10.2.2.2

# File lib/minjs/ecma262/env.rb, line 73
def new_declarative_env(outer = nil)
  e = LexEnv.new(outer: (outer || self), type: :declarative)
end
new_object_env(object, outer = nil) click to toggle source

NewObjectEnvironment(O, E)

@see www.ecma-international.org/ecma-262 ECMA262 10.2.2.3

# File lib/minjs/ecma262/env.rb, line 87
def new_object_env(object, outer = nil)#TODO
  raise 'TODO'
  e = LexEnv.new(outer: (outer || self), type: :object)
  object.val.each do |k, v|
    if k.id_name?
      e.create_mutable_binding(k)
      e.set_mutable_binding(k, v)
    end
  end
end