lib/nydp/context_symbol.rb in nydp-0.4.3 vs lib/nydp/context_symbol.rb in nydp-0.4.5
- old
+ new
@@ -23,16 +23,22 @@
else
"set_index(#{binding_index}, value)"
end
code = <<-KLASS
- def initialize name
- @name = name
+ def initialize name, lexical_depth
+ @name, @lexical_depth = name, lexical_depth
end
+ def lexical_reach n
+ @lexical_depth + n
+ end
+
def value ctx
ctx#{getctx}.#{at_index} || Nydp::NIL
+ rescue
+ raise "failed looking up \#{@name.inspect} (\#{@name.class.name})"
end
def assign value, ctx
ctx#{getctx}.#{set_index}
rescue StandardError => e
@@ -43,18 +49,20 @@
vm.push_arg value vm.current_context
end
def depth ; #{depth} ; end
def inspect ; to_s ; end
- def to_s ; "[#{depth}##{binding_index}]\#{@name}" ; end
+ def to_s ; "[#{depth}##{binding_index}#\#{@lexical_depth}]\#{@name}" ; end
KLASS
const_set name, Class.new(Nydp::ContextSymbol) {
- eval code
+ eval code, binding, name.to_s, 0
}
end
- def self.build depth, name, binding_index
- const_get(:"ContextSymbol_#{depth}_#{binding_index}").new(name)
+ def self.build effective_depth, name, binding_index, lexical_depth
+ const_get(:"ContextSymbol_#{effective_depth}_#{binding_index}").new(name, lexical_depth)
+ rescue
+ raise "building ContextSymbol #{[effective_depth, name, binding_index, lexical_depth].inspect}"
end
end
end