1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-19 00:15:08 +00:00

LibJS: Update import referrer's [[LoadedModules]] in place

We were previously updating a copy of the list, which meant loading
could not proceed even after a module was loaded.
This commit is contained in:
Andreas Kling 2023-12-03 14:21:21 +01:00
parent 5e67853b49
commit 99106df834
3 changed files with 8 additions and 5 deletions

View file

@ -73,12 +73,13 @@ void finish_loading_imported_module(ImportedModuleReferrer referrer, ModuleReque
if (!result.is_error()) {
// NOTE: Only Script and CyclicModule referrers have the [[LoadedModules]] internal slot.
if (referrer.has<NonnullGCPtr<Script>>() || referrer.has<NonnullGCPtr<CyclicModule>>()) {
auto loaded_modules = referrer.visit(
[](JS::NonnullGCPtr<JS::Script> script) -> Vector<ModuleWithSpecifier> { return script->loaded_modules(); },
[](JS::NonnullGCPtr<JS::CyclicModule> module) -> Vector<ModuleWithSpecifier> { return module->loaded_modules(); },
[](auto&) {
auto& loaded_modules = referrer.visit(
[](JS::NonnullGCPtr<JS::Realm>&) -> Vector<ModuleWithSpecifier>& {
VERIFY_NOT_REACHED();
return Vector<ModuleWithSpecifier> {};
__builtin_unreachable();
},
[](auto& script_or_module) -> Vector<ModuleWithSpecifier>& {
return script_or_module->loaded_modules();
});
bool found_record = false;