Commit d6ca29ce authored by arv@chromium.org's avatar arv@chromium.org

Refactor ObjectGetOwnPropertyKeys to accept bitmask rather than boolean

BUG=v8:3549
LOG=Y
R=arv@chromium.org, rossberg@chromium.org

Review URL: https://codereview.chromium.org/557023002

Patch from Caitlin Potter <caitpotter88@gmail.com>.

Cr-Commit-Position: refs/heads/master@{#25111}
git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@25111 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
parent faa71f96
......@@ -73,7 +73,7 @@ function ObjectGetOwnPropertySymbols(obj) {
// TODO(arv): Proxies use a shared trap for String and Symbol keys.
return ObjectGetOwnPropertyKeys(obj, true);
return ObjectGetOwnPropertyKeys(obj, PROPERTY_ATTRIBUTES_STRING);
}
......
......@@ -1038,16 +1038,14 @@ function ToNameArray(obj, trap, includeSymbols) {
}
function ObjectGetOwnPropertyKeys(obj, symbolsOnly) {
function ObjectGetOwnPropertyKeys(obj, filter) {
var nameArrays = new InternalArray();
var filter = symbolsOnly ?
PROPERTY_ATTRIBUTES_STRING | PROPERTY_ATTRIBUTES_PRIVATE_SYMBOL :
PROPERTY_ATTRIBUTES_SYMBOLIC;
filter |= PROPERTY_ATTRIBUTES_PRIVATE_SYMBOL;
// Find all the indexed properties.
// Only get own element names if we want to include string keys.
if (!symbolsOnly) {
if ((filter & PROPERTY_ATTRIBUTES_STRING) === 0) {
var ownElementNames = %GetOwnElementNames(obj);
for (var i = 0; i < ownElementNames.length; ++i) {
ownElementNames[i] = %_NumberToString(ownElementNames[i]);
......@@ -1089,10 +1087,12 @@ function ObjectGetOwnPropertyKeys(obj, symbolsOnly) {
var j = 0;
for (var i = 0; i < propertyNames.length; ++i) {
var name = propertyNames[i];
if (symbolsOnly) {
if (!IS_SYMBOL(name) || IS_PRIVATE(name)) continue;
if (IS_SYMBOL(name)) {
if ((filter & PROPERTY_ATTRIBUTES_SYMBOLIC) || IS_PRIVATE(name)) {
continue;
}
} else {
if (IS_SYMBOL(name)) continue;
if (filter & PROPERTY_ATTRIBUTES_STRING) continue;
name = ToString(name);
}
if (seenKeys[name]) continue;
......@@ -1116,7 +1116,7 @@ function ObjectGetOwnPropertyNames(obj) {
return ToNameArray(names, "getOwnPropertyNames", false);
}
return ObjectGetOwnPropertyKeys(obj, false);
return ObjectGetOwnPropertyKeys(obj, PROPERTY_ATTRIBUTES_SYMBOLIC);
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment