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