Add methods for disabling and enabling compiler

This commit is contained in:
Thomas Weber committed 2020-07-25 17:29:15 -05:00
1 parent 594ab8348c
commit a11554dd79
2 files changed
+49 -8

No files matched your search

+39 -8
View File
@@ -392,6 +392,11 @@ class Runtime extends EventEmitter {
* @type {function}
*/
this.removeCloudVariable = this._initializeRemoveCloudVariable(newCloudDataManager);
/**
* Whether the script compiler is enabled.
*/
this.compilerEnabled = true;
}
/**
@@ -483,6 +488,22 @@ class Runtime extends EventEmitter {
return 'COMPATIBILITY_MODE_OFF';
}
/**
* Event name for enabling the compiler.
* @const {string}
*/
static get COMPILER_ENABLED () {
return 'COMPILER_ENABLED';
}
/**
* Event name for disabling the compiler.
* @const {string}
*/
static get COMPILER_DISABLED () {
return 'COMPILER_DISABLED';
}
/**
* Event name when the project is started (threads may not necessarily be
* running).
@@ -1614,7 +1635,6 @@ class Runtime extends EventEmitter {
* @param {?object} opts optional arguments
* @param {?boolean} opts.stackClick true if the script was activated by clicking on the stack
* @param {?boolean} opts.updateMonitor true if the script should update a monitor value
* @param {?boolean} opts.enableCompiler true if the compiler may be used
* @return {!Thread} The newly created thread.
*/
_pushThread (id, target, opts) {
@@ -1629,7 +1649,7 @@ class Runtime extends EventEmitter {
thread.pushStack(id);
this.threads.push(thread);
if (opts && opts.enableCompiler) {
if (!(opts && opts.updateMonitor) && this.compilerEnabled) {
thread.tryCompile();
}
@@ -1661,7 +1681,7 @@ class Runtime extends EventEmitter {
newThread.updateMonitor = thread.updateMonitor;
newThread.blockContainer = thread.blockContainer;
newThread.pushStack(thread.topBlock);
if (thread.triedToCompile) {
if (thread.triedToCompile && this.compilerEnabled) {
newThread.tryCompile();
}
const i = this.threads.indexOf(thread);
@@ -1710,8 +1730,7 @@ class Runtime extends EventEmitter {
toggleScript (topBlockId, opts) {
opts = Object.assign({
target: this._editingTarget,
stackClick: false,
enableCompiler: true
stackClick: false
}, opts);
// Remove any existing thread.
for (let i = 0; i < this.threads.length; i++) {
@@ -1857,9 +1876,7 @@ class Runtime extends EventEmitter {
}
}
// Start the thread with this top block.
newThreads.push(this._pushThread(topBlockId, target, {
enableCompiler: true
}));
newThreads.push(this._pushThread(topBlockId, target));
}, optTarget);
// For compatibility with Scratch 2, edge triggered hats need to be processed before
// threads are stepped. See ScratchRuntime.as for original implementation
@@ -2179,6 +2196,20 @@ class Runtime extends EventEmitter {
}
}
/**
* Set whether the compiler is enabled.
* This does not affect already running threads.
* @param {boolean} compilerEnabled True iff the compiler is to be enabled.
*/
setCompilerEnabled (compilerEnabled) {
this.compilerEnabled = compilerEnabled;
if (compilerEnabled) {
this.emit(Runtime.COMPILER_ENABLED);
} else {
this.emit(Runtime.COMPILER_DISABLED);
}
}
/**
* Emit glows/glow clears for scripts after a single tick.
* Looks at `this.threads` and notices which have turned on/off new glows.
+10
View File
@@ -157,6 +157,12 @@ class VirtualMachine extends EventEmitter {
this.runtime.on(Runtime.COMPATIBILITY_MODE_ON, () => {
this.emit(Runtime.COMPATIBILITY_MODE_ON);
});
this.runtime.on(Runtime.COMPILER_ENABLED, () => {
this.emit(Runtime.COMPILER_ENABLED);
});
this.runtime.on(Runtime.COMPILER_DISABLED, () => {
this.emit(Runtime.COMPILER_DISABLED);
});
this.extensionManager = new ExtensionManager(this.runtime);
@@ -208,6 +214,10 @@ class VirtualMachine extends EventEmitter {
this.runtime.setCompatibilityMode(!!compatibilityModeOn);
}
setCompilerEnabled (compilerEnabled) {
this.runtime.setCompilerEnabled(compilerEnabled);
}
/**
* Stop all threads and running activities.
*/