Index: src/proxy.js |
diff --git a/src/proxy.js b/src/proxy.js |
deleted file mode 100644 |
index cc45b32b3df6503a7d86b6d6975778ebe7e07519..0000000000000000000000000000000000000000 |
--- a/src/proxy.js |
+++ /dev/null |
@@ -1,210 +0,0 @@ |
-// Copyright 2011 the V8 project authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-(function(global, utils) { |
- |
-"use strict"; |
- |
-%CheckIsBootstrapping(); |
- |
-// ---------------------------------------------------------------------------- |
-// Imports |
- |
-var GlobalFunction = global.Function; |
-var GlobalObject = global.Object; |
- |
-var ToNameArray; |
- |
-utils.Import(function(from) { |
- ToNameArray = from.ToNameArray; |
-}); |
- |
-//---------------------------------------------------------------------------- |
- |
-function ProxyCreate(handler, proto) { |
- if (!IS_SPEC_OBJECT(handler)) |
- throw MakeTypeError(kProxyHandlerNonObject, "create") |
- if (IS_UNDEFINED(proto)) |
- proto = null |
- else if (!(IS_SPEC_OBJECT(proto) || IS_NULL(proto))) |
- throw MakeTypeError(kProxyProtoNonObject) |
- return %CreateJSProxy(handler, proto) |
-} |
- |
-function ProxyCreateFunction(handler, callTrap, constructTrap) { |
- if (!IS_SPEC_OBJECT(handler)) |
- throw MakeTypeError(kProxyHandlerNonObject, "createFunction") |
- if (!IS_CALLABLE(callTrap)) |
- throw MakeTypeError(kProxyTrapFunctionExpected, "call") |
- if (IS_UNDEFINED(constructTrap)) { |
- constructTrap = DerivedConstructTrap(callTrap) |
- } else if (IS_CALLABLE(constructTrap)) { |
- // Make sure the trap receives 'undefined' as this. |
- var construct = constructTrap |
- constructTrap = function() { |
- return %Apply(construct, UNDEFINED, arguments, 0, %_ArgumentsLength()); |
- } |
- } else { |
- throw MakeTypeError(kProxyTrapFunctionExpected, "construct") |
- } |
- return %CreateJSFunctionProxy( |
- handler, callTrap, constructTrap, GlobalFunction.prototype) |
-} |
- |
-// ------------------------------------------------------------------- |
-// Proxy Builtins |
- |
-function DerivedConstructTrap(callTrap) { |
- return function() { |
- var proto = this.prototype |
- if (!IS_SPEC_OBJECT(proto)) proto = GlobalObject.prototype |
- var obj = { __proto__: proto }; |
- var result = %Apply(callTrap, obj, arguments, 0, %_ArgumentsLength()); |
- return IS_SPEC_OBJECT(result) ? result : obj |
- } |
-} |
- |
-function DelegateCallAndConstruct(callTrap, constructTrap) { |
- return function() { |
- return %Apply(%_IsConstructCall() ? constructTrap : callTrap, |
- this, arguments, 0, %_ArgumentsLength()) |
- } |
-} |
- |
-function DerivedGetTrap(receiver, name) { |
- var desc = this.getPropertyDescriptor(name) |
- if (IS_UNDEFINED(desc)) { return desc } |
- if ('value' in desc) { |
- return desc.value |
- } else { |
- if (IS_UNDEFINED(desc.get)) { return desc.get } |
- // The proposal says: desc.get.call(receiver) |
- return %_CallFunction(receiver, desc.get) |
- } |
-} |
- |
-function DerivedSetTrap(receiver, name, val) { |
- var desc = this.getOwnPropertyDescriptor(name) |
- if (desc) { |
- if ('writable' in desc) { |
- if (desc.writable) { |
- desc.value = val |
- this.defineProperty(name, desc) |
- return true |
- } else { |
- return false |
- } |
- } else { // accessor |
- if (desc.set) { |
- // The proposal says: desc.set.call(receiver, val) |
- %_CallFunction(receiver, val, desc.set) |
- return true |
- } else { |
- return false |
- } |
- } |
- } |
- desc = this.getPropertyDescriptor(name) |
- if (desc) { |
- if ('writable' in desc) { |
- if (desc.writable) { |
- // fall through |
- } else { |
- return false |
- } |
- } else { // accessor |
- if (desc.set) { |
- // The proposal says: desc.set.call(receiver, val) |
- %_CallFunction(receiver, val, desc.set) |
- return true |
- } else { |
- return false |
- } |
- } |
- } |
- this.defineProperty(name, { |
- value: val, |
- writable: true, |
- enumerable: true, |
- configurable: true}); |
- return true; |
-} |
- |
-function DerivedHasTrap(name) { |
- return !!this.getPropertyDescriptor(name) |
-} |
- |
-function DerivedHasOwnTrap(name) { |
- return !!this.getOwnPropertyDescriptor(name) |
-} |
- |
-function DerivedKeysTrap() { |
- var names = this.getOwnPropertyNames() |
- var enumerableNames = [] |
- for (var i = 0, count = 0; i < names.length; ++i) { |
- var name = names[i] |
- if (IS_SYMBOL(name)) continue |
- var desc = this.getOwnPropertyDescriptor(TO_STRING(name)) |
- if (!IS_UNDEFINED(desc) && desc.enumerable) { |
- enumerableNames[count++] = names[i] |
- } |
- } |
- return enumerableNames |
-} |
- |
-function DerivedEnumerateTrap() { |
- var names = this.getPropertyNames() |
- var enumerableNames = [] |
- for (var i = 0, count = 0; i < names.length; ++i) { |
- var name = names[i] |
- if (IS_SYMBOL(name)) continue |
- var desc = this.getPropertyDescriptor(TO_STRING(name)) |
- if (!IS_UNDEFINED(desc)) { |
- if (!desc.configurable) { |
- throw MakeTypeError(kProxyPropNotConfigurable, |
- this, name, "getPropertyDescriptor") |
- } |
- if (desc.enumerable) enumerableNames[count++] = names[i] |
- } |
- } |
- return enumerableNames |
-} |
- |
-function ProxyEnumerate(proxy) { |
- var handler = %GetHandler(proxy) |
- if (IS_UNDEFINED(handler.enumerate)) { |
- return %Apply(DerivedEnumerateTrap, handler, [], 0, 0) |
- } else { |
- return ToNameArray(handler.enumerate(), "enumerate", false) |
- } |
-} |
- |
-//------------------------------------------------------------------- |
- |
-var Proxy = new GlobalObject(); |
-%AddNamedProperty(global, "Proxy", Proxy, DONT_ENUM); |
- |
-//Set up non-enumerable properties of the Proxy object. |
-utils.InstallFunctions(Proxy, DONT_ENUM, [ |
- "create", ProxyCreate, |
- "createFunction", ProxyCreateFunction |
-]) |
- |
-// ------------------------------------------------------------------- |
-// Exports |
- |
-utils.Export(function(to) { |
- to.ProxyDelegateCallAndConstruct = DelegateCallAndConstruct; |
- to.ProxyDerivedHasOwnTrap = DerivedHasOwnTrap; |
- to.ProxyDerivedKeysTrap = DerivedKeysTrap; |
-}); |
- |
-%InstallToContext([ |
- "derived_get_trap", DerivedGetTrap, |
- "derived_has_trap", DerivedHasTrap, |
- "derived_set_trap", DerivedSetTrap, |
- "proxy_enumerate", ProxyEnumerate, |
-]); |
- |
-}) |