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, #rubify

Constructor Details

#initialize(name, value, src) ⇒ Assignment

Returns a new instance of Assignment.



12
13
14
# File 'lib/nydp/assignment.rb', line 12

def initialize name, value, src
  @name, @value, @src = name, value, src
end

Class Method Details

.build(args, bindings, ns) ⇒ Object



5
6
7
8
9
10
# File 'lib/nydp/assignment.rb', line 5

def self.build args, bindings, ns
  name = Compiler.compile args.car, bindings, ns
  raise "can't assign to #{name._nydp_inspect} : expression was #{args}" unless name.respond_to?(:assign)
  value_expr = args.cdr.car
  Assignment.new name, Compiler.compile(value_expr, bindings, ns), args
end

Instance Method Details

#compile_to_ruby(indent, srcs, opts = nil) ⇒ Object



24
25
26
27
28
# File 'lib/nydp/assignment.rb', line 24

def compile_to_ruby indent, srcs, opts=nil
  "#{indent}##> #{to_s.split(/\n/).join('\n')}\n" +
    "#{indent}(#{@name.compile_to_ruby "", srcs} =\n" +
    "#{indent}#{@value.compile_to_ruby indent, srcs})"
end

#execute(vm) ⇒ Object



32
33
34
35
36
# File 'lib/nydp/assignment.rb', line 32

def execute vm
  @name.assign @value.execute(vm), vm.current_context
rescue
  raise "assigning #{@value._nydp_inspect} to #{@name._nydp_inspect}"
end

#inspectObject



30
# File 'lib/nydp/assignment.rb', line 30

def inspect; to_s ; end

#lexical_reach(n) ⇒ Object



16
17
18
# File 'lib/nydp/assignment.rb', line 16

def lexical_reach n
  [@name.lexical_reach(n), @value.lexical_reach(n)].max
end

#to_sObject



20
21
22
# File 'lib/nydp/assignment.rb', line 20

def to_s
  "(assign #{@src.car} #{@src.cdr.car})"
end