summaryrefslogtreecommitdiffstats
path: root/gin/runner.cc
diff options
context:
space:
mode:
Diffstat (limited to 'gin/runner.cc')
-rw-r--r--gin/runner.cc35
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()),