Add option to disable "acceleration" of require calls.

Summary:
Fixes #986
Closes https://github.com/facebook/prepack/pull/1283

Reviewed By: NTillmann

Differential Revision: D6638592

Pulled By: lukas1994

fbshipit-source-id: d964dc1f8611a9b95aa334e11506fc637705671f
This commit is contained in:
Lukas Koebis 2017-12-27 10:01:51 -08:00 committed by Facebook Github Bot
parent 7b3d0dba83
commit 838d0cdc4a
6 changed files with 13 additions and 2 deletions

View File

@ -79,6 +79,7 @@ function runTest(name: string, code: string): boolean {
internalDebug: true,
compatibility: "jsc-600-1-4-17",
delayUnsupportedRequires: true,
accelerateUnsupportedRequires: true,
mathRandomSeed: "0",
errorHandler,
serialize: true,

View File

@ -37,6 +37,7 @@ export type SerializerOptions = {
lazyObjectsRuntime?: string,
delayInitializations?: boolean,
delayUnsupportedRequires?: boolean,
accelerateUnsupportedRequires?: boolean,
initializeMoreModules?: boolean,
internalDebug?: boolean,
debugScopes?: boolean,

View File

@ -93,6 +93,7 @@ function run(
logModules: false,
delayInitializations: false,
delayUnsupportedRequires: false,
accelerateUnsupportedRequires: true,
internalDebug: false,
debugScopes: false,
serialize: false,

View File

@ -24,6 +24,7 @@ export type PrepackOptions = {|
debugNames?: boolean,
delayInitializations?: boolean,
delayUnsupportedRequires?: boolean,
accelerateUnsupportedRequires?: boolean,
inputSourceMapFilename?: string,
internalDebug?: boolean,
debugScopes?: boolean,
@ -92,6 +93,7 @@ export function getSerializerOptions({
heapGraphFilePath,
delayInitializations = false,
delayUnsupportedRequires = false,
accelerateUnsupportedRequires = true,
internalDebug = false,
debugScopes = false,
logStatistics = false,
@ -105,6 +107,7 @@ export function getSerializerOptions({
let result: SerializerOptions = {
delayInitializations,
delayUnsupportedRequires,
accelerateUnsupportedRequires,
initializeMoreModules,
internalDebug,
debugScopes,

View File

@ -188,6 +188,7 @@ export class ModuleTracer extends Tracer {
`accelerated initialization of conditional module ${nestedModuleId} as it's required in an evaluate-for-effects context by module ${moduleIdValue}`
);
if (
this.modules.accelerateUnsupportedRequires &&
nestedEffects !== undefined &&
nestedEffects[0] instanceof Value &&
this.modules.isModuleInitialized(nestedModuleId)
@ -288,7 +289,8 @@ export class Modules {
logger: Logger,
statistics: SerializerStatistics,
logModules: boolean,
delayUnsupportedRequires: boolean
delayUnsupportedRequires: boolean,
accelerateUnsupportedRequires: boolean
) {
this.realm = realm;
this.logger = logger;
@ -299,6 +301,7 @@ export class Modules {
this.initializedModules = new Map();
realm.tracers.push((this.moduleTracer = new ModuleTracer(this, statistics, logModules)));
this.delayUnsupportedRequires = delayUnsupportedRequires;
this.accelerateUnsupportedRequires = accelerateUnsupportedRequires;
this.disallowDelayingRequiresOverride = false;
}
@ -311,6 +314,7 @@ export class Modules {
initializedModules: Map<number | string, Value>;
active: boolean;
delayUnsupportedRequires: boolean;
accelerateUnsupportedRequires: boolean;
disallowDelayingRequiresOverride: boolean;
moduleTracer: ModuleTracer;

View File

@ -47,7 +47,8 @@ export class Serializer {
this.logger,
this.statistics,
!!serializerOptions.logModules,
!!serializerOptions.delayUnsupportedRequires
!!serializerOptions.delayUnsupportedRequires,
!!serializerOptions.accelerateUnsupportedRequires
);
this.functions = new Functions(this.realm, serializerOptions.additionalFunctions, this.modules.moduleTracer);
if (serializerOptions.trace) this.realm.tracers.push(new LoggingTracer(this.realm));