lib/nydp/lexical_context.rb in nydp-0.2.1 vs lib/nydp/lexical_context.rb in nydp-0.2.2

- old
+ new

@@ -1,71 +1,51 @@ -class Nydp::LexicalContext - include Nydp::Helper - attr_reader :names, :values, :parent +module Nydp + class LexicalContext + include Nydp::Helper + attr_reader :parent + attr_accessor :at_0, :at_1, :at_2, :at_3, :at_4, :at_5, :at_6, :at_7, :at_8, :at_9 - def initialize parent - @parent = parent - @names = [] - @values = [] - end + def initialize parent + @parent = parent + end - def nth n - case n - when 0 - self - when -1 - raise "wrong nesting level" - else - parent.nth(n - 1) + def nth n + case n + when 0 + self + when -1 + raise "wrong nesting level" + else + parent.nth(n - 1) + end end - end - def at_index index - values[index] || Nydp::NIL - end + def at_index index + instance_variable_get :"@at_#{index}" + end - def set name, value - names << name - values << value - end - - def set_args_1 names, arg - if pair? names - set names.car, arg - elsif Nydp::NIL.isnt? names - set names, cons(arg) + def set_index index, value + instance_variable_set :"@at_#{index}", value end - end - def set_args_2 names, arg_0, arg_1 - if pair? names - set names.car, arg_0 - set_args_1 names.cdr, arg_1 - elsif Nydp::NIL.isnt? names - set names, cons(arg_0, cons(arg_1)) + def method_missing mname, *args + if mname.to_s =~ /at_\d+=/ + instance_variable_set :"@#{mname.to_s.sub(/=/, '')}", args[0] + elsif mname.to_s =~ /at_\d+/ + instance_variable_get :"@#{mname}" + else + super + end end - end - def set_args_3 names, arg_0, arg_1, arg_2 - if pair? names - set names.car, arg_0 - set_args_2 names.cdr, arg_1, arg_2 - elsif Nydp::NIL.isnt? names - set names, cons(arg_0, cons(arg_1, cons(arg_2))) + def to_s_with_indent str + me = @values.map { |k, v| + [str, k, "=>", v].join ' ' + }.join "\n" + me + (parent ? parent.to_s_with_indent(" #{str}") : '') end - end - def set_index index, value - values[index] = value - end - - def to_s_with_indent str - me = @values.map { |k, v| - [str, k, "=>", v].join ' ' - }.join "\n" - me + (parent ? parent.to_s_with_indent(" #{str}") : '') - end - - def to_s - to_s_with_indent '' + def to_s + to_s_with_indent '' + end end end