Chromium Code Reviews| Index: src/js/v8natives.js |
| diff --git a/src/js/v8natives.js b/src/js/v8natives.js |
| index f6b394c2e73797f9ab1e8c1fd959249c3b6e000d..8af359a9d5d4fc69d77941b4a4b639be21518b52 100644 |
| --- a/src/js/v8natives.js |
| +++ b/src/js/v8natives.js |
| @@ -1116,43 +1116,12 @@ function ObjectDefineProperties(obj, properties) { |
| } |
| -// Harmony proxies. |
| -function ProxyFix(obj) { |
| - var handler = %GetHandler(obj); |
| - var props = CallTrap0(handler, "fix", UNDEFINED); |
| - if (IS_UNDEFINED(props)) { |
| - throw MakeTypeError(kProxyHandlerReturned, handler, "undefined", "fix"); |
| - } |
| - |
| - if (%IsJSFunctionProxy(obj)) { |
| - var callTrap = %GetCallTrap(obj); |
| - var constructTrap = %GetConstructTrap(obj); |
| - var code = ProxyDelegateCallAndConstruct(callTrap, constructTrap); |
| - %Fix(obj); // becomes a regular function |
| - %SetCode(obj, code); |
| - // TODO(rossberg): What about length and other properties? Not specified. |
| - // We just put in some half-reasonable defaults for now. |
| - var prototype = new GlobalObject(); |
| - ObjectDefineProperty(prototype, "constructor", |
| - {value: obj, writable: true, enumerable: false, configurable: true}); |
| - // TODO(v8:1530): defineProperty does not handle prototype and length. |
| - %FunctionSetPrototype(obj, prototype); |
| - obj.length = 0; |
| - } else { |
| - %Fix(obj); |
| - } |
| - ObjectDefineProperties(obj, props); |
| -} |
| - |
| - |
| // ES5 section 15.2.3.8. |
| function ObjectSealJS(obj) { |
| if (!IS_SPEC_OBJECT(obj)) return obj; |
| var isProxy = %_IsJSProxy(obj); |
| if (isProxy || %HasSloppyArgumentsElements(obj) || %IsObserved(obj)) { |
| - if (isProxy) { |
| - ProxyFix(obj); |
| - } |
| + // TODO(neis): For proxies, must call preventExtensions trap first. |
|
rossberg
2015/11/12 16:46:26
The call is already there, why not just reorder?
neis
2015/11/12 17:36:31
It's possible that this is enough, assuming that %
|
| var names = OwnPropertyKeys(obj); |
| for (var i = 0; i < names.length; i++) { |
| var name = names[i]; |
| @@ -1180,9 +1149,7 @@ function ObjectFreezeJS(obj) { |
| // objects. |
| if (isProxy || %HasSloppyArgumentsElements(obj) || %IsObserved(obj) || |
| IS_STRONG(obj)) { |
| - if (isProxy) { |
| - ProxyFix(obj); |
| - } |
| + // TODO(neis): For proxies, must call preventExtensions trap first. |
|
rossberg
2015/11/12 16:46:26
Same here.
|
| var names = OwnPropertyKeys(obj); |
| for (var i = 0; i < names.length; i++) { |
| var name = names[i]; |
| @@ -1206,11 +1173,7 @@ function ObjectFreezeJS(obj) { |
| // ES5 section 15.2.3.10 |
| function ObjectPreventExtension(obj) { |
| if (!IS_SPEC_OBJECT(obj)) return obj; |
| - if (%_IsJSProxy(obj)) { |
| - ProxyFix(obj); |
| - } |
| - %PreventExtensions(obj); |
| - return obj; |
| + return %PreventExtensions(obj); |
| } |
| @@ -1218,7 +1181,7 @@ function ObjectPreventExtension(obj) { |
| function ObjectIsSealed(obj) { |
| if (!IS_SPEC_OBJECT(obj)) return true; |
| if (%_IsJSProxy(obj)) { |
| - return false; |
| + return false; // TODO(neis): Must call isExtensible trap and ownKeys trap. |
| } |
| if (%IsExtensible(obj)) { |
| return false; |
| @@ -1239,7 +1202,7 @@ function ObjectIsSealed(obj) { |
| function ObjectIsFrozen(obj) { |
| if (!IS_SPEC_OBJECT(obj)) return true; |
| if (%_IsJSProxy(obj)) { |
| - return false; |
| + return false; // TODO(neis): Must call isExtensible trap and ownKeys trap. |
| } |
| if (%IsExtensible(obj)) { |
| return false; |