mirror of
https://github.com/RGBCube/serenity
synced 2025-07-27 20:57:35 +00:00
LibJS: Add basic support for module code with top-level await
For now, we handle this by creating a synthetic async function to wrap the top-level module code. This allows us to piggyback on the async function driver wrapper mechanism.
This commit is contained in:
parent
26c21fba8e
commit
a2c3db8367
4 changed files with 35 additions and 3 deletions
|
@ -1192,7 +1192,11 @@ Completion ECMAScriptFunctionObject::ordinary_call_evaluate_body()
|
|||
}
|
||||
}
|
||||
|
||||
auto declaration_result = function_declaration_instantiation();
|
||||
auto declaration_result = [&]() -> ThrowCompletionOr<void> {
|
||||
if (is_module_wrapper())
|
||||
return {};
|
||||
return function_declaration_instantiation();
|
||||
}();
|
||||
|
||||
if (m_kind == FunctionKind::Normal || m_kind == FunctionKind::Generator || m_kind == FunctionKind::AsyncGenerator) {
|
||||
if (declaration_result.is_error())
|
||||
|
|
|
@ -49,6 +49,9 @@ public:
|
|||
|
||||
void make_method(Object& home_object);
|
||||
|
||||
[[nodiscard]] bool is_module_wrapper() const { return m_is_module_wrapper; }
|
||||
void set_is_module_wrapper(bool b) { m_is_module_wrapper = b; }
|
||||
|
||||
Statement const& ecmascript_code() const { return m_ecmascript_code; }
|
||||
Vector<FunctionParameter> const& formal_parameters() const { return m_formal_parameters; }
|
||||
|
||||
|
@ -153,6 +156,7 @@ private:
|
|||
HashTable<DeprecatedFlyString> m_parameter_names;
|
||||
Vector<FunctionDeclaration const&> m_functions_to_initialize;
|
||||
bool m_arguments_object_needed { false };
|
||||
bool m_is_module_wrapper { false };
|
||||
Vector<VariableNameToInitialize> m_var_names_to_initialize_binding;
|
||||
Vector<DeprecatedFlyString> m_function_names_to_initialize_binding;
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue