Class: Nydp::Evaluator

Inherits:
Object show all
Defined in:
lib/nydp/runner.rb

Direct Known Subclasses

Runner

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(vm, ns, name) ⇒ Evaluator

Returns a new instance of Evaluator.



42
43
44
45
46
47
48
# File 'lib/nydp/runner.rb', line 42

def initialize vm, ns, name
  @name       = name
  @vm         = vm
  @ns         = ns
  @precompile = Symbol.mk(:"pre-compile", ns)
  @quote      = Symbol.mk(:quote, ns)
end

Instance Attribute Details

#nameObject

Returns the value of attribute name.



40
41
42
# File 'lib/nydp/runner.rb', line 40

def name
  @name
end

#nsObject

Returns the value of attribute ns.



40
41
42
# File 'lib/nydp/runner.rb', line 40

def ns
  @ns
end

#vmObject

Returns the value of attribute vm.



40
41
42
# File 'lib/nydp/runner.rb', line 40

def vm
  @vm
end

Instance Method Details

#compile_and_eval(expr) ⇒ Object



50
51
52
53
54
55
56
# File 'lib/nydp/runner.rb', line 50

def compile_and_eval expr
  begin
    vm.thread_with_expr Pair.new(Compiler.compile(expr, Nydp::NIL), Nydp::NIL)
  rescue StandardError => e
    raise Nydp::Error, "failed to eval #{expr.inspect}"
  end
end

#evaluate(expr) ⇒ Object



62
63
64
# File 'lib/nydp/runner.rb', line 62

def evaluate expr
  compile_and_eval(pre_compile(expr))
end

#pre_compile(expr) ⇒ Object



58
59
60
# File 'lib/nydp/runner.rb', line 58

def pre_compile expr
  compile_and_eval(Pair.from_list [@precompile, Pair.from_list([@quote, expr])])
end