diff options
Diffstat (limited to 'src/proxy.js')
-rw-r--r-- | src/proxy.js | 53 |
1 files changed, 4 insertions, 49 deletions
diff --git a/src/proxy.js b/src/proxy.js index 4e86c889..4e44cd4e 100644 --- a/src/proxy.js +++ b/src/proxy.js @@ -25,8 +25,6 @@ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -"use strict"; - global.Proxy = new $Object(); var $Proxy = global.Proxy @@ -34,10 +32,7 @@ var $Proxy = global.Proxy $Proxy.create = function(handler, proto) { if (!IS_SPEC_OBJECT(handler)) throw MakeTypeError("handler_non_object", ["create"]) - if (IS_UNDEFINED(proto)) - proto = null - else if (!(IS_SPEC_OBJECT(proto) || proto === null)) - throw MakeTypeError("proto_non_object", ["create"]) + if (!IS_SPEC_OBJECT(proto)) proto = null // Mozilla does this... return %CreateJSProxy(handler, proto) } @@ -47,14 +42,8 @@ $Proxy.createFunction = function(handler, callTrap, constructTrap) { if (!IS_SPEC_FUNCTION(callTrap)) throw MakeTypeError("trap_function_expected", ["createFunction", "call"]) if (IS_UNDEFINED(constructTrap)) { - constructTrap = DerivedConstructTrap(callTrap) - } else if (IS_SPEC_FUNCTION(constructTrap)) { - // Make sure the trap receives 'undefined' as this. - var construct = constructTrap - constructTrap = function() { - return %Apply(construct, void 0, arguments, 0, %_ArgumentsLength()); - } - } else { + constructTrap = callTrap + } else if (!IS_SPEC_FUNCTION(constructTrap)) { throw MakeTypeError("trap_function_expected", ["createFunction", "construct"]) } @@ -68,17 +57,6 @@ $Proxy.createFunction = function(handler, callTrap, constructTrap) { // Builtins //////////////////////////////////////////////////////////////////////////////// -function DerivedConstructTrap(callTrap) { - return function() { - var proto = this.prototype - if (!IS_SPEC_OBJECT(proto)) proto = $Object.prototype - var obj = new $Object() - 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, @@ -158,32 +136,9 @@ function DerivedKeysTrap() { var enumerableNames = [] for (var i = 0, count = 0; i < names.length; ++i) { var name = names[i] - var desc = this.getOwnPropertyDescriptor(TO_STRING_INLINE(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] - var desc = this.getPropertyDescriptor(TO_STRING_INLINE(name)) - if (!IS_UNDEFINED(desc) && desc.enumerable) { + if (this.getOwnPropertyDescriptor(TO_STRING_INLINE(name)).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 ToStringArray(handler.enumerate(), "enumerate") - } -} |