Skip to content
Snippets Groups Projects
Commit 86da1716 authored by André Bargull's avatar André Bargull
Browse files

Change case-files for destructuring-with-yield to not rely on destructuring target evaluation order

parent 765f273a
No related branches found
No related tags found
No related merge requests found
...@@ -4,12 +4,6 @@ ...@@ -4,12 +4,6 @@
desc: > desc: >
IteratorClose throws a TypeError when `return` returns a non-Object value IteratorClose throws a TypeError when `return` returns a non-Object value
info: | info: |
AssignmentElement : DestructuringAssignmentTarget Initializer
1. If DestructuringAssignmentTarget is neither an ObjectLiteral nor an ArrayLiteral, then
a. Let lref be the result of evaluating DestructuringAssignmentTarget.
b. ReturnIfAbrupt(lref).
[...]
ArrayAssignmentPattern : [ AssignmentElementList ] ArrayAssignmentPattern : [ AssignmentElementList ]
[...] [...]
...@@ -32,8 +26,15 @@ esid: sec-runtime-semantics-destructuringassignmentevaluation ...@@ -32,8 +26,15 @@ esid: sec-runtime-semantics-destructuringassignmentevaluation
//- setup //- setup
let unreachable = 0; let unreachable = 0;
let nextCount = 0;
let returnCount = 0;
let iterator = { let iterator = {
next() {
nextCount += 1;
return {done: false, value: undefined};
},
return() { return() {
returnCount += 1;
return null; return null;
} }
}; };
...@@ -43,17 +44,21 @@ let iterable = { ...@@ -43,17 +44,21 @@ let iterable = {
} }
}; };
//- elems //- elems
[ {}[yield] ] [ {} = yield ]
//- vals //- vals
iterable iterable
//- body //- body
unreachable += 1; unreachable += 1;
//- teardown //- teardown
iter.next().then(result => { iter.next().then(result => {
assert.sameValue(nextCount, 1);
assert.sameValue(returnCount, 0);
assert.sameValue(result.value, undefined); assert.sameValue(result.value, undefined);
assert.sameValue(result.done, false); assert.sameValue(result.done, false);
iter.return().then(() => $DONE('Promise incorrectly fulfilled.'), ({ constructor }) => { iter.return().then(() => $DONE('Promise incorrectly fulfilled.'), ({ constructor }) => {
assert.sameValue(nextCount, 1);
assert.sameValue(returnCount, 1);
assert.sameValue(unreachable, 0); assert.sameValue(unreachable, 0);
assert.sameValue(constructor, TypeError); assert.sameValue(constructor, TypeError);
}).then($DONE, $DONE); }).then($DONE, $DONE);
......
...@@ -26,19 +26,26 @@ esid: sec-runtime-semantics-destructuringassignmentevaluation ...@@ -26,19 +26,26 @@ esid: sec-runtime-semantics-destructuringassignmentevaluation
---*/ ---*/
//- setup //- setup
var iterable = {}; var nextCount = 0;
var returnCount = 0;
var unreachable = 0;
var iterator = { var iterator = {
next: function() {
nextCount += 1;
return {done: false, value: undefined};
},
return: function() { return: function() {
returnCount += 1;
return null; return null;
} }
}; };
var iter; var iterable = {};
iterable[Symbol.iterator] = function() { iterable[Symbol.iterator] = function() {
return iterator; return iterator;
}; };
function* g() { function* g() {
//- elems //- elems
[ {}[yield] ] [ {} = yield ]
//- vals //- vals
iterable iterable
//- body //- body
...@@ -46,9 +53,14 @@ iterable ...@@ -46,9 +53,14 @@ iterable
//- teardown //- teardown
} }
iter = g(); var iter = g();
iter.next(); iter.next();
assert.sameValue(nextCount, 1);
assert.sameValue(returnCount, 0);
assert.throws(TypeError, function() { assert.throws(TypeError, function() {
iter.return(); iter.return();
}); });
assert.sameValue(nextCount, 1);
assert.sameValue(returnCount, 1);
assert.sameValue(unreachable, 0, 'Unreachable statement was not executed');
...@@ -25,12 +25,16 @@ esid: sec-runtime-semantics-destructuringassignmentevaluation ...@@ -25,12 +25,16 @@ esid: sec-runtime-semantics-destructuringassignmentevaluation
---*/ ---*/
//- setup //- setup
var nextCount = 0;
var returnCount = 0; var returnCount = 0;
var unreachable = 0; var unreachable = 0;
var thisValue = null; var thisValue = null;
var args = null; var args = null;
var iterable = {};
var iterator = { var iterator = {
next: function() {
nextCount += 1;
return {done: false, value: undefined};
},
return: function() { return: function() {
returnCount += 1; returnCount += 1;
thisValue = this; thisValue = this;
...@@ -38,24 +42,29 @@ var iterator = { ...@@ -38,24 +42,29 @@ var iterator = {
return {}; return {};
} }
}; };
var iter, result; var iterable = {};
iterable[Symbol.iterator] = function() { iterable[Symbol.iterator] = function() {
return iterator; return iterator;
}; };
function* g() { function* g() {
//- elems //- elems
[ {}[yield] ] [ {} = yield ]
//- vals //- vals
iterable iterable
//- body //- body
unreachable += 1; unreachable += 1;
//- teardown //- teardown
} }
iter = g(); var iter = g();
iter.next(); iter.next();
result = iter.return(777);
assert.sameValue(nextCount, 1);
assert.sameValue(returnCount, 0);
var result = iter.return(777);
assert.sameValue(nextCount, 1);
assert.sameValue(returnCount, 1); assert.sameValue(returnCount, 1);
assert.sameValue(unreachable, 0, 'Unreachable statement was not executed'); assert.sameValue(unreachable, 0, 'Unreachable statement was not executed');
assert.sameValue(result.value, 777); assert.sameValue(result.value, 777);
......
...@@ -30,24 +30,28 @@ esid: sec-runtime-semantics-destructuringassignmentevaluation ...@@ -30,24 +30,28 @@ esid: sec-runtime-semantics-destructuringassignmentevaluation
---*/ ---*/
//- setup //- setup
var nextCount = 0;
var returnCount = 0; var returnCount = 0;
var unreachable = 0; var unreachable = 0;
var iterable = {};
var iterator = { var iterator = {
next: function() {
nextCount += 1;
return {done: false, value: undefined};
},
return: function() { return: function() {
returnCount += 1; returnCount += 1;
throw new Test262Error(); throw new Test262Error();
} }
}; };
var iter; var iterable = {};
iterable[Symbol.iterator] = function() { iterable[Symbol.iterator] = function() {
return iterator; return iterator;
}; };
function* g() { function* g() {
//- elems //- elems
[ {}[yield] , ] [ {} = yield , ]
//- vals //- vals
iterable iterable
//- body //- body
...@@ -55,11 +59,14 @@ unreachable += 1; ...@@ -55,11 +59,14 @@ unreachable += 1;
//- teardown //- teardown
} }
iter = g(); var iter = g();
iter.next(); iter.next();
assert.sameValue(nextCount, 1);
assert.sameValue(returnCount, 0);
assert.throws(Test262Error, function() { assert.throws(Test262Error, function() {
iter.return(); iter.return();
}); });
assert.sameValue(nextCount, 1);
assert.sameValue(returnCount, 1); assert.sameValue(returnCount, 1);
assert.sameValue(unreachable, 0, 'Unreachable statement was not executed'); assert.sameValue(unreachable, 0, 'Unreachable statement was not executed');
...@@ -32,28 +32,38 @@ esid: sec-runtime-semantics-destructuringassignmentevaluation ...@@ -32,28 +32,38 @@ esid: sec-runtime-semantics-destructuringassignmentevaluation
---*/ ---*/
//- setup //- setup
var iterable = {}; var nextCount = 0;
var returnCount = 0;
var iterator = { var iterator = {
next: function() {
nextCount += 1;
return {done: false, value: undefined};
},
return: function() { return: function() {
returnCount += 1;
return null; return null;
} }
}; };
var iter; var iterable = {};
iterable[Symbol.iterator] = function() { iterable[Symbol.iterator] = function() {
return iterator; return iterator;
}; };
function* g() { function* g() {
//- elems //- elems
[ {}[yield] , ] [ {} = yield , ]
//- vals //- vals
iterable iterable
//- teardown //- teardown
} }
iter = g(); var iter = g();
iter.next(); iter.next();
assert.sameValue(nextCount, 1);
assert.sameValue(returnCount, 0);
assert.throws(TypeError, function() { assert.throws(TypeError, function() {
iter.return(); iter.return();
}); });
assert.sameValue(nextCount, 1);
assert.sameValue(returnCount, 1);
...@@ -31,12 +31,17 @@ esid: sec-runtime-semantics-destructuringassignmentevaluation ...@@ -31,12 +31,17 @@ esid: sec-runtime-semantics-destructuringassignmentevaluation
---*/ ---*/
//- setup //- setup
var nextCount = 0;
var returnCount = 0; var returnCount = 0;
var unreachable = 0; var unreachable = 0;
var thisValue = null; var thisValue = null;
var args = null; var args = null;
var iterable = {}; var iterable = {};
var iterator = { var iterator = {
next: function() {
nextCount += 1;
return {done: false, value: undefined};
},
return: function() { return: function() {
returnCount += 1; returnCount += 1;
thisValue = this; thisValue = this;
...@@ -52,7 +57,7 @@ iterable[Symbol.iterator] = function() { ...@@ -52,7 +57,7 @@ iterable[Symbol.iterator] = function() {
function* g() { function* g() {
//- elems //- elems
[ {}[yield] , ] [ {} = yield , ]
//- vals //- vals
iterable iterable
//- body //- body
...@@ -62,8 +67,13 @@ iterable ...@@ -62,8 +67,13 @@ iterable
iter = g(); iter = g();
iter.next(); iter.next();
assert.sameValue(nextCount, 1);
assert.sameValue(returnCount, 0);
result = iter.return(888); result = iter.return(888);
assert.sameValue(nextCount, 1);
assert.sameValue(returnCount, 1); assert.sameValue(returnCount, 1);
assert.sameValue(unreachable, 0, 'Unreachable statement was not executed'); assert.sameValue(unreachable, 0, 'Unreachable statement was not executed');
assert.sameValue(result.value, 888); assert.sameValue(result.value, 888);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment