module Nydp class ContextSymbol def self.build depth, name, binding_index cname = "ContextSymbol_#{depth}_#{binding_index}" existing = const_get(cname) rescue nil return existing.new(name) if existing getctx = ([".parent"] * depth).join at_index = if binding_index < 10 "at_#{binding_index}" else "at_index(#{binding_index})" end set_index = if binding_index < 10 "at_#{binding_index}= value" else "set_index(#{binding_index}, value)" end klass = < e raise "problem in \#{self.class.name}#assign, name is \#{@name}, depth is \#{depth}, index is #{binding_index}" end def execute vm 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 end KLASS eval klass const_get(cname).new(name) end end end