From 15914663173d092dba5498a693c921d94e1aa562 Mon Sep 17 00:00:00 2001 From: jmoenig Date: Tue, 30 Jul 2013 13:48:12 +0200 Subject: PAUSE primitive command block --- threads.js | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) (limited to 'threads.js') diff --git a/threads.js b/threads.js index 5368b18..0674d94 100644 --- a/threads.js +++ b/threads.js @@ -83,7 +83,7 @@ ArgLabelMorph, localize, XML_Element, hex_sha512*/ // Global stuff //////////////////////////////////////////////////////// -modules.threads = '2013-July-15'; +modules.threads = '2013-July-30'; var ThreadManager; var Process; @@ -339,7 +339,7 @@ Process.prototype.runStep = function () { a step is an an uninterruptable 'atom', it can consist of several contexts, even of several blocks */ - if (this.isPaused) { + if (this.isPaused) { // allow pausing in between atomic steps: return this.pauseStep(); } this.readyToYield = false; @@ -348,6 +348,10 @@ Process.prototype.runStep = function () { && (this.isAtomic ? (Date.now() - this.lastYield < this.timeout) : true) ) { + // also allow pausing inside atomic steps - for PAUSE block primitive: + if (this.isPaused) { + return this.pauseStep(); + } this.evaluateContext(); } this.lastYield = Date.now(); @@ -1433,6 +1437,18 @@ Process.prototype.doSetFastTracking = function (bool) { } }; +Process.prototype.doPauseAll = function () { + var stage, ide; + if (this.homeContext.receiver) { + stage = this.homeContext.receiver.parentThatIsA(StageMorph); + if (stage) { + stage.threads.pauseAll(stage); + } + ide = stage.parentThatIsA(IDE_Morph); + if (ide) {ide.controlBar.pauseButton.refresh(); } + } +}; + // Process loop primitives Process.prototype.doForever = function (body) { -- cgit v1.3.1