| Index: src/js/prologue.js
|
| diff --git a/src/js/prologue.js b/src/js/prologue.js
|
| index 59949344656b14a13069ff1f44cb05da9add3eb7..4b40d9a0fd0f289bb58db9e94c56bd75e496df0c 100644
|
| --- a/src/js/prologue.js
|
| +++ b/src/js/prologue.js
|
| @@ -12,18 +12,33 @@
|
| // Utils
|
|
|
| var imports = UNDEFINED;
|
| +var imports_from_experimental = UNDEFINED;
|
| var exports_container = %ExportFromRuntime({});
|
| +var typed_array_setup = UNDEFINED;
|
| +
|
| +// Register context value to be initialized with a typed array in
|
| +// Genesis::InitializeBuiltinTypedArrays.
|
| +function SetupTypedArray(f) {
|
| + f.next = typed_array_setup;
|
| + typed_array_setup = f;
|
| +}
|
|
|
| // Export to other scripts.
|
| +// In normal natives, this exports functions to other normal natives.
|
| +// In experimental natives, this exports to other experimental natives and
|
| +// to normal natives that import using utils.ImportFromExperimental.
|
| function Export(f) {
|
| f(exports_container);
|
| }
|
|
|
|
|
| -// Import from other scripts. The actual importing happens in PostNatives so
|
| -// that we can import from scripts executed later. However, that means that
|
| -// the import is not available until the very end. If the import needs to be
|
| -// available immediately, use ImportNow.
|
| +// Import from other scripts. The actual importing happens in PostNatives and
|
| +// PostExperimental so that we can import from scripts executed later. However,
|
| +// that means that the import is not available until the very end. If the
|
| +// import needs to be available immediate, use ImportNow.
|
| +// In normal natives, this imports from other normal natives.
|
| +// In experimental natives, this imports from other experimental natives and
|
| +// whitelisted exports from normal natives.
|
| function Import(f) {
|
| f.next = imports;
|
| imports = f;
|
| @@ -38,6 +53,14 @@ function ImportNow(name) {
|
| }
|
|
|
|
|
| +// In normal natives, import from experimental natives.
|
| +// Not callable from experimental natives.
|
| +function ImportFromExperimental(f) {
|
| + f.next = imports_from_experimental;
|
| + imports_from_experimental = f;
|
| +}
|
| +
|
| +
|
| function SetFunctionName(f, name, prefix) {
|
| if (IS_SYMBOL(name)) {
|
| name = "[" + %SymbolDescription(name) + "]";
|
| @@ -142,13 +165,82 @@ function PostNatives(utils) {
|
| imports(exports_container);
|
| }
|
|
|
| + // Whitelist of exports from normal natives to experimental natives and debug.
|
| + var expose_list = [
|
| + "FormatDateToParts",
|
| + "MapEntries",
|
| + "MapIteratorNext",
|
| + "MaxSimple",
|
| + "MinSimple",
|
| + "SetIteratorNext",
|
| + "SetValues",
|
| + "ToLocaleLowerCaseI18N",
|
| + "ToLocaleUpperCaseI18N",
|
| + "ToLowerCaseI18N",
|
| + "ToUpperCaseI18N",
|
| + // From runtime:
|
| + "promise_result_symbol",
|
| + "promise_state_symbol",
|
| + "reflect_apply",
|
| + "to_string_tag_symbol",
|
| + ];
|
| +
|
| + var filtered_exports = {};
|
| + %OptimizeObjectForAddingMultipleProperties(
|
| + filtered_exports, expose_list.length);
|
| + for (var key of expose_list) {
|
| + filtered_exports[key] = exports_container[key];
|
| + }
|
| + %ToFastProperties(filtered_exports);
|
| + exports_container = filtered_exports;
|
| +
|
| + utils.PostNatives = UNDEFINED;
|
| + utils.ImportFromExperimental = UNDEFINED;
|
| +}
|
| +
|
| +
|
| +function PostExperimentals(utils) {
|
| + %CheckIsBootstrapping();
|
| + for ( ; !IS_UNDEFINED(imports); imports = imports.next) {
|
| + imports(exports_container);
|
| + }
|
| + for ( ; !IS_UNDEFINED(imports_from_experimental);
|
| + imports_from_experimental = imports_from_experimental.next) {
|
| + imports_from_experimental(exports_container);
|
| + }
|
| +
|
| + utils.Export = UNDEFINED;
|
| + utils.PostDebug = UNDEFINED;
|
| + utils.PostExperimentals = UNDEFINED;
|
| + typed_array_setup = UNDEFINED;
|
| +}
|
| +
|
| +
|
| +function PostDebug(utils) {
|
| + for ( ; !IS_UNDEFINED(imports); imports = imports.next) {
|
| + imports(exports_container);
|
| + }
|
| +
|
| exports_container = UNDEFINED;
|
| +
|
| utils.Export = UNDEFINED;
|
| utils.Import = UNDEFINED;
|
| utils.ImportNow = UNDEFINED;
|
| - utils.PostNatives = UNDEFINED;
|
| + utils.PostDebug = UNDEFINED;
|
| + utils.PostExperimentals = UNDEFINED;
|
| + typed_array_setup = UNDEFINED;
|
| +}
|
| +
|
| +
|
| +function InitializeBuiltinTypedArrays(utils, rng_state, rempio2result) {
|
| + var setup_list = typed_array_setup;
|
| +
|
| + for ( ; !IS_UNDEFINED(setup_list); setup_list = setup_list.next) {
|
| + setup_list(rng_state, rempio2result);
|
| + }
|
| }
|
|
|
| +
|
| // -----------------------------------------------------------------------
|
|
|
| %OptimizeObjectForAddingMultipleProperties(utils, 14);
|
| @@ -156,6 +248,7 @@ function PostNatives(utils) {
|
| utils.Import = Import;
|
| utils.ImportNow = ImportNow;
|
| utils.Export = Export;
|
| +utils.ImportFromExperimental = ImportFromExperimental;
|
| utils.SetFunctionName = SetFunctionName;
|
| utils.InstallConstants = InstallConstants;
|
| utils.InstallFunctions = InstallFunctions;
|
| @@ -163,6 +256,8 @@ utils.InstallGetter = InstallGetter;
|
| utils.OverrideFunction = OverrideFunction;
|
| utils.SetUpLockedPrototype = SetUpLockedPrototype;
|
| utils.PostNatives = PostNatives;
|
| +utils.PostExperimentals = PostExperimentals;
|
| +utils.PostDebug = PostDebug;
|
|
|
| %ToFastProperties(utils);
|
|
|
|
|