v8::Handle<v8::Value> V8GL::execute(v8::Handle<v8::Context> context, v8::Handle<v8::String> source, v8::Handle<v8::String> filename) { context->Enter(); v8::HandleScope scope; v8::TryCatch try_catch; v8::Local<v8::Script> script = v8::Script::Compile(source, filename); v8::Handle<v8::Value> value; if (script.IsEmpty()) { V8GL::logException(&try_catch); value = v8::Null(); } else { v8::Handle<v8::Value> result = script->Run(); if (result.IsEmpty()) { // assert(try_catch.HasCaught()); V8GL::logException(&try_catch); value = v8::Null(); } else if (result->IsUndefined()) { value = v8::Undefined(); } else { value = result; } } context->Exit(); return scope.Close(value); }