Index: gin/runner.cc |
diff --git a/gin/runner.cc b/gin/runner.cc |
index 4b0b6f9b69d3562733b319439e2904915198bc1b..a3c9544872954967a3dd99197cb554a2574b0544 100644 |
--- a/gin/runner.cc |
+++ b/gin/runner.cc |
@@ -5,9 +5,9 @@ |
#include "gin/runner.h" |
#include "gin/converter.h" |
+#include "gin/try_catch.h" |
using v8::Context; |
-using v8::Handle; |
using v8::HandleScope; |
using v8::Isolate; |
using v8::Object; |
@@ -22,16 +22,26 @@ RunnerDelegate::RunnerDelegate() { |
RunnerDelegate::~RunnerDelegate() { |
} |
-Handle<ObjectTemplate> RunnerDelegate::GetGlobalTemplate(Runner* runner) { |
- return Handle<ObjectTemplate>(); |
+v8::Handle<ObjectTemplate> RunnerDelegate::GetGlobalTemplate(Runner* runner) { |
+ return v8::Handle<ObjectTemplate>(); |
} |
void RunnerDelegate::DidCreateContext(Runner* runner) { |
} |
+void RunnerDelegate::WillRunScript(Runner* runner, v8::Handle<Script> script) { |
+} |
+ |
+void RunnerDelegate::DidRunScript(Runner* runner, v8::Handle<Script> script) { |
+} |
+ |
+void RunnerDelegate::UnhandledException(Runner* runner, TryCatch& try_catch) { |
+} |
+ |
Runner::Runner(RunnerDelegate* delegate, Isolate* isolate) |
: ContextHolder(isolate), |
- delegate_(delegate) { |
+ delegate_(delegate), |
+ weak_factory_(this) { |
HandleScope handle_scope(isolate); |
SetContext(Context::New(isolate, NULL, delegate_->GetGlobalTemplate(this))); |
@@ -46,8 +56,15 @@ void Runner::Run(const std::string& script) { |
Run(Script::New(StringToV8(isolate(), script))); |
} |
-void Runner::Run(Handle<Script> script) { |
- script->Run(); |
+void Runner::Run(v8::Handle<Script> script) { |
+ delegate_->WillRunScript(this, script); |
+ { |
+ TryCatch try_catch; |
+ script->Run(); |
+ if (try_catch.HasCaught()) |
+ delegate_->UnhandledException(this, try_catch); |
+ } |
+ delegate_->DidRunScript(this, script); |
} |
Runner::Scope::Scope(Runner* runner) |