bdfcc61325
Reason for revert: [Sheriff] Breaks gc stress: https://build.chromium.org/p/client.v8/builders/V8%20Linux%20-%20gc%20stress/builds/1642 Original issue's description: > [es7] refactor and fix Object.values() / Object.entries() > > Previously, Object.values() and Object.entries() were piggy-backing on > Object.keys(). This meant that they would pre-filter non-enumerable properties, > violating the runtime behaviour of the methods. Unfortunately, this does not > match the current proposal text. > > Also incorporates several tests verifying this behaviour based on tests included > in the ChakraCore implementation. > > BUG=v8:4663 > LOG=N > R=adamk@chromium.org, rossberg@chromium.org, littledan@chromium.org > > Committed: https://crrev.com/5c5ccd9d7f8693990d1a9eb26ba3a94f376dcf0b > Cr-Commit-Position: refs/heads/master@{#33782} TBR=littledan@chromium.org,adamk@chromium.org,cbruni@chromium.org,rossberg@chromium.org,caitpotter88@gmail.com # Skipping CQ checks because original CL landed less than 1 days ago. NOPRESUBMIT=true NOTREECHECKS=true NOTRY=true BUG=v8:4663 Review URL: https://codereview.chromium.org/1675663002 Cr-Commit-Position: refs/heads/master@{#33787}
65 lines
1.5 KiB
JavaScript
65 lines
1.5 KiB
JavaScript
// Copyright 2016 the V8 project authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
// Flags: --harmony-object-values-entries --harmony-proxies --harmony-reflect
|
|
|
|
function TestMeta() {
|
|
assertEquals(1, Object.values.length);
|
|
assertEquals(Function.prototype, Object.getPrototypeOf(Object.values));
|
|
}
|
|
TestMeta();
|
|
|
|
|
|
function TestBasic() {
|
|
var x = 16;
|
|
var O = {
|
|
d: 1,
|
|
c: 3,
|
|
[Symbol.iterator]: void 0,
|
|
0: 123,
|
|
1000: 456,
|
|
[x * x]: "ducks",
|
|
[`0x${(x * x).toString(16)}`]: "quack"
|
|
};
|
|
O.a = 2;
|
|
O.b = 4;
|
|
Object.defineProperty(O, "HIDDEN", { enumerable: false, value: NaN });
|
|
assertEquals([123, "ducks", 456, 1, 3, "quack", 2, 4], Object.values(O));
|
|
assertEquals(Object.values(O), Object.keys(O).map(key => O[key]));
|
|
}
|
|
TestBasic();
|
|
|
|
|
|
function TestOrder() {
|
|
var O = {
|
|
a: 1,
|
|
[Symbol.iterator]: null
|
|
};
|
|
O[456] = 123;
|
|
Object.defineProperty(O, "HIDDEN", { enumerable: false, value: NaN });
|
|
|
|
var log = [];
|
|
var P = new Proxy(O, {
|
|
ownKeys(target) {
|
|
log.push("[[OwnPropertyKeys]]");
|
|
return Reflect.ownKeys(target);
|
|
},
|
|
get(target, name) {
|
|
log.push(`[[Get]](${JSON.stringify(name)})`);
|
|
return Reflect.get(target, name);
|
|
},
|
|
set(target, name, value) {
|
|
assertUnreachable();
|
|
}
|
|
});
|
|
|
|
assertEquals([123, 1], Object.values(P));
|
|
assertEquals([
|
|
"[[OwnPropertyKeys]]",
|
|
"[[Get]](\"456\")",
|
|
"[[Get]](\"a\")"
|
|
], log);
|
|
}
|
|
TestOrder();
|