Source code

Revision control

Copy as Markdown

Other Tools

// Test __proto__ is destructuring assignment.
// __proto__ shorthand, no default.
{
let __proto__;
({__proto__} = {});
assertEq(__proto__, Object.prototype);
}
// __proto__ shorthand, with default.
{
let __proto__;
({__proto__ = 0} = {});
assertEq(__proto__, Object.prototype);
}
{
let __proto__;
({__proto__ = 0} = Object.create(null));
assertEq(__proto__, 0);
}
// __proto__ keyed, no default.
{
let p;
({__proto__: p} = {});
assertEq(p, Object.prototype);
}
// __proto__ keyed, with default.
{
let p;
({__proto__: p = 0} = {});
assertEq(p, Object.prototype);
}
// __proto__ keyed, with default.
{
let p;
({__proto__: p = 0} = Object.create(null));
assertEq(p, 0);
}
// Repeat the cases from above, but this time with a rest property.
// __proto__ shorthand, no default.
{
let __proto__, rest;
({__proto__, ...rest} = {});
assertEq(__proto__, Object.prototype);
assertEq(Reflect.ownKeys(rest).length, 0);
}
// __proto__ shorthand, with default.
{
let __proto__, rest;
({__proto__ = 0, ...rest} = {});
assertEq(__proto__, Object.prototype);
assertEq(Reflect.ownKeys(rest).length, 0);
}
{
let __proto__, rest;
({__proto__ = 0, ...rest} = Object.create(null));
assertEq(__proto__, 0);
assertEq(Reflect.ownKeys(rest).length, 0);
}
// __proto__ keyed, no default.
{
let p, rest;
({__proto__: p, ...rest} = {});
assertEq(p, Object.prototype);
assertEq(Reflect.ownKeys(rest).length, 0);
}
// __proto__ keyed, with default.
{
let p, rest;
({__proto__: p = 0, ...rest} = {});
assertEq(p, Object.prototype);
assertEq(Reflect.ownKeys(rest).length, 0);
}
// __proto__ keyed, with default.
{
let p, rest;
({__proto__: p = 0, ...rest} = Object.create(null));
assertEq(p, 0);
assertEq(Reflect.ownKeys(rest).length, 0);
}
if (typeof reportCompare == "function")
reportCompare(true, true);