Class: V8::Portal::Caller
Instance Method Summary collapse
-
#initialize(portal) ⇒ Caller
constructor
A new instance of Caller.
- #invoke(code, *args, &block) ⇒ Object
- #protect(*args, &block) ⇒ Object
- #raw ⇒ Object
Constructor Details
#initialize(portal) ⇒ Caller
Returns a new instance of Caller.
6 7 8 |
# File 'lib/v8/portal/caller.rb', line 6 def initialize(portal) @portal = portal end |
Instance Method Details
#invoke(code, *args, &block) ⇒ Object
29 30 31 32 33 34 |
# File 'lib/v8/portal/caller.rb', line 29 def invoke(code, *args, &block) protect do args = args.slice(0, code.arity) if code.arity >= 0 code.call(*args, &block) end end |
#protect(*args, &block) ⇒ Object
25 26 27 |
# File 'lib/v8/portal/caller.rb', line 25 def protect(*args, &block) @portal.v8 raw(*args, &block) end |
#raw ⇒ Object
10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
# File 'lib/v8/portal/caller.rb', line 10 def raw yield rescue Exception => e case e when SystemExit, NoMemoryError raise e else error = V8::C::Exception::Error(V8::C::String::New(e.)) #TODO: This is almost certainly a crash here. #we need to hold onto `error` while it bubbles up the javascript stack. error.SetHiddenValue("TheRubyRacer::Cause", C::External::New(e)) V8::C::ThrowException(error) end end |