mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-04-28 23:39:02 +00:00
LibWeb: Push the realm execution context while linking modules
If linking fails, we throw a JS exception, and if there's no execution context on the VM stack at that time, we assert in VM::current_realm(). This is a hack to prevent crashing on failed module loads. Long term we need to rewrite module loading since it has been refactored to share code differently between HTML and ECMA262.
This commit is contained in:
parent
819fb39a87
commit
f823b297b4
Notes:
sideshowbarker
2024-07-17 00:27:16 +09:00
Author: https://github.com/awesomekling
Commit: f823b297b4
Pull-request: https://github.com/SerenityOS/serenity/pull/18909
1 changed files with 8 additions and 1 deletions
|
@ -601,7 +601,7 @@ void fetch_descendants_of_and_link_a_module_script(JavaScriptModuleScript& modul
|
|||
// 1. Fetch the descendants of module script, given fetch client settings object, destination, visited set, and onFetchDescendantsComplete as defined below.
|
||||
// If performFetch was given, pass it along as well.
|
||||
// FIXME: Pass performFetch if given.
|
||||
fetch_descendants_of_a_module_script(module_script, fetch_client_settings_object, destination, visited_set, [on_complete = move(on_complete)](auto result) {
|
||||
fetch_descendants_of_a_module_script(module_script, fetch_client_settings_object, destination, visited_set, [&fetch_client_settings_object, on_complete = move(on_complete)](auto result) {
|
||||
// onFetchDescendantsComplete given result is the following algorithm:
|
||||
// 1. If result is null, then run onComplete given result, and abort these steps.
|
||||
if (!result) {
|
||||
|
@ -609,6 +609,10 @@ void fetch_descendants_of_and_link_a_module_script(JavaScriptModuleScript& modul
|
|||
return;
|
||||
}
|
||||
|
||||
// FIXME: This is an ad-hoc hack to make sure that there's an execution context on the VM stack in case linking throws an exception.
|
||||
auto& vm = fetch_client_settings_object.vm();
|
||||
vm.push_execution_context(fetch_client_settings_object.realm_execution_context());
|
||||
|
||||
// FIXME: 2. Let parse error be the result of finding the first parse error given result.
|
||||
|
||||
// 3. If parse error is null, then:
|
||||
|
@ -628,6 +632,9 @@ void fetch_descendants_of_and_link_a_module_script(JavaScriptModuleScript& modul
|
|||
TODO();
|
||||
}
|
||||
|
||||
// FIXME: This undoes the ad-hoc hack above.
|
||||
vm.pop_execution_context();
|
||||
|
||||
// 5. Run onComplete given result.
|
||||
on_complete(result);
|
||||
});
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue