lib/nydp/runner.rb in nydp-0.0.6 vs lib/nydp/runner.rb in nydp-0.0.7
- old
+ new
@@ -45,13 +45,18 @@
@precompile = Symbol.mk(:"pre-compile", ns)
@quote = Symbol.mk(:quote, ns)
end
def compile_and_eval expr
- vm.thread Pair.new(Compiler.compile(expr, Nydp.NIL), Nydp.NIL)
- rescue Exception => e
- raise "failed to eval #{expr.inspect},\nerror was #{e.message}\nvm state is #{vm.error}"
+ result = vm.thread Pair.new(Compiler.compile(expr, Nydp.NIL), Nydp.NIL)
+ e = vm.unhandled_error
+ vm.unhandled_error = nil
+ if e
+ new_msg = "failed to eval #{expr.inspect}\nerror was #{Nydp.indent_text e.message}"
+ raise e.class, new_msg, e.backtrace
+ end
+ result
end
def quote expr
Pair.from_list [@quote, expr]
end
@@ -76,10 +81,10 @@
@parser = Nydp::Parser.new(ns)
@tokens = Nydp::Tokeniser.new stream
end
def print val
- @printer.puts val if @printer
+ @printer.puts val.inspect if @printer
end
def run
res = Nydp.NIL
while !@tokens.finished