Merge pull request #917 from leobalter/913-rest-name

Add case for obj rest name equal to a property
This commit is contained in:
Leo Balter 2017-03-20 15:14:58 -04:00 committed by GitHub
commit cf69b7f5d3
6 changed files with 128 additions and 6 deletions

View File

@ -3,10 +3,9 @@
/*---
desc: >
Rest object contains just soruce object's own properties
Rest object contains just source object's own properties
template: default
esid: pending
includes: [propertyHelper.js]
---*/
//- setup

View File

@ -0,0 +1,32 @@
// Copyright (C) 2017 the V8 project authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
desc: >
Proper setting in the values for rest name equal to a property name.
template: default
esid: pending
---*/
//- setup
var o = {
x: 42,
y: 39,
z: 'cheeseburger'
};
var x, y, z;
//- elems
{ x, ...z }
//- vals
o
//- body
assert.sameValue(x, 42);
assert.sameValue(y, undefined);
assert.sameValue(z.y, 39);
assert.sameValue(z.z, 'cheeseburger');
var keys = Object.keys(z);
assert.sameValue(keys.length, 2);
assert.sameValue(keys[0], 'y');
assert.sameValue(keys[1], 'z');

View File

@ -2,12 +2,11 @@
// - src/dstr-assignment/obj-rest-obj-own-property.case
// - src/dstr-assignment/default/assignment-expr.template
/*---
description: Rest object contains just soruce object's own properties (AssignmentExpression)
description: Rest object contains just source object's own properties (AssignmentExpression)
esid: sec-variable-statement-runtime-semantics-evaluation
es6id: 13.3.2.4
features: [destructuring-binding]
flags: [generated]
includes: [propertyHelper.js]
info: |
VariableDeclaration : BindingPattern Initializer

View File

@ -0,0 +1,42 @@
// This file was procedurally generated from the following sources:
// - src/dstr-assignment/obj-rest-same-name.case
// - src/dstr-assignment/default/assignment-expr.template
/*---
description: Proper setting in the values for rest name equal to a property name. (AssignmentExpression)
esid: sec-variable-statement-runtime-semantics-evaluation
es6id: 13.3.2.4
features: [destructuring-binding]
flags: [generated]
info: |
VariableDeclaration : BindingPattern Initializer
1. Let rhs be the result of evaluating Initializer.
2. Let rval be GetValue(rhs).
3. ReturnIfAbrupt(rval).
4. Return the result of performing BindingInitialization for
BindingPattern passing rval and undefined as arguments.
---*/
var o = {
x: 42,
y: 39,
z: 'cheeseburger'
};
var x, y, z;
var result;
var vals = o;
result = { x, ...z } = vals;
assert.sameValue(x, 42);
assert.sameValue(y, undefined);
assert.sameValue(z.y, 39);
assert.sameValue(z.z, 'cheeseburger');
var keys = Object.keys(z);
assert.sameValue(keys.length, 2);
assert.sameValue(keys[0], 'y');
assert.sameValue(keys[1], 'z');
assert.sameValue(result, vals);

View File

@ -2,12 +2,11 @@
// - src/dstr-assignment/obj-rest-obj-own-property.case
// - src/dstr-assignment/default/for-of.template
/*---
description: Rest object contains just soruce object's own properties (For..of statement)
description: Rest object contains just source object's own properties (For..of statement)
esid: sec-for-in-and-for-of-statements-runtime-semantics-labelledevaluation
es6id: 13.7.5.11
features: [destructuring-binding]
flags: [generated]
includes: [propertyHelper.js]
info: |
IterationStatement :
for ( LeftHandSideExpression of AssignmentExpression ) Statement

View File

@ -0,0 +1,51 @@
// This file was procedurally generated from the following sources:
// - src/dstr-assignment/obj-rest-same-name.case
// - src/dstr-assignment/default/for-of.template
/*---
description: Proper setting in the values for rest name equal to a property name. (For..of statement)
esid: sec-for-in-and-for-of-statements-runtime-semantics-labelledevaluation
es6id: 13.7.5.11
features: [destructuring-binding]
flags: [generated]
info: |
IterationStatement :
for ( LeftHandSideExpression of AssignmentExpression ) Statement
1. Let keyResult be the result of performing ? ForIn/OfHeadEvaluation(« »,
AssignmentExpression, iterate).
2. Return ? ForIn/OfBodyEvaluation(LeftHandSideExpression, Statement,
keyResult, assignment, labelSet).
13.7.5.13 Runtime Semantics: ForIn/OfBodyEvaluation
[...]
4. If destructuring is true and if lhsKind is assignment, then
a. Assert: lhs is a LeftHandSideExpression.
b. Let assignmentPattern be the parse of the source text corresponding to
lhs using AssignmentPattern as the goal symbol.
[...]
---*/
var o = {
x: 42,
y: 39,
z: 'cheeseburger'
};
var x, y, z;
var counter = 0;
for ({ x, ...z } of [o]) {
assert.sameValue(x, 42);
assert.sameValue(y, undefined);
assert.sameValue(z.y, 39);
assert.sameValue(z.z, 'cheeseburger');
var keys = Object.keys(z);
assert.sameValue(keys.length, 2);
assert.sameValue(keys[0], 'y');
assert.sameValue(keys[1], 'z');
counter += 1;
}
assert.sameValue(counter, 1);