Class: Nydp::Assignment
Class Method Summary
collapse
Instance Method Summary
collapse
Methods included from Helper
#cons, #list, #literal?, #pair?, #sig, #sym, #sym?
Methods included from Converter
#n2r, #r2n
Constructor Details
#initialize(name, value, value_src) ⇒ Assignment
Returns a new instance of Assignment.
30
31
32
33
|
# File 'lib/nydp/assignment.rb', line 30
def initialize name, value, value_src
@name, @value, @value_src = name, value, value_src
@instructions = cons(value, cons(AssignmentInstruction.new(name)))
end
|
Class Method Details
.build(args, bindings) ⇒ Object
23
24
25
26
27
28
|
# File 'lib/nydp/assignment.rb', line 23
def self.build args, bindings
name = Compiler.compile args.car, bindings
raise "can't assign to #{name.inspect} : expression was #{args}" unless name.respond_to?(:assign)
value_expr = args.cdr.car
Assignment.new name, Compiler.compile(value_expr, bindings), value_expr
end
|
Instance Method Details
#execute(vm) ⇒ Object
45
46
47
48
49
|
# File 'lib/nydp/assignment.rb', line 45
def execute vm
vm.push_ctx_instructions @instructions
rescue
raise "assigning #{@value.inspect} to #{@name.inspect}"
end
|
43
|
# File 'lib/nydp/assignment.rb', line 43
def inspect; to_s ; end
|
#lexical_reach(n) ⇒ Object
35
36
37
|
# File 'lib/nydp/assignment.rb', line 35
def lexical_reach n
[@name.lexical_reach(n), @value.lexical_reach(n)].max
end
|
39
40
41
|
# File 'lib/nydp/assignment.rb', line 39
def to_s
"(assign #{@instructions.cdr.car.name} #{@value_src.inspect})"
end
|