mirror of
https://github.com/RGBCube/serenity
synced 2025-07-24 23:37:43 +00:00
LibJS: Make AsyncFunctionStart a standalone AO
This function may be called by places outside of ECMAScriptFunctionObject.
This commit is contained in:
parent
07f451044b
commit
7b5362fea6
2 changed files with 4 additions and 7 deletions
|
@ -754,10 +754,8 @@ void ECMAScriptFunctionObject::ordinary_call_bind_this(ExecutionContext& callee_
|
||||||
}
|
}
|
||||||
|
|
||||||
// 27.7.5.1 AsyncFunctionStart ( promiseCapability, asyncFunctionBody ), https://tc39.es/ecma262/#sec-async-functions-abstract-operations-async-function-start
|
// 27.7.5.1 AsyncFunctionStart ( promiseCapability, asyncFunctionBody ), https://tc39.es/ecma262/#sec-async-functions-abstract-operations-async-function-start
|
||||||
void ECMAScriptFunctionObject::async_function_start(PromiseCapability const& promise_capability)
|
void async_function_start(VM& vm, PromiseCapability const& promise_capability, NonnullRefPtr<Statement const> const& async_function_body)
|
||||||
{
|
{
|
||||||
auto& vm = this->vm();
|
|
||||||
|
|
||||||
// 1. Let runningContext be the running execution context.
|
// 1. Let runningContext be the running execution context.
|
||||||
auto& running_context = vm.running_execution_context();
|
auto& running_context = vm.running_execution_context();
|
||||||
|
|
||||||
|
@ -767,7 +765,7 @@ void ECMAScriptFunctionObject::async_function_start(PromiseCapability const& pro
|
||||||
// 3. NOTE: Copying the execution state is required for AsyncBlockStart to resume its execution. It is ill-defined to resume a currently executing context.
|
// 3. NOTE: Copying the execution state is required for AsyncBlockStart to resume its execution. It is ill-defined to resume a currently executing context.
|
||||||
|
|
||||||
// 4. Perform AsyncBlockStart(promiseCapability, asyncFunctionBody, asyncContext).
|
// 4. Perform AsyncBlockStart(promiseCapability, asyncFunctionBody, asyncContext).
|
||||||
async_block_start(vm, m_ecmascript_code, promise_capability, async_context);
|
async_block_start(vm, async_function_body, promise_capability, async_context);
|
||||||
|
|
||||||
// 5. Return unused.
|
// 5. Return unused.
|
||||||
}
|
}
|
||||||
|
@ -978,7 +976,7 @@ Completion ECMAScriptFunctionObject::ordinary_call_evaluate_body()
|
||||||
// 4. Else,
|
// 4. Else,
|
||||||
else {
|
else {
|
||||||
// a. Perform AsyncFunctionStart(promiseCapability, FunctionBody).
|
// a. Perform AsyncFunctionStart(promiseCapability, FunctionBody).
|
||||||
async_function_start(promise_capability);
|
async_function_start(vm, promise_capability, m_ecmascript_code);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 5. Return Completion Record { [[Type]]: return, [[Value]]: promiseCapability.[[Promise]], [[Target]]: empty }.
|
// 5. Return Completion Record { [[Type]]: return, [[Value]]: promiseCapability.[[Promise]], [[Target]]: empty }.
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
namespace JS {
|
namespace JS {
|
||||||
|
|
||||||
void async_block_start(VM&, NonnullRefPtr<Statement const> const& parse_node, PromiseCapability const&, ExecutionContext&);
|
void async_block_start(VM&, NonnullRefPtr<Statement const> const& parse_node, PromiseCapability const&, ExecutionContext&);
|
||||||
|
void async_function_start(VM&, PromiseCapability const&, NonnullRefPtr<Statement const> const& async_function_body);
|
||||||
|
|
||||||
// 10.2 ECMAScript Function Objects, https://tc39.es/ecma262/#sec-ecmascript-function-objects
|
// 10.2 ECMAScript Function Objects, https://tc39.es/ecma262/#sec-ecmascript-function-objects
|
||||||
class ECMAScriptFunctionObject final : public FunctionObject {
|
class ECMAScriptFunctionObject final : public FunctionObject {
|
||||||
|
@ -104,8 +105,6 @@ private:
|
||||||
ThrowCompletionOr<void> prepare_for_ordinary_call(ExecutionContext& callee_context, Object* new_target);
|
ThrowCompletionOr<void> prepare_for_ordinary_call(ExecutionContext& callee_context, Object* new_target);
|
||||||
void ordinary_call_bind_this(ExecutionContext&, Value this_argument);
|
void ordinary_call_bind_this(ExecutionContext&, Value this_argument);
|
||||||
|
|
||||||
void async_function_start(PromiseCapability const&);
|
|
||||||
|
|
||||||
ThrowCompletionOr<void> function_declaration_instantiation(Interpreter*);
|
ThrowCompletionOr<void> function_declaration_instantiation(Interpreter*);
|
||||||
|
|
||||||
DeprecatedFlyString m_name;
|
DeprecatedFlyString m_name;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue