Index: src/v8natives.js |
diff --git a/src/v8natives.js b/src/v8natives.js |
index 7636b702c9128c5241429568b30e3320cc7290b2..20fd649a235585fee82ea05d2464de76e4e7759c 100644 |
--- a/src/v8natives.js |
+++ b/src/v8natives.js |
@@ -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); |
} |