| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
1 parent d54e6ae commit 1986ee4
4 files changed
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -144,12 +144,12 @@ ModuleWrap::ModuleWrap(Realm* realm, | |||
| 144 | 144 | Local<Object> context_object, | |
| 145 | 145 | Local<Value> synthetic_evaluation_step) | |
| 146 | 146 | : BaseObject(realm, object), | |
| 147 | + url_(Utf8Value(realm->isolate(), url).ToString()), | ||
| 147 | 148 | module_(realm->isolate(), module), | |
| 148 | 149 | module_hash_(module->GetIdentityHash()) { | |
| 149 | 150 | realm->env()->hash_to_module_map.emplace(module_hash_, this); | |
| 150 | 151 | ||
| 151 | 152 | object->SetInternalField(kModuleSlot, module); | |
| 152 | - object->SetInternalField(kURLSlot, url); | ||
| 153 | 153 | object->SetInternalField(kModuleSourceObjectSlot, | |
| 154 | 154 | v8::Undefined(realm->isolate())); | |
| 155 | 155 | object->SetInternalField(kSyntheticEvaluationStepsSlot, | |
@@ -968,8 +968,7 @@ void ModuleWrap::GetModuleSourceObject( | |||
| 968 | 968 | obj->object()->GetInternalField(kModuleSourceObjectSlot).As<Value>(); | |
| 969 | 969 | ||
| 970 | 970 | if (module_source_object->IsUndefined()) { | |
| 971 | - Local<String> url = obj->object()->GetInternalField(kURLSlot).As<String>(); | ||
| 972 | - THROW_ERR_SOURCE_PHASE_NOT_DEFINED(isolate, url); | ||
| 971 | + THROW_ERR_SOURCE_PHASE_NOT_DEFINED(isolate, obj->url_); | ||
| 973 | 972 | return; | |
| 974 | 973 | } | |
| 975 | 974 | ||
@@ -1043,10 +1042,8 @@ MaybeLocal<Object> ModuleWrap::ResolveSourceCallback( | |||
| 1043 | 1042 | ->GetInternalField(ModuleWrap::kModuleSourceObjectSlot) | |
| 1044 | 1043 | .As<Value>(); | |
| 1045 | 1044 | if (module_source_object->IsUndefined()) { | |
| 1046 | - Local<String> url = resolved_module->object() | ||
| 1047 | - ->GetInternalField(ModuleWrap::kURLSlot) | ||
| 1048 | - .As<String>(); | ||
| 1049 | - THROW_ERR_SOURCE_PHASE_NOT_DEFINED(Isolate::GetCurrent(), url); | ||
| 1045 | + THROW_ERR_SOURCE_PHASE_NOT_DEFINED(Isolate::GetCurrent(), | ||
| 1046 | + resolved_module->url_); | ||
| 1050 | 1047 | return {}; | |
| 1051 | 1048 | } | |
| 1052 | 1049 | CHECK(module_source_object->IsObject()); | |
@@ -1078,17 +1075,21 @@ Maybe<ModuleWrap*> ModuleWrap::ResolveModule( | |||
| 1078 | 1075 | return Nothing<ModuleWrap*>(); | |
| 1079 | 1076 | } | |
| 1080 | 1077 | if (!dependent->IsLinked()) { | |
| 1081 | - THROW_ERR_VM_MODULE_LINK_FAILURE( | ||
| 1082 | - env, | ||
| 1083 | - "request for '%s' is from a module not been linked", | ||
| 1084 | - cache_key.specifier); | ||
| 1078 | + THROW_ERR_VM_MODULE_LINK_FAILURE(env, | ||
| 1079 | + "request for '%s' can not be resolved on " | ||
| 1080 | + "module '%s' that is not linked", | ||
| 1081 | + cache_key.specifier, | ||
| 1082 | + dependent->url_); | ||
| 1085 | 1083 | return Nothing<ModuleWrap*>(); | |
| 1086 | 1084 | } | |
| 1087 | 1085 | ||
| 1088 | 1086 | auto it = dependent->resolve_cache_.find(cache_key); | |
| 1089 | 1087 | if (it == dependent->resolve_cache_.end()) { | |
| 1090 | 1088 | THROW_ERR_VM_MODULE_LINK_FAILURE( | |
| 1091 | - env, "request for '%s' is not in cache", cache_key.specifier); | ||
| 1089 | + env, | ||
| 1090 | + "request for '%s' is not cached on module '%s'", | ||
| 1091 | + cache_key.specifier, | ||
| 1092 | + dependent->url_); | ||
| 1092 | 1093 | return Nothing<ModuleWrap*>(); | |
| 1093 | 1094 | } | |
| 1094 | 1095 | ||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -99,7 +99,6 @@ class ModuleWrap : public BaseObject { | |||
| 99 | 99 | public: | |
| 100 | 100 | enum InternalFields { | |
| 101 | 101 | kModuleSlot = BaseObject::kInternalFieldCount, | |
| 102 | - kURLSlot, | ||
| 103 | 102 | kModuleSourceObjectSlot, | |
| 104 | 103 | kSyntheticEvaluationStepsSlot, | |
| 105 | 104 | kContextObjectSlot, // Object whose creation context is the target Context | |
@@ -215,6 +214,7 @@ class ModuleWrap : public BaseObject { | |||
| 215 | 214 | v8::Local<v8::FixedArray> import_attributes, | |
| 216 | 215 | v8::Local<v8::Module> referrer); | |
| 217 | 216 | ||
| 217 | + std::string url_; | ||
| 218 | 218 | v8::Global<v8::Module> module_; | |
| 219 | 219 | ResolveCache resolve_cache_; | |
| 220 | 220 | contextify::ContextifyContext* contextify_context_ = nullptr; | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -295,12 +295,11 @@ inline v8::Local<v8::Object> ERR_BUFFER_TOO_LARGE(v8::Isolate* isolate) { | |||
| 295 | 295 | } | |
| 296 | 296 | ||
| 297 | 297 | inline void THROW_ERR_SOURCE_PHASE_NOT_DEFINED(v8::Isolate* isolate, | |
| 298 | - v8::Local<v8::String> url) { | ||
| 299 | - std::string message = std::string(*v8::String::Utf8Value(isolate, url)); | ||
| 298 | + const std::string& url) { | ||
| 300 | 299 | return THROW_ERR_SOURCE_PHASE_NOT_DEFINED( | |
| 301 | 300 | isolate, | |
| 302 | - "Source phase import object is not defined for module %s", | ||
| 303 | - message.c_str()); | ||
| 301 | + "Source phase import object is not defined for module '%s'", | ||
| 302 | + url); | ||
| 304 | 303 | } | |
| 305 | 304 | ||
| 306 | 305 | inline v8::Local<v8::Object> ERR_STRING_TOO_LONG(v8::Isolate* isolate) { | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -65,3 +65,14 @@ test('mismatch linkage', () => { | |||
| 65 | 65 | code: 'ERR_MODULE_LINK_MISMATCH', | |
| 66 | 66 | }); | |
| 67 | 67 | }); | |
| 68 | + | ||
| 69 | + test('instantiate error should hint about module identifier', () => { | ||
| 70 | + const foo = new SourceTextModule('import bar from "bar"', { identifier: 'file://foo' }); | ||
| 71 | + const bar = new SourceTextModule('import "unknown"', { identifier: 'file://bar' }); | ||
| 72 | + | ||
| 73 | + foo.linkRequests([bar]); | ||
| 74 | + assert.throws(() => foo.instantiate(), { | ||
| 75 | + message: `request for 'unknown' can not be resolved on module 'file://bar' that is not linked`, | ||
| 76 | + code: 'ERR_VM_MODULE_LINK_FAILURE', | ||
| 77 | + }); | ||
| 78 | + }); | ||
| Back | FazBrowse Home | New Git URL |
0 commit comments