mirror of https://github.com/tc39/test262.git
73 lines
1.9 KiB
JavaScript
73 lines
1.9 KiB
JavaScript
|
// Copyright (C) 2020 Alexey Shvayka. All rights reserved.
|
||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||
|
/*---
|
||
|
esid: sec-function-definitions-runtime-semantics-instantiatefunctionobject
|
||
|
description: >
|
||
|
Initializer is not evaluated when argument is an object with
|
||
|
[[IsHTMLDDA]] internal slot.
|
||
|
info: |
|
||
|
FunctionDeclaration :
|
||
|
function BindingIdentifier ( FormalParameters ) { FunctionBody }
|
||
|
|
||
|
[...]
|
||
|
3. Let F be FunctionCreate(Normal, FormalParameters, FunctionBody,
|
||
|
scope, strict).
|
||
|
[...]
|
||
|
|
||
|
[[Call]] ( thisArgument, argumentsList)
|
||
|
|
||
|
[...]
|
||
|
7. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
|
||
|
[...]
|
||
|
|
||
|
OrdinaryCallEvaluateBody ( F, argumentsList )
|
||
|
|
||
|
1. Let status be FunctionDeclarationInstantiation(F, argumentsList).
|
||
|
[...]
|
||
|
|
||
|
FunctionDeclarationInstantiation(func, argumentsList)
|
||
|
|
||
|
[...]
|
||
|
23. Let iteratorRecord be Record {[[iterator]]:
|
||
|
CreateListIterator(argumentsList), [[done]]: false}.
|
||
|
24. If hasDuplicates is true, then
|
||
|
[...]
|
||
|
25. Else,
|
||
|
b. Let formalStatus be IteratorBindingInitialization for formals with
|
||
|
iteratorRecord and env as arguments.
|
||
|
[...]
|
||
|
|
||
|
Runtime Semantics: IteratorBindingInitialization
|
||
|
|
||
|
FormalsList : FormalsList , FormalParameter
|
||
|
|
||
|
[...]
|
||
|
23. Let iteratorRecord be Record {[[Iterator]]:
|
||
|
CreateListIterator(argumentsList), [[Done]]: false}.
|
||
|
24. If hasDuplicates is true, then
|
||
|
[...]
|
||
|
25. Else,
|
||
|
a. Perform ? IteratorBindingInitialization for formals with
|
||
|
iteratorRecord and env as arguments.
|
||
|
[...]
|
||
|
features: [default-parameters, IsHTMLDDA]
|
||
|
---*/
|
||
|
|
||
|
let initCount = 0;
|
||
|
const counter = function() {
|
||
|
initCount += 1;
|
||
|
};
|
||
|
|
||
|
const arrow = (x = counter()) => x;
|
||
|
const IsHTMLDDA = $262.IsHTMLDDA;
|
||
|
|
||
|
assert.sameValue(arrow(IsHTMLDDA), IsHTMLDDA);
|
||
|
assert.sameValue(initCount, 0);
|
||
|
|
||
|
function fn(x, y = counter()) {
|
||
|
return y;
|
||
|
}
|
||
|
|
||
|
assert.sameValue(fn(1, IsHTMLDDA), IsHTMLDDA);
|
||
|
assert.sameValue(initCount, 0);
|