ary-ptrn-rest-id-elision.js (2184B)
1 // This file was procedurally generated from the following sources: 2 // - src/dstr-binding/ary-ptrn-rest-id-elision.case 3 // - src/dstr-binding/default/func-decl.template 4 /*--- 5 description: Rest element following elision elements (function declaration) 6 esid: sec-function-definitions-runtime-semantics-instantiatefunctionobject 7 features: [destructuring-binding] 8 flags: [generated] 9 info: | 10 FunctionDeclaration : 11 function BindingIdentifier ( FormalParameters ) { FunctionBody } 12 13 [...] 14 3. Let F be FunctionCreate(Normal, FormalParameters, FunctionBody, 15 scope, strict). 16 [...] 17 18 9.2.1 [[Call]] ( thisArgument, argumentsList) 19 20 [...] 21 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList). 22 [...] 23 24 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList ) 25 26 1. Let status be FunctionDeclarationInstantiation(F, argumentsList). 27 [...] 28 29 9.2.12 FunctionDeclarationInstantiation(func, argumentsList) 30 31 [...] 32 23. Let iteratorRecord be Record {[[iterator]]: 33 CreateListIterator(argumentsList), [[done]]: false}. 34 24. If hasDuplicates is true, then 35 [...] 36 25. Else, 37 b. Let formalStatus be IteratorBindingInitialization for formals with 38 iteratorRecord and env as arguments. 39 [...] 40 41 13.3.3.6 Runtime Semantics: IteratorBindingInitialization 42 ArrayBindingPattern : [ Elisionopt BindingRestElement ] 43 1. If Elision is present, then 44 a. Let status be the result of performing 45 IteratorDestructuringAssignmentEvaluation of Elision with 46 iteratorRecord as the argument. 47 b. ReturnIfAbrupt(status). 48 2. Return the result of performing IteratorBindingInitialization for 49 BindingRestElement with iteratorRecord and environment as arguments. 50 ---*/ 51 var values = [1, 2, 3, 4, 5]; 52 53 var callCount = 0; 54 function f([ , , ...x]) { 55 assert(Array.isArray(x)); 56 assert.sameValue(x.length, 3); 57 assert.sameValue(x[0], 3); 58 assert.sameValue(x[1], 4); 59 assert.sameValue(x[2], 5); 60 assert.notSameValue(x, values); 61 callCount = callCount + 1; 62 }; 63 f(values); 64 assert.sameValue(callCount, 1, 'function invoked exactly once'); 65 66 reportCompare(0, 0);