class Nydp::Assignment

Public Class Methods

build(args, bindings, ns) click to toggle source
# 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
new(name, value, src) click to toggle source
# File lib/nydp/assignment.rb, line 12
def initialize name, value, src
  @name, @value, @src = name, value, src
end

Public Instance Methods

compile_to_ruby(indent, srcs, opts=nil) click to toggle source
# 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) click to toggle source
# 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
inspect() click to toggle source
# File lib/nydp/assignment.rb, line 30
def inspect; to_s ; end
lexical_reach(n) click to toggle source
# File lib/nydp/assignment.rb, line 16
def lexical_reach n
  [@name.lexical_reach(n), @value.lexical_reach(n)].max
end
to_s() click to toggle source
# File lib/nydp/assignment.rb, line 20
def to_s
  "(assign #{@src.car} #{@src.cdr.car})"
end