| Index: src/v8natives.js | 
| diff --git a/src/v8natives.js b/src/v8natives.js | 
| index 259856b283b66947fd6a1b2da3c7e6e304ba401c..a0986634985f3b410434479b91fc6ae5f4d3d893 100644 | 
| --- a/src/v8natives.js | 
| +++ b/src/v8natives.js | 
| @@ -346,8 +346,7 @@ function ObjectKeys(obj) { | 
| if (%IsJSProxy(obj)) { | 
| var handler = %GetHandler(obj); | 
| var names = CallTrap0(handler, "keys", DerivedKeysTrap); | 
| -    // TODO(rossberg): filter non-string keys. | 
| -    return ToNameArray(names, "keys"); | 
| +    return ToNameArray(names, "keys", false); | 
| } | 
| return %LocalKeys(obj); | 
| } | 
| @@ -983,7 +982,7 @@ function ObjectGetOwnPropertyDescriptor(obj, p) { | 
|  | 
|  | 
| // For Harmony proxies | 
| -function ToNameArray(obj, trap) { | 
| +function ToNameArray(obj, trap, includeSymbols) { | 
| if (!IS_SPEC_OBJECT(obj)) { | 
| throw MakeTypeError("proxy_non_object_prop_names", [obj, trap]); | 
| } | 
| @@ -992,6 +991,7 @@ function ToNameArray(obj, trap) { | 
| var names = { __proto__: null };  // TODO(rossberg): use sets once ready. | 
| for (var index = 0; index < n; index++) { | 
| var s = ToName(obj[index]); | 
| +    if (IS_SYMBOL(s) && !includeSymbols) continue; | 
| if (%HasLocalProperty(names, s)) { | 
| throw MakeTypeError("proxy_repeated_prop_name", [obj, trap, s]); | 
| } | 
| @@ -1011,7 +1011,7 @@ function ObjectGetOwnPropertyNames(obj) { | 
| if (%IsJSProxy(obj)) { | 
| var handler = %GetHandler(obj); | 
| var names = CallTrap0(handler, "getOwnPropertyNames", void 0); | 
| -    return ToNameArray(names, "getOwnPropertyNames"); | 
| +    return ToNameArray(names, "getOwnPropertyNames", true); | 
| } | 
|  | 
| // Find all the indexed properties. | 
|  |