From d6ca29ce4c146f3a70ce54e76e233330ead6a58d Mon Sep 17 00:00:00 2001 From: "arv@chromium.org" Date: Tue, 4 Nov 2014 15:08:24 +0000 Subject: [PATCH] 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 . Cr-Commit-Position: refs/heads/master@{#25111} git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@25111 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- src/symbol.js | 2 +- src/v8natives.js | 18 +++++++++--------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/symbol.js b/src/symbol.js index d6ac5277cc..b4ae708e59 100644 --- a/src/symbol.js +++ b/src/symbol.js @@ -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); } diff --git a/src/v8natives.js b/src/v8natives.js index 7636b702c9..20fd649a23 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); }