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