Wrap proxy.js in a function.
Review URL: https://codereview.chromium.org/1075773003 Cr-Commit-Position: refs/heads/master@{#27746}
This commit is contained in:
parent
c1f28b6c10
commit
7667d19eec
@ -1572,10 +1572,10 @@ void Genesis::InstallNativeFunctions() {
|
|||||||
|
|
||||||
void Genesis::InstallExperimentalNativeFunctions() {
|
void Genesis::InstallExperimentalNativeFunctions() {
|
||||||
if (FLAG_harmony_proxies) {
|
if (FLAG_harmony_proxies) {
|
||||||
INSTALL_NATIVE(JSFunction, "DerivedHasTrap", derived_has_trap);
|
INSTALL_NATIVE(JSFunction, "$proxyDerivedHasTrap", derived_has_trap);
|
||||||
INSTALL_NATIVE(JSFunction, "DerivedGetTrap", derived_get_trap);
|
INSTALL_NATIVE(JSFunction, "$proxyDerivedGetTrap", derived_get_trap);
|
||||||
INSTALL_NATIVE(JSFunction, "DerivedSetTrap", derived_set_trap);
|
INSTALL_NATIVE(JSFunction, "$proxyDerivedSetTrap", derived_set_trap);
|
||||||
INSTALL_NATIVE(JSFunction, "ProxyEnumerate", proxy_enumerate);
|
INSTALL_NATIVE(JSFunction, "$proxyEnumerate", proxy_enumerate);
|
||||||
}
|
}
|
||||||
|
|
||||||
#define INSTALL_NATIVE_FUNCTIONS_FOR(id, descr) InstallNativeFunctions_##id();
|
#define INSTALL_NATIVE_FUNCTIONS_FOR(id, descr) InstallNativeFunctions_##id();
|
||||||
@ -1662,10 +1662,10 @@ EMPTY_NATIVE_FUNCTIONS_FOR_FEATURE(harmony_spreadcalls)
|
|||||||
|
|
||||||
void Genesis::InstallNativeFunctions_harmony_proxies() {
|
void Genesis::InstallNativeFunctions_harmony_proxies() {
|
||||||
if (FLAG_harmony_proxies) {
|
if (FLAG_harmony_proxies) {
|
||||||
INSTALL_NATIVE(JSFunction, "DerivedHasTrap", derived_has_trap);
|
INSTALL_NATIVE(JSFunction, "$proxyDerivedHasTrap", derived_has_trap);
|
||||||
INSTALL_NATIVE(JSFunction, "DerivedGetTrap", derived_get_trap);
|
INSTALL_NATIVE(JSFunction, "$proxyDerivedGetTrap", derived_get_trap);
|
||||||
INSTALL_NATIVE(JSFunction, "DerivedSetTrap", derived_set_trap);
|
INSTALL_NATIVE(JSFunction, "$proxyDerivedSetTrap", derived_set_trap);
|
||||||
INSTALL_NATIVE(JSFunction, "ProxyEnumerate", proxy_enumerate);
|
INSTALL_NATIVE(JSFunction, "$proxyEnumerate", proxy_enumerate);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
56
src/proxy.js
56
src/proxy.js
@ -2,13 +2,21 @@
|
|||||||
// Use of this source code is governed by a BSD-style license that can be
|
// Use of this source code is governed by a BSD-style license that can be
|
||||||
// found in the LICENSE file.
|
// found in the LICENSE file.
|
||||||
|
|
||||||
|
var $proxyDelegateCallAndConstruct;
|
||||||
|
var $proxyDerivedGetTrap;
|
||||||
|
var $proxyDerivedHasTrap;
|
||||||
|
var $proxyDerivedHasOwnTrap;
|
||||||
|
var $proxyDerivedKeysTrap;
|
||||||
|
var $proxyDerivedSetTrap;
|
||||||
|
var $proxyEnumerate;
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
// This file relies on the fact that the following declaration has been made
|
%CheckIsBootstrapping();
|
||||||
// in runtime.js:
|
|
||||||
// var $Object = global.Object;
|
|
||||||
|
|
||||||
var $Proxy = new $Object();
|
var GlobalObject = global.Object;
|
||||||
|
|
||||||
// -------------------------------------------------------------------
|
// -------------------------------------------------------------------
|
||||||
|
|
||||||
@ -43,25 +51,6 @@ function ProxyCreateFunction(handler, callTrap, constructTrap) {
|
|||||||
handler, callTrap, constructTrap, $Function.prototype)
|
handler, callTrap, constructTrap, $Function.prototype)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// -------------------------------------------------------------------
|
|
||||||
|
|
||||||
function SetUpProxy() {
|
|
||||||
%CheckIsBootstrapping()
|
|
||||||
|
|
||||||
var global_proxy = %GlobalProxy(global);
|
|
||||||
global_proxy.Proxy = $Proxy;
|
|
||||||
|
|
||||||
// Set up non-enumerable properties of the Proxy object.
|
|
||||||
InstallFunctions($Proxy, DONT_ENUM, [
|
|
||||||
"create", ProxyCreate,
|
|
||||||
"createFunction", ProxyCreateFunction
|
|
||||||
])
|
|
||||||
}
|
|
||||||
|
|
||||||
SetUpProxy();
|
|
||||||
|
|
||||||
|
|
||||||
// -------------------------------------------------------------------
|
// -------------------------------------------------------------------
|
||||||
// Proxy Builtins
|
// Proxy Builtins
|
||||||
|
|
||||||
@ -189,3 +178,24 @@ function ProxyEnumerate(proxy) {
|
|||||||
return ToNameArray(handler.enumerate(), "enumerate", false)
|
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.
|
||||||
|
InstallFunctions(Proxy, DONT_ENUM, [
|
||||||
|
"create", ProxyCreate,
|
||||||
|
"createFunction", ProxyCreateFunction
|
||||||
|
])
|
||||||
|
|
||||||
|
$proxyDelegateCallAndConstruct = DelegateCallAndConstruct;
|
||||||
|
$proxyDerivedGetTrap = DerivedGetTrap;
|
||||||
|
$proxyDerivedHasTrap = DerivedHasTrap;
|
||||||
|
$proxyDerivedHasOwnTrap = DerivedHasOwnTrap;
|
||||||
|
$proxyDerivedKeysTrap = DerivedKeysTrap;
|
||||||
|
$proxyDerivedSetTrap = DerivedSetTrap;
|
||||||
|
$proxyEnumerate = ProxyEnumerate;
|
||||||
|
|
||||||
|
})();
|
||||||
|
@ -266,7 +266,7 @@ function ObjectHasOwnProperty(V) {
|
|||||||
if (IS_SYMBOL(V)) return false;
|
if (IS_SYMBOL(V)) return false;
|
||||||
|
|
||||||
var handler = %GetHandler(this);
|
var handler = %GetHandler(this);
|
||||||
return CallTrap1(handler, "hasOwn", DerivedHasOwnTrap, ToName(V));
|
return CallTrap1(handler, "hasOwn", $proxyDerivedHasOwnTrap, ToName(V));
|
||||||
}
|
}
|
||||||
return %HasOwnProperty(TO_OBJECT_INLINE(this), ToName(V));
|
return %HasOwnProperty(TO_OBJECT_INLINE(this), ToName(V));
|
||||||
}
|
}
|
||||||
@ -351,7 +351,7 @@ function ObjectKeys(obj) {
|
|||||||
obj = TO_OBJECT_INLINE(obj);
|
obj = TO_OBJECT_INLINE(obj);
|
||||||
if (%_IsJSProxy(obj)) {
|
if (%_IsJSProxy(obj)) {
|
||||||
var handler = %GetHandler(obj);
|
var handler = %GetHandler(obj);
|
||||||
var names = CallTrap0(handler, "keys", DerivedKeysTrap);
|
var names = CallTrap0(handler, "keys", $proxyDerivedKeysTrap);
|
||||||
return ToNameArray(names, "keys", false);
|
return ToNameArray(names, "keys", false);
|
||||||
}
|
}
|
||||||
return %OwnKeys(obj);
|
return %OwnKeys(obj);
|
||||||
@ -1238,7 +1238,7 @@ function ProxyFix(obj) {
|
|||||||
if (%IsJSFunctionProxy(obj)) {
|
if (%IsJSFunctionProxy(obj)) {
|
||||||
var callTrap = %GetCallTrap(obj);
|
var callTrap = %GetCallTrap(obj);
|
||||||
var constructTrap = %GetConstructTrap(obj);
|
var constructTrap = %GetConstructTrap(obj);
|
||||||
var code = DelegateCallAndConstruct(callTrap, constructTrap);
|
var code = $proxyDelegateCallAndConstruct(callTrap, constructTrap);
|
||||||
%Fix(obj); // becomes a regular function
|
%Fix(obj); // becomes a regular function
|
||||||
%SetCode(obj, code);
|
%SetCode(obj, code);
|
||||||
// TODO(rossberg): What about length and other properties? Not specified.
|
// TODO(rossberg): What about length and other properties? Not specified.
|
||||||
|
Loading…
Reference in New Issue
Block a user