LibJS: Sync additional Import Attributes spec changes

Some steps were not updated with tc39/ecma262#3057. This patch
syncs the remaining changes.
This commit is contained in:
Feng Yu 2025-09-22 16:46:22 -07:00 committed by Jelle Raaijmakers
parent f8c4043460
commit 61c36e2865
Notes: github-actions[bot] 2025-10-22 08:59:25 +00:00
9 changed files with 120 additions and 66 deletions

View file

@ -95,20 +95,20 @@ void finish_loading_imported_module(ImportedModuleReferrer referrer, ModuleReque
// NOTE: Only Script and CyclicModule referrers have the [[LoadedModules]] internal slot.
if (referrer.has<GC::Ref<Script>>() || referrer.has<GC::Ref<CyclicModule>>()) {
auto& loaded_modules = referrer.visit(
[](GC::Ref<JS::Realm>&) -> Vector<ModuleWithSpecifier>& {
[](GC::Ref<JS::Realm>&) -> Vector<LoadedModuleRequest>& {
VERIFY_NOT_REACHED();
__builtin_unreachable();
},
[](auto& script_or_module) -> Vector<ModuleWithSpecifier>& {
[](auto& script_or_module) -> Vector<LoadedModuleRequest>& {
return script_or_module->loaded_modules();
});
bool found_record = false;
// a. If referrer.[[LoadedModules]] contains a Record whose [[Specifier]] is specifier, then
// a. If referrer.[[LoadedModules]] contains a LoadedModuleRequest Record record such that ModuleRequestsEqual(record, moduleRequest) is true, then
for (auto const& record : loaded_modules) {
if (record.specifier == module_request.module_specifier) {
// i. Assert: That Record's [[Module]] is result.[[Value]].
if (module_requests_equal(record, module_request)) {
// i. Assert: record.[[Module]] and result.[[Value]] are the same Module Record.
VERIFY(record.module == result.value());
found_record = true;
}
@ -118,9 +118,10 @@ void finish_loading_imported_module(ImportedModuleReferrer referrer, ModuleReque
if (!found_record) {
auto module = result.value();
// i. Append the Record { [[Specifier]]: specifier, [[Module]]: result.[[Value]] } to referrer.[[LoadedModules]].
loaded_modules.append(ModuleWithSpecifier {
// i. Append the LoadedModuleRequest Record { [[Specifier]]: moduleRequest.[[Specifier]], [[Attributes]]: moduleRequest.[[Attributes]], [[Module]]: result.[[Value]] } to referrer.[[LoadedModules]].
loaded_modules.append(LoadedModuleRequest {
.specifier = module_request.module_specifier.to_utf16_string(),
.attributes = module_request.attributes,
.module = GC::Ref<Module>(*module) });
}
}