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:
parent
2e897ce011
commit
0e5173a32f
1 changed files with 16 additions and 38 deletions
|
@ -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
|
Loading…
Add table
Add a link
Reference in a new issue