diff options
Diffstat (limited to 'gin/runner.cc')
-rw-r--r-- | gin/runner.cc | 51 |
1 files changed, 24 insertions, 27 deletions
diff --git a/gin/runner.cc b/gin/runner.cc index ec701b7..4b0b6f9 100644 --- a/gin/runner.cc +++ b/gin/runner.cc @@ -7,55 +7,52 @@ #include "gin/converter.h" using v8::Context; -using v8::Function; using v8::Handle; using v8::HandleScope; using v8::Isolate; -using v8::Local; using v8::Object; +using v8::ObjectTemplate; using v8::Script; -using v8::String; -using v8::Value; namespace gin { +RunnerDelegate::RunnerDelegate() { +} + RunnerDelegate::~RunnerDelegate() { } +Handle<ObjectTemplate> RunnerDelegate::GetGlobalTemplate(Runner* runner) { + return Handle<ObjectTemplate>(); +} + +void RunnerDelegate::DidCreateContext(Runner* runner) { +} + Runner::Runner(RunnerDelegate* delegate, Isolate* isolate) - : delegate_(delegate), - isolate_(isolate) { - HandleScope handle_scope(isolate_); - context_.Reset(isolate_, Context::New(isolate_)); + : ContextHolder(isolate), + delegate_(delegate) { + HandleScope handle_scope(isolate); + SetContext(Context::New(isolate, NULL, delegate_->GetGlobalTemplate(this))); + + v8::Context::Scope scope(context()); + delegate_->DidCreateContext(this); } Runner::~Runner() { - // TODO(abarth): Figure out how to set kResetInDestructor to true. - context_.Reset(); } -void Runner::Run(Handle<Script> script) { - script->Run(); - Handle<Function> main = GetMain(); - if (main.IsEmpty()) - return; - Handle<Value> argv[] = { delegate_->CreateRootObject(this) }; - main->Call(global(), 1, argv); +void Runner::Run(const std::string& script) { + Run(Script::New(StringToV8(isolate(), script))); } -v8::Handle<v8::Function> Runner::GetMain() { - Handle<Value> property = global()->Get(StringToSymbol(isolate_, "main")); - if (property.IsEmpty()) - return v8::Handle<v8::Function>(); - Handle<Function> main; - if (!ConvertFromV8(property, &main)) - return v8::Handle<v8::Function>(); - return main; +void Runner::Run(Handle<Script> script) { + script->Run(); } Runner::Scope::Scope(Runner* runner) - : handle_scope_(runner->isolate_), - scope_(Local<Context>::New(runner->isolate_, runner->context_)) { + : handle_scope_(runner->isolate()), + scope_(runner->context()) { } Runner::Scope::~Scope() { |