Add Thread.blockContainer

Store the thread's blocks at blockContainer letting execute quickly
determine the block source. Monitor threads are a monitor thread. They
do not become a target thread suddenly.
This commit is contained in:
Michael "Z" Goddard 2018-01-24 14:56:02 -05:00
parent ab8d8e5f34
commit 4286e3e982
No known key found for this signature in database
GPG key ID: 762CD40DD5349872
4 changed files with 13 additions and 7 deletions

View file

@ -126,12 +126,7 @@ const execute = function (sequencer, thread, recursiveCall) {
const currentBlockId = thread.peekStack();
const currentStackFrame = thread.peekStackFrame();
let blockContainer;
if (thread.updateMonitor) {
blockContainer = runtime.monitorBlocks;
} else {
blockContainer = target.blocks;
}
let blockContainer = thread.blockContainer;
let block = blockContainer.getBlock(currentBlockId);
if (typeof block === 'undefined') {
blockContainer = runtime.flyoutBlocks;

View file

@ -861,6 +861,9 @@ class Runtime extends EventEmitter {
thread.target = target;
thread.stackClick = opts.stackClick;
thread.updateMonitor = opts.updateMonitor;
thread.blockContainer = opts.updateMonitor ?
this.monitorBlocks :
target.blocks;
thread.pushStack(id);
this.threads.push(thread);
@ -890,6 +893,7 @@ class Runtime extends EventEmitter {
newThread.target = thread.target;
newThread.stackClick = thread.stackClick;
newThread.updateMonitor = thread.updateMonitor;
newThread.blockContainer = thread.blockContainer;
newThread.pushStack(thread.topBlock);
const i = this.threads.indexOf(thread);
if (i > -1) {

View file

@ -42,6 +42,12 @@ class Thread {
*/
this.target = null;
/**
* The Blocks this thread will execute.
* @type {Blocks}
*/
this.blockContainer = null;
/**
* Whether the thread requests its script to glow during this frame.
* @type {boolean}

View file

@ -91,7 +91,8 @@ const generateThread = function (runtime) {
rt.blocks.createBlock(generateBlock(next));
th.pushStack(next);
th.target = rt;
th.blockContainer = rt.blocks;
runtime.threads.push(th);
return th;