From f91886421d12e4b074b2d83dffea76e37db604e1 Mon Sep 17 00:00:00 2001 From: Mike Pennisi Date: Sat, 11 Jun 2016 17:44:14 -0400 Subject: [PATCH] Generate tests --- .../array/spread-err-mult-err-expr-throws.js | 36 ++++++++++ .../spread-err-mult-err-iter-get-value.js | 49 ++++++++++++++ .../array/spread-err-mult-err-itr-get-call.js | 47 +++++++++++++ .../array/spread-err-mult-err-itr-get-get.js | 48 +++++++++++++ .../array/spread-err-mult-err-itr-step.js | 57 ++++++++++++++++ .../array/spread-err-mult-err-itr-value.js | 60 +++++++++++++++++ .../array/spread-err-mult-err-unresolvable.js | 43 ++++++++++++ .../array/spread-err-sngl-err-expr-throws.js | 38 +++++++++++ .../array/spread-err-sngl-err-itr-get-call.js | 48 +++++++++++++ .../array/spread-err-sngl-err-itr-get-get.js | 49 ++++++++++++++ .../spread-err-sngl-err-itr-get-value.js | 48 +++++++++++++ .../array/spread-err-sngl-err-itr-step.js | 61 +++++++++++++++++ .../array/spread-err-sngl-err-itr-value.js | 67 +++++++++++++++++++ .../array/spread-err-sngl-err-unresolvable.js | 44 ++++++++++++ .../expressions/array/spread-mult-empty.js | 48 +++++++++++++ .../expressions/array/spread-mult-expr.js | 53 +++++++++++++++ .../expressions/array/spread-mult-iter.js | 65 ++++++++++++++++++ .../expressions/array/spread-mult-literal.js | 50 ++++++++++++++ .../expressions/array/spread-sngl-empty.js | 47 +++++++++++++ .../expressions/array/spread-sngl-expr.js | 55 +++++++++++++++ .../expressions/array/spread-sngl-iter.js | 62 +++++++++++++++++ .../expressions/array/spread-sngl-literal.js | 52 ++++++++++++++ .../expressions/call/spread-mult-expr.js | 51 ++++++++++++++ .../expressions/call/spread-mult-literal.js | 48 +++++++++++++ .../expressions/call/spread-sngl-expr.js | 53 +++++++++++++++ .../expressions/call/spread-sngl-literal.js | 50 ++++++++++++++ .../expressions/new/spread-mult-expr.js | 50 ++++++++++++++ .../expressions/new/spread-mult-literal.js | 47 +++++++++++++ .../expressions/new/spread-sngl-expr.js | 52 ++++++++++++++ .../expressions/new/spread-sngl-literal.js | 49 ++++++++++++++ .../expressions/super/spread-mult-expr.js | 57 ++++++++++++++++ .../expressions/super/spread-mult-literal.js | 54 +++++++++++++++ .../expressions/super/spread-sngl-expr.js | 59 ++++++++++++++++ .../expressions/super/spread-sngl-literal.js | 56 ++++++++++++++++ 34 files changed, 1753 insertions(+) create mode 100644 test/language/expressions/array/spread-err-mult-err-expr-throws.js create mode 100644 test/language/expressions/array/spread-err-mult-err-iter-get-value.js create mode 100644 test/language/expressions/array/spread-err-mult-err-itr-get-call.js create mode 100644 test/language/expressions/array/spread-err-mult-err-itr-get-get.js create mode 100644 test/language/expressions/array/spread-err-mult-err-itr-step.js create mode 100644 test/language/expressions/array/spread-err-mult-err-itr-value.js create mode 100644 test/language/expressions/array/spread-err-mult-err-unresolvable.js create mode 100644 test/language/expressions/array/spread-err-sngl-err-expr-throws.js create mode 100644 test/language/expressions/array/spread-err-sngl-err-itr-get-call.js create mode 100644 test/language/expressions/array/spread-err-sngl-err-itr-get-get.js create mode 100644 test/language/expressions/array/spread-err-sngl-err-itr-get-value.js create mode 100644 test/language/expressions/array/spread-err-sngl-err-itr-step.js create mode 100644 test/language/expressions/array/spread-err-sngl-err-itr-value.js create mode 100644 test/language/expressions/array/spread-err-sngl-err-unresolvable.js create mode 100644 test/language/expressions/array/spread-mult-empty.js create mode 100644 test/language/expressions/array/spread-mult-expr.js create mode 100644 test/language/expressions/array/spread-mult-iter.js create mode 100644 test/language/expressions/array/spread-mult-literal.js create mode 100644 test/language/expressions/array/spread-sngl-empty.js create mode 100644 test/language/expressions/array/spread-sngl-expr.js create mode 100644 test/language/expressions/array/spread-sngl-iter.js create mode 100644 test/language/expressions/array/spread-sngl-literal.js create mode 100644 test/language/expressions/call/spread-mult-expr.js create mode 100644 test/language/expressions/call/spread-mult-literal.js create mode 100644 test/language/expressions/call/spread-sngl-expr.js create mode 100644 test/language/expressions/call/spread-sngl-literal.js create mode 100644 test/language/expressions/new/spread-mult-expr.js create mode 100644 test/language/expressions/new/spread-mult-literal.js create mode 100644 test/language/expressions/new/spread-sngl-expr.js create mode 100644 test/language/expressions/new/spread-sngl-literal.js create mode 100644 test/language/expressions/super/spread-mult-expr.js create mode 100644 test/language/expressions/super/spread-mult-literal.js create mode 100644 test/language/expressions/super/spread-sngl-expr.js create mode 100644 test/language/expressions/super/spread-sngl-literal.js diff --git a/test/language/expressions/array/spread-err-mult-err-expr-throws.js b/test/language/expressions/array/spread-err-mult-err-expr-throws.js new file mode 100644 index 0000000000..f9bba177f1 --- /dev/null +++ b/test/language/expressions/array/spread-err-mult-err-expr-throws.js @@ -0,0 +1,36 @@ +// This file was procedurally generated from the following sources: +// - src/spread/mult-err-expr-throws.case +// - src/spread/error/array.template +/*--- +description: Spread operator following other arguments when evaluation throws (Array initializer) +esid: sec-runtime-semantics-arrayaccumulation +es6id: 12.2.5.2 +flags: [generated] +info: | + SpreadElement : ...AssignmentExpression + + 1. Let spreadRef be the result of evaluating AssignmentExpression. + 2. Let spreadObj be ? GetValue(spreadRef). + 3. Let iterator be ? GetIterator(spreadObj). + 4. Repeat + a. Let next be ? IteratorStep(iterator). + b. If next is false, return nextIndex. + c. Let nextValue be ? IteratorValue(next). + d. Let status be CreateDataProperty(array, ToString(ToUint32(nextIndex)), + nextValue). + e. Assert: status is true. + f. Let nextIndex be nextIndex + 1. + + 12.3.6.1 Runtime Semantics: ArgumentListEvaluation + + ArgumentList : ArgumentList , ... AssignmentExpression + + 1. Let precedingArgs be the result of evaluating ArgumentList. + 2. Let spreadRef be the result of evaluating AssignmentExpression. + 3. Let iterator be GetIterator(GetValue(spreadRef) ). + 4. ReturnIfAbrupt(iterator). +---*/ + +assert.throws(Test262Error, function() { + [0, ...function*() { throw new Test262Error(); }()]; +}); diff --git a/test/language/expressions/array/spread-err-mult-err-iter-get-value.js b/test/language/expressions/array/spread-err-mult-err-iter-get-value.js new file mode 100644 index 0000000000..f0e8996d8d --- /dev/null +++ b/test/language/expressions/array/spread-err-mult-err-iter-get-value.js @@ -0,0 +1,49 @@ +// This file was procedurally generated from the following sources: +// - src/spread/mult-err-iter-get-value.case +// - src/spread/error/array.template +/*--- +description: Spread operator following other arguments when GetIterator fails (@@iterator function return value) (Array initializer) +esid: sec-runtime-semantics-arrayaccumulation +es6id: 12.2.5.2 +features: [Symbol.iterator] +flags: [generated] +info: | + SpreadElement : ...AssignmentExpression + + 1. Let spreadRef be the result of evaluating AssignmentExpression. + 2. Let spreadObj be ? GetValue(spreadRef). + 3. Let iterator be ? GetIterator(spreadObj). + 4. Repeat + a. Let next be ? IteratorStep(iterator). + b. If next is false, return nextIndex. + c. Let nextValue be ? IteratorValue(next). + d. Let status be CreateDataProperty(array, ToString(ToUint32(nextIndex)), + nextValue). + e. Assert: status is true. + f. Let nextIndex be nextIndex + 1. + + 12.3.6.1 Runtime Semantics: ArgumentListEvaluation + + ArgumentList : ArgumentList , ... AssignmentExpression + + 1. Let precedingArgs be the result of evaluating ArgumentList. + 2. Let spreadRef be the result of evaluating AssignmentExpression. + 3. Let iterator be GetIterator(GetValue(spreadRef) ). + 4. ReturnIfAbrupt(iterator). + + 7.4.1 GetIterator ( obj, method ) + + [...] + 2. Let iterator be ? Call(method, obj). + 3. If Type(iterator) is not Object, throw a TypeError exception. +---*/ +var iter = {}; +Object.defineProperty(iter, Symbol.iterator, { + get: function() { + return null; + } +}); + +assert.throws(TypeError, function() { + [0, ...iter]; +}); diff --git a/test/language/expressions/array/spread-err-mult-err-itr-get-call.js b/test/language/expressions/array/spread-err-mult-err-itr-get-call.js new file mode 100644 index 0000000000..e15c34bb2a --- /dev/null +++ b/test/language/expressions/array/spread-err-mult-err-itr-get-call.js @@ -0,0 +1,47 @@ +// This file was procedurally generated from the following sources: +// - src/spread/mult-err-itr-get-call.case +// - src/spread/error/array.template +/*--- +description: Spread operator following other arguments when GetIterator fails (@@iterator function invocation) (Array initializer) +esid: sec-runtime-semantics-arrayaccumulation +es6id: 12.2.5.2 +features: [Symbol.iterator] +flags: [generated] +info: | + SpreadElement : ...AssignmentExpression + + 1. Let spreadRef be the result of evaluating AssignmentExpression. + 2. Let spreadObj be ? GetValue(spreadRef). + 3. Let iterator be ? GetIterator(spreadObj). + 4. Repeat + a. Let next be ? IteratorStep(iterator). + b. If next is false, return nextIndex. + c. Let nextValue be ? IteratorValue(next). + d. Let status be CreateDataProperty(array, ToString(ToUint32(nextIndex)), + nextValue). + e. Assert: status is true. + f. Let nextIndex be nextIndex + 1. + + 12.3.6.1 Runtime Semantics: ArgumentListEvaluation + + ArgumentList : ArgumentList , ... AssignmentExpression + + 1. Let precedingArgs be the result of evaluating ArgumentList. + 2. Let spreadRef be the result of evaluating AssignmentExpression. + 3. Let iterator be GetIterator(GetValue(spreadRef) ). + 4. ReturnIfAbrupt(iterator). + + 7.4.1 GetIterator ( obj, method ) + + [...] + 3. Let iterator be Call(method,obj). + 4. ReturnIfAbrupt(iterator). +---*/ +var iter = {}; +iter[Symbol.iterator] = function() { + throw new Test262Error(); +}; + +assert.throws(Test262Error, function() { + [0, ...iter]; +}); diff --git a/test/language/expressions/array/spread-err-mult-err-itr-get-get.js b/test/language/expressions/array/spread-err-mult-err-itr-get-get.js new file mode 100644 index 0000000000..2e5db261c3 --- /dev/null +++ b/test/language/expressions/array/spread-err-mult-err-itr-get-get.js @@ -0,0 +1,48 @@ +// This file was procedurally generated from the following sources: +// - src/spread/mult-err-itr-get-get.case +// - src/spread/error/array.template +/*--- +description: Spread operator following other arguments when GetIterator fails (@@iterator property access) (Array initializer) +esid: sec-runtime-semantics-arrayaccumulation +es6id: 12.2.5.2 +features: [Symbol.iterator] +flags: [generated] +info: | + SpreadElement : ...AssignmentExpression + + 1. Let spreadRef be the result of evaluating AssignmentExpression. + 2. Let spreadObj be ? GetValue(spreadRef). + 3. Let iterator be ? GetIterator(spreadObj). + 4. Repeat + a. Let next be ? IteratorStep(iterator). + b. If next is false, return nextIndex. + c. Let nextValue be ? IteratorValue(next). + d. Let status be CreateDataProperty(array, ToString(ToUint32(nextIndex)), + nextValue). + e. Assert: status is true. + f. Let nextIndex be nextIndex + 1. + + 12.3.6.1 Runtime Semantics: ArgumentListEvaluation + + ArgumentList : ArgumentList , ... AssignmentExpression + + 1. Let precedingArgs be the result of evaluating ArgumentList. + 2. Let spreadRef be the result of evaluating AssignmentExpression. + 3. Let iterator be GetIterator(GetValue(spreadRef) ). + 4. ReturnIfAbrupt(iterator). + + 7.4.1 GetIterator ( obj, method ) + + 1. If method was not passed, then + a. Let method be ? GetMethod(obj, @@iterator). +---*/ +var iter = {}; +Object.defineProperty(iter, Symbol.iterator, { + get: function() { + throw new Test262Error(); + } +}); + +assert.throws(Test262Error, function() { + [0, ...iter]; +}); diff --git a/test/language/expressions/array/spread-err-mult-err-itr-step.js b/test/language/expressions/array/spread-err-mult-err-itr-step.js new file mode 100644 index 0000000000..160f2dcb50 --- /dev/null +++ b/test/language/expressions/array/spread-err-mult-err-itr-step.js @@ -0,0 +1,57 @@ +// This file was procedurally generated from the following sources: +// - src/spread/mult-err-itr-step.case +// - src/spread/error/array.template +/*--- +description: Spread operator following other arguments when IteratorStep fails (Array initializer) +esid: sec-runtime-semantics-arrayaccumulation +es6id: 12.2.5.2 +features: [Symbol.iterator] +flags: [generated] +info: | + SpreadElement : ...AssignmentExpression + + 1. Let spreadRef be the result of evaluating AssignmentExpression. + 2. Let spreadObj be ? GetValue(spreadRef). + 3. Let iterator be ? GetIterator(spreadObj). + 4. Repeat + a. Let next be ? IteratorStep(iterator). + b. If next is false, return nextIndex. + c. Let nextValue be ? IteratorValue(next). + d. Let status be CreateDataProperty(array, ToString(ToUint32(nextIndex)), + nextValue). + e. Assert: status is true. + f. Let nextIndex be nextIndex + 1. + + 12.3.6.1 Runtime Semantics: ArgumentListEvaluation + + ArgumentList : ArgumentList , ... AssignmentExpression + + 1. Let precedingArgs be the result of evaluating ArgumentList. + 2. Let spreadRef be the result of evaluating AssignmentExpression. + 3. Let iterator be GetIterator(GetValue(spreadRef) ). + 4. ReturnIfAbrupt(iterator). + + 7.4.5 IteratorStep ( iterator ) + + 1. Let result be IteratorNext(iterator). + 2. ReturnIfAbrupt(result). + + 7.4.2 IteratorNext ( iterator, value ) + + 1. If value was not passed, then + a. Let result be Invoke(iterator, "next", « »). + [...] + 3. ReturnIfAbrupt(result). +---*/ +var iter = {}; +iter[Symbol.iterator] = function() { + return { + next: function() { + throw new Test262Error(); + } + }; +}; + +assert.throws(Test262Error, function() { + [0, ...iter]; +}); diff --git a/test/language/expressions/array/spread-err-mult-err-itr-value.js b/test/language/expressions/array/spread-err-mult-err-itr-value.js new file mode 100644 index 0000000000..fc8f107c0e --- /dev/null +++ b/test/language/expressions/array/spread-err-mult-err-itr-value.js @@ -0,0 +1,60 @@ +// This file was procedurally generated from the following sources: +// - src/spread/mult-err-itr-value.case +// - src/spread/error/array.template +/*--- +description: Spread operator following other arguments when IteratorValue fails (Array initializer) +esid: sec-runtime-semantics-arrayaccumulation +es6id: 12.2.5.2 +features: [Symbol.iterator] +flags: [generated] +info: | + SpreadElement : ...AssignmentExpression + + 1. Let spreadRef be the result of evaluating AssignmentExpression. + 2. Let spreadObj be ? GetValue(spreadRef). + 3. Let iterator be ? GetIterator(spreadObj). + 4. Repeat + a. Let next be ? IteratorStep(iterator). + b. If next is false, return nextIndex. + c. Let nextValue be ? IteratorValue(next). + d. Let status be CreateDataProperty(array, ToString(ToUint32(nextIndex)), + nextValue). + e. Assert: status is true. + f. Let nextIndex be nextIndex + 1. + + 12.3.6.1 Runtime Semantics: ArgumentListEvaluation + + ArgumentList : ArgumentList , ... AssignmentExpression + + 1. Let precedingArgs be the result of evaluating ArgumentList. + 2. Let spreadRef be the result of evaluating AssignmentExpression. + 3. Let iterator be GetIterator(GetValue(spreadRef) ). + 4. ReturnIfAbrupt(iterator). + + 7.4.4 IteratorValue ( iterResult ) + + 1. Assert: Type(iterResult) is Object. + 2. Return Get(iterResult, "value"). + + 7.3.1 Get (O, P) + + [...] + 3. Return O.[[Get]](P, O). +---*/ +var iter = {}; +var poisonedValue = Object.defineProperty({}, 'value', { + get: function() { + throw new Test262Error(); + } +}); +iter[Symbol.iterator] = function() { + return { + next: function() { + return poisonedValue; + } + }; +}; + +assert.throws(Test262Error, function() { + [0, ...iter]; +}); diff --git a/test/language/expressions/array/spread-err-mult-err-unresolvable.js b/test/language/expressions/array/spread-err-mult-err-unresolvable.js new file mode 100644 index 0000000000..02117291f5 --- /dev/null +++ b/test/language/expressions/array/spread-err-mult-err-unresolvable.js @@ -0,0 +1,43 @@ +// This file was procedurally generated from the following sources: +// - src/spread/mult-err-unresolvable.case +// - src/spread/error/array.template +/*--- +description: Spread operator following other arguments when reference is unresolvable (Array initializer) +esid: sec-runtime-semantics-arrayaccumulation +es6id: 12.2.5.2 +flags: [generated] +info: | + SpreadElement : ...AssignmentExpression + + 1. Let spreadRef be the result of evaluating AssignmentExpression. + 2. Let spreadObj be ? GetValue(spreadRef). + 3. Let iterator be ? GetIterator(spreadObj). + 4. Repeat + a. Let next be ? IteratorStep(iterator). + b. If next is false, return nextIndex. + c. Let nextValue be ? IteratorValue(next). + d. Let status be CreateDataProperty(array, ToString(ToUint32(nextIndex)), + nextValue). + e. Assert: status is true. + f. Let nextIndex be nextIndex + 1. + + 12.3.6.1 Runtime Semantics: ArgumentListEvaluation + + ArgumentList : ArgumentList , ... AssignmentExpression + + 1. Let precedingArgs be the result of evaluating ArgumentList. + 2. Let spreadRef be the result of evaluating AssignmentExpression. + 3. Let iterator be GetIterator(GetValue(spreadRef) ). + 4. ReturnIfAbrupt(iterator). + + 6.2.3.1 GetValue (V) + + 1. ReturnIfAbrupt(V). + 2. If Type(V) is not Reference, return V. + 3. Let base be GetBase(V). + 4. If IsUnresolvableReference(V), throw a ReferenceError exception. +---*/ + +assert.throws(ReferenceError, function() { + [0, ...unresolvableReference]; +}); diff --git a/test/language/expressions/array/spread-err-sngl-err-expr-throws.js b/test/language/expressions/array/spread-err-sngl-err-expr-throws.js new file mode 100644 index 0000000000..15c9019e53 --- /dev/null +++ b/test/language/expressions/array/spread-err-sngl-err-expr-throws.js @@ -0,0 +1,38 @@ +// This file was procedurally generated from the following sources: +// - src/spread/sngl-err-expr-throws.case +// - src/spread/error/array.template +/*--- +description: Spread operator applied to the only argument when evaluation throws (Array initializer) +esid: sec-runtime-semantics-arrayaccumulation +es6id: 12.2.5.2 +features: [generators] +flags: [generated] +info: | + SpreadElement : ...AssignmentExpression + + 1. Let spreadRef be the result of evaluating AssignmentExpression. + 2. Let spreadObj be ? GetValue(spreadRef). + 3. Let iterator be ? GetIterator(spreadObj). + 4. Repeat + a. Let next be ? IteratorStep(iterator). + b. If next is false, return nextIndex. + c. Let nextValue be ? IteratorValue(next). + d. Let status be CreateDataProperty(array, ToString(ToUint32(nextIndex)), + nextValue). + e. Assert: status is true. + f. Let nextIndex be nextIndex + 1. + + 12.3.6.1 Runtime Semantics: ArgumentListEvaluation + + ArgumentList : ... AssignmentExpression + + 1. Let list be an empty List. + 2. Let spreadRef be the result of evaluating AssignmentExpression. + 3. Let spreadObj be GetValue(spreadRef). + 4. Let iterator be GetIterator(spreadObj). + 5. ReturnIfAbrupt(iterator). +---*/ + +assert.throws(Test262Error, function() { + [...function*() { throw new Test262Error(); }()]; +}); diff --git a/test/language/expressions/array/spread-err-sngl-err-itr-get-call.js b/test/language/expressions/array/spread-err-sngl-err-itr-get-call.js new file mode 100644 index 0000000000..21dfd11d6f --- /dev/null +++ b/test/language/expressions/array/spread-err-sngl-err-itr-get-call.js @@ -0,0 +1,48 @@ +// This file was procedurally generated from the following sources: +// - src/spread/sngl-err-itr-get-call.case +// - src/spread/error/array.template +/*--- +description: Spread operator applied to the only argument when GetIterator fails (@@iterator function invocation) (Array initializer) +esid: sec-runtime-semantics-arrayaccumulation +es6id: 12.2.5.2 +features: [Symbol.iterator] +flags: [generated] +info: | + SpreadElement : ...AssignmentExpression + + 1. Let spreadRef be the result of evaluating AssignmentExpression. + 2. Let spreadObj be ? GetValue(spreadRef). + 3. Let iterator be ? GetIterator(spreadObj). + 4. Repeat + a. Let next be ? IteratorStep(iterator). + b. If next is false, return nextIndex. + c. Let nextValue be ? IteratorValue(next). + d. Let status be CreateDataProperty(array, ToString(ToUint32(nextIndex)), + nextValue). + e. Assert: status is true. + f. Let nextIndex be nextIndex + 1. + + 12.3.6.1 Runtime Semantics: ArgumentListEvaluation + + ArgumentList : ... AssignmentExpression + + 1. Let list be an empty List. + 2. Let spreadRef be the result of evaluating AssignmentExpression. + 3. Let spreadObj be GetValue(spreadRef). + 4. Let iterator be GetIterator(spreadObj). + 5. ReturnIfAbrupt(iterator). + + 7.4.1 GetIterator ( obj, method ) + + [...] + 3. Let iterator be Call(method,obj). + 4. ReturnIfAbrupt(iterator). +---*/ +var iter = {}; +iter[Symbol.iterator] = function() { + throw new Test262Error(); +}; + +assert.throws(Test262Error, function() { + [...iter]; +}); diff --git a/test/language/expressions/array/spread-err-sngl-err-itr-get-get.js b/test/language/expressions/array/spread-err-sngl-err-itr-get-get.js new file mode 100644 index 0000000000..3bc6e40d83 --- /dev/null +++ b/test/language/expressions/array/spread-err-sngl-err-itr-get-get.js @@ -0,0 +1,49 @@ +// This file was procedurally generated from the following sources: +// - src/spread/sngl-err-itr-get-get.case +// - src/spread/error/array.template +/*--- +description: Spread operator applied to the only argument when GetIterator fails (@@iterator property access) (Array initializer) +esid: sec-runtime-semantics-arrayaccumulation +es6id: 12.2.5.2 +features: [Symbol.iterator] +flags: [generated] +info: | + SpreadElement : ...AssignmentExpression + + 1. Let spreadRef be the result of evaluating AssignmentExpression. + 2. Let spreadObj be ? GetValue(spreadRef). + 3. Let iterator be ? GetIterator(spreadObj). + 4. Repeat + a. Let next be ? IteratorStep(iterator). + b. If next is false, return nextIndex. + c. Let nextValue be ? IteratorValue(next). + d. Let status be CreateDataProperty(array, ToString(ToUint32(nextIndex)), + nextValue). + e. Assert: status is true. + f. Let nextIndex be nextIndex + 1. + + 12.3.6.1 Runtime Semantics: ArgumentListEvaluation + + ArgumentList : ... AssignmentExpression + + 1. Let list be an empty List. + 2. Let spreadRef be the result of evaluating AssignmentExpression. + 3. Let spreadObj be GetValue(spreadRef). + 4. Let iterator be GetIterator(spreadObj). + 5. ReturnIfAbrupt(iterator). + + 7.4.1 GetIterator ( obj, method ) + + 1. If method was not passed, then + a. Let method be ? GetMethod(obj, @@iterator). +---*/ +var iter = {}; +Object.defineProperty(iter, Symbol.iterator, { + get: function() { + throw new Test262Error(); + } +}); + +assert.throws(Test262Error, function() { + [...iter]; +}); diff --git a/test/language/expressions/array/spread-err-sngl-err-itr-get-value.js b/test/language/expressions/array/spread-err-sngl-err-itr-get-value.js new file mode 100644 index 0000000000..bc7a1c3f79 --- /dev/null +++ b/test/language/expressions/array/spread-err-sngl-err-itr-get-value.js @@ -0,0 +1,48 @@ +// This file was procedurally generated from the following sources: +// - src/spread/sngl-err-itr-get-value.case +// - src/spread/error/array.template +/*--- +description: Spread operator applied to the only argument when GetIterator fails (@@iterator function return value) (Array initializer) +esid: sec-runtime-semantics-arrayaccumulation +es6id: 12.2.5.2 +features: [Symbol.iterator] +flags: [generated] +info: | + SpreadElement : ...AssignmentExpression + + 1. Let spreadRef be the result of evaluating AssignmentExpression. + 2. Let spreadObj be ? GetValue(spreadRef). + 3. Let iterator be ? GetIterator(spreadObj). + 4. Repeat + a. Let next be ? IteratorStep(iterator). + b. If next is false, return nextIndex. + c. Let nextValue be ? IteratorValue(next). + d. Let status be CreateDataProperty(array, ToString(ToUint32(nextIndex)), + nextValue). + e. Assert: status is true. + f. Let nextIndex be nextIndex + 1. + + 12.3.6.1 Runtime Semantics: ArgumentListEvaluation + + ArgumentList : ... AssignmentExpression + + 1. Let list be an empty List. + 2. Let spreadRef be the result of evaluating AssignmentExpression. + 3. Let spreadObj be GetValue(spreadRef). + 4. Let iterator be GetIterator(spreadObj). + 5. ReturnIfAbrupt(iterator). + + 7.4.1 GetIterator ( obj, method ) + + [...] + 2. Let iterator be ? Call(method, obj). + 3. If Type(iterator) is not Object, throw a TypeError exception. +---*/ +var iter = {}; +iter[Symbol.iterator] = function() { + return null; +}; + +assert.throws(TypeError, function() { + [...iter]; +}); diff --git a/test/language/expressions/array/spread-err-sngl-err-itr-step.js b/test/language/expressions/array/spread-err-sngl-err-itr-step.js new file mode 100644 index 0000000000..406d67c7d0 --- /dev/null +++ b/test/language/expressions/array/spread-err-sngl-err-itr-step.js @@ -0,0 +1,61 @@ +// This file was procedurally generated from the following sources: +// - src/spread/sngl-err-itr-step.case +// - src/spread/error/array.template +/*--- +description: Spread operator applied to the only argument when IteratorStep fails (Array initializer) +esid: sec-runtime-semantics-arrayaccumulation +es6id: 12.2.5.2 +features: [Symbol.iterator] +flags: [generated] +info: | + SpreadElement : ...AssignmentExpression + + 1. Let spreadRef be the result of evaluating AssignmentExpression. + 2. Let spreadObj be ? GetValue(spreadRef). + 3. Let iterator be ? GetIterator(spreadObj). + 4. Repeat + a. Let next be ? IteratorStep(iterator). + b. If next is false, return nextIndex. + c. Let nextValue be ? IteratorValue(next). + d. Let status be CreateDataProperty(array, ToString(ToUint32(nextIndex)), + nextValue). + e. Assert: status is true. + f. Let nextIndex be nextIndex + 1. + + 12.3.6.1 Runtime Semantics: ArgumentListEvaluation + + ArgumentList : ... AssignmentExpression + + 1. Let list be an empty List. + 2. Let spreadRef be the result of evaluating AssignmentExpression. + 3. Let spreadObj be GetValue(spreadRef). + 4. Let iterator be GetIterator(spreadObj). + 5. ReturnIfAbrupt(iterator). + 6. Repeat + a. Let next be IteratorStep(iterator). + b. ReturnIfAbrupt(next). + + 7.4.5 IteratorStep ( iterator ) + + 1. Let result be IteratorNext(iterator). + 2. ReturnIfAbrupt(result). + + 7.4.2 IteratorNext ( iterator, value ) + + 1. If value was not passed, then + a. Let result be Invoke(iterator, "next", « »). + [...] + 3. ReturnIfAbrupt(result). +---*/ +var iter = {}; +iter[Symbol.iterator] = function() { + return { + next: function() { + throw new Test262Error(); + } + }; +}; + +assert.throws(Test262Error, function() { + [...iter]; +}); diff --git a/test/language/expressions/array/spread-err-sngl-err-itr-value.js b/test/language/expressions/array/spread-err-sngl-err-itr-value.js new file mode 100644 index 0000000000..8a6628f8f7 --- /dev/null +++ b/test/language/expressions/array/spread-err-sngl-err-itr-value.js @@ -0,0 +1,67 @@ +// This file was procedurally generated from the following sources: +// - src/spread/sngl-err-itr-value.case +// - src/spread/error/array.template +/*--- +description: Spread operator applied to the only argument when IteratorValue fails (Array initializer) +esid: sec-runtime-semantics-arrayaccumulation +es6id: 12.2.5.2 +features: [Symbol.iterator] +flags: [generated] +info: | + SpreadElement : ...AssignmentExpression + + 1. Let spreadRef be the result of evaluating AssignmentExpression. + 2. Let spreadObj be ? GetValue(spreadRef). + 3. Let iterator be ? GetIterator(spreadObj). + 4. Repeat + a. Let next be ? IteratorStep(iterator). + b. If next is false, return nextIndex. + c. Let nextValue be ? IteratorValue(next). + d. Let status be CreateDataProperty(array, ToString(ToUint32(nextIndex)), + nextValue). + e. Assert: status is true. + f. Let nextIndex be nextIndex + 1. + + 12.3.6.1 Runtime Semantics: ArgumentListEvaluation + + ArgumentList : ... AssignmentExpression + + 1. Let list be an empty List. + 2. Let spreadRef be the result of evaluating AssignmentExpression. + 3. Let spreadObj be GetValue(spreadRef). + 4. Let iterator be GetIterator(spreadObj). + 5. ReturnIfAbrupt(iterator). + 6. Repeat + a. Let next be IteratorStep(iterator). + b. ReturnIfAbrupt(next). + c. If next is false, return list. + d. Let nextArg be IteratorValue(next). + e. ReturnIfAbrupt(nextArg). + + 7.4.4 IteratorValue ( iterResult ) + + 1. Assert: Type(iterResult) is Object. + 2. Return Get(iterResult, "value"). + + 7.3.1 Get (O, P) + + [...] + 3. Return O.[[Get]](P, O). +---*/ +var iter = {}; +var poisonedValue = Object.defineProperty({}, 'value', { + get: function() { + throw new Test262Error(); + } +}); +iter[Symbol.iterator] = function() { + return { + next: function() { + return poisonedValue; + } + }; +}; + +assert.throws(Test262Error, function() { + [...iter]; +}); diff --git a/test/language/expressions/array/spread-err-sngl-err-unresolvable.js b/test/language/expressions/array/spread-err-sngl-err-unresolvable.js new file mode 100644 index 0000000000..2d82c900fd --- /dev/null +++ b/test/language/expressions/array/spread-err-sngl-err-unresolvable.js @@ -0,0 +1,44 @@ +// This file was procedurally generated from the following sources: +// - src/spread/sngl-err-unresolvable.case +// - src/spread/error/array.template +/*--- +description: Spread operator applied to the only argument when reference is unresolvable (Array initializer) +esid: sec-runtime-semantics-arrayaccumulation +es6id: 12.2.5.2 +flags: [generated] +info: | + SpreadElement : ...AssignmentExpression + + 1. Let spreadRef be the result of evaluating AssignmentExpression. + 2. Let spreadObj be ? GetValue(spreadRef). + 3. Let iterator be ? GetIterator(spreadObj). + 4. Repeat + a. Let next be ? IteratorStep(iterator). + b. If next is false, return nextIndex. + c. Let nextValue be ? IteratorValue(next). + d. Let status be CreateDataProperty(array, ToString(ToUint32(nextIndex)), + nextValue). + e. Assert: status is true. + f. Let nextIndex be nextIndex + 1. + + 12.3.6.1 Runtime Semantics: ArgumentListEvaluation + + ArgumentList : ... AssignmentExpression + + 1. Let list be an empty List. + 2. Let spreadRef be the result of evaluating AssignmentExpression. + 3. Let spreadObj be GetValue(spreadRef). + 4. Let iterator be GetIterator(spreadObj). + 5. ReturnIfAbrupt(iterator). + + 6.2.3.1 GetValue (V) + + 1. ReturnIfAbrupt(V). + 2. If Type(V) is not Reference, return V. + 3. Let base be GetBase(V). + 4. If IsUnresolvableReference(V), throw a ReferenceError exception. +---*/ + +assert.throws(ReferenceError, function() { + [...unresolvableReference]; +}); diff --git a/test/language/expressions/array/spread-mult-empty.js b/test/language/expressions/array/spread-mult-empty.js new file mode 100644 index 0000000000..47afca0b27 --- /dev/null +++ b/test/language/expressions/array/spread-mult-empty.js @@ -0,0 +1,48 @@ +// This file was procedurally generated from the following sources: +// - src/spread/mult-empty.case +// - src/spread/default/array.template +/*--- +description: Spread operator following other arguments when no iteration occurs (Array initializer) +esid: sec-runtime-semantics-arrayaccumulation +es6id: 12.2.5.2 +flags: [generated] +info: | + SpreadElement : ...AssignmentExpression + + 1. Let spreadRef be the result of evaluating AssignmentExpression. + 2. Let spreadObj be ? GetValue(spreadRef). + 3. Let iterator be ? GetIterator(spreadObj). + 4. Repeat + a. Let next be ? IteratorStep(iterator). + b. If next is false, return nextIndex. + c. Let nextValue be ? IteratorValue(next). + d. Let status be CreateDataProperty(array, ToString(ToUint32(nextIndex)), + nextValue). + e. Assert: status is true. + f. Let nextIndex be nextIndex + 1. + + 12.3.6.1 Runtime Semantics: ArgumentListEvaluation + + ArgumentList : ArgumentList , ... AssignmentExpression + + 1. Let precedingArgs be the result of evaluating ArgumentList. + 2. Let spreadRef be the result of evaluating AssignmentExpression. + 3. Let iterator be GetIterator(GetValue(spreadRef) ). + 4. ReturnIfAbrupt(iterator). + 5. Repeat + a. Let next be IteratorStep(iterator). + b. ReturnIfAbrupt(next). + c. If next is false, return precedingArgs. +---*/ + +var callCount = 0; + +(function() { + assert.sameValue(arguments.length, 3); + assert.sameValue(arguments[0], 1); + assert.sameValue(arguments[1], 2); + assert.sameValue(arguments[2], 3); + callCount += 1; +}.apply(null, [1, 2, 3, ...[]])); + +assert.sameValue(callCount, 1); diff --git a/test/language/expressions/array/spread-mult-expr.js b/test/language/expressions/array/spread-mult-expr.js new file mode 100644 index 0000000000..64feb1522b --- /dev/null +++ b/test/language/expressions/array/spread-mult-expr.js @@ -0,0 +1,53 @@ +// This file was procedurally generated from the following sources: +// - src/spread/mult-expr.case +// - src/spread/default/array.template +/*--- +description: Spread operator applied to AssignmentExpression following other elements (Array initializer) +esid: sec-runtime-semantics-arrayaccumulation +es6id: 12.2.5.2 +flags: [generated] +info: | + SpreadElement : ...AssignmentExpression + + 1. Let spreadRef be the result of evaluating AssignmentExpression. + 2. Let spreadObj be ? GetValue(spreadRef). + 3. Let iterator be ? GetIterator(spreadObj). + 4. Repeat + a. Let next be ? IteratorStep(iterator). + b. If next is false, return nextIndex. + c. Let nextValue be ? IteratorValue(next). + d. Let status be CreateDataProperty(array, ToString(ToUint32(nextIndex)), + nextValue). + e. Assert: status is true. + f. Let nextIndex be nextIndex + 1. + + 12.3.6.1 Runtime Semantics: ArgumentListEvaluation + + ArgumentList : ArgumentList , ... AssignmentExpression + + 1. Let precedingArgs be the result of evaluating ArgumentList. + 2. Let spreadRef be the result of evaluating AssignmentExpression. + 3. Let iterator be GetIterator(GetValue(spreadRef) ). + 4. ReturnIfAbrupt(iterator). + 5. Repeat + a. Let next be IteratorStep(iterator). + b. ReturnIfAbrupt(next). + c. If next is false, return precedingArgs. +---*/ +var source = [3, 4, 5]; +var target; + +var callCount = 0; + +(function() { + assert.sameValue(arguments.length, 5); + assert.sameValue(arguments[0], 1); + assert.sameValue(arguments[1], 2); + assert.sameValue(arguments[2], 3); + assert.sameValue(arguments[3], 4); + assert.sameValue(arguments[4], 5); + assert.sameValue(target, source); + callCount += 1; +}.apply(null, [1, 2, ...target = source])); + +assert.sameValue(callCount, 1); diff --git a/test/language/expressions/array/spread-mult-iter.js b/test/language/expressions/array/spread-mult-iter.js new file mode 100644 index 0000000000..96e1e12e77 --- /dev/null +++ b/test/language/expressions/array/spread-mult-iter.js @@ -0,0 +1,65 @@ +// This file was procedurally generated from the following sources: +// - src/spread/mult-iter.case +// - src/spread/default/array.template +/*--- +description: Spread operator following other arguments with a valid iterator (Array initializer) +esid: sec-runtime-semantics-arrayaccumulation +es6id: 12.2.5.2 +features: [Symbol.iterator] +flags: [generated] +info: | + SpreadElement : ...AssignmentExpression + + 1. Let spreadRef be the result of evaluating AssignmentExpression. + 2. Let spreadObj be ? GetValue(spreadRef). + 3. Let iterator be ? GetIterator(spreadObj). + 4. Repeat + a. Let next be ? IteratorStep(iterator). + b. If next is false, return nextIndex. + c. Let nextValue be ? IteratorValue(next). + d. Let status be CreateDataProperty(array, ToString(ToUint32(nextIndex)), + nextValue). + e. Assert: status is true. + f. Let nextIndex be nextIndex + 1. + + 12.3.6.1 Runtime Semantics: ArgumentListEvaluation + + ArgumentList : ... AssignmentExpression + + 1. Let list be an empty List. + 2. Let spreadRef be the result of evaluating AssignmentExpression. + 3. Let spreadObj be GetValue(spreadRef). + 4. Let iterator be GetIterator(spreadObj). + 5. ReturnIfAbrupt(iterator). + 6. Repeat + a. Let next be IteratorStep(iterator). + b. ReturnIfAbrupt(next). + c. If next is false, return list. + d. Let nextArg be IteratorValue(next). + e. ReturnIfAbrupt(nextArg). + f. Append nextArg as the last element of list. +---*/ +var iter = {}; +iter[Symbol.iterator] = function() { + var nextCount = 3; + return { + next: function() { + nextCount += 1; + return { done: nextCount === 6, value: nextCount }; + } + }; +}; + +var callCount = 0; + +(function() { + assert.sameValue(arguments.length, 5); + assert.sameValue(arguments[0], 1); + assert.sameValue(arguments[1], 2); + assert.sameValue(arguments[2], 3); + assert.sameValue(arguments[3], 4); + assert.sameValue(arguments[4], 5); + callCount += 1; +}.apply(null, [1, 2, 3, ...iter])); + +assert.sameValue(callCount, 1); diff --git a/test/language/expressions/array/spread-mult-literal.js b/test/language/expressions/array/spread-mult-literal.js new file mode 100644 index 0000000000..c77d85aa6f --- /dev/null +++ b/test/language/expressions/array/spread-mult-literal.js @@ -0,0 +1,50 @@ +// This file was procedurally generated from the following sources: +// - src/spread/mult-literal.case +// - src/spread/default/array.template +/*--- +description: Spread operator applied to AssignmentExpression following other elements (Array initializer) +esid: sec-runtime-semantics-arrayaccumulation +es6id: 12.2.5.2 +flags: [generated] +info: | + SpreadElement : ...AssignmentExpression + + 1. Let spreadRef be the result of evaluating AssignmentExpression. + 2. Let spreadObj be ? GetValue(spreadRef). + 3. Let iterator be ? GetIterator(spreadObj). + 4. Repeat + a. Let next be ? IteratorStep(iterator). + b. If next is false, return nextIndex. + c. Let nextValue be ? IteratorValue(next). + d. Let status be CreateDataProperty(array, ToString(ToUint32(nextIndex)), + nextValue). + e. Assert: status is true. + f. Let nextIndex be nextIndex + 1. + + 12.3.6.1 Runtime Semantics: ArgumentListEvaluation + + ArgumentList : ArgumentList , ... AssignmentExpression + + 1. Let precedingArgs be the result of evaluating ArgumentList. + 2. Let spreadRef be the result of evaluating AssignmentExpression. + 3. Let iterator be GetIterator(GetValue(spreadRef) ). + 4. ReturnIfAbrupt(iterator). + 5. Repeat + a. Let next be IteratorStep(iterator). + b. ReturnIfAbrupt(next). + c. If next is false, return precedingArgs. +---*/ + +var callCount = 0; + +(function() { + assert.sameValue(arguments.length, 5); + assert.sameValue(arguments[0], 5); + assert.sameValue(arguments[1], 6); + assert.sameValue(arguments[2], 7); + assert.sameValue(arguments[3], 8); + assert.sameValue(arguments[4], 9); + callCount += 1; +}.apply(null, [5, ...[6, 7, 8], 9])); + +assert.sameValue(callCount, 1); diff --git a/test/language/expressions/array/spread-sngl-empty.js b/test/language/expressions/array/spread-sngl-empty.js new file mode 100644 index 0000000000..a023ef091e --- /dev/null +++ b/test/language/expressions/array/spread-sngl-empty.js @@ -0,0 +1,47 @@ +// This file was procedurally generated from the following sources: +// - src/spread/sngl-empty.case +// - src/spread/default/array.template +/*--- +description: Spread operator applied to the only argument when no iteration occurs (Array initializer) +esid: sec-runtime-semantics-arrayaccumulation +es6id: 12.2.5.2 +flags: [generated] +info: | + SpreadElement : ...AssignmentExpression + + 1. Let spreadRef be the result of evaluating AssignmentExpression. + 2. Let spreadObj be ? GetValue(spreadRef). + 3. Let iterator be ? GetIterator(spreadObj). + 4. Repeat + a. Let next be ? IteratorStep(iterator). + b. If next is false, return nextIndex. + c. Let nextValue be ? IteratorValue(next). + d. Let status be CreateDataProperty(array, ToString(ToUint32(nextIndex)), + nextValue). + e. Assert: status is true. + f. Let nextIndex be nextIndex + 1. + + 12.3.6.1 Runtime Semantics: ArgumentListEvaluation + + ArgumentList : ... AssignmentExpression + + 1. Let list be an empty List. + 2. Let spreadRef be the result of evaluating AssignmentExpression. + 3. Let spreadObj be GetValue(spreadRef). + 4. Let iterator be GetIterator(spreadObj). + 5. ReturnIfAbrupt(iterator). + 6. Repeat + a. Let next be IteratorStep(iterator). + b. ReturnIfAbrupt(next). + c. If next is false, return list. + [...] +---*/ + +var callCount = 0; + +(function() { + assert.sameValue(arguments.length, 0); + callCount += 1; +}.apply(null, [...[]])); + +assert.sameValue(callCount, 1); diff --git a/test/language/expressions/array/spread-sngl-expr.js b/test/language/expressions/array/spread-sngl-expr.js new file mode 100644 index 0000000000..091daebbb8 --- /dev/null +++ b/test/language/expressions/array/spread-sngl-expr.js @@ -0,0 +1,55 @@ +// This file was procedurally generated from the following sources: +// - src/spread/sngl-expr.case +// - src/spread/default/array.template +/*--- +description: Spread operator applied to AssignmentExpression as only element (Array initializer) +esid: sec-runtime-semantics-arrayaccumulation +es6id: 12.2.5.2 +flags: [generated] +info: | + SpreadElement : ...AssignmentExpression + + 1. Let spreadRef be the result of evaluating AssignmentExpression. + 2. Let spreadObj be ? GetValue(spreadRef). + 3. Let iterator be ? GetIterator(spreadObj). + 4. Repeat + a. Let next be ? IteratorStep(iterator). + b. If next is false, return nextIndex. + c. Let nextValue be ? IteratorValue(next). + d. Let status be CreateDataProperty(array, ToString(ToUint32(nextIndex)), + nextValue). + e. Assert: status is true. + f. Let nextIndex be nextIndex + 1. + + 12.3.6.1 Runtime Semantics: ArgumentListEvaluation + + ArgumentList : ... AssignmentExpression + + 1. Let list be an empty List. + 2. Let spreadRef be the result of evaluating AssignmentExpression. + 3. Let spreadObj be GetValue(spreadRef). + 4. Let iterator be GetIterator(spreadObj). + 5. ReturnIfAbrupt(iterator). + 6. Repeat + a. Let next be IteratorStep(iterator). + b. ReturnIfAbrupt(next). + c. If next is false, return list. + d. Let nextArg be IteratorValue(next). + e. ReturnIfAbrupt(nextArg). + f. Append nextArg as the last element of list. +---*/ +var source = [2, 3, 4]; +var target; + +var callCount = 0; + +(function() { + assert.sameValue(arguments.length, 3); + assert.sameValue(arguments[0], 2); + assert.sameValue(arguments[1], 3); + assert.sameValue(arguments[2], 4); + assert.sameValue(target, source); + callCount += 1; +}.apply(null, [...target = source])); + +assert.sameValue(callCount, 1); diff --git a/test/language/expressions/array/spread-sngl-iter.js b/test/language/expressions/array/spread-sngl-iter.js new file mode 100644 index 0000000000..79c00d64c0 --- /dev/null +++ b/test/language/expressions/array/spread-sngl-iter.js @@ -0,0 +1,62 @@ +// This file was procedurally generated from the following sources: +// - src/spread/sngl-iter.case +// - src/spread/default/array.template +/*--- +description: Spread operator applied to the only argument with a valid iterator (Array initializer) +esid: sec-runtime-semantics-arrayaccumulation +es6id: 12.2.5.2 +features: [Symbol.iterator] +flags: [generated] +info: | + SpreadElement : ...AssignmentExpression + + 1. Let spreadRef be the result of evaluating AssignmentExpression. + 2. Let spreadObj be ? GetValue(spreadRef). + 3. Let iterator be ? GetIterator(spreadObj). + 4. Repeat + a. Let next be ? IteratorStep(iterator). + b. If next is false, return nextIndex. + c. Let nextValue be ? IteratorValue(next). + d. Let status be CreateDataProperty(array, ToString(ToUint32(nextIndex)), + nextValue). + e. Assert: status is true. + f. Let nextIndex be nextIndex + 1. + + 12.3.6.1 Runtime Semantics: ArgumentListEvaluation + + ArgumentList : ... AssignmentExpression + + 1. Let list be an empty List. + 2. Let spreadRef be the result of evaluating AssignmentExpression. + 3. Let spreadObj be GetValue(spreadRef). + 4. Let iterator be GetIterator(spreadObj). + 5. ReturnIfAbrupt(iterator). + 6. Repeat + a. Let next be IteratorStep(iterator). + b. ReturnIfAbrupt(next). + c. If next is false, return list. + d. Let nextArg be IteratorValue(next). + e. ReturnIfAbrupt(nextArg). + f. Append nextArg as the last element of list. +---*/ +var iter = {}; +iter[Symbol.iterator] = function() { + var nextCount = 0; + return { + next: function() { + nextCount += 1; + return { done: nextCount === 3, value: nextCount }; + } + }; +}; + +var callCount = 0; + +(function() { + assert.sameValue(arguments.length, 2); + assert.sameValue(arguments[0], 1); + assert.sameValue(arguments[1], 2); + callCount += 1; +}.apply(null, [...iter])); + +assert.sameValue(callCount, 1); diff --git a/test/language/expressions/array/spread-sngl-literal.js b/test/language/expressions/array/spread-sngl-literal.js new file mode 100644 index 0000000000..0374c9d2d1 --- /dev/null +++ b/test/language/expressions/array/spread-sngl-literal.js @@ -0,0 +1,52 @@ +// This file was procedurally generated from the following sources: +// - src/spread/sngl-literal.case +// - src/spread/default/array.template +/*--- +description: Spread operator applied to array literal as only element (Array initializer) +esid: sec-runtime-semantics-arrayaccumulation +es6id: 12.2.5.2 +flags: [generated] +info: | + SpreadElement : ...AssignmentExpression + + 1. Let spreadRef be the result of evaluating AssignmentExpression. + 2. Let spreadObj be ? GetValue(spreadRef). + 3. Let iterator be ? GetIterator(spreadObj). + 4. Repeat + a. Let next be ? IteratorStep(iterator). + b. If next is false, return nextIndex. + c. Let nextValue be ? IteratorValue(next). + d. Let status be CreateDataProperty(array, ToString(ToUint32(nextIndex)), + nextValue). + e. Assert: status is true. + f. Let nextIndex be nextIndex + 1. + + 12.3.6.1 Runtime Semantics: ArgumentListEvaluation + + ArgumentList : ... AssignmentExpression + + 1. Let list be an empty List. + 2. Let spreadRef be the result of evaluating AssignmentExpression. + 3. Let spreadObj be GetValue(spreadRef). + 4. Let iterator be GetIterator(spreadObj). + 5. ReturnIfAbrupt(iterator). + 6. Repeat + a. Let next be IteratorStep(iterator). + b. ReturnIfAbrupt(next). + c. If next is false, return list. + d. Let nextArg be IteratorValue(next). + e. ReturnIfAbrupt(nextArg). + f. Append nextArg as the last element of list. +---*/ + +var callCount = 0; + +(function() { + assert.sameValue(arguments.length, 3); + assert.sameValue(arguments[0], 3); + assert.sameValue(arguments[1], 4); + assert.sameValue(arguments[2], 5); + callCount += 1; +}.apply(null, [...[3, 4, 5]])); + +assert.sameValue(callCount, 1); diff --git a/test/language/expressions/call/spread-mult-expr.js b/test/language/expressions/call/spread-mult-expr.js new file mode 100644 index 0000000000..d15ed52055 --- /dev/null +++ b/test/language/expressions/call/spread-mult-expr.js @@ -0,0 +1,51 @@ +// This file was procedurally generated from the following sources: +// - src/spread/mult-expr.case +// - src/spread/default/call-expr.template +/*--- +description: Spread operator applied to AssignmentExpression following other elements (CallExpression) +esid: sec-function-calls-runtime-semantics-evaluation +es6id: 12.3.4.1 +flags: [generated] +info: | + CallExpression : MemberExpression Arguments + + [...] + 9. Return EvaluateDirectCall(func, thisValue, Arguments, tailCall). + + 12.3.4.3 Runtime Semantics: EvaluateDirectCall + + 1. Let argList be ArgumentListEvaluation(arguments). + [...] + 6. Let result be Call(func, thisValue, argList). + [...] + + 12.3.6.1 Runtime Semantics: ArgumentListEvaluation + + ArgumentList : ArgumentList , ... AssignmentExpression + + 1. Let precedingArgs be the result of evaluating ArgumentList. + 2. Let spreadRef be the result of evaluating AssignmentExpression. + 3. Let iterator be GetIterator(GetValue(spreadRef) ). + 4. ReturnIfAbrupt(iterator). + 5. Repeat + a. Let next be IteratorStep(iterator). + b. ReturnIfAbrupt(next). + c. If next is false, return precedingArgs. +---*/ +var source = [3, 4, 5]; +var target; + +var callCount = 0; + +(function() { + assert.sameValue(arguments.length, 5); + assert.sameValue(arguments[0], 1); + assert.sameValue(arguments[1], 2); + assert.sameValue(arguments[2], 3); + assert.sameValue(arguments[3], 4); + assert.sameValue(arguments[4], 5); + assert.sameValue(target, source); + callCount += 1; +}(1, 2, ...target = source)); + +assert.sameValue(callCount, 1); diff --git a/test/language/expressions/call/spread-mult-literal.js b/test/language/expressions/call/spread-mult-literal.js new file mode 100644 index 0000000000..87b2a79c48 --- /dev/null +++ b/test/language/expressions/call/spread-mult-literal.js @@ -0,0 +1,48 @@ +// This file was procedurally generated from the following sources: +// - src/spread/mult-literal.case +// - src/spread/default/call-expr.template +/*--- +description: Spread operator applied to AssignmentExpression following other elements (CallExpression) +esid: sec-function-calls-runtime-semantics-evaluation +es6id: 12.3.4.1 +flags: [generated] +info: | + CallExpression : MemberExpression Arguments + + [...] + 9. Return EvaluateDirectCall(func, thisValue, Arguments, tailCall). + + 12.3.4.3 Runtime Semantics: EvaluateDirectCall + + 1. Let argList be ArgumentListEvaluation(arguments). + [...] + 6. Let result be Call(func, thisValue, argList). + [...] + + 12.3.6.1 Runtime Semantics: ArgumentListEvaluation + + ArgumentList : ArgumentList , ... AssignmentExpression + + 1. Let precedingArgs be the result of evaluating ArgumentList. + 2. Let spreadRef be the result of evaluating AssignmentExpression. + 3. Let iterator be GetIterator(GetValue(spreadRef) ). + 4. ReturnIfAbrupt(iterator). + 5. Repeat + a. Let next be IteratorStep(iterator). + b. ReturnIfAbrupt(next). + c. If next is false, return precedingArgs. +---*/ + +var callCount = 0; + +(function() { + assert.sameValue(arguments.length, 5); + assert.sameValue(arguments[0], 5); + assert.sameValue(arguments[1], 6); + assert.sameValue(arguments[2], 7); + assert.sameValue(arguments[3], 8); + assert.sameValue(arguments[4], 9); + callCount += 1; +}(5, ...[6, 7, 8], 9)); + +assert.sameValue(callCount, 1); diff --git a/test/language/expressions/call/spread-sngl-expr.js b/test/language/expressions/call/spread-sngl-expr.js new file mode 100644 index 0000000000..80684f8383 --- /dev/null +++ b/test/language/expressions/call/spread-sngl-expr.js @@ -0,0 +1,53 @@ +// This file was procedurally generated from the following sources: +// - src/spread/sngl-expr.case +// - src/spread/default/call-expr.template +/*--- +description: Spread operator applied to AssignmentExpression as only element (CallExpression) +esid: sec-function-calls-runtime-semantics-evaluation +es6id: 12.3.4.1 +flags: [generated] +info: | + CallExpression : MemberExpression Arguments + + [...] + 9. Return EvaluateDirectCall(func, thisValue, Arguments, tailCall). + + 12.3.4.3 Runtime Semantics: EvaluateDirectCall + + 1. Let argList be ArgumentListEvaluation(arguments). + [...] + 6. Let result be Call(func, thisValue, argList). + [...] + + 12.3.6.1 Runtime Semantics: ArgumentListEvaluation + + ArgumentList : ... AssignmentExpression + + 1. Let list be an empty List. + 2. Let spreadRef be the result of evaluating AssignmentExpression. + 3. Let spreadObj be GetValue(spreadRef). + 4. Let iterator be GetIterator(spreadObj). + 5. ReturnIfAbrupt(iterator). + 6. Repeat + a. Let next be IteratorStep(iterator). + b. ReturnIfAbrupt(next). + c. If next is false, return list. + d. Let nextArg be IteratorValue(next). + e. ReturnIfAbrupt(nextArg). + f. Append nextArg as the last element of list. +---*/ +var source = [2, 3, 4]; +var target; + +var callCount = 0; + +(function() { + assert.sameValue(arguments.length, 3); + assert.sameValue(arguments[0], 2); + assert.sameValue(arguments[1], 3); + assert.sameValue(arguments[2], 4); + assert.sameValue(target, source); + callCount += 1; +}(...target = source)); + +assert.sameValue(callCount, 1); diff --git a/test/language/expressions/call/spread-sngl-literal.js b/test/language/expressions/call/spread-sngl-literal.js new file mode 100644 index 0000000000..90ac612086 --- /dev/null +++ b/test/language/expressions/call/spread-sngl-literal.js @@ -0,0 +1,50 @@ +// This file was procedurally generated from the following sources: +// - src/spread/sngl-literal.case +// - src/spread/default/call-expr.template +/*--- +description: Spread operator applied to array literal as only element (CallExpression) +esid: sec-function-calls-runtime-semantics-evaluation +es6id: 12.3.4.1 +flags: [generated] +info: | + CallExpression : MemberExpression Arguments + + [...] + 9. Return EvaluateDirectCall(func, thisValue, Arguments, tailCall). + + 12.3.4.3 Runtime Semantics: EvaluateDirectCall + + 1. Let argList be ArgumentListEvaluation(arguments). + [...] + 6. Let result be Call(func, thisValue, argList). + [...] + + 12.3.6.1 Runtime Semantics: ArgumentListEvaluation + + ArgumentList : ... AssignmentExpression + + 1. Let list be an empty List. + 2. Let spreadRef be the result of evaluating AssignmentExpression. + 3. Let spreadObj be GetValue(spreadRef). + 4. Let iterator be GetIterator(spreadObj). + 5. ReturnIfAbrupt(iterator). + 6. Repeat + a. Let next be IteratorStep(iterator). + b. ReturnIfAbrupt(next). + c. If next is false, return list. + d. Let nextArg be IteratorValue(next). + e. ReturnIfAbrupt(nextArg). + f. Append nextArg as the last element of list. +---*/ + +var callCount = 0; + +(function() { + assert.sameValue(arguments.length, 3); + assert.sameValue(arguments[0], 3); + assert.sameValue(arguments[1], 4); + assert.sameValue(arguments[2], 5); + callCount += 1; +}(...[3, 4, 5])); + +assert.sameValue(callCount, 1); diff --git a/test/language/expressions/new/spread-mult-expr.js b/test/language/expressions/new/spread-mult-expr.js new file mode 100644 index 0000000000..a4e038ea78 --- /dev/null +++ b/test/language/expressions/new/spread-mult-expr.js @@ -0,0 +1,50 @@ +// This file was procedurally generated from the following sources: +// - src/spread/mult-expr.case +// - src/spread/default/member-expr.template +/*--- +description: Spread operator applied to AssignmentExpression following other elements (`new` operator) +esid: sec-new-operator-runtime-semantics-evaluation +es6id: 12.3.3.1 +flags: [generated] +info: | + MemberExpression : new MemberExpression Arguments + + 1. Return EvaluateNew(MemberExpression, Arguments). + + 12.3.3.1.1 Runtime Semantics: EvaluateNew + + 6. If arguments is empty, let argList be an empty List. + 7. Else, + a. Let argList be ArgumentListEvaluation of arguments. + [...] + + 12.3.6.1 Runtime Semantics: ArgumentListEvaluation + + ArgumentList : ArgumentList , ... AssignmentExpression + + 1. Let precedingArgs be the result of evaluating ArgumentList. + 2. Let spreadRef be the result of evaluating AssignmentExpression. + 3. Let iterator be GetIterator(GetValue(spreadRef) ). + 4. ReturnIfAbrupt(iterator). + 5. Repeat + a. Let next be IteratorStep(iterator). + b. ReturnIfAbrupt(next). + c. If next is false, return precedingArgs. +---*/ +var source = [3, 4, 5]; +var target; + +var callCount = 0; + +new function() { + assert.sameValue(arguments.length, 5); + assert.sameValue(arguments[0], 1); + assert.sameValue(arguments[1], 2); + assert.sameValue(arguments[2], 3); + assert.sameValue(arguments[3], 4); + assert.sameValue(arguments[4], 5); + assert.sameValue(target, source); + callCount += 1; +}(1, 2, ...target = source); + +assert.sameValue(callCount, 1); diff --git a/test/language/expressions/new/spread-mult-literal.js b/test/language/expressions/new/spread-mult-literal.js new file mode 100644 index 0000000000..990a6a07fa --- /dev/null +++ b/test/language/expressions/new/spread-mult-literal.js @@ -0,0 +1,47 @@ +// This file was procedurally generated from the following sources: +// - src/spread/mult-literal.case +// - src/spread/default/member-expr.template +/*--- +description: Spread operator applied to AssignmentExpression following other elements (`new` operator) +esid: sec-new-operator-runtime-semantics-evaluation +es6id: 12.3.3.1 +flags: [generated] +info: | + MemberExpression : new MemberExpression Arguments + + 1. Return EvaluateNew(MemberExpression, Arguments). + + 12.3.3.1.1 Runtime Semantics: EvaluateNew + + 6. If arguments is empty, let argList be an empty List. + 7. Else, + a. Let argList be ArgumentListEvaluation of arguments. + [...] + + 12.3.6.1 Runtime Semantics: ArgumentListEvaluation + + ArgumentList : ArgumentList , ... AssignmentExpression + + 1. Let precedingArgs be the result of evaluating ArgumentList. + 2. Let spreadRef be the result of evaluating AssignmentExpression. + 3. Let iterator be GetIterator(GetValue(spreadRef) ). + 4. ReturnIfAbrupt(iterator). + 5. Repeat + a. Let next be IteratorStep(iterator). + b. ReturnIfAbrupt(next). + c. If next is false, return precedingArgs. +---*/ + +var callCount = 0; + +new function() { + assert.sameValue(arguments.length, 5); + assert.sameValue(arguments[0], 5); + assert.sameValue(arguments[1], 6); + assert.sameValue(arguments[2], 7); + assert.sameValue(arguments[3], 8); + assert.sameValue(arguments[4], 9); + callCount += 1; +}(5, ...[6, 7, 8], 9); + +assert.sameValue(callCount, 1); diff --git a/test/language/expressions/new/spread-sngl-expr.js b/test/language/expressions/new/spread-sngl-expr.js new file mode 100644 index 0000000000..9522722eee --- /dev/null +++ b/test/language/expressions/new/spread-sngl-expr.js @@ -0,0 +1,52 @@ +// This file was procedurally generated from the following sources: +// - src/spread/sngl-expr.case +// - src/spread/default/member-expr.template +/*--- +description: Spread operator applied to AssignmentExpression as only element (`new` operator) +esid: sec-new-operator-runtime-semantics-evaluation +es6id: 12.3.3.1 +flags: [generated] +info: | + MemberExpression : new MemberExpression Arguments + + 1. Return EvaluateNew(MemberExpression, Arguments). + + 12.3.3.1.1 Runtime Semantics: EvaluateNew + + 6. If arguments is empty, let argList be an empty List. + 7. Else, + a. Let argList be ArgumentListEvaluation of arguments. + [...] + + 12.3.6.1 Runtime Semantics: ArgumentListEvaluation + + ArgumentList : ... AssignmentExpression + + 1. Let list be an empty List. + 2. Let spreadRef be the result of evaluating AssignmentExpression. + 3. Let spreadObj be GetValue(spreadRef). + 4. Let iterator be GetIterator(spreadObj). + 5. ReturnIfAbrupt(iterator). + 6. Repeat + a. Let next be IteratorStep(iterator). + b. ReturnIfAbrupt(next). + c. If next is false, return list. + d. Let nextArg be IteratorValue(next). + e. ReturnIfAbrupt(nextArg). + f. Append nextArg as the last element of list. +---*/ +var source = [2, 3, 4]; +var target; + +var callCount = 0; + +new function() { + assert.sameValue(arguments.length, 3); + assert.sameValue(arguments[0], 2); + assert.sameValue(arguments[1], 3); + assert.sameValue(arguments[2], 4); + assert.sameValue(target, source); + callCount += 1; +}(...target = source); + +assert.sameValue(callCount, 1); diff --git a/test/language/expressions/new/spread-sngl-literal.js b/test/language/expressions/new/spread-sngl-literal.js new file mode 100644 index 0000000000..812e1c4d67 --- /dev/null +++ b/test/language/expressions/new/spread-sngl-literal.js @@ -0,0 +1,49 @@ +// This file was procedurally generated from the following sources: +// - src/spread/sngl-literal.case +// - src/spread/default/member-expr.template +/*--- +description: Spread operator applied to array literal as only element (`new` operator) +esid: sec-new-operator-runtime-semantics-evaluation +es6id: 12.3.3.1 +flags: [generated] +info: | + MemberExpression : new MemberExpression Arguments + + 1. Return EvaluateNew(MemberExpression, Arguments). + + 12.3.3.1.1 Runtime Semantics: EvaluateNew + + 6. If arguments is empty, let argList be an empty List. + 7. Else, + a. Let argList be ArgumentListEvaluation of arguments. + [...] + + 12.3.6.1 Runtime Semantics: ArgumentListEvaluation + + ArgumentList : ... AssignmentExpression + + 1. Let list be an empty List. + 2. Let spreadRef be the result of evaluating AssignmentExpression. + 3. Let spreadObj be GetValue(spreadRef). + 4. Let iterator be GetIterator(spreadObj). + 5. ReturnIfAbrupt(iterator). + 6. Repeat + a. Let next be IteratorStep(iterator). + b. ReturnIfAbrupt(next). + c. If next is false, return list. + d. Let nextArg be IteratorValue(next). + e. ReturnIfAbrupt(nextArg). + f. Append nextArg as the last element of list. +---*/ + +var callCount = 0; + +new function() { + assert.sameValue(arguments.length, 3); + assert.sameValue(arguments[0], 3); + assert.sameValue(arguments[1], 4); + assert.sameValue(arguments[2], 5); + callCount += 1; +}(...[3, 4, 5]); + +assert.sameValue(callCount, 1); diff --git a/test/language/expressions/super/spread-mult-expr.js b/test/language/expressions/super/spread-mult-expr.js new file mode 100644 index 0000000000..1eabf84957 --- /dev/null +++ b/test/language/expressions/super/spread-mult-expr.js @@ -0,0 +1,57 @@ +// This file was procedurally generated from the following sources: +// - src/spread/mult-expr.case +// - src/spread/default/super-call.template +/*--- +description: Spread operator applied to AssignmentExpression following other elements (SuperCall) +esid: sec-super-keyword-runtime-semantics-evaluation +es6id: 12.3.5.1 +flags: [generated] +info: | + SuperCall : super Arguments + + 1. Let newTarget be GetNewTarget(). + 2. If newTarget is undefined, throw a ReferenceError exception. + 3. Let func be GetSuperConstructor(). + 4. ReturnIfAbrupt(func). + 5. Let argList be ArgumentListEvaluation of Arguments. + [...] + + 12.3.6.1 Runtime Semantics: ArgumentListEvaluation + + ArgumentList : ArgumentList , ... AssignmentExpression + + 1. Let precedingArgs be the result of evaluating ArgumentList. + 2. Let spreadRef be the result of evaluating AssignmentExpression. + 3. Let iterator be GetIterator(GetValue(spreadRef) ). + 4. ReturnIfAbrupt(iterator). + 5. Repeat + a. Let next be IteratorStep(iterator). + b. ReturnIfAbrupt(next). + c. If next is false, return precedingArgs. +---*/ +var source = [3, 4, 5]; +var target; + +var callCount = 0; + +class Test262ParentClass { + constructor() { + assert.sameValue(arguments.length, 5); + assert.sameValue(arguments[0], 1); + assert.sameValue(arguments[1], 2); + assert.sameValue(arguments[2], 3); + assert.sameValue(arguments[3], 4); + assert.sameValue(arguments[4], 5); + assert.sameValue(target, source); + callCount += 1; + } +} + +class Test262ChildClass extends Test262ParentClass { + constructor() { + super(1, 2, ...target = source); + } +} + +new Test262ChildClass(); +assert.sameValue(callCount, 1); diff --git a/test/language/expressions/super/spread-mult-literal.js b/test/language/expressions/super/spread-mult-literal.js new file mode 100644 index 0000000000..4f2b282e86 --- /dev/null +++ b/test/language/expressions/super/spread-mult-literal.js @@ -0,0 +1,54 @@ +// This file was procedurally generated from the following sources: +// - src/spread/mult-literal.case +// - src/spread/default/super-call.template +/*--- +description: Spread operator applied to AssignmentExpression following other elements (SuperCall) +esid: sec-super-keyword-runtime-semantics-evaluation +es6id: 12.3.5.1 +flags: [generated] +info: | + SuperCall : super Arguments + + 1. Let newTarget be GetNewTarget(). + 2. If newTarget is undefined, throw a ReferenceError exception. + 3. Let func be GetSuperConstructor(). + 4. ReturnIfAbrupt(func). + 5. Let argList be ArgumentListEvaluation of Arguments. + [...] + + 12.3.6.1 Runtime Semantics: ArgumentListEvaluation + + ArgumentList : ArgumentList , ... AssignmentExpression + + 1. Let precedingArgs be the result of evaluating ArgumentList. + 2. Let spreadRef be the result of evaluating AssignmentExpression. + 3. Let iterator be GetIterator(GetValue(spreadRef) ). + 4. ReturnIfAbrupt(iterator). + 5. Repeat + a. Let next be IteratorStep(iterator). + b. ReturnIfAbrupt(next). + c. If next is false, return precedingArgs. +---*/ + +var callCount = 0; + +class Test262ParentClass { + constructor() { + assert.sameValue(arguments.length, 5); + assert.sameValue(arguments[0], 5); + assert.sameValue(arguments[1], 6); + assert.sameValue(arguments[2], 7); + assert.sameValue(arguments[3], 8); + assert.sameValue(arguments[4], 9); + callCount += 1; + } +} + +class Test262ChildClass extends Test262ParentClass { + constructor() { + super(5, ...[6, 7, 8], 9); + } +} + +new Test262ChildClass(); +assert.sameValue(callCount, 1); diff --git a/test/language/expressions/super/spread-sngl-expr.js b/test/language/expressions/super/spread-sngl-expr.js new file mode 100644 index 0000000000..e61f79ed12 --- /dev/null +++ b/test/language/expressions/super/spread-sngl-expr.js @@ -0,0 +1,59 @@ +// This file was procedurally generated from the following sources: +// - src/spread/sngl-expr.case +// - src/spread/default/super-call.template +/*--- +description: Spread operator applied to AssignmentExpression as only element (SuperCall) +esid: sec-super-keyword-runtime-semantics-evaluation +es6id: 12.3.5.1 +flags: [generated] +info: | + SuperCall : super Arguments + + 1. Let newTarget be GetNewTarget(). + 2. If newTarget is undefined, throw a ReferenceError exception. + 3. Let func be GetSuperConstructor(). + 4. ReturnIfAbrupt(func). + 5. Let argList be ArgumentListEvaluation of Arguments. + [...] + + 12.3.6.1 Runtime Semantics: ArgumentListEvaluation + + ArgumentList : ... AssignmentExpression + + 1. Let list be an empty List. + 2. Let spreadRef be the result of evaluating AssignmentExpression. + 3. Let spreadObj be GetValue(spreadRef). + 4. Let iterator be GetIterator(spreadObj). + 5. ReturnIfAbrupt(iterator). + 6. Repeat + a. Let next be IteratorStep(iterator). + b. ReturnIfAbrupt(next). + c. If next is false, return list. + d. Let nextArg be IteratorValue(next). + e. ReturnIfAbrupt(nextArg). + f. Append nextArg as the last element of list. +---*/ +var source = [2, 3, 4]; +var target; + +var callCount = 0; + +class Test262ParentClass { + constructor() { + assert.sameValue(arguments.length, 3); + assert.sameValue(arguments[0], 2); + assert.sameValue(arguments[1], 3); + assert.sameValue(arguments[2], 4); + assert.sameValue(target, source); + callCount += 1; + } +} + +class Test262ChildClass extends Test262ParentClass { + constructor() { + super(...target = source); + } +} + +new Test262ChildClass(); +assert.sameValue(callCount, 1); diff --git a/test/language/expressions/super/spread-sngl-literal.js b/test/language/expressions/super/spread-sngl-literal.js new file mode 100644 index 0000000000..6c0f02b42a --- /dev/null +++ b/test/language/expressions/super/spread-sngl-literal.js @@ -0,0 +1,56 @@ +// This file was procedurally generated from the following sources: +// - src/spread/sngl-literal.case +// - src/spread/default/super-call.template +/*--- +description: Spread operator applied to array literal as only element (SuperCall) +esid: sec-super-keyword-runtime-semantics-evaluation +es6id: 12.3.5.1 +flags: [generated] +info: | + SuperCall : super Arguments + + 1. Let newTarget be GetNewTarget(). + 2. If newTarget is undefined, throw a ReferenceError exception. + 3. Let func be GetSuperConstructor(). + 4. ReturnIfAbrupt(func). + 5. Let argList be ArgumentListEvaluation of Arguments. + [...] + + 12.3.6.1 Runtime Semantics: ArgumentListEvaluation + + ArgumentList : ... AssignmentExpression + + 1. Let list be an empty List. + 2. Let spreadRef be the result of evaluating AssignmentExpression. + 3. Let spreadObj be GetValue(spreadRef). + 4. Let iterator be GetIterator(spreadObj). + 5. ReturnIfAbrupt(iterator). + 6. Repeat + a. Let next be IteratorStep(iterator). + b. ReturnIfAbrupt(next). + c. If next is false, return list. + d. Let nextArg be IteratorValue(next). + e. ReturnIfAbrupt(nextArg). + f. Append nextArg as the last element of list. +---*/ + +var callCount = 0; + +class Test262ParentClass { + constructor() { + assert.sameValue(arguments.length, 3); + assert.sameValue(arguments[0], 3); + assert.sameValue(arguments[1], 4); + assert.sameValue(arguments[2], 5); + callCount += 1; + } +} + +class Test262ChildClass extends Test262ParentClass { + constructor() { + super(...[3, 4, 5]); + } +} + +new Test262ChildClass(); +assert.sameValue(callCount, 1);