diff options
Diffstat (limited to 'gin/modules')
-rw-r--r-- | gin/modules/module_registry.cc | 26 |
1 files changed, 10 insertions, 16 deletions
diff --git a/gin/modules/module_registry.cc b/gin/modules/module_registry.cc index 8baa482..afb07d3 100644 --- a/gin/modules/module_registry.cc +++ b/gin/modules/module_registry.cc @@ -12,6 +12,7 @@ #include "gin/converter.h" #include "gin/per_isolate_data.h" #include "gin/public/wrapper_info.h" +#include "gin/try_catch.h" using v8::Context; using v8::External; @@ -91,19 +92,6 @@ Handle<String> GetHiddenValueKey(Isolate* isolate) { return StringToSymbol(isolate, "::gin::ModuleRegistry"); } -std::string GetImplicitModuleName(const std::string& explicit_name) { - if (!explicit_name.empty()) - return explicit_name; - std::string implicit_name; - Handle<StackTrace> trace = StackTrace::CurrentStackTrace(1); - if (!trace->GetFrameCount()) - return implicit_name; - Handle<String> script_name = trace->GetFrame(0)->GetScriptName(); - if (!script_name.IsEmpty()) - ConvertFromV8(script_name, &implicit_name); - return implicit_name; -} - } // namespace ModuleRegistry::ModuleRegistry(Isolate* isolate) @@ -196,11 +184,17 @@ void ModuleRegistry::Load(Isolate* isolate, scoped_ptr<PendingModule> pending) { Handle<Function> factory; if (ConvertFromV8(module, &factory)) { Handle<Object> global = isolate->GetCurrentContext()->Global(); - module = factory->Call(global, argc, argv.data()); - // TODO(abarth): What should we do with exceptions? + { + gin::TryCatch try_catch; + module = factory->Call(global, argc, argv.data()); + if (try_catch.HasCaught()) + return; // TODO(abarth): What should we do with the exception? + } + if (pending->id.empty()) + ConvertFromV8(factory->GetScriptOrigin().ResourceName(), &pending->id); } - RegisterModule(isolate, GetImplicitModuleName(pending->id), module); + RegisterModule(isolate, pending->id, module); } bool ModuleRegistry::AttemptToLoad(Isolate* isolate, |