зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1427610 - Implement import.meta in the browser r=bkelly
This commit is contained in:
Родитель
5e77cd6fcb
Коммит
a844ec84c4
|
@ -785,6 +785,34 @@ HostResolveImportedModule(JSContext* aCx, JS::Handle<JSObject*> aModule,
|
|||
return ms->ModuleRecord();
|
||||
}
|
||||
|
||||
bool
|
||||
HostPopulateImportMeta(JSContext* aCx, JS::Handle<JSObject*> aModule,
|
||||
JS::Handle<JSObject*> aMetaObject)
|
||||
{
|
||||
MOZ_DIAGNOSTIC_ASSERT(aModule);
|
||||
|
||||
JS::Value value = JS::GetModuleHostDefinedField(aModule);
|
||||
if (value.isUndefined()) {
|
||||
JS_ReportErrorASCII(aCx, "Module script not found");
|
||||
return false;
|
||||
}
|
||||
|
||||
auto script = static_cast<ModuleScript*>(value.toPrivate());
|
||||
MOZ_DIAGNOSTIC_ASSERT(script->ModuleRecord() == aModule);
|
||||
|
||||
nsAutoCString url;
|
||||
MOZ_DIAGNOSTIC_ASSERT(script->BaseURL());
|
||||
MOZ_ALWAYS_SUCCEEDS(script->BaseURL()->GetAsciiSpec(url));
|
||||
|
||||
JS::Rooted<JSString*> urlString(aCx, JS_NewStringCopyZ(aCx, url.get()));
|
||||
if (!urlString) {
|
||||
JS_ReportOutOfMemory(aCx);
|
||||
return false;
|
||||
}
|
||||
|
||||
return JS_DefineProperty(aCx, aMetaObject, "url", urlString, JSPROP_ENUMERATE);
|
||||
}
|
||||
|
||||
static void
|
||||
EnsureModuleResolveHook(JSContext* aCx)
|
||||
{
|
||||
|
@ -794,6 +822,7 @@ EnsureModuleResolveHook(JSContext* aCx)
|
|||
}
|
||||
|
||||
JS::SetModuleResolveHook(rt, HostResolveImportedModule);
|
||||
JS::SetModuleMetadataHook(rt, HostPopulateImportMeta);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -1,4 +0,0 @@
|
|||
[import-meta-url.html]
|
||||
[Untitled]
|
||||
expected: FAIL
|
||||
|
|
@ -21,6 +21,27 @@ test(() => {
|
|||
base + "/import-meta-dependent.js");
|
||||
}, "import.meta.url in a dependent external script");
|
||||
|
||||
test(() => {
|
||||
assert_equals(typeof importMetaOnRootModule, "object");
|
||||
assert_not_equals(importMetaOnRootModule, null);
|
||||
}, "import.meta is an object");
|
||||
|
||||
test(() => {
|
||||
importMetaOnRootModule.newProperty = 1;
|
||||
assert_true(Object.isExtensible(importMetaOnRootModule));
|
||||
}, "import.meta is extensible");
|
||||
|
||||
test(() => {
|
||||
let names = new Set(Reflect.ownKeys(importMetaOnRootModule));
|
||||
for (name of names) {
|
||||
var desc = Object.getOwnPropertyDescriptor(importMetaOnRootModule, name);
|
||||
assert_equals(desc.writable, true);
|
||||
assert_equals(desc.enumerable, true);
|
||||
assert_equals(desc.configurable, true);
|
||||
}
|
||||
}, "import.meta's properties are writable, configurable, and enumerable");
|
||||
|
||||
|
||||
import { importMetaOnRootModule as hashedImportMetaOnRootModule1,
|
||||
importMetaOnDependentModule as hashedImportMetaOnDependentModule1 }
|
||||
from "./import-meta-root.js#1";
|
||||
|
|
Загрузка…
Ссылка в новой задаче