From c425c42ad9aa3b5b1c254b5889e7c1904ce1399b Mon Sep 17 00:00:00 2001 From: Charles Lowell Date: Sun, 23 May 2010 04:26:32 +0300 Subject: [PATCH] don't throw exceptions inside an open context. It ain't good. --- lib/v8/context.rb | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/lib/v8/context.rb b/lib/v8/context.rb index f68905f..712a0c0 100644 --- a/lib/v8/context.rb +++ b/lib/v8/context.rb @@ -17,16 +17,26 @@ module V8 def eval(javascript, filename = "", line = 1) if IO === javascript || StringIO === javascript javascript = javascript.read() - end + end + err = nil + value = nil C::TryCatch.try do |try| @native.enter do script = C::Script::Compile(To.v8(javascript.to_s), To.v8(filename.to_s)) - JavascriptError.check try - result = script.Run() - JavascriptError.check try - To.ruby(result) + if try.HasCaught() + err = JavascriptError.new(try) + else + result = script.Run() + if try.HasCaught() + err = JavascriptError.new(try) + else + value = To.ruby(result) + end + end end end + raise err if err + return value end def evaluate(*args)