mirror of https://github.com/tc39/test262.git
Change case-files for destructuring-with-yield to not rely on destructuring target evaluation order
This commit is contained in:
parent
765f273ac4
commit
86da171663
|
@ -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
|
||||||
|
|
||||||
//- 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 = {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
//- 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
|
||||||
---*/
|
---*/
|
||||||
|
|
||||||
//- 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
|
||||||
//- 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
|
||||||
---*/
|
---*/
|
||||||
|
|
||||||
//- 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 = {
|
||||||
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
|
||||||
---*/
|
---*/
|
||||||
|
|
||||||
//- 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;
|
||||||
//- 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
|
||||||
---*/
|
---*/
|
||||||
|
|
||||||
//- 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
|
||||||
---*/
|
---*/
|
||||||
|
|
||||||
//- 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() {
|
||||||
|
|
||||||
function* g() {
|
function* g() {
|
||||||
//- elems
|
//- elems
|
||||||
[ {}[yield] , ]
|
[ {} = yield , ]
|
||||||
//- vals
|
//- vals
|
||||||
iterable
|
iterable
|
||||||
//- body
|
//- body
|
||||||
|
@ -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);
|
||||||
|
|
Loading…
Reference in New Issue