| block-local-closure-get-before-initialization.js |
---
esid: sec-declarative-environment-records-getbindingvalue-n-s
description: >
using: block local closure [[Get]] before initialization.
(TDZ, Temporal Dead Zone)
features: [explicit-resource-management]
--- |
773 |
- |
| block-local-use-before-initialization-in-declaration-statement.js |
---
esid: sec-declarative-environment-records-getbindingvalue-n-s
description: >
using: block local use before initialization in declaration statement.
(TDZ, Temporal Dead Zone)
features: [explicit-resource-management]
--- |
745 |
- |
| block-local-use-before-initialization-in-prior-statement.js |
---
esid: sec-declarative-environment-records-getbindingvalue-n-s
description: >
using: block local use before initialization in prior statement.
(TDZ, Temporal Dead Zone)
features: [explicit-resource-management]
--- |
741 |
- |
| browser.js |
|
0 |
- |
| cptn-value.js |
---
esid: sec-let-and-const-declarations-runtime-semantics-evaluation
description: Returns an empty completion
info: |
UsingDeclaration : using BindingList ;
1. Perform ? BindingEvaluation of BindingList with argument sync-dispose.
2. Return empty.
features: [explicit-resource-management]
--- |
1088 |
- |
| fn-name-arrow.js |
---
esid: sec-let-and-const-declarations-runtime-semantics-evaluation
description: Assignment of function `name` attribute (ArrowFunction)
info: |
LexicalBinding : BindingIdentifier Initializer
...
3. If IsAnonymousFunctionDefinition(Initializer) is true, then
a. Let value be NamedEvaluation of Initializer with argument bindingId
includes: [propertyHelper.js]
features: [explicit-resource-management]
--- |
1231 |
- |
| fn-name-class.js |
---
esid: sec-let-and-const-declarations-runtime-semantics-evaluation
description: Assignment of function `name` attribute (ClassExpression)
info: |
LexicalBinding : BindingIdentifier Initializer
...
3. If IsAnonymousFunctionDefinition(Initializer) is true, then
a. Let value be NamedEvaluation of Initializer with argument bindingId
includes: [propertyHelper.js]
features: [class, explicit-resource-management]
--- |
1309 |
- |
| fn-name-cover.js |
---
esid: sec-let-and-const-declarations-runtime-semantics-evaluation
description: >
Assignment of function `name` attribute (CoverParenthesizedExpression)
info: |
LexicalBinding : BindingIdentifier Initializer
...
3. If IsAnonymousFunctionDefinition(Initializer) is true, then
a. Let value be NamedEvaluation of Initializer with argument bindingId
includes: [propertyHelper.js]
features: [explicit-resource-management]
--- |
1337 |
- |
| fn-name-fn.js |
---
esid: sec-let-and-const-declarations-runtime-semantics-evaluation
description: Assignment of function `name` attribute (FunctionExpression)
info: |
LexicalBinding : BindingIdentifier Initializer
...
3. If IsAnonymousFunctionDefinition(Initializer) is true, then
a. Let value be NamedEvaluation of Initializer with argument bindingId
includes: [propertyHelper.js]
features: [explicit-resource-management]
--- |
1289 |
- |
| fn-name-gen.js |
---
esid: sec-let-and-const-declarations-runtime-semantics-evaluation
description: Assignment of function `name` attribute (GeneratorExpression)
info: |
LexicalBinding : BindingIdentifier Initializer
...
3. If IsAnonymousFunctionDefinition(Initializer) is true, then
a. Let value be NamedEvaluation of Initializer with argument bindingId
includes: [propertyHelper.js]
features: [generators,explicit-resource-management]
--- |
1312 |
- |
| function-local-closure-get-before-initialization.js |
---
esid: sec-declarative-environment-records-getbindingvalue-n-s
description: >
using: function local closure [[Get]] before initialization.
(TDZ, Temporal Dead Zone)
features: [explicit-resource-management]
--- |
792 |
- |
| function-local-use-before-initialization-in-declaration-statement.js |
---
esid: sec-declarative-environment-records-getbindingvalue-n-s
description: >
using: function local use before initialization in declaration statement.
(TDZ, Temporal Dead Zone)
features: [explicit-resource-management]
--- |
764 |
- |
| function-local-use-before-initialization-in-prior-statement.js |
---
esid: sec-declarative-environment-records-getbindingvalue-n-s
description: >
using: function local use before initialization in prior statement.
(TDZ, Temporal Dead Zone)
features: [explicit-resource-management]
--- |
760 |
- |
| gets-initializer-Symbol.dispose-property-once.js |
---
esid: sec-let-and-const-declarations-runtime-semantics-evaluation
description: Only reads `[Symbol.dispose]` method once, when initialized.
info: |
RS: Evaluation
UsingDeclaration : using BindingList ;
1. Perform ? BindingEvaluation of BindingList with argument sync-dispose.
2. Return empty.
RS: BindingEvaluation
BindingList : BindingList , LexicalBinding
1. Perform ? BindingEvaluation of BindingList with argument hint.
2. Perform ? BindingEvaluation of LexicalBinding with argument hint.
3. Return unused.
LexicalBinding : BindingIdentifier Initializer
...
5. Return ? InitializeReferencedBinding(lhs, value, hint).
InitializeReferencedBinding ( V, W )
...
4. Return ? base.InitializeBinding(V.[[ReferencedName]], W).
InitializeBinding ( N, V, hint )
...
2. If hint is not normal, perform ? AddDisposableResource(envRec.[[DisposeCapability]], V, hint).
...
AddDisposableResource ( disposeCapability, V, hint [, method ] )
1. If method is not present then,
a. If V is either null or undefined and hint is sync-dispose, then
i. Return unused
b. Let resource be ? CreateDisposableResource(V, hint).
...
CreateDisposableResource ( V, hint [ , method ] )
1. If method is not present, then
a. If V is either null or undefined, then
i. Set V to undefined
ii. Set method to undefined
b. Else,
i. If Type(V) is not Object, throw a TypeError exception.
ii. Set method to ? GetDisposeMethod(V, hint).
iii. If method is undefined, throw a TypeError exception.
2. Else,
a. ...
3. Return the DisposableResource Record { [[ResourceValue]]: V, [[Hint]]: hint, [[DisposeMethod]]: method }.
GetDisposeMethod ( V, hint )
1. If hint is async-dispose, then
a. Let method be ? GetMethod(V, @@asyncDispose).
b. If method is undefined, then
i. Set method to ? GetMethod(V, @@dispose).
2. Else,
a. Let method be ? GetMethod(V, @@dispose).
3. Return method.
features: [explicit-resource-management]
--- |
2773 |
- |
| global-closure-get-before-initialization.js |
---
esid: sec-declarative-environment-records-getbindingvalue-n-s
description: >
using: global closure [[Get]] before initialization.
(TDZ, Temporal Dead Zone)
features: [explicit-resource-management]
--- |
768 |
- |
| global-use-before-initialization-in-declaration-statement.js |
---
esid: sec-declarative-environment-records-getbindingvalue-n-s
description: >
using: global use before initialization in declaration statement.
(TDZ, Temporal Dead Zone)
negative:
phase: runtime
type: ReferenceError
features: [explicit-resource-management]
--- |
736 |
- |
| global-use-before-initialization-in-prior-statement.js |
---
esid: sec-declarative-environment-records-getbindingvalue-n-s
description: >
using: global use before initialization in prior statement.
(TDZ, Temporal Dead Zone)
negative:
phase: runtime
type: ReferenceError
features: [explicit-resource-management]
--- |
732 |
- |
| initializer-disposed-at-end-of-asyncfunctionbody.js |
---
esid: sec-asyncblockstart
description: Initialized value is disposed at end of AsyncFunctionBody
info: |
AsyncBlockStart ( promiseCapability, asyncBody, asyncContext )
1. Assert: promiseCapability is a PromiseCapability Record.
2. Let runningContext be the running execution context.
3. Let closure be a new Abstract Closure with no parameters that captures promiseCapability and asyncBody and performs the following steps when called:
a. Let acAsyncContext be the running execution context.
b. Let result be Completion(Evaluation of asyncBody).
c. Assert: If we return here, the async function either threw an exception or performed an implicit or explicit return; all awaiting is done.
d. Remove acAsyncContext from the execution context stack and restore the execution context that is at the top of the execution context stack as the running execution context.
e. Let env be acAsyncContext's LexicalEnvironment.
f. Set result to DisposeResources(env.[[DisposeCapability]], result).
g. If result.[[Type]] is normal, then
i. Perform ! Call(promiseCapability.[[Resolve]], undefined, « undefined »).
h. Else if result.[[Type]] is return, then
i. Perform ! Call(promiseCapability.[[Resolve]], undefined, « result.[[Value]] »).
i. Else,
i. Assert: result.[[Type]] is throw.
ii. Perform ! Call(promiseCapability.[[Reject]], undefined, « result.[[Value]] »).
j. Return unused.
4. Set the code evaluation state of asyncContext such that when evaluation is resumed for that execution context, closure will be called with no arguments.
5. Push asyncContext onto the execution context stack; asyncContext is now the running execution context.
6. Resume the suspended evaluation of asyncContext. Let result be the value returned by the resumed computation.
7. Assert: When we return here, asyncContext has already been removed from the execution context stack and runningContext is the currently running execution context.
8. Assert: result is a normal completion with a value of unused. The possible sources of this value are Await or, if the async function doesn't await anything, step 3.h above.
9. Return unused.
DisposeResources ( disposeCapability, completion )
1. For each resource of disposeCapability.[[DisposableResourceStack]], in reverse list order, do
a. Let result be Dispose(resource.[[ResourceValue]], resource.[[Hint]], resource.[[DisposeMethod]]).
b. If result.[[Type]] is throw, then
i. If completion.[[Type]] is throw, then
1. Set result to result.[[Value]].
2. Let suppressed be completion.[[Value]].
3. Let error be a newly created SuppressedError object.
4. Perform ! CreateNonEnumerableDataPropertyOrThrow(error, "error", result).
5. Perform ! CreateNonEnumerableDataPropertyOrThrow(error, "suppressed", suppressed).
6. Set completion to ThrowCompletion(error).
ii. Else,
1. Set completion to result.
2. Return completion.
Dispose ( V, hint, method )
1. If method is undefined, let result be undefined.
2. Else, let result be ? Call(method, V).
3. If hint is async-dispose, then
a. ...
4. Return undefined.
flags: [async]
includes: [asyncHelpers.js]
features: [explicit-resource-management]
--- |
5019 |
- |
| initializer-disposed-at-end-of-asyncgeneratorbody.js |
---
esid: sec-asyncgeneratorstart
description: Initialized value is disposed at end of AsyncGeneratorBody
info: |
AsyncGeneratorStart ( generator, generatorBody )
1. Assert: generator.[[AsyncGeneratorState]] is undefined.
2. Let genContext be the running execution context.
3. Set the Generator component of genContext to generator.
4. Let closure be a new Abstract Closure with no parameters that captures generatorBody and performs the following steps when called:
a. Let acGenContext be the running execution context.
b. Let acGenerator be the Generator component of acGenContext.
c. If generatorBody is a Parse Node, then
i. Let result be Completion(Evaluation of generatorBody).
d. Else,
i. Assert: generatorBody is an Abstract Closure with no parameters.
ii. Let result be Completion(generatorBody()).
e. Assert: If we return here, the async generator either threw an exception or performed either an implicit or explicit return.
f. Remove acGenContext from the execution context stack and restore the execution context that is at the top of the execution context stack as the running execution context.
g. Set acGenerator.[[AsyncGeneratorState]] to completed.
h. Let env be genContext's LexicalEnvironment.
i. If env is not undefined, then
i. Assert: env is a Declarative Environment Record
ii. Set result to DisposeResources(env.[[DisposeCapability]], result).
h. If result.[[Type]] is normal, set result to NormalCompletion(undefined).
i. If result.[[Type]] is return, set result to NormalCompletion(result.[[Value]]).
j. Perform AsyncGeneratorCompleteStep(acGenerator, result, true).
k. Perform AsyncGeneratorDrainQueue(acGenerator).
l. Return undefined.
5. Set the code evaluation state of genContext such that when evaluation is resumed for that execution context, closure will be called with no arguments.
6. Set generator.[[AsyncGeneratorContext]] to genContext.
7. Set generator.[[AsyncGeneratorState]] to suspendedStart.
8. Set generator.[[AsyncGeneratorQueue]] to a new empty List.
9. Return unused.
DisposeResources ( disposeCapability, completion )
1. For each resource of disposeCapability.[[DisposableResourceStack]], in reverse list order, do
a. Let result be Dispose(resource.[[ResourceValue]], resource.[[Hint]], resource.[[DisposeMethod]]).
b. If result.[[Type]] is throw, then
i. If completion.[[Type]] is throw, then
1. Set result to result.[[Value]].
2. Let suppressed be completion.[[Value]].
3. Let error be a newly created SuppressedError object.
4. Perform ! CreateNonEnumerableDataPropertyOrThrow(error, "error", result).
5. Perform ! CreateNonEnumerableDataPropertyOrThrow(error, "suppressed", suppressed).
6. Set completion to ThrowCompletion(error).
ii. Else,
1. Set completion to result.
2. Return completion.
Dispose ( V, hint, method )
1. If method is undefined, let result be undefined.
2. Else, let result be ? Call(method, V).
3. If hint is async-dispose, then
a. ...
4. Return undefined.
flags: [async]
includes: [asyncHelpers.js]
features: [explicit-resource-management]
--- |
4951 |
- |
| initializer-disposed-at-end-of-block.js |
---
esid: sec-block-runtime-semantics-evaluation
description: Initialized value is disposed at end of Block
info: |
RS: Evaluation
Block : { StatementList }
...
5. Let blockValue be the result of evaluating StatementList.
6. Set blockValue to DisposeResources(blockEnv.[[DisposeCapability]], blockValue).
...
DisposeResources ( disposeCapability, completion )
1. For each resource of disposeCapability.[[DisposableResourceStack]], in reverse list order, do
a. Let result be Dispose(resource.[[ResourceValue]], resource.[[Hint]], resource.[[DisposeMethod]]).
b. If result.[[Type]] is throw, then
i. If completion.[[Type]] is throw, then
1. Set result to result.[[Value]].
2. Let suppressed be completion.[[Value]].
3. Let error be a newly created SuppressedError object.
4. Perform ! CreateNonEnumerableDataPropertyOrThrow(error, "error", result).
5. Perform ! CreateNonEnumerableDataPropertyOrThrow(error, "suppressed", suppressed).
6. Set completion to ThrowCompletion(error).
ii. Else,
1. Set completion to result.
2. Return completion.
Dispose ( V, hint, method )
1. If method is undefined, let result be undefined.
2. Else, let result be ? Call(method, V).
3. If hint is async-dispose, then
a. ...
4. Return undefined.
features: [explicit-resource-management]
--- |
2046 |
- |
| initializer-disposed-at-end-of-each-iteration-of-forofstatementjs |
|
3162 |
- |
| initializer-disposed-at-end-of-forstatement.js |
---
esid: sec-runtime-semantics-forloopevaluation
description: Initialized value is disposed at end of ForStatement
info: |
RS: ForLoopEvaluation
ForStatement : for ( LexicalDeclaration Expressionopt ; Expressionopt ) Statement
...
12. Let bodyResult be Completion(ForBodyEvaluation(test, increment, Statement, perIterationLets, labelSet)).
13. Set bodyResult to Completion(DisposeResources(loopEnv.[[DisposeCapability]], bodyResult)).
14. Assert: If bodyResult.[[Type]] is normal, then bodyResult.[[Value]] is not empty.
...
DisposeResources ( disposeCapability, completion )
1. For each resource of disposeCapability.[[DisposableResourceStack]], in reverse list order, do
a. Let result be Dispose(resource.[[ResourceValue]], resource.[[Hint]], resource.[[DisposeMethod]]).
b. If result.[[Type]] is throw, then
i. If completion.[[Type]] is throw, then
1. Set result to result.[[Value]].
2. Let suppressed be completion.[[Value]].
3. Let error be a newly created SuppressedError object.
4. Perform ! CreateNonEnumerableDataPropertyOrThrow(error, "error", result).
5. Perform ! CreateNonEnumerableDataPropertyOrThrow(error, "suppressed", suppressed).
6. Set completion to ThrowCompletion(error).
ii. Else,
1. Set completion to result.
2. Return completion.
Dispose ( V, hint, method )
1. If method is undefined, let result be undefined.
2. Else, let result be ? Call(method, V).
3. If hint is async-dispose, then
a. ...
4. Return undefined.
features: [explicit-resource-management]
--- |
2501 |
- |
| initializer-disposed-at-end-of-functionbody.js |
---
esid: sec-runtime-semantics-evaluatefunctionbody
description: Initialized value is disposed at end of FunctionBody
info: |
FunctionBody : FunctionStatementList
...
3. Let result be Completion(Evaluation of FunctionStatementList).
4. Let env be the running execution context's LexicalEnvironment.
5. Return ? DisposeResources(env.[[DisposeCapability]], result).
DisposeResources ( disposeCapability, completion )
1. For each resource of disposeCapability.[[DisposableResourceStack]], in reverse list order, do
a. Let result be Dispose(resource.[[ResourceValue]], resource.[[Hint]], resource.[[DisposeMethod]]).
b. If result.[[Type]] is throw, then
i. If completion.[[Type]] is throw, then
1. Set result to result.[[Value]].
2. Let suppressed be completion.[[Value]].
3. Let error be a newly created SuppressedError object.
4. Perform ! CreateNonEnumerableDataPropertyOrThrow(error, "error", result).
5. Perform ! CreateNonEnumerableDataPropertyOrThrow(error, "suppressed", suppressed).
6. Set completion to ThrowCompletion(error).
ii. Else,
1. Set completion to result.
2. Return completion.
Dispose ( V, hint, method )
1. If method is undefined, let result be undefined.
2. Else, let result be ? Call(method, V).
3. If hint is async-dispose, then
a. ...
4. Return undefined.
features: [explicit-resource-management]
--- |
2111 |
- |
| initializer-disposed-at-end-of-generatorbody.js |
---
esid: sec-generatorstart
description: Initialized value is disposed at end of GeneratorBody
info: |
GeneratorStart ( generator, generatorBody )
1. Assert: The value of generator.[[GeneratorState]] is undefined.
2. Let genContext be the running execution context.
3. Set the Generator component of genContext to generator.
4. Let closure be a new Abstract Closure with no parameters that captures generatorBody and performs the following steps when called:
a. Let acGenContext be the running execution context.
b. Let acGenerator be the Generator component of acGenContext.
c. If generatorBody is a Parse Node, then
i. Let result be Completion(Evaluation of generatorBody).
d. Else,
i. Assert: generatorBody is an Abstract Closure with no parameters.
ii. Let result be generatorBody().
e. Assert: If we return here, the generator either threw an exception or performed either an implicit or explicit return.
f. Remove acGenContext from the execution context stack and restore the execution context that is at the top of the execution context stack as the running execution context.
g. Set acGenerator.[[GeneratorState]] to completed.
h. NOTE: Once a generator enters the completed state it never leaves it and its associated execution context is never resumed. Any execution state associated with acGenerator can be discarded at this point.
i. Let env be genContext's LexicalEnvironment.
j. If env is not undefined, then
i. Assert: env is a Declarative Environment Record.
i. Set result to DisposeResources(env.[[DisposeCapability]], result).
k. If result.[[Type]] is normal, then
i. Let resultValue be undefined.
l. Else if result.[[Type]] is return, then
i. Let resultValue be result.[[Value]].
m. Else,
i. Assert: result.[[Type]] is throw.
ii. Return ? result.
n. Return CreateIterResultObject(resultValue, true).
5. Set the code evaluation state of genContext such that when evaluation is resumed for that execution context, closure will be called with no arguments.
6. Set generator.[[GeneratorContext]] to genContext.
7. Set generator.[[GeneratorState]] to suspendedStart.
8. Return unused.
DisposeResources ( disposeCapability, completion )
1. For each resource of disposeCapability.[[DisposableResourceStack]], in reverse list order, do
a. Let result be Dispose(resource.[[ResourceValue]], resource.[[Hint]], resource.[[DisposeMethod]]).
b. If result.[[Type]] is throw, then
i. If completion.[[Type]] is throw, then
1. Set result to result.[[Value]].
2. Let suppressed be completion.[[Value]].
3. Let error be a newly created SuppressedError object.
4. Perform ! CreateNonEnumerableDataPropertyOrThrow(error, "error", result).
5. Perform ! CreateNonEnumerableDataPropertyOrThrow(error, "suppressed", suppressed).
6. Set completion to ThrowCompletion(error).
ii. Else,
1. Set completion to result.
2. Return completion.
Dispose ( V, hint, method )
1. If method is undefined, let result be undefined.
2. Else, let result be ? Call(method, V).
3. If hint is async-dispose, then
a. ...
4. Return undefined.
features: [explicit-resource-management]
--- |
4507 |
- |
| initializer-disposed-if-subsequent-initializer-throws-in-forstatement-head.js |
---
esid: sec-runtime-semantics-forloopevaluation
description: Initialized value is disposed at end of FunctionBody
info: |
RS: ForLoopEvaluation
ForStatement : for ( LexicalDeclaration Expressionopt ; Expressionopt ) Statement
...
7. Let forDcl be Completion(Evaluation of LexicalDeclaration).
8. If forDcl is an abrupt completion, then
a. Set forDcl to Completion(DisposeResources(loopEnv.[[DisposeCapability]], forDcl)).
b. Assert: forDcl is an abrupt completion.
c. Set the running execution context's LexicalEnvironment to oldEnv.
d. Return ? forDcl.
...
DisposeResources ( disposeCapability, completion )
1. For each resource of disposeCapability.[[DisposableResourceStack]], in reverse list order, do
a. Let result be Dispose(resource.[[ResourceValue]], resource.[[Hint]], resource.[[DisposeMethod]]).
b. If result.[[Type]] is throw, then
i. If completion.[[Type]] is throw, then
1. Set result to result.[[Value]].
2. Let suppressed be completion.[[Value]].
3. Let error be a newly created SuppressedError object.
4. Perform ! CreateNonEnumerableDataPropertyOrThrow(error, "error", result).
5. Perform ! CreateNonEnumerableDataPropertyOrThrow(error, "suppressed", suppressed).
6. Set completion to ThrowCompletion(error).
ii. Else,
1. Set completion to result.
2. Return completion.
Dispose ( V, hint, method )
1. If method is undefined, let result be undefined.
2. Else, let result be ? Call(method, V).
3. If hint is async-dispose, then
a. ...
4. Return undefined.
features: [explicit-resource-management]
--- |
2469 |
- |
| initializer-disposed-if-subsequent-initializer-throws.js |
---
esid: sec-block-runtime-semantics-evaluation
description: Initialized value is disposed even if subsequent initializer throws
info: |
RS: Evaluation
Block : { StatementList }
...
5. Let blockValue be the result of evaluating StatementList.
6. Set blockValue to DisposeResources(blockEnv.[[DisposeCapability]], blockValue).
...
DisposeResources ( disposeCapability, completion )
1. For each resource of disposeCapability.[[DisposableResourceStack]], in reverse list order, do
a. Let result be Dispose(resource.[[ResourceValue]], resource.[[Hint]], resource.[[DisposeMethod]]).
b. If result.[[Type]] is throw, then
i. If completion.[[Type]] is throw, then
1. Set result to result.[[Value]].
2. Let suppressed be completion.[[Value]].
3. Let error be a newly created SuppressedError object.
4. Perform ! CreateNonEnumerableDataPropertyOrThrow(error, "error", result).
5. Perform ! CreateNonEnumerableDataPropertyOrThrow(error, "suppressed", suppressed).
6. Set completion to ThrowCompletion(error).
ii. Else,
1. Set completion to result.
2. Return completion.
Dispose ( V, hint, method )
1. If method is undefined, let result be undefined.
2. Else, let result be ? Call(method, V).
3. If hint is async-dispose, then
a. ...
4. Return undefined.
features: [explicit-resource-management]
--- |
2173 |
- |
| multiple-resources-disposed-in-reverse-order.js |
---
esid: sec-disposeresources
description: Multiple resources are disposed in the reverse of the order in which they were added
info: |
RS: Evaluation
Block : { StatementList }
...
5. Let blockValue be the result of evaluating StatementList.
6. Set blockValue to DisposeResources(blockEnv.[[DisposeCapability]], blockValue).
...
DisposeResources ( disposeCapability, completion )
1. For each resource of disposeCapability.[[DisposableResourceStack]], in reverse list order, do
a. Let result be Dispose(resource.[[ResourceValue]], resource.[[Hint]], resource.[[DisposeMethod]]).
b. If result.[[Type]] is throw, then
i. If completion.[[Type]] is throw, then
1. Set result to result.[[Value]].
2. Let suppressed be completion.[[Value]].
3. Let error be a newly created SuppressedError object.
4. Perform ! CreateNonEnumerableDataPropertyOrThrow(error, "error", result).
5. Perform ! CreateNonEnumerableDataPropertyOrThrow(error, "suppressed", suppressed).
6. Set completion to ThrowCompletion(error).
ii. Else,
1. Set completion to result.
2. Return completion.
Dispose ( V, hint, method )
1. If method is undefined, let result be undefined.
2. Else, let result be ? Call(method, V).
3. If hint is async-dispose, then
a. ...
4. Return undefined.
features: [explicit-resource-management]
--- |
2261 |
- |
| puts-initializer-on-top-of-disposableresourcestack-multiple-bindings.js |
---
esid: sec-let-and-const-declarations-runtime-semantics-evaluation
description: >
Puts initialized value on the top of the environment's [[DisposableResourceStack]] with multiple lexical bindings
in a single 'using' declaration
info: |
RS: Evaluation
UsingDeclaration : using BindingList ;
1. Perform ? BindingEvaluation of BindingList with argument sync-dispose.
2. Return empty.
RS: BindingEvaluation
BindingList : BindingList , LexicalBinding
1. Perform ? BindingEvaluation of BindingList with argument hint.
2. Perform ? BindingEvaluation of LexicalBinding with argument hint.
3. Return unused.
LexicalBinding : BindingIdentifier Initializer
...
5. Return ? InitializeReferencedBinding(lhs, value, hint).
InitializeReferencedBinding ( V, W )
...
4. Return ? base.InitializeBinding(V.[[ReferencedName]], W).
InitializeBinding ( N, V, hint )
...
2. If hint is not normal, perform ? AddDisposableResource(envRec.[[DisposeCapability]], V, hint).
...
AddDisposableResource ( disposeCapability, V, hint [, method ] )
1. If method is not present then,
a. If V is either null or undefined and hint is sync-dispose, then
i. Return unused.
b. Let resource be ? CreateDisposableResource(V, hint).
3. Else,
...
3. Append resource to disposeCapability.[[DisposableResourceStack]].
4. Return unused.
features: [explicit-resource-management]
--- |
2338 |
- |
| puts-initializer-on-top-of-disposableresourcestack-subsequent-usings.js |
---
esid: sec-let-and-const-declarations-runtime-semantics-evaluation
description: >
Puts initialized value on the top of the environment's [[DisposableResourceStack]] with multiple subsequent 'using'
declarations in the same block scope
info: |
RS: Evaluation
UsingDeclaration : using BindingList ;
1. Perform ? BindingEvaluation of BindingList with argument sync-dispose.
2. Return empty.
RS: BindingEvaluation
LexicalBinding : BindingIdentifier Initializer
...
5. Return ? InitializeReferencedBinding(lhs, value, hint).
InitializeReferencedBinding ( V, W )
...
4. Return ? base.InitializeBinding(V.[[ReferencedName]], W).
InitializeBinding ( N, V, hint )
...
2. If hint is not normal, perform ? AddDisposableResource(envRec.[[DisposeCapability]], V, hint).
...
AddDisposableResource ( disposeCapability, V, hint [, method ] )
1. If method is not present then,
a. If V is either null or undefined and hint is sync-dispose, then
i. Return unused.
b. Let resource be ? CreateDisposableResource(V, hint).
3. Else,
...
3. Append resource to disposeCapability.[[DisposableResourceStack]].
4. Return unused.
features: [explicit-resource-management]
--- |
2139 |
- |
| redeclaration-error-from-within-strict-mode-function-using.js |
---
esid: sec-declarative-environment-records-initializebinding-n-v
description: >
Redeclaration error within strict mode function inside non-strict code.
negative:
phase: parse
type: SyntaxError
flags: [noStrict, explicit-resource-management]
--- |
497 |
- |
| shell.js |
---
description: |
A collection of assertion and wrapper functions for testing asynchronous built-ins.
defines: [asyncTest, assert.throwsAsync]
--- |
3626 |
- |
| static-init-await-binding-invalid.js |
---
esid: sec-class-definitions-static-semantics-early-errors
description: BindingIdentifier may not be `await` within class static blocks
info: |
BindingIdentifier : Identifier
[...]
- It is a Syntax Error if the code matched by this production is nested,
directly or indirectly (but not crossing function or static initialization
block boundaries), within a ClassStaticBlock and the StringValue of
Identifier is "await".
negative:
phase: parse
type: SyntaxError
features: [class-static-block, explicit-resource-management]
--- |
1056 |
- |
| static-init-await-binding-valid.js |
---
esid: sec-class-definitions-static-semantics-early-errors
description: The `await` keyword is interpreted as an identifier within arrow function bodies
info: |
ClassStaticBlockBody : ClassStaticBlockStatementList
[...]
- It is a Syntax Error if ContainsAwait of ClassStaticBlockStatementList is true.
features: [class-static-block, explicit-resource-management]
--- |
879 |
- |
| Symbol.dispose-getter.js |
---
esid: sec-let-and-const-declarations-runtime-semantics-evaluation
description: Invokes [Symbol.dispose] getter
info: |
RS: Evaluation
UsingDeclaration : using BindingList ;
1. Perform ? BindingEvaluation of BindingList with argument sync-dispose.
2. Return empty.
RS: BindingEvaluation
LexicalBinding : BindingIdentifier Initializer
...
5. Return ? InitializeReferencedBinding(lhs, value, hint).
InitializeReferencedBinding ( V, W )
...
4. Return ? base.InitializeBinding(V.[[ReferencedName]], W).
InitializeBinding ( N, V, hint )
...
2. If hint is not normal, perform ? AddDisposableResource(envRec.[[DisposeCapability]], V, hint).
...
AddDisposableResource ( disposeCapability, V, hint [, method ] )
1. If method is not present then,
a. If V is either null or undefined and hint is sync-dispose, then
i. Return unused.
b. Let resource be ? CreateDisposableResource(V, hint).
2. Else,
...
3. Append resource to disposeCapability.[[DisposableResourceStack]].
4. Return unused.
CreateDisposableResource ( V, hint [ , method ] )
1. If method is not present, then
a. If V is either null or undefined, then
i. Set V to undefined.
ii. Set method to undefined.
b. Else,
i. If V is not an Object, throw a TypeError exception.
ii. Set method to ? GetDisposeMethod(V, hint).
iii. If method is undefined, throw a TypeError exception.
2. Else,
...
3. Return the DisposableResource Record { [[ResourceValue]]: V, [[Hint]]: hint, [[DisposeMethod]]: method }.
GetDisposeMethod ( V, hint )
1. If hint is async-dispose, then
...
2. Else,
a. Let method be ? GetMethod(V, @@dispose).
3. Return method.
GetMethod ( V, P )
1. Let func be ? GetV(V, P).
2. If func is either undefined or null, return undefined.
3. If IsCallable(func) is false, throw a TypeError exception.
4. Return func.
features: [explicit-resource-management]
--- |
2660 |
- |
| Symbol.dispose-method-called-with-correct-this.js |
---
esid: sec-block-runtime-semantics-evaluation
description: Initialized value is disposed with the correct 'this' value
info: |
RS: Evaluation
Block : { StatementList }
...
5. Let blockValue be the result of evaluating StatementList.
6. Set blockValue to DisposeResources(blockEnv.[[DisposeCapability]], blockValue).
...
DisposeResources ( disposeCapability, completion )
1. For each resource of disposeCapability.[[DisposableResourceStack]], in reverse list order, do
a. Let result be Dispose(resource.[[ResourceValue]], resource.[[Hint]], resource.[[DisposeMethod]]).
b. If result.[[Type]] is throw, then
i. If completion.[[Type]] is throw, then
1. Set result to result.[[Value]].
2. Let suppressed be completion.[[Value]].
3. Let error be a newly created SuppressedError object.
4. Perform ! CreateNonEnumerableDataPropertyOrThrow(error, "error", result).
5. Perform ! CreateNonEnumerableDataPropertyOrThrow(error, "suppressed", suppressed).
6. Set completion to ThrowCompletion(error).
ii. Else,
1. Set completion to result.
2. Return completion.
Dispose ( V, hint, method )
1. If method is undefined, let result be undefined.
2. Else, let result be ? Call(method, V).
...
features: [explicit-resource-management]
--- |
1921 |
- |
| syntax |
|
|
- |
| throws-error-as-is-if-only-one-error-during-disposal.js |
---
esid: sec-disposeresources
description: >
Rethrows an error as-is if it is the only error thrown during evaluation of subsequent statements following 'using'
or from disposal.
info: |
DisposeResources ( disposeCapability, completion )
1. For each resource of disposeCapability.[[DisposableResourceStack]], in reverse list order, do
a. Let result be Dispose(resource.[[ResourceValue]], resource.[[Hint]], resource.[[DisposeMethod]]).
b. If result.[[Type]] is throw, then
i. If completion.[[Type]] is throw, then
1. Set result to result.[[Value]].
2. Let suppressed be completion.[[Value]].
3. Let error be a newly created SuppressedError object.
4. Perform ! CreateNonEnumerableDataPropertyOrThrow(error, "error", result).
5. Perform ! CreateNonEnumerableDataPropertyOrThrow(error, "suppressed", suppressed).
6. Set completion to ThrowCompletion(error).
ii. Else,
1. Set completion to result.
2. Return completion.
Dispose ( V, hint, method )
1. If method is undefined, let result be undefined.
2. Else, let result be ? Call(method, V).
3. If hint is async-dispose, then
a. Perform ? Await(result).
4. Return undefined.
features: [explicit-resource-management]
--- |
2177 |
- |
| throws-if-initializer-missing-Symbol.dispose.js |
---
esid: sec-let-and-const-declarations-runtime-semantics-evaluation
description: Throws if initialized value is missing Symbol.dispose property
info: |
RS: Evaluation
UsingDeclaration : using BindingList ;
1. Perform ? BindingEvaluation of BindingList with argument sync-dispose.
2. Return empty.
RS: BindingEvaluation
BindingList : BindingList , LexicalBinding
1. Perform ? BindingEvaluation of BindingList with argument hint.
2. Perform ? BindingEvaluation of LexicalBinding with argument hint.
3. Return unused.
LexicalBinding : BindingIdentifier Initializer
...
5. Return ? InitializeReferencedBinding(lhs, value, hint).
InitializeReferencedBinding ( V, W )
...
4. Return ? base.InitializeBinding(V.[[ReferencedName]], W).
InitializeBinding ( N, V, hint )
...
2. If hint is not normal, perform ? AddDisposableResource(envRec.[[DisposeCapability]], V, hint).
...
AddDisposableResource ( disposeCapability, V, hint [, method ] )
1. If method is not present then,
a. If V is either null or undefined and hint is sync-dispose, then
i. Return unused.
b. Let resource be ? CreateDisposableResource(V, hint).
3. Else,
...
3. Append resource to disposeCapability.[[DisposableResourceStack]].
4. Return unused.
CreateDisposableResource ( V, hint [ , method ] )
1. If method is not present, then
a. If V is either null or undefined, then
...
b. Else,
i. If V is not an Object, throw a TypeError exception.
ii. Set method to ? GetDisposeMethod(V, hint).
iii. If method is undefined, throw a TypeError exception.
...
features: [explicit-resource-management]
--- |
2194 |
- |
| throws-if-initializer-not-object.js |
---
esid: sec-let-and-const-declarations-runtime-semantics-evaluation
description: Throws if initialized value is not an Object
info: |
RS: Evaluation
UsingDeclaration : using BindingList ;
1. Perform ? BindingEvaluation of BindingList with argument sync-dispose.
2. Return empty.
RS: BindingEvaluation
LexicalBinding : BindingIdentifier Initializer
...
5. Return ? InitializeReferencedBinding(lhs, value, hint).
InitializeReferencedBinding ( V, W )
...
4. Return ? base.InitializeBinding(V.[[ReferencedName]], W).
InitializeBinding ( N, V, hint )
...
2. If hint is not normal, perform ? AddDisposableResource(envRec.[[DisposeCapability]], V, hint).
...
AddDisposableResource ( disposeCapability, V, hint [, method ] )
1. If method is not present then,
a. If V is either null or undefined and hint is sync-dispose, then
i. Return unused.
b. Let resource be ? CreateDisposableResource(V, hint).
...
CreateDisposableResource ( V, hint [ , method ] )
1. If method is not present, then
a. If V is either null or undefined, then
...
b. Else,
i. If V is not an Object, throw a TypeError exception.
...
...
features: [explicit-resource-management]
--- |
2057 |
- |
| throws-if-initializer-Symbol.dispose-property-is-null.js |
---
esid: sec-let-and-const-declarations-runtime-semantics-evaluation
description: Throws if initialized value's Symbol.dispose property is null
info: |
RS: Evaluation
UsingDeclaration : using BindingList ;
1. Perform ? BindingEvaluation of BindingList with argument sync-dispose.
2. Return empty.
RS: BindingEvaluation
LexicalBinding : BindingIdentifier Initializer
...
5. Return ? InitializeReferencedBinding(lhs, value, hint).
InitializeReferencedBinding ( V, W )
...
4. Return ? base.InitializeBinding(V.[[ReferencedName]], W).
InitializeBinding ( N, V, hint )
...
2. If hint is not normal, perform ? AddDisposableResource(envRec.[[DisposeCapability]], V, hint).
...
AddDisposableResource ( disposeCapability, V, hint [, method ] )
1. If method is not present then,
a. If V is either null or undefined and hint is sync-dispose, then
i. Return unused.
b. Let resource be ? CreateDisposableResource(V, hint).
2. Else,
...
3. Append resource to disposeCapability.[[DisposableResourceStack]].
4. Return unused.
CreateDisposableResource ( V, hint [ , method ] )
1. If method is not present, then
a. If V is either null or undefined, then
...
b. Else,
i. If V is not an Object, throw a TypeError exception.
ii. Set method to ? GetDisposeMethod(V, hint).
iii. If method is undefined, throw a TypeError exception.
...
GetDisposeMethod ( V, hint )
1. If hint is async-dispose, then
...
2. Else,
a. Let method be ? GetMethod(V, @@dispose).
3. Return method.
GetMethod ( V, P )
1. Let func be ? GetV(V, P).
2. If func is either undefined or null, return undefined.
3. ...
features: [explicit-resource-management]
--- |
2281 |
- |
| throws-if-initializer-Symbol.dispose-property-is-undefined.js |
---
esid: sec-let-and-const-declarations-runtime-semantics-evaluation
description: Throws if initialized value's Symbol.dispose property is undefined
info: |
RS: Evaluation
UsingDeclaration : using BindingList ;
1. Perform ? BindingEvaluation of BindingList with argument sync-dispose.
2. Return empty.
RS: BindingEvaluation
LexicalBinding : BindingIdentifier Initializer
...
5. Return ? InitializeReferencedBinding(lhs, value, hint).
InitializeReferencedBinding ( V, W )
...
4. Return ? base.InitializeBinding(V.[[ReferencedName]], W).
InitializeBinding ( N, V, hint )
...
2. If hint is not normal, perform ? AddDisposableResource(envRec.[[DisposeCapability]], V, hint).
...
AddDisposableResource ( disposeCapability, V, hint [, method ] )
1. If method is not present then,
a. If V is either null or undefined and hint is sync-dispose, then
i. Return unused.
b. Let resource be ? CreateDisposableResource(V, hint).
2. Else,
...
3. Append resource to disposeCapability.[[DisposableResourceStack]].
4. Return unused.
CreateDisposableResource ( V, hint [ , method ] )
1. If method is not present, then
a. If V is either null or undefined, then
...
b. Else,
i. If V is not an Object, throw a TypeError exception.
ii. Set method to ? GetDisposeMethod(V, hint).
iii. If method is undefined, throw a TypeError exception.
...
GetDisposeMethod ( V, hint )
1. If hint is async-dispose, then
...
2. Else,
a. Let method be ? GetMethod(V, @@dispose).
3. Return method.
GetMethod ( V, P )
1. Let func be ? GetV(V, P).
2. If func is either undefined or null, return undefined.
3. ...
features: [explicit-resource-management]
--- |
2291 |
- |
| throws-if-initializer-Symbol.dispose-property-not-callable.js |
---
esid: sec-let-and-const-declarations-runtime-semantics-evaluation
description: Throws if initialized value's Symbol.dispose property is not callable
info: |
RS: Evaluation
UsingDeclaration : using BindingList ;
1. Perform ? BindingEvaluation of BindingList with argument sync-dispose.
2. Return empty.
RS: BindingEvaluation
LexicalBinding : BindingIdentifier Initializer
...
5. Return ? InitializeReferencedBinding(lhs, value, hint).
InitializeReferencedBinding ( V, W )
...
4. Return ? base.InitializeBinding(V.[[ReferencedName]], W).
InitializeBinding ( N, V, hint )
...
2. If hint is not normal, perform ? AddDisposableResource(envRec.[[DisposeCapability]], V, hint).
...
AddDisposableResource ( disposeCapability, V, hint [, method ] )
1. If method is not present then,
a. If V is either null or undefined and hint is sync-dispose, then
i. Return unused.
b. Let resource be ? CreateDisposableResource(V, hint).
2. Else,
...
3. Append resource to disposeCapability.[[DisposableResourceStack]].
4. Return unused.
CreateDisposableResource ( V, hint [ , method ] )
1. If method is not present, then
a. If V is either null or undefined, then
i. Set V to undefined.
ii. Set method to undefined.
b. Else,
i. If V is not an Object, throw a TypeError exception.
ii. Set method to ? GetDisposeMethod(V, hint).
iii. If method is undefined, throw a TypeError exception.
2. Else,
...
3. Return the DisposableResource Record { [[ResourceValue]]: V, [[Hint]]: hint, [[DisposeMethod]]: method }.
GetDisposeMethod ( V, hint )
1. If hint is async-dispose, then
...
2. Else,
a. Let method be ? GetMethod(V, @@dispose).
3. Return method.
GetMethod ( V, P )
1. Let func be ? GetV(V, P).
2. If func is either undefined or null, return undefined.
3. If IsCallable(func) is false, throw a TypeError exception.
4. Return func.
features: [explicit-resource-management]
--- |
2933 |
- |
| throws-suppressederror-if-multiple-errors-during-disposal.js |
---
esid: sec-disposeresources
description: >
Throws a nested hierarchy of SuppressedErrors if multiple errors were thrown during evaluation of subsequent statements following 'using'
and/or from disposal.
info: |
DisposeResources ( disposeCapability, completion )
1. For each resource of disposeCapability.[[DisposableResourceStack]], in reverse list order, do
a. Let result be Dispose(resource.[[ResourceValue]], resource.[[Hint]], resource.[[DisposeMethod]]).
b. If result.[[Type]] is throw, then
i. If completion.[[Type]] is throw, then
1. Set result to result.[[Value]].
2. Let suppressed be completion.[[Value]].
3. Let error be a newly created SuppressedError object.
4. Perform ! CreateNonEnumerableDataPropertyOrThrow(error, "error", result).
5. Perform ! CreateNonEnumerableDataPropertyOrThrow(error, "suppressed", suppressed).
6. Set completion to ThrowCompletion(error).
ii. Else,
1. Set completion to result.
2. Return completion.
Dispose ( V, hint, method )
1. If method is undefined, let result be undefined.
2. Else, let result be ? Call(method, V).
3. If hint is async-dispose, then
a. Perform ? Await(result).
4. Return undefined.
features: [explicit-resource-management]
--- |
2557 |
- |
| using-allows-null-initializer.js |
---
esid: sec-let-and-const-declarations-runtime-semantics-evaluation
description: Allows null in initializer of 'using'
info: |
RS: Evaluation
UsingDeclaration : using BindingList ;
1. Perform ? BindingEvaluation of BindingList with argument sync-dispose.
2. Return empty.
RS: BindingEvaluation
LexicalBinding : BindingIdentifier Initializer
...
5. Return ? InitializeReferencedBinding(lhs, value, hint).
InitializeReferencedBinding ( V, W )
...
4. Return ? base.InitializeBinding(V.[[ReferencedName]], W).
InitializeBinding ( N, V, hint )
...
2. If hint is not normal, perform ? AddDisposableResource(envRec.[[DisposeCapability]], V, hint).
...
AddDisposableResource ( disposeCapability, V, hint [, method ] )
1. If method is not present then,
a. If V is either null or undefined and hint is sync-dispose, then
i. Return unused.
...
...
features: [explicit-resource-management]
--- |
1416 |
- |
| using-allows-undefined-initializer.js |
---
esid: sec-let-and-const-declarations-runtime-semantics-evaluation
description: Allows undefined in initializer of 'using'
info: |
RS: Evaluation
UsingDeclaration : using BindingList ;
1. Perform ? BindingEvaluation of BindingList with argument sync-dispose.
2. Return empty.
RS: BindingEvaluation
LexicalBinding : BindingIdentifier Initializer
...
5. Return ? InitializeReferencedBinding(lhs, value, hint).
InitializeReferencedBinding ( V, W )
...
4. Return ? base.InitializeBinding(V.[[ReferencedName]], W).
InitializeBinding ( N, V, hint )
...
2. If hint is not normal, perform ? AddDisposableResource(envRec.[[DisposeCapability]], V, hint).
...
AddDisposableResource ( disposeCapability, V, hint [, method ] )
1. If method is not present then,
a. If V is either null or undefined and hint is sync-dispose, then
i. Return unused.
...
...
features: [explicit-resource-management]
--- |
1426 |
- |