Commit aa4ad8ca authored by yangguo's avatar yangguo Committed by Commit bot

Do not export natives to runtime via js builtins object.

Using a temporary container object instead.

R=jkummerow@chromium.org

Review URL: https://codereview.chromium.org/1293493003

Cr-Commit-Position: refs/heads/master@{#30175}
parent c69e2eae
...@@ -164,4 +164,8 @@ utils.Export(function(to) { ...@@ -164,4 +164,8 @@ utils.Export(function(to) {
$arrayValues = ArrayValues; $arrayValues = ArrayValues;
utils.ExportToRuntime(function(to) {
to.ArrayValues = ArrayValues;
});
}) })
This diff is collapsed.
...@@ -118,6 +118,10 @@ class Bootstrapper final { ...@@ -118,6 +118,10 @@ class Bootstrapper final {
static bool CompileCodeStubBuiltin(Isolate* isolate, int index); static bool CompileCodeStubBuiltin(Isolate* isolate, int index);
static bool InstallCodeStubNatives(Isolate* isolate); static bool InstallCodeStubNatives(Isolate* isolate);
static void ImportNatives(Isolate* isolate, Handle<JSObject> container);
static void ImportExperimentalNatives(Isolate* isolate,
Handle<JSObject> container);
private: private:
Isolate* isolate_; Isolate* isolate_;
typedef int NestingCounterType; typedef int NestingCounterType;
......
...@@ -4,14 +4,6 @@ ...@@ -4,14 +4,6 @@
var $getHash; var $getHash;
var $getExistingHash; var $getExistingHash;
var $mapSet;
var $mapHas;
var $mapDelete;
var $setAdd;
var $setHas;
var $setDelete;
var $mapFromArray;
var $setFromArray;
(function(global, utils) { (function(global, utils) {
"use strict"; "use strict";
...@@ -487,15 +479,8 @@ utils.InstallFunctions(GlobalMap.prototype, DONT_ENUM, [ ...@@ -487,15 +479,8 @@ utils.InstallFunctions(GlobalMap.prototype, DONT_ENUM, [
// Expose to the global scope. // Expose to the global scope.
$getHash = GetHash; $getHash = GetHash;
$getExistingHash = GetExistingHash; $getExistingHash = GetExistingHash;
$mapGet = MapGet;
$mapSet = MapSet; function MapFromArray(array) {
$mapHas = MapHas;
$mapDelete = MapDelete;
$setAdd = SetAdd;
$setHas = SetHas;
$setDelete = SetDelete;
$mapFromArray = function(array) {
var map = new GlobalMap; var map = new GlobalMap;
var length = array.length; var length = array.length;
for (var i = 0; i < length; i += 2) { for (var i = 0; i < length; i += 2) {
...@@ -506,7 +491,7 @@ $mapFromArray = function(array) { ...@@ -506,7 +491,7 @@ $mapFromArray = function(array) {
return map; return map;
}; };
$setFromArray = function(array) { function SetFromArray(array) {
var set = new GlobalSet; var set = new GlobalSet;
var length = array.length; var length = array.length;
for (var i = 0; i < length; ++i) { for (var i = 0; i < length; ++i) {
...@@ -515,4 +500,19 @@ $setFromArray = function(array) { ...@@ -515,4 +500,19 @@ $setFromArray = function(array) {
return set; return set;
}; };
// -----------------------------------------------------------------------
// Exports
utils.ExportToRuntime(function(to) {
to.MapGet = MapGet;
to.MapSet = MapSet;
to.MapHas = MapHas;
to.MapDelete = MapDelete;
to.SetAdd = SetAdd;
to.SetHas = SetHas;
to.SetDelete = SetDelete;
to.MapFromArray = MapFromArray;
to.SetFromArray = SetFromArray;
});
}) })
...@@ -880,7 +880,8 @@ utils.InstallFunctions(GlobalDate.prototype, DONT_ENUM, [ ...@@ -880,7 +880,8 @@ utils.InstallFunctions(GlobalDate.prototype, DONT_ENUM, [
"toJSON", DateToJSON "toJSON", DateToJSON
]); ]);
// Expose to the global scope. utils.ExportToRuntime(function(to) {
$createDate = CreateDate; to.CreateDate = CreateDate;
});
}) })
...@@ -1015,7 +1015,6 @@ utils.InstallFunctions(GlobalError.prototype, DONT_ENUM, ...@@ -1015,7 +1015,6 @@ utils.InstallFunctions(GlobalError.prototype, DONT_ENUM,
['toString', ErrorToString]); ['toString', ErrorToString]);
$errorToString = ErrorToString; $errorToString = ErrorToString;
$getStackTraceLine = GetStackTraceLine;
$messageGetPositionInLine = GetPositionInLine; $messageGetPositionInLine = GetPositionInLine;
$messageGetLineNumber = GetLineNumber; $messageGetLineNumber = GetLineNumber;
$messageGetSourceLine = GetSourceLine; $messageGetSourceLine = GetSourceLine;
...@@ -1076,4 +1075,8 @@ captureStackTrace = function captureStackTrace(obj, cons_opt) { ...@@ -1076,4 +1075,8 @@ captureStackTrace = function captureStackTrace(obj, cons_opt) {
GlobalError.captureStackTrace = captureStackTrace; GlobalError.captureStackTrace = captureStackTrace;
utils.ExportToRuntime(function(to) {
to.GetStackTraceLine = GetStackTraceLine;
});
}); });
...@@ -2,13 +2,9 @@ ...@@ -2,13 +2,9 @@
// 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 $observeNotifyChange;
var $observeEnqueueSpliceRecord; var $observeEnqueueSpliceRecord;
var $observeBeginPerformSplice; var $observeBeginPerformSplice;
var $observeEndPerformSplice; var $observeEndPerformSplice;
var $observeNativeObjectObserve;
var $observeNativeObjectGetNotifier;
var $observeNativeObjectNotifierPerformChange;
var $observeObjectMethods; var $observeObjectMethods;
var $observeArrayMethods; var $observeArrayMethods;
...@@ -703,12 +699,19 @@ var removePrototypeFn = function(f, i) { ...@@ -703,12 +699,19 @@ var removePrototypeFn = function(f, i) {
$observeObjectMethods.forEach(removePrototypeFn); $observeObjectMethods.forEach(removePrototypeFn);
$observeArrayMethods.forEach(removePrototypeFn); $observeArrayMethods.forEach(removePrototypeFn);
$observeNotifyChange = NotifyChange;
$observeEnqueueSpliceRecord = EnqueueSpliceRecord; $observeEnqueueSpliceRecord = EnqueueSpliceRecord;
$observeBeginPerformSplice = BeginPerformSplice; $observeBeginPerformSplice = BeginPerformSplice;
$observeEndPerformSplice = EndPerformSplice; $observeEndPerformSplice = EndPerformSplice;
$observeNativeObjectObserve = NativeObjectObserve;
$observeNativeObjectGetNotifier = NativeObjectGetNotifier; utils.ExportToRuntime(function(to) {
$observeNativeObjectNotifierPerformChange = NativeObjectNotifierPerformChange; to.ObserveNotifyChange = NotifyChange;
to.ObserveEnqueueSpliceRecord = EnqueueSpliceRecord;
to.ObserveBeginPerformSplice = BeginPerformSplice;
to.ObserveEndPerformSplice = EndPerformSplice;
to.ObserveNativeObjectObserve = NativeObjectObserve;
to.ObserveNativeObjectGetNotifier = NativeObjectGetNotifier;
to.ObserveNativeObjectNotifierPerformChange =
NativeObjectNotifierPerformChange;
});
}) })
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
var imports = UNDEFINED; var imports = UNDEFINED;
var exports = UNDEFINED; var exports = UNDEFINED;
var imports_from_experimental = UNDEFINED; var imports_from_experimental = UNDEFINED;
var exports_to_runtime = UNDEFINED;
// Export to other scripts. // Export to other scripts.
// In normal natives, this exports functions to other normal natives. // In normal natives, this exports functions to other normal natives.
...@@ -26,6 +26,12 @@ function Export(f) { ...@@ -26,6 +26,12 @@ function Export(f) {
}; };
// Export to the native context for calls from the runtime.
function ExportToRuntime(f) {
f.next = exports_to_runtime;
exports_to_runtime = f;
}
// Import from other scripts. // Import from other scripts.
// In normal natives, this imports from other normal natives. // In normal natives, this imports from other normal natives.
// In experimental natives, this imports from other experimental natives and // In experimental natives, this imports from other experimental natives and
...@@ -152,6 +158,13 @@ function PostNatives(utils) { ...@@ -152,6 +158,13 @@ function PostNatives(utils) {
for ( ; !IS_UNDEFINED(exports); exports = exports.next) exports(container); for ( ; !IS_UNDEFINED(exports); exports = exports.next) exports(container);
for ( ; !IS_UNDEFINED(imports); imports = imports.next) imports(container); for ( ; !IS_UNDEFINED(imports); imports = imports.next) imports(container);
var runtime_container = {};
for ( ; !IS_UNDEFINED(exports_to_runtime);
exports_to_runtime = exports_to_runtime.next) {
exports_to_runtime(runtime_container);
}
%ImportToRuntime(runtime_container);
// Whitelist of exports from normal natives to experimental natives. // Whitelist of exports from normal natives to experimental natives.
var expose_to_experimental = [ var expose_to_experimental = [
"ArrayToString", "ArrayToString",
...@@ -205,6 +218,12 @@ function PostExperimentals(utils) { ...@@ -205,6 +218,12 @@ function PostExperimentals(utils) {
imports_from_experimental = imports_from_experimental.next) { imports_from_experimental = imports_from_experimental.next) {
imports_from_experimental(experimental_exports); imports_from_experimental(experimental_exports);
} }
var runtime_container = {};
for ( ; !IS_UNDEFINED(exports_to_runtime);
exports_to_runtime = exports_to_runtime.next) {
exports_to_runtime(runtime_container);
}
%ImportExperimentalToRuntime(runtime_container);
experimental_exports = UNDEFINED; experimental_exports = UNDEFINED;
...@@ -234,6 +253,7 @@ function PostDebug(utils) { ...@@ -234,6 +253,7 @@ function PostDebug(utils) {
InstallFunctions(utils, NONE, [ InstallFunctions(utils, NONE, [
"Import", Import, "Import", Import,
"Export", Export, "Export", Export,
"ExportToRuntime", ExportToRuntime,
"ImportFromExperimental", ImportFromExperimental, "ImportFromExperimental", ImportFromExperimental,
"SetFunctionName", SetFunctionName, "SetFunctionName", SetFunctionName,
"InstallConstants", InstallConstants, "InstallConstants", InstallConstants,
...@@ -246,4 +266,13 @@ InstallFunctions(utils, NONE, [ ...@@ -246,4 +266,13 @@ InstallFunctions(utils, NONE, [
"PostDebug", PostDebug, "PostDebug", PostDebug,
]); ]);
// TODO(yangguo): run prologue.js before runtime.js
ExportToRuntime(function(to) {
to.ToNumber = $toNumber;
to.ToString = $toString;
to.ToDetailString = $toDetailString;
to.ToInteger = $toInteger;
to.ToLength = $toLength;
});
}) })
...@@ -2,12 +2,6 @@ ...@@ -2,12 +2,6 @@
// 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 $promiseCreate;
var $promiseResolve;
var $promiseReject;
var $promiseChain;
var $promiseCatch;
var $promiseThen;
var $promiseHasUserDefinedRejectHandler; var $promiseHasUserDefinedRejectHandler;
var $promiseStatus; var $promiseStatus;
var $promiseValue; var $promiseValue;
...@@ -386,14 +380,19 @@ utils.InstallFunctions(GlobalPromise.prototype, DONT_ENUM, [ ...@@ -386,14 +380,19 @@ utils.InstallFunctions(GlobalPromise.prototype, DONT_ENUM, [
"catch", PromiseCatch "catch", PromiseCatch
]); ]);
$promiseCreate = PromiseCreate;
$promiseResolve = PromiseResolve;
$promiseReject = PromiseReject;
$promiseChain = PromiseChain;
$promiseCatch = PromiseCatch;
$promiseThen = PromiseThen;
$promiseHasUserDefinedRejectHandler = PromiseHasUserDefinedRejectHandler; $promiseHasUserDefinedRejectHandler = PromiseHasUserDefinedRejectHandler;
$promiseStatus = promiseStatus; $promiseStatus = promiseStatus;
$promiseValue = promiseValue; $promiseValue = promiseValue;
utils.ExportToRuntime(function(to) {
to.promiseStatus = promiseStatus;
to.promiseValue = promiseValue;
to.PromiseCreate = PromiseCreate;
to.PromiseResolve = PromiseResolve;
to.PromiseReject = PromiseReject;
to.PromiseChain = PromiseChain;
to.PromiseCatch = PromiseCatch;
to.PromiseThen = PromiseThen;
});
}) })
...@@ -2,11 +2,6 @@ ...@@ -2,11 +2,6 @@
// 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 $proxyDerivedGetTrap;
var $proxyDerivedHasTrap;
var $proxyDerivedSetTrap;
var $proxyEnumerate;
(function(global, utils) { (function(global, utils) {
"use strict"; "use strict";
...@@ -199,15 +194,17 @@ utils.InstallFunctions(Proxy, DONT_ENUM, [ ...@@ -199,15 +194,17 @@ utils.InstallFunctions(Proxy, DONT_ENUM, [
// ------------------------------------------------------------------- // -------------------------------------------------------------------
// Exports // Exports
$proxyDerivedGetTrap = DerivedGetTrap;
$proxyDerivedHasTrap = DerivedHasTrap;
$proxyDerivedSetTrap = DerivedSetTrap;
$proxyEnumerate = ProxyEnumerate;
utils.Export(function(to) { utils.Export(function(to) {
to.ProxyDelegateCallAndConstruct = DelegateCallAndConstruct; to.ProxyDelegateCallAndConstruct = DelegateCallAndConstruct;
to.ProxyDerivedHasOwnTrap = DerivedHasOwnTrap; to.ProxyDerivedHasOwnTrap = DerivedHasOwnTrap;
to.ProxyDerivedKeysTrap = DerivedKeysTrap; to.ProxyDerivedKeysTrap = DerivedKeysTrap;
}); });
utils.ExportToRuntime(function(to) {
to.ProxyDerivedGetTrap = DerivedGetTrap;
to.ProxyDerivedHasTrap = DerivedHasTrap;
to.ProxyDerivedSetTrap = DerivedSetTrap;
to.ProxyEnumerate = ProxyEnumerate;
});
}) })
...@@ -915,7 +915,7 @@ function ToPositiveInteger(x, rangeErrorIndex) { ...@@ -915,7 +915,7 @@ function ToPositiveInteger(x, rangeErrorIndex) {
// boilerplate gets the right prototype. // boilerplate gets the right prototype.
%FunctionSetPrototype(GlobalArray, new GlobalArray(0)); %FunctionSetPrototype(GlobalArray, new GlobalArray(0));
//---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
$concatIterableToArray = ConcatIterableToArray; $concatIterableToArray = ConcatIterableToArray;
$defaultNumber = DefaultNumber; $defaultNumber = DefaultNumber;
......
...@@ -24,6 +24,26 @@ RUNTIME_FUNCTION(Runtime_CheckIsBootstrapping) { ...@@ -24,6 +24,26 @@ RUNTIME_FUNCTION(Runtime_CheckIsBootstrapping) {
} }
RUNTIME_FUNCTION(Runtime_ImportToRuntime) {
HandleScope scope(isolate);
DCHECK(args.length() == 1);
CONVERT_ARG_HANDLE_CHECKED(JSObject, container, 0);
RUNTIME_ASSERT(isolate->bootstrapper()->IsActive());
Bootstrapper::ImportNatives(isolate, container);
return isolate->heap()->undefined_value();
}
RUNTIME_FUNCTION(Runtime_ImportExperimentalToRuntime) {
HandleScope scope(isolate);
DCHECK(args.length() == 1);
CONVERT_ARG_HANDLE_CHECKED(JSObject, container, 0);
RUNTIME_ASSERT(isolate->bootstrapper()->IsActive());
Bootstrapper::ImportExperimentalNatives(isolate, container);
return isolate->heap()->undefined_value();
}
RUNTIME_FUNCTION(Runtime_Throw) { RUNTIME_FUNCTION(Runtime_Throw) {
HandleScope scope(isolate); HandleScope scope(isolate);
DCHECK(args.length() == 1); DCHECK(args.length() == 1);
......
...@@ -301,6 +301,8 @@ namespace internal { ...@@ -301,6 +301,8 @@ namespace internal {
#define FOR_EACH_INTRINSIC_INTERNAL(F) \ #define FOR_EACH_INTRINSIC_INTERNAL(F) \
F(CheckIsBootstrapping, 0, 1) \ F(CheckIsBootstrapping, 0, 1) \
F(ImportToRuntime, 1, 1) \
F(ImportExperimentalToRuntime, 1, 1) \
F(Throw, 1, 1) \ F(Throw, 1, 1) \
F(ReThrow, 1, 1) \ F(ReThrow, 1, 1) \
F(UnwindAndFindExceptionHandler, 0, 1) \ F(UnwindAndFindExceptionHandler, 0, 1) \
......
...@@ -3,10 +3,8 @@ ...@@ -3,10 +3,8 @@
// found in the LICENSE file. // found in the LICENSE file.
var $functionSourceString; var $functionSourceString;
var $globalEval;
var $objectDefineOwnProperty; var $objectDefineOwnProperty;
var $objectGetOwnPropertyDescriptor; var $objectGetOwnPropertyDescriptor;
var $toCompletePropertyDescriptor;
(function(global, utils) { (function(global, utils) {
...@@ -1787,10 +1785,8 @@ function GetIterator(obj, method) { ...@@ -1787,10 +1785,8 @@ function GetIterator(obj, method) {
// Exports // Exports
$functionSourceString = FunctionSourceString; $functionSourceString = FunctionSourceString;
$globalEval = GlobalEval;
$objectDefineOwnProperty = DefineOwnPropertyFromAPI; $objectDefineOwnProperty = DefineOwnPropertyFromAPI;
$objectGetOwnPropertyDescriptor = ObjectGetOwnPropertyDescriptor; $objectGetOwnPropertyDescriptor = ObjectGetOwnPropertyDescriptor;
$toCompletePropertyDescriptor = ToCompletePropertyDescriptor;
utils.ObjectDefineProperties = ObjectDefineProperties; utils.ObjectDefineProperties = ObjectDefineProperties;
utils.ObjectDefineProperty = ObjectDefineProperty; utils.ObjectDefineProperty = ObjectDefineProperty;
...@@ -1814,4 +1810,9 @@ utils.Export(function(to) { ...@@ -1814,4 +1810,9 @@ utils.Export(function(to) {
to.ToNameArray = ToNameArray; to.ToNameArray = ToNameArray;
}); });
utils.ExportToRuntime(function(to) {
to.GlobalEval = GlobalEval;
to.ToCompletePropertyDescriptor = ToCompletePropertyDescriptor;
});
}) })
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment