Class: Nydp::Assignment

Inherits:
Object show all
Includes:
Helper
Defined in:
lib/nydp/assignment.rb

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

#inspectObject



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

#to_sObject



39
40
41
# File 'lib/nydp/assignment.rb', line 39

def to_s
  "(assign #{@instructions.cdr.car.name} #{@value_src.inspect})"
end