diff options
Diffstat (limited to 'gin/runner.cc')
-rw-r--r-- | gin/runner.cc | 35 |
1 files changed, 29 insertions, 6 deletions
diff --git a/gin/runner.cc b/gin/runner.cc index f45d6a0..0cd7269 100644 --- a/gin/runner.cc +++ b/gin/runner.cc @@ -5,6 +5,7 @@ #include "gin/runner.h" #include "gin/converter.h" +#include "gin/per_context_data.h" #include "gin/try_catch.h" using v8::Context; @@ -29,10 +30,10 @@ v8::Handle<ObjectTemplate> RunnerDelegate::GetGlobalTemplate(Runner* runner) { void RunnerDelegate::DidCreateContext(Runner* runner) { } -void RunnerDelegate::WillRunScript(Runner* runner, v8::Handle<Script> script) { +void RunnerDelegate::WillRunScript(Runner* runner) { } -void RunnerDelegate::DidRunScript(Runner* runner, v8::Handle<Script> script) { +void RunnerDelegate::DidRunScript(Runner* runner) { } void RunnerDelegate::UnhandledException(Runner* runner, TryCatch& try_catch) { @@ -44,9 +45,13 @@ Runner::Runner(RunnerDelegate* delegate, Isolate* isolate) weak_factory_(this) { v8::Isolate::Scope isolate_scope(isolate); HandleScope handle_scope(isolate); - SetContext(Context::New(isolate, NULL, delegate_->GetGlobalTemplate(this))); + v8::Handle<v8::Context> context = + Context::New(isolate, NULL, delegate_->GetGlobalTemplate(this)); - v8::Context::Scope scope(context()); + SetContext(context); + PerContextData::From(context)->set_runner(this); + + v8::Context::Scope scope(context); delegate_->DidCreateContext(this); } @@ -59,13 +64,31 @@ void Runner::Run(const std::string& script) { void Runner::Run(v8::Handle<Script> script) { TryCatch try_catch; - delegate_->WillRunScript(this, script); + delegate_->WillRunScript(this); + script->Run(); - delegate_->DidRunScript(this, script); + + delegate_->DidRunScript(this); if (try_catch.HasCaught()) delegate_->UnhandledException(this, try_catch); } +v8::Handle<v8::Value> Runner::Call(v8::Handle<v8::Function> function, + v8::Handle<v8::Value> receiver, + int argc, + v8::Handle<v8::Value> argv[]) { + TryCatch try_catch; + delegate_->WillRunScript(this); + + v8::Handle<v8::Value> result = function->Call(receiver, argc, argv); + + delegate_->DidRunScript(this); + if (try_catch.HasCaught()) + delegate_->UnhandledException(this, try_catch); + + return result; +} + Runner::Scope::Scope(Runner* runner) : isolate_scope_(runner->isolate()), handle_scope_(runner->isolate()), |