ary-ptrn-rest-id-elision.js (2157B)
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-expr.template 4 /*--- 5 description: Rest element following elision elements (function expression) 6 esid: sec-function-definitions-runtime-semantics-evaluation 7 features: [destructuring-binding] 8 flags: [generated] 9 info: | 10 FunctionExpression : function ( FormalParameters ) { FunctionBody } 11 12 [...] 13 3. Let closure be FunctionCreate(Normal, FormalParameters, FunctionBody, 14 scope, strict). 15 [...] 16 17 9.2.1 [[Call]] ( thisArgument, argumentsList) 18 19 [...] 20 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList). 21 [...] 22 23 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList ) 24 25 1. Let status be FunctionDeclarationInstantiation(F, argumentsList). 26 [...] 27 28 9.2.12 FunctionDeclarationInstantiation(func, argumentsList) 29 30 [...] 31 23. Let iteratorRecord be Record {[[iterator]]: 32 CreateListIterator(argumentsList), [[done]]: false}. 33 24. If hasDuplicates is true, then 34 [...] 35 25. Else, 36 b. Let formalStatus be IteratorBindingInitialization for formals with 37 iteratorRecord and env as arguments. 38 [...] 39 40 13.3.3.6 Runtime Semantics: IteratorBindingInitialization 41 ArrayBindingPattern : [ Elisionopt BindingRestElement ] 42 1. If Elision is present, then 43 a. Let status be the result of performing 44 IteratorDestructuringAssignmentEvaluation of Elision with 45 iteratorRecord as the argument. 46 b. ReturnIfAbrupt(status). 47 2. Return the result of performing IteratorBindingInitialization for 48 BindingRestElement with iteratorRecord and environment as arguments. 49 ---*/ 50 var values = [1, 2, 3, 4, 5]; 51 52 var callCount = 0; 53 var f; 54 f = function([ , , ...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 64 f(values); 65 assert.sameValue(callCount, 1, 'function invoked exactly once'); 66 67 reportCompare(0, 0);