1
0
Fork 0
mirror of https://github.com/rubyjs/therubyracer synced 2023-03-27 23:21:42 -04:00

Don't enter a context if it is already entered.

This commit is contained in:
Charles Lowell 2010-05-18 16:16:12 +03:00
parent 2e897ce011
commit 0e5173a32f

View file

@ -5,12 +5,16 @@ module V8
class Context
def enter
if block_given?
Enter()
begin
if IsEntered()
yield(self)
ensure
Exit()
end
else
Enter()
begin
yield(self)
ensure
Exit()
end
end
end
end
end
@ -18,7 +22,7 @@ module V8
class Context
attr_reader :native
def initialize(opts = {})
def initialize(opts = {})
@native = C::Context.new(opts[:with])
end
@ -32,32 +36,17 @@ module V8
if IO === javascript || StringIO === javascript
javascript = javascript.read()
end
@native.Enter()
begin
C::TryCatch.try do |try|
C::TryCatch.try do |try|
@native.enter do
script = C::Script::Compile(To.v8(javascript.to_s), To.v8(filename.to_s))
raise JavascriptError.new(try) if try.HasCaught()
result = script.Run()
raise JavascriptError.new(try) if try.HasCaught()
raise JavascriptError.new(try) if try.HasCaught()
To.ruby(result)
end
ensure
@native.Exit()
end
end
end
# def eval(javascript, sourcename = '<eval>', line = 1)
# if IO === javascript || StringIO === javascript
# javascript = javascript.read()
# end
# @native.open do
# @native.eval(javascript, sourcename).tap do |result|
# raise JavascriptError.new(result) if result.kind_of?(C::Message)
# return To.ruby(result)
# end
# end
# end
def evaluate(*args)
self.eval(*args)
end
@ -96,16 +85,7 @@ module V8
V8::Context.eval(*args)
end
end
class ContextError < StandardError
def initialize(caller_name)
super("tried to call method '#{caller_name} without an open context")
end
def self.check_open(caller_name)
raise new(caller_name) unless C::Context::InContext()
end
end
class JavascriptError < StandardError
attr_reader :source_name, :source_line, :line_number, :javascript_stacktrace
@ -119,6 +99,4 @@ module V8
end
end
class RunawayScriptError < ContextError
end
end