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