// |reftest| skip-if(!this.hasOwnProperty("Tuple")) /* TupleElementList : AssignmentExpression 1. Let initResult be the result of evaluating AssignmentExpression. 2. Let initValue be ? GetValue(initResult). 3. Return ? AddValueToTupleSequenceList(sequence, value).
*/
var a = 5; var b = 10; var arr = [1,2,3,4,5]; var badArr = [1, new Object(), 3]; var t = #[a < b ? "x" : "y"];
assertEq(t, #["x"]);
t = #[0 in arr, 42 in arr, 1 in arr, 100 in arr];
assertEq(t, #[true, false, true, false]);
t = #[a = 1, b = b * 3];
assertEq(t, #[1, 30]);
assertEq(a, 1);
assertEq(b, 30);
/* 6.1.2.1 TupleElementList : AssignmentExpression ... 2. Let initValue be ? GetValue(initResult). ... 6.2.4.5 GetValue ( V ) The abstract operation GetValue takes argument V. It performs the following steps when called:
1. ReturnIfAbrupt(V).
*/
let bBefore = b;
let tBefore = t; function f() { thrownew RangeError(); }
assertThrowsInstanceOf(() => t = #[a = 2, f(), b = 3],
RangeError, "t = #[a = 2, f(), b = 3] throws");
assertEq(a, 2);
assertEq(b, bBefore);
assertEq(t, tBefore);
/* GetValue ... 3. If IsUnresolvableReference(V) is true, throw a ReferenceError exception.
*/
assertThrowsInstanceOf(() => t = #[unbound],
ReferenceError, "t = #[unbound] throws");
assertEq(t, tBefore);
/* 6.1.2.1 TupleElementList : AssignmentExpression ... 3. Return ? AddValueToTupleSequenceList(sequence, value).
*/
assertThrowsInstanceOf(() => t = #[new Object()],
TypeError, "Object in Tuple");
assertEq(t, tBefore);
assertThrowsInstanceOf(() => t = #[{}],
TypeError, "Object in Tuple")
assertEq(t, tBefore);
assertThrowsInstanceOf(() => t = #[new String("s")],
TypeError, "Object in Tuple")
assertEq(t, tBefore);
assertThrowsInstanceOf(() => t = #[[1,2,3]],
TypeError, "Object in Tuple")
assertEq(t, tBefore);
assertThrowsInstanceOf(() => t = #[function(x) { return x; }],
TypeError, "Object in Tuple")
assertEq(t, tBefore);
/* 6.1.2.1
TupleElementList : SpreadElement 1. Return the Result of performing TupleSequenceAccumulation for SpreadElement with argument sequence.
*/
assertEq(#[...arr], #[1,2,3,4,5]);
assertThrowsInstanceOf(() => #[...badArr],
TypeError, "Object in Tuple");
/* TupleElementList : TupleElementList , AssignmentExpression 1. Perform TupleSequenceAccumulation for TupleElementList with argument sequence. 2. Let initResult be the result of evaluating AssignmentExpression. 3. Let initValue be ? GetValue(initResult). 4. Return ? AddValueToTupleSequenceList(sequence, value).
*/
assertThrowsInstanceOf(() => t = #[1, a = 5, b = new Object(), 5],
TypeError, "Object in Tuple");
assertEq(t, tBefore);
/* TupleElementList : TupleElementList , SpreadElement 1. Perform TupleSequenceAccumulation for TupleElementList with argument sequence. 2. Return the Result of performing TupleSequenceAccumulation for SpreadElement with argument sequence.
*/
/* SpreadElement : ... AssignmentExpression 1. Let spreadRef be the result of evaluating AssignmentExpression. 2. Let spreadObj be ? GetValue(spreadRef). 3. Let iteratorRecord be ? GetIterator(spreadObj). 4. Repeat, a. Let next be ? IteratorStep(iteratorRecord). b. If next is false, return sequence. c. Let nextValue be ? IteratorValue(next). d. Let completion be AddValueToTupleSequenceList(sequence, nextValue). e. If completion is an abrupt completion, then i. Return IteratorClose(iteratorRecord, completion).
*/ /* Step 2 */
assertThrowsInstanceOf(() => t = #[...unbound],
ReferenceError, "t = #[...unbound throws]");
assertEq(t, tBefore); /* Step 3 */ var notIterable = Symbol('c');
assertThrowsInstanceOf(() => t = #[...notIterable],
TypeError, "t = #[...notIterable] is type error"); /* TODO -- test other iterator cases */
reportCompare(0, 0);
Messung V0.5
¤ Dauer der Verarbeitung: 0.0 Sekunden
(vorverarbeitet)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.