async-module-does-not-block-sibling-modules.js |
---
esid: sec-innermoduleevaluation
description: >
While an asynchronous module is waiting for a promise resolution,
sibling modules in the modules graph must be evaluated.
flags: [module, async]
features: [top-level-await]
--- |
528 |
async-module-sync_FIXTURE.js |
|
202 |
async-module-tla_FIXTURE.js |
|
225 |
await-awaits-thenable-not-callable.js |
---
esid: prod-AwaitExpression
description: >
Await can await any thenable. If the thenable's then is not callable,
await evaluates to the thenable
flags: [module, async]
features: [top-level-await]
--- |
460 |
await-awaits-thenables-that-throw.js |
---
esid: prod-AwaitExpression
description: >
Await can await any thenable.
flags: [module, async]
features: [top-level-await]
--- |
501 |
await-awaits-thenables.js |
---
esid: prod-AwaitExpression
description: >
Await can await any thenable.
flags: [module, async]
features: [top-level-await]
--- |
413 |
await-dynamic-import-rejection.js |
---
esid: sec-moduleevaluation
description: >
Top Level Await on a Dynamic import
info: |
InnerModuleEvaluation( module, stack, index )
...
14. If module.[[PendingAsyncDependencies]] is > 0, set module.[[AsyncEvaluating]] to true.
15. Otherwise, if module.[[Async]] is true, perform ! ExecuteAsyncModule(module).
16. Otherwise, perform ? module.ExecuteModule().
ExecuteAsyncModule ( module )
1. Assert: module.[[Status]] is "evaluating" or "evaluated".
2. Assert: module.[[Async]] is true.
3. Set module.[[AsyncEvaluating]] to true.
4. Let capability be ! NewPromiseCapability(%Promise%).
5. Let stepsFulfilled be the steps of a CallAsyncModuleFulfilled function as specified below.
...
8. Let stepsRejected be the steps of a CallAsyncModuleRejected function as specified below.
...
11. Perform ! PerformPromiseThen(capability.[[Promise]], onFulfilled, onRejected).
12. Perform ! module.ExecuteModule(capability).
13. Return.
ExecuteModule ( [ capability ] )
...
11. If module.[[Async]] is false, then
a. Assert: capability was not provided.
b. Push moduleCxt on to the execution context stack; moduleCxt is now the running execution context.
c. Let result be the result of evaluating module.[[ECMAScriptCode]].
d. Suspend moduleCxt and remove it from the execution context stack.
e. Resume the context that is now on the top of the execution context stack as the running execution context.
f. Return Completion(result).
12. Otherwise,
a. Assert: capability is a PromiseCapability Record.
b. Perform ! AsyncBlockStart(capability, module.[[ECMAScriptCode]], moduleCxt).
c. Return.
flags: [module]
features: [top-level-await, dynamic-import]
negative:
phase: runtime
type: TypeError
--- |
2056 |
await-dynamic-import-resolution.js |
---
esid: sec-moduleevaluation
description: >
Top Level Await on a Dynamic import
info: |
InnerModuleEvaluation( module, stack, index )
...
14. If module.[[PendingAsyncDependencies]] is > 0, set module.[[AsyncEvaluating]] to true.
15. Otherwise, if module.[[Async]] is true, perform ! ExecuteAsyncModule(module).
16. Otherwise, perform ? module.ExecuteModule().
ExecuteAsyncModule ( module )
1. Assert: module.[[Status]] is "evaluating" or "evaluated".
2. Assert: module.[[Async]] is true.
3. Set module.[[AsyncEvaluating]] to true.
4. Let capability be ! NewPromiseCapability(%Promise%).
5. Let stepsFulfilled be the steps of a CallAsyncModuleFulfilled function as specified below.
...
8. Let stepsRejected be the steps of a CallAsyncModuleRejected function as specified below.
...
11. Perform ! PerformPromiseThen(capability.[[Promise]], onFulfilled, onRejected).
12. Perform ! module.ExecuteModule(capability).
13. Return.
ExecuteModule ( [ capability ] )
...
11. If module.[[Async]] is false, then
a. Assert: capability was not provided.
b. Push moduleCxt on to the execution context stack; moduleCxt is now the running execution context.
c. Let result be the result of evaluating module.[[ECMAScriptCode]].
d. Suspend moduleCxt and remove it from the execution context stack.
e. Resume the context that is now on the top of the execution context stack as the running execution context.
f. Return Completion(result).
12. Otherwise,
a. Assert: capability is a PromiseCapability Record.
b. Perform ! AsyncBlockStart(capability, module.[[ECMAScriptCode]], moduleCxt).
c. Return.
flags: [module, async]
features: [top-level-await, dynamic-import]
--- |
2064 |
await-expr-func-expression.js |
---
description: >
A function after top level await is an expression and not a hoistable declaration
info: |
ModuleItem:
StatementListItem[~Yield, +Await, ~Return]
...
ExpressionStatement[Yield, Await]:
[lookahead ∉ { {, function, async [no LineTerminator here] function, class, let [ }]
Expression[+In, ?Yield, ?Await];
UnaryExpression[Yield, Await]
[+Await]AwaitExpression[?Yield]
AwaitExpression[Yield]:
await UnaryExpression[?Yield, +Await]
...
PrimaryExpression[Yield, Await]:
this
IdentifierReference[?Yield, ?Await]
Literal
ArrayLiteral[?Yield, ?Await]
ObjectLiteral[?Yield, ?Await]
FunctionExpression
ClassExpression[?Yield, ?Await]
GeneratorExpression
AsyncFunctionExpression
AsyncGeneratorExpression
RegularExpressionLiteral
TemplateLiteral[?Yield, ?Await, ~Tagged]
CoverParenthesizedExpressionAndArrowParameterList[?Yield, ?Await]
esid: prod-AwaitExpression
flags: [module, async]
features: [top-level-await]
--- |
1285 |
await-expr-new-expr-reject.js |
---
description: >
Evaluation of a rejected promise
info: |
ModuleItem:
StatementListItem[~Yield, +Await, ~Return]
...
UnaryExpression[Yield, Await]
[+Await]AwaitExpression[?Yield]
AwaitExpression[Yield]:
await UnaryExpression[?Yield, +Await]
...
LeftHandSideExpression[Yield, Await]:
NewExpression[?Yield, ?Await]
CallExpression[?Yield, ?Await]
NewExpression[Yield, Await]:
MemberExpression[?Yield, ?Await]
new NewExpression[?Yield, ?Await]
MemberExpression[Yield, Await]:
...
new MemberExpression[?Yield, ?Await] Arguments[?Yield, ?Await]
esid: prod-AwaitExpression
flags: [module, async]
features: [top-level-await]
--- |
1031 |
await-expr-new-expr.js |
---
description: >
Evaluation of await before a NewExpression
info: |
ModuleItem:
StatementListItem[~Yield, +Await, ~Return]
...
UnaryExpression[Yield, Await]
[+Await]AwaitExpression[?Yield]
AwaitExpression[Yield]:
await UnaryExpression[?Yield, +Await]
...
LeftHandSideExpression[Yield, Await]:
NewExpression[?Yield, ?Await]
CallExpression[?Yield, ?Await]
NewExpression[Yield, Await]:
MemberExpression[?Yield, ?Await]
new NewExpression[?Yield, ?Await]
MemberExpression[Yield, Await]:
...
new MemberExpression[?Yield, ?Await] Arguments[?Yield, ?Await]
esid: prod-AwaitExpression
flags: [module, async]
features: [top-level-await]
--- |
958 |
await-expr-regexp.js |
---
description: >
Verify a RegularExpressionLiteral following an AwaitExpression is
not ambiguous to an Division
info: |
ModuleItem:
StatementListItem[~Yield, +Await, ~Return]
...
UnaryExpression[Yield, Await]
[+Await]AwaitExpression[?Yield]
AwaitExpression[Yield]:
await UnaryExpression[?Yield, +Await]
...
PrimaryExpression[Yield, Await]:
this
IdentifierReference[?Yield, ?Await]
Literal
ArrayLiteral[?Yield, ?Await]
ObjectLiteral[?Yield, ?Await]
FunctionExpression
ClassExpression[?Yield, ?Await]
GeneratorExpression
AsyncFunctionExpression
AsyncGeneratorExpression
RegularExpressionLiteral
TemplateLiteral[?Yield, ?Await, ~Tagged]
CoverParenthesizedExpressionAndArrowParameterList[?Yield, ?Await]
esid: prod-AwaitExpression
flags: [module, async]
features: [top-level-await]
--- |
1185 |
await-expr-reject-throws.js |
---
description: >
AwaitExpression evaluates to abrupt completions in promise rejections
info: |
ModuleItem:
StatementListItem[~Yield, +Await, ~Return]
...
UnaryExpression[Yield, Await]
void UnaryExpression[?Yield, ?Await]
[+Await]AwaitExpression[?Yield]
AwaitExpression[Yield]:
await UnaryExpression[?Yield, +Await]
esid: prod-AwaitExpression
flags: [module, async]
features: [top-level-await]
--- |
1519 |
await-expr-resolution.js |
---
description: >
AwaitExpression Resolutions
info: |
ModuleItem:
StatementListItem[~Yield, +Await, ~Return]
...
UnaryExpression[Yield, Await]
void UnaryExpression[?Yield, ?Await]
[+Await]AwaitExpression[?Yield]
AwaitExpression[Yield]:
await UnaryExpression[?Yield, +Await]
esid: prod-AwaitExpression
flags: [module, async]
features: [top-level-await]
--- |
1168 |
await-void-expr.js |
---
description: >
AwaitExpression void resolves into undefined
info: |
ModuleItem:
StatementListItem[~Yield, +Await, ~Return]
...
UnaryExpression[Yield, Await]
void UnaryExpression[?Yield, ?Await]
[+Await]AwaitExpression[?Yield]
AwaitExpression[Yield]:
await UnaryExpression[?Yield, +Await]
esid: prod-AwaitExpression
flags: [module, async]
features: [top-level-await]
--- |
626 |
browser.js |
|
0 |
dfs-invariant-async_FIXTURE.js |
|
214 |
dfs-invariant-direct-1_FIXTURE.js |
|
253 |
dfs-invariant-direct-2_FIXTURE.js |
|
253 |
dfs-invariant-indirect_FIXTURE.js |
|
256 |
dfs-invariant.js |
---
description: Parent completion orderings match the synchronous module behavior
info: |
6.2.4 AsyncModuleExecutionFulfilled ( module )
[...]
5. Let _execList_ be a new empty List.
6. Perform ! GatherAsyncParentCompletions(_module_, _execList_).
7. Let _sortedExecList_ be a List of elements that are the elements of
_execList_, in the order in which they had their [[AsyncEvaluating]]
fields set to *true* in InnerModuleEvaluation.
8. Assert: All elements of _sortedExecList_ have their [[AsyncEvaluating]]
field set to *true*, [[PendingAsyncDependencies]] field set to 0 and
[[EvaluationError]] field set to *undefined*.
[...]
Dependency graph for this test:
dfs-invariant.js
.-----------------------------------+-------.
| | v
| | dfs-invariant-indirect_FIXTURE.js
| .---|----------------------'
v v v
dfs-invariant-direct-1_FIXTURE.js dfs-invariant-direct-2_FIXTURE.js
'--------. .--------'
v v
dfs-invariant-async_FIXTURE.js
esid: sec-moduleevaluation
flags: [module]
features: [top-level-await, globalThis]
--- |
1749 |
dynamic-import-rejection.js |
---
esid: sec-moduleevaluation
description: >
Dynamic imported module with async exports
info: |
InnerModuleEvaluation( module, stack, index )
...
14. If module.[[PendingAsyncDependencies]] is > 0, set module.[[AsyncEvaluating]] to true.
15. Otherwise, if module.[[Async]] is true, perform ! ExecuteAsyncModule(module).
16. Otherwise, perform ? module.ExecuteModule().
ExecuteAsyncModule ( module )
1. Assert: module.[[Status]] is "evaluating" or "evaluated".
2. Assert: module.[[Async]] is true.
3. Set module.[[AsyncEvaluating]] to true.
4. Let capability be ! NewPromiseCapability(%Promise%).
5. Let stepsFulfilled be the steps of a CallAsyncModuleFulfilled function as specified below.
...
8. Let stepsRejected be the steps of a CallAsyncModuleRejected function as specified below.
...
11. Perform ! PerformPromiseThen(capability.[[Promise]], onFulfilled, onRejected).
12. Perform ! module.ExecuteModule(capability).
13. Return.
ExecuteModule ( [ capability ] )
...
11. If module.[[Async]] is false, then
a. Assert: capability was not provided.
b. Push moduleCxt on to the execution context stack; moduleCxt is now the running execution context.
c. Let result be the result of evaluating module.[[ECMAScriptCode]].
d. Suspend moduleCxt and remove it from the execution context stack.
e. Resume the context that is now on the top of the execution context stack as the running execution context.
f. Return Completion(result).
12. Otherwise,
a. Assert: capability is a PromiseCapability Record.
b. Perform ! AsyncBlockStart(capability, module.[[ECMAScriptCode]], moduleCxt).
c. Return.
flags: [module, async]
features: [top-level-await, dynamic-import]
--- |
2204 |
dynamic-import-resolution.js |
---
esid: sec-moduleevaluation
description: >
Dynamic imported module with async exports
info: |
InnerModuleEvaluation( module, stack, index )
...
14. If module.[[PendingAsyncDependencies]] is > 0, set module.[[AsyncEvaluating]] to true.
15. Otherwise, if module.[[Async]] is true, perform ! ExecuteAsyncModule(module).
16. Otherwise, perform ? module.ExecuteModule().
ExecuteAsyncModule ( module )
1. Assert: module.[[Status]] is "evaluating" or "evaluated".
2. Assert: module.[[Async]] is true.
3. Set module.[[AsyncEvaluating]] to true.
4. Let capability be ! NewPromiseCapability(%Promise%).
5. Let stepsFulfilled be the steps of a CallAsyncModuleFulfilled function as specified below.
...
8. Let stepsRejected be the steps of a CallAsyncModuleRejected function as specified below.
...
11. Perform ! PerformPromiseThen(capability.[[Promise]], onFulfilled, onRejected).
12. Perform ! module.ExecuteModule(capability).
13. Return.
ExecuteModule ( [ capability ] )
...
11. If module.[[Async]] is false, then
a. Assert: capability was not provided.
b. Push moduleCxt on to the execution context stack; moduleCxt is now the running execution context.
c. Let result be the result of evaluating module.[[ECMAScriptCode]].
d. Suspend moduleCxt and remove it from the execution context stack.
e. Resume the context that is now on the top of the execution context stack as the running execution context.
f. Return Completion(result).
12. Otherwise,
a. Assert: capability is a PromiseCapability Record.
b. Perform ! AsyncBlockStart(capability, module.[[ECMAScriptCode]], moduleCxt).
c. Return.
flags: [module, async]
features: [top-level-await, dynamic-import]
--- |
2086 |
early-errors-await-not-simple-assignment-target.js |
---
esid: prod-AwaitExpression
description: >
await is not a simple assignment target and cannot be assigned to.
negative:
phase: parse
type: SyntaxError
flags: [module]
features: [top-level-await]
--- |
408 |
if-await-expr.js |
---
description: >
Evaluate Await expression for IfStatement
info: |
ModuleItem:
StatementListItem[~Yield, +Await, ~Return]
...
UnaryExpression[Yield, Await]
[+Await]AwaitExpression[?Yield]
AwaitExpression[Yield]:
await UnaryExpression[?Yield, +Await]
esid: prod-AwaitExpression
flags: [module, async]
features: [top-level-await]
--- |
646 |
module-async-import-async-resolution-ticks.js |
---
esid: sec-moduleevaluation
description: >
Ticks from async module (w/ TLA) won't change loading async module
info: |
Table 3: Additional Fields of Cyclic Module Records
[[Async]]
...
Having an asynchronous dependency does not make the module asynchronous. This field must not change after the module is parsed.
Evaluate ( ) Concrete Method
...
6. Let capability be ! NewPromiseCapability(%Promise%).
7. Set module.[[TopLevelCapability]] to capability.
8. Let result be InnerModuleEvaluation(module, stack, 0).
9. If result is an abrupt completion, then
...
d. Perform ! Call(capability.[[Reject]], undefined, «result.[[Value]]»).
10. Otherwise,
...
b. If module.[[AsyncEvaluating]] is false, then
i. Perform ! Call(capability.[[Resolve]], undefined, «undefined»).
...
11. Return undefinedcapability.[[Promise]].
InnerModuleEvaluation( module, stack, index )
...
14. If module.[[PendingAsyncDependencies]] is > 0, set module.[[AsyncEvaluating]] to true.
15. Otherwise, if module.[[Async]] is true, perform ! ExecuteAsyncModule(module).
16. Otherwise, perform ? module.ExecuteModule().
ExecuteAsyncModule ( module )
1. Assert: module.[[Status]] is "evaluating" or "evaluated".
2. Assert: module.[[Async]] is true.
3. Set module.[[AsyncEvaluating]] to true.
4. Let capability be ! NewPromiseCapability(%Promise%).
5. Let stepsFulfilled be the steps of a CallAsyncModuleFulfilled function as specified below.
...
8. Let stepsRejected be the steps of a CallAsyncModuleRejected function as specified below.
...
11. Perform ! PerformPromiseThen(capability.[[Promise]], onFulfilled, onRejected).
12. Perform ! module.ExecuteModule(capability).
13. Return.
ExecuteModule ( [ capability ] )
...
11. If module.[[Async]] is false, then
a. Assert: capability was not provided.
b. Push moduleCxt on to the execution context stack; moduleCxt is now the running execution context.
c. Let result be the result of evaluating module.[[ECMAScriptCode]].
d. Suspend moduleCxt and remove it from the execution context stack.
e. Resume the context that is now on the top of the execution context stack as the running execution context.
f. Return Completion(result).
12. Otherwise,
a. Assert: capability is a PromiseCapability Record.
b. Perform ! AsyncBlockStart(capability, module.[[ECMAScriptCode]], moduleCxt).
c. Return.
flags: [module, async]
features: [top-level-await]
--- |
3042 |
module-import-rejection-body.js |
---
esid: sec-moduleevaluation
description: >
Evaluate imported rejected module
info: |
Table 3: Additional Fields of Cyclic Module Records
[[Async]]
...
Having an asynchronous dependency does not make the module asynchronous. This field must not change after the module is parsed.
Evaluate ( ) Concrete Method
...
6. Let capability be ! NewPromiseCapability(%Promise%).
7. Set module.[[TopLevelCapability]] to capability.
8. Let result be InnerModuleEvaluation(module, stack, 0).
9. If result is an abrupt completion, then
...
d. Perform ! Call(capability.[[Reject]], undefined, «result.[[Value]]»).
10. Otherwise,
...
b. If module.[[AsyncEvaluating]] is false, then
i. Perform ! Call(capability.[[Resolve]], undefined, «undefined»).
...
11. Return undefinedcapability.[[Promise]].
InnerModuleEvaluation( module, stack, index )
...
14. If module.[[PendingAsyncDependencies]] is > 0, set module.[[AsyncEvaluating]] to true.
15. Otherwise, if module.[[Async]] is true, perform ! ExecuteAsyncModule(module).
16. Otherwise, perform ? module.ExecuteModule().
ExecuteAsyncModule ( module )
1. Assert: module.[[Status]] is "evaluating" or "evaluated".
2. Assert: module.[[Async]] is true.
3. Set module.[[AsyncEvaluating]] to true.
4. Let capability be ! NewPromiseCapability(%Promise%).
5. Let stepsFulfilled be the steps of a CallAsyncModuleFulfilled function as specified below.
...
8. Let stepsRejected be the steps of a CallAsyncModuleRejected function as specified below.
...
11. Perform ! PerformPromiseThen(capability.[[Promise]], onFulfilled, onRejected).
12. Perform ! module.ExecuteModule(capability).
13. Return.
ExecuteModule ( [ capability ] )
...
11. If module.[[Async]] is false, then
a. Assert: capability was not provided.
b. Push moduleCxt on to the execution context stack; moduleCxt is now the running execution context.
c. Let result be the result of evaluating module.[[ECMAScriptCode]].
d. Suspend moduleCxt and remove it from the execution context stack.
e. Resume the context that is now on the top of the execution context stack as the running execution context.
f. Return Completion(result).
12. Otherwise,
a. Assert: capability is a PromiseCapability Record.
b. Perform ! AsyncBlockStart(capability, module.[[ECMAScriptCode]], moduleCxt).
c. Return.
flags: [module]
features: [top-level-await]
negative:
phase: runtime
type: TypeError
--- |
2794 |
module-import-rejection-body_FIXTURE.js |
|
297 |
module-import-rejection-tick.js |
---
esid: sec-moduleevaluation
description: >
Evaluate imported rejected module
info: |
Table 3: Additional Fields of Cyclic Module Records
[[Async]]
...
Having an asynchronous dependency does not make the module asynchronous. This field must not change after the module is parsed.
Evaluate ( ) Concrete Method
...
6. Let capability be ! NewPromiseCapability(%Promise%).
7. Set module.[[TopLevelCapability]] to capability.
8. Let result be InnerModuleEvaluation(module, stack, 0).
9. If result is an abrupt completion, then
...
d. Perform ! Call(capability.[[Reject]], undefined, «result.[[Value]]»).
10. Otherwise,
...
b. If module.[[AsyncEvaluating]] is false, then
i. Perform ! Call(capability.[[Resolve]], undefined, «undefined»).
...
11. Return undefinedcapability.[[Promise]].
InnerModuleEvaluation( module, stack, index )
...
14. If module.[[PendingAsyncDependencies]] is > 0, set module.[[AsyncEvaluating]] to true.
15. Otherwise, if module.[[Async]] is true, perform ! ExecuteAsyncModule(module).
16. Otherwise, perform ? module.ExecuteModule().
ExecuteAsyncModule ( module )
1. Assert: module.[[Status]] is "evaluating" or "evaluated".
2. Assert: module.[[Async]] is true.
3. Set module.[[AsyncEvaluating]] to true.
4. Let capability be ! NewPromiseCapability(%Promise%).
5. Let stepsFulfilled be the steps of a CallAsyncModuleFulfilled function as specified below.
...
8. Let stepsRejected be the steps of a CallAsyncModuleRejected function as specified below.
...
11. Perform ! PerformPromiseThen(capability.[[Promise]], onFulfilled, onRejected).
12. Perform ! module.ExecuteModule(capability).
13. Return.
ExecuteModule ( [ capability ] )
...
11. If module.[[Async]] is false, then
a. Assert: capability was not provided.
b. Push moduleCxt on to the execution context stack; moduleCxt is now the running execution context.
c. Let result be the result of evaluating module.[[ECMAScriptCode]].
d. Suspend moduleCxt and remove it from the execution context stack.
e. Resume the context that is now on the top of the execution context stack as the running execution context.
f. Return Completion(result).
12. Otherwise,
a. Assert: capability is a PromiseCapability Record.
b. Perform ! AsyncBlockStart(capability, module.[[ECMAScriptCode]], moduleCxt).
c. Return.
flags: [module]
features: [top-level-await]
negative:
phase: runtime
type: RangeError
--- |
2796 |
module-import-rejection-tick_FIXTURE.js |
|
405 |
module-import-rejection.js |
---
esid: sec-moduleevaluation
description: >
Evaluate imported rejected module
info: |
Table 3: Additional Fields of Cyclic Module Records
[[Async]]
...
Having an asynchronous dependency does not make the module asynchronous. This field must not change after the module is parsed.
Evaluate ( ) Concrete Method
...
6. Let capability be ! NewPromiseCapability(%Promise%).
7. Set module.[[TopLevelCapability]] to capability.
8. Let result be InnerModuleEvaluation(module, stack, 0).
9. If result is an abrupt completion, then
...
d. Perform ! Call(capability.[[Reject]], undefined, «result.[[Value]]»).
10. Otherwise,
...
b. If module.[[AsyncEvaluating]] is false, then
i. Perform ! Call(capability.[[Resolve]], undefined, «undefined»).
...
11. Return undefinedcapability.[[Promise]].
InnerModuleEvaluation( module, stack, index )
...
14. If module.[[PendingAsyncDependencies]] is > 0, set module.[[AsyncEvaluating]] to true.
15. Otherwise, if module.[[Async]] is true, perform ! ExecuteAsyncModule(module).
16. Otherwise, perform ? module.ExecuteModule().
ExecuteAsyncModule ( module )
1. Assert: module.[[Status]] is "evaluating" or "evaluated".
2. Assert: module.[[Async]] is true.
3. Set module.[[AsyncEvaluating]] to true.
4. Let capability be ! NewPromiseCapability(%Promise%).
5. Let stepsFulfilled be the steps of a CallAsyncModuleFulfilled function as specified below.
...
8. Let stepsRejected be the steps of a CallAsyncModuleRejected function as specified below.
...
11. Perform ! PerformPromiseThen(capability.[[Promise]], onFulfilled, onRejected).
12. Perform ! module.ExecuteModule(capability).
13. Return.
ExecuteModule ( [ capability ] )
...
11. If module.[[Async]] is false, then
a. Assert: capability was not provided.
b. Push moduleCxt on to the execution context stack; moduleCxt is now the running execution context.
c. Let result be the result of evaluating module.[[ECMAScriptCode]].
d. Suspend moduleCxt and remove it from the execution context stack.
e. Resume the context that is now on the top of the execution context stack as the running execution context.
f. Return Completion(result).
12. Otherwise,
a. Assert: capability is a PromiseCapability Record.
b. Perform ! AsyncBlockStart(capability, module.[[ECMAScriptCode]], moduleCxt).
c. Return.
flags: [module]
features: [top-level-await]
negative:
phase: runtime
type: TypeError
--- |
2798 |
module-import-rejection_FIXTURE.js |
|
566 |
module-import-resolution.js |
---
esid: sec-moduleevaluation
description: >
Evaluate imported module with async exports
info: |
Table 3: Additional Fields of Cyclic Module Records
[[Async]]
...
Having an asynchronous dependency does not make the module asynchronous. This field must not change after the module is parsed.
Evaluate ( ) Concrete Method
...
6. Let capability be ! NewPromiseCapability(%Promise%).
7. Set module.[[TopLevelCapability]] to capability.
8. Let result be InnerModuleEvaluation(module, stack, 0).
9. If result is an abrupt completion, then
...
d. Perform ! Call(capability.[[Reject]], undefined, «result.[[Value]]»).
10. Otherwise,
...
b. If module.[[AsyncEvaluating]] is false, then
i. Perform ! Call(capability.[[Resolve]], undefined, «undefined»).
...
11. Return undefinedcapability.[[Promise]].
InnerModuleEvaluation( module, stack, index )
...
14. If module.[[PendingAsyncDependencies]] is > 0, set module.[[AsyncEvaluating]] to true.
15. Otherwise, if module.[[Async]] is true, perform ! ExecuteAsyncModule(module).
16. Otherwise, perform ? module.ExecuteModule().
ExecuteAsyncModule ( module )
1. Assert: module.[[Status]] is "evaluating" or "evaluated".
2. Assert: module.[[Async]] is true.
3. Set module.[[AsyncEvaluating]] to true.
4. Let capability be ! NewPromiseCapability(%Promise%).
5. Let stepsFulfilled be the steps of a CallAsyncModuleFulfilled function as specified below.
...
8. Let stepsRejected be the steps of a CallAsyncModuleRejected function as specified below.
...
11. Perform ! PerformPromiseThen(capability.[[Promise]], onFulfilled, onRejected).
12. Perform ! module.ExecuteModule(capability).
13. Return.
ExecuteModule ( [ capability ] )
...
11. If module.[[Async]] is false, then
a. Assert: capability was not provided.
b. Push moduleCxt on to the execution context stack; moduleCxt is now the running execution context.
c. Let result be the result of evaluating module.[[ECMAScriptCode]].
d. Suspend moduleCxt and remove it from the execution context stack.
e. Resume the context that is now on the top of the execution context stack as the running execution context.
f. Return Completion(result).
12. Otherwise,
a. Assert: capability is a PromiseCapability Record.
b. Perform ! AsyncBlockStart(capability, module.[[ECMAScriptCode]], moduleCxt).
c. Return.
flags: [module, async]
features: [top-level-await]
--- |
2938 |
module-import-resolution_FIXTURE.js |
|
370 |
module-import-unwrapped.js |
---
esid: sec-moduleevaluation
description: >
Evaluate imported module with unwrapped imported promises
info: |
Table 3: Additional Fields of Cyclic Module Records
[[Async]]
...
Having an asynchronous dependency does not make the module asynchronous. This field must not change after the module is parsed.
Evaluate ( ) Concrete Method
...
6. Let capability be ! NewPromiseCapability(%Promise%).
7. Set module.[[TopLevelCapability]] to capability.
8. Let result be InnerModuleEvaluation(module, stack, 0).
9. If result is an abrupt completion, then
...
d. Perform ! Call(capability.[[Reject]], undefined, «result.[[Value]]»).
10. Otherwise,
...
b. If module.[[AsyncEvaluating]] is false, then
i. Perform ! Call(capability.[[Resolve]], undefined, «undefined»).
...
11. Return undefinedcapability.[[Promise]].
InnerModuleEvaluation( module, stack, index )
...
14. If module.[[PendingAsyncDependencies]] is > 0, set module.[[AsyncEvaluating]] to true.
15. Otherwise, if module.[[Async]] is true, perform ! ExecuteAsyncModule(module).
16. Otherwise, perform ? module.ExecuteModule().
ExecuteAsyncModule ( module )
1. Assert: module.[[Status]] is "evaluating" or "evaluated".
2. Assert: module.[[Async]] is true.
3. Set module.[[AsyncEvaluating]] to true.
4. Let capability be ! NewPromiseCapability(%Promise%).
5. Let stepsFulfilled be the steps of a CallAsyncModuleFulfilled function as specified below.
...
8. Let stepsRejected be the steps of a CallAsyncModuleRejected function as specified below.
...
11. Perform ! PerformPromiseThen(capability.[[Promise]], onFulfilled, onRejected).
12. Perform ! module.ExecuteModule(capability).
13. Return.
ExecuteModule ( [ capability ] )
...
11. If module.[[Async]] is false, then
a. Assert: capability was not provided.
b. Push moduleCxt on to the execution context stack; moduleCxt is now the running execution context.
c. Let result be the result of evaluating module.[[ECMAScriptCode]].
d. Suspend moduleCxt and remove it from the execution context stack.
e. Resume the context that is now on the top of the execution context stack as the running execution context.
f. Return Completion(result).
12. Otherwise,
a. Assert: capability is a PromiseCapability Record.
b. Perform ! AsyncBlockStart(capability, module.[[ECMAScriptCode]], moduleCxt).
c. Return.
flags: [module, async]
features: [top-level-await]
--- |
3482 |
module-import-unwrapped_FIXTURE.js |
|
332 |
module-self-import-async-resolution-ticks.js |
---
esid: sec-moduleevaluation
description: >
Ticks from async module (w/ TLA) self importing
info: |
Table 3: Additional Fields of Cyclic Module Records
[[Async]]
...
Having an asynchronous dependency does not make the module asynchronous. This field must not change after the module is parsed.
Evaluate ( ) Concrete Method
...
6. Let capability be ! NewPromiseCapability(%Promise%).
7. Set module.[[TopLevelCapability]] to capability.
8. Let result be InnerModuleEvaluation(module, stack, 0).
9. If result is an abrupt completion, then
...
d. Perform ! Call(capability.[[Reject]], undefined, «result.[[Value]]»).
10. Otherwise,
...
b. If module.[[AsyncEvaluating]] is false, then
i. Perform ! Call(capability.[[Resolve]], undefined, «undefined»).
...
11. Return undefinedcapability.[[Promise]].
InnerModuleEvaluation( module, stack, index )
...
14. If module.[[PendingAsyncDependencies]] is > 0, set module.[[AsyncEvaluating]] to true.
15. Otherwise, if module.[[Async]] is true, perform ! ExecuteAsyncModule(module).
16. Otherwise, perform ? module.ExecuteModule().
ExecuteAsyncModule ( module )
1. Assert: module.[[Status]] is "evaluating" or "evaluated".
2. Assert: module.[[Async]] is true.
3. Set module.[[AsyncEvaluating]] to true.
4. Let capability be ! NewPromiseCapability(%Promise%).
5. Let stepsFulfilled be the steps of a CallAsyncModuleFulfilled function as specified below.
...
8. Let stepsRejected be the steps of a CallAsyncModuleRejected function as specified below.
...
11. Perform ! PerformPromiseThen(capability.[[Promise]], onFulfilled, onRejected).
12. Perform ! module.ExecuteModule(capability).
13. Return.
ExecuteModule ( [ capability ] )
...
11. If module.[[Async]] is false, then
a. Assert: capability was not provided.
b. Push moduleCxt on to the execution context stack; moduleCxt is now the running execution context.
c. Let result be the result of evaluating module.[[ECMAScriptCode]].
d. Suspend moduleCxt and remove it from the execution context stack.
e. Resume the context that is now on the top of the execution context stack as the running execution context.
f. Return Completion(result).
12. Otherwise,
a. Assert: capability is a PromiseCapability Record.
b. Perform ! AsyncBlockStart(capability, module.[[ECMAScriptCode]], moduleCxt).
c. Return.
flags: [module, async]
features: [top-level-await]
--- |
3119 |
module-sync-import-async-resolution-ticks.js |
---
esid: sec-moduleevaluation
description: >
Ticks from sync module (no TLA) loading async module
info: |
Table 3: Additional Fields of Cyclic Module Records
[[Async]]
...
Having an asynchronous dependency does not make the module asynchronous. This field must not change after the module is parsed.
Evaluate ( ) Concrete Method
...
6. Let capability be ! NewPromiseCapability(%Promise%).
7. Set module.[[TopLevelCapability]] to capability.
8. Let result be InnerModuleEvaluation(module, stack, 0).
9. If result is an abrupt completion, then
...
d. Perform ! Call(capability.[[Reject]], undefined, «result.[[Value]]»).
10. Otherwise,
...
b. If module.[[AsyncEvaluating]] is false, then
i. Perform ! Call(capability.[[Resolve]], undefined, «undefined»).
...
11. Return undefinedcapability.[[Promise]].
InnerModuleEvaluation( module, stack, index )
...
14. If module.[[PendingAsyncDependencies]] is > 0, set module.[[AsyncEvaluating]] to true.
15. Otherwise, if module.[[Async]] is true, perform ! ExecuteAsyncModule(module).
16. Otherwise, perform ? module.ExecuteModule().
ExecuteAsyncModule ( module )
1. Assert: module.[[Status]] is "evaluating" or "evaluated".
2. Assert: module.[[Async]] is true.
3. Set module.[[AsyncEvaluating]] to true.
4. Let capability be ! NewPromiseCapability(%Promise%).
5. Let stepsFulfilled be the steps of a CallAsyncModuleFulfilled function as specified below.
...
8. Let stepsRejected be the steps of a CallAsyncModuleRejected function as specified below.
...
11. Perform ! PerformPromiseThen(capability.[[Promise]], onFulfilled, onRejected).
12. Perform ! module.ExecuteModule(capability).
13. Return.
ExecuteModule ( [ capability ] )
...
11. If module.[[Async]] is false, then
a. Assert: capability was not provided.
b. Push moduleCxt on to the execution context stack; moduleCxt is now the running execution context.
c. Let result be the result of evaluating module.[[ECMAScriptCode]].
d. Suspend moduleCxt and remove it from the execution context stack.
e. Resume the context that is now on the top of the execution context stack as the running execution context.
f. Return Completion(result).
12. Otherwise,
a. Assert: capability is a PromiseCapability Record.
b. Perform ! AsyncBlockStart(capability, module.[[ECMAScriptCode]], moduleCxt).
c. Return.
flags: [module, async]
features: [top-level-await]
--- |
2992 |
new-await-parens.js |
---
esid: prod-AwaitExpression
description: >
`new (await Constructor)` returns instance of Constructor
flags: [module, async]
features: [top-level-await]
--- |
635 |
new-await-script-code.js |
---
esid: prod-AwaitExpression
description: >
await is not a keyword in script code
features: [top-level-await]
--- |
342 |
new-await.js |
---
esid: prod-AwaitExpression
description: >
await cannot immediately follow new in module code
negative:
phase: parse
type: SyntaxError
flags: [module]
features: [top-level-await]
--- |
394 |
no-operand.js |
---
esid: prod-AwaitExpression
description: >
await requries an operand.
negative:
phase: parse
type: SyntaxError
flags: [module]
features: [top-level-await]
--- |
360 |
shell.js |
|
0 |
syntax |
|
|
top-level-ticks-2.js |
---
esid: sec-asyncblockstart
description: >
Evaluation of await ticks order
info: |
AsyncBlockStart ( promiseCapability, asyncBody, asyncContext )
1. Assert: promiseCapability is a PromiseCapability Record.
2. Let runningContext be the running execution context.
3. Set the code evaluation state of asyncContext such that when evaluation is resumed for that execution context the following steps will be performed:
a. Let result be the result of evaluating asyncBody.
...
includes: [compareArray.js]
flags: [module, async]
features: [top-level-await]
--- |
1284 |
top-level-ticks.js |
---
esid: sec-asyncblockstart
description: >
Evaluation of await ticks order
info: |
AsyncBlockStart ( promiseCapability, asyncBody, asyncContext )
1. Assert: promiseCapability is a PromiseCapability Record.
2. Let runningContext be the running execution context.
3. Set the code evaluation state of asyncContext such that when evaluation is resumed for that execution context the following steps will be performed:
a. Let result be the result of evaluating asyncBody.
...
includes: [compareArray.js]
flags: [module, async]
features: [top-level-await]
--- |
1296 |
void-await-expr.js |
---
description: >
void AwaitExpression is still evaluated
info: |
ModuleItem:
StatementListItem[~Yield, +Await, ~Return]
...
UnaryExpression[Yield, Await]
void UnaryExpression[?Yield, ?Await]
[+Await]AwaitExpression[?Yield]
AwaitExpression[Yield]:
await UnaryExpression[?Yield, +Await]
esid: prod-AwaitExpression
flags: [module, async]
features: [top-level-await]
--- |
666 |
while-dynamic-evaluation.js |
---
description: >
Evaluate Await expression for IfStatement
info: |
ModuleItem:
StatementListItem[~Yield, +Await, ~Return]
...
UnaryExpression[Yield, Await]
[+Await]AwaitExpression[?Yield]
AwaitExpression[Yield]:
await UnaryExpression[?Yield, +Await]
esid: prod-AwaitExpression
flags: [module, async]
features: [top-level-await]
--- |
961 |