summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJens Mönig <jens@moenig.org>2014-01-08 06:49:31 -0800
committerJens Mönig <jens@moenig.org>2014-01-08 06:49:31 -0800
commit1da3ae32aaf3eb45564c04d6e0a2d0067829fe7c (patch)
tree863820b6528fd817e5e4b36dd3639d4de2adc4fd
parent82c03bae77ae8afa8c364de30c8940a3de402e7a (diff)
parentd8d1810e436cba83144f4b2234fc3097a739208b (diff)
downloadsnap-yow-1da3ae32aaf3eb45564c04d6e0a2d0067829fe7c.tar.gz
snap-yow-1da3ae32aaf3eb45564c04d6e0a2d0067829fe7c.zip
Merge pull request #283 from Hardmath123/master
Initial stop others block
-rw-r--r--objects.js6
-rw-r--r--threads.js21
2 files changed, 27 insertions, 0 deletions
diff --git a/objects.js b/objects.js
index e8a934e..fa9be12 100644
--- a/objects.js
+++ b/objects.js
@@ -591,6 +591,11 @@ SpriteMorph.prototype.initBlocks = function () {
category: 'control',
spec: 'stop all %stop'
},
+ doStopOthers: {
+ type: 'command',
+ category: 'control',
+ spec: 'stop other scripts in sprite'
+ },
doRun: {
type: 'command',
category: 'control',
@@ -1649,6 +1654,7 @@ SpriteMorph.prototype.blockTemplates = function (category) {
blocks.push(block('doStopBlock'));
blocks.push(block('doStop'));
blocks.push(block('doStopAll'));
+ blocks.push(block('doStopOthers'));
blocks.push('-');
blocks.push(block('doRun'));
blocks.push(block('fork'));
diff --git a/threads.js b/threads.js
index 77894c4..7d7b50a 100644
--- a/threads.js
+++ b/threads.js
@@ -168,6 +168,17 @@ ThreadManager.prototype.stopAllForReceiver = function (rcvr) {
});
};
+ThreadManager.prototype.stopAllForReceiverExcept = function (rcvr, excpt) {
+ this.processes.forEach(function (proc) {
+ if (proc.homeContext.receiver === rcvr && proc != excpt) {
+ proc.stop();
+ if (rcvr.isClone) {
+ proc.isDead = true;
+ }
+ }
+ });
+};
+
ThreadManager.prototype.stopProcess = function (block) {
var active = this.findProcess(block);
if (active) {
@@ -1368,6 +1379,16 @@ Process.prototype.doStopAll = function () {
}
};
+Process.prototype.doStopOthers = function () {
+ var stage, ide;
+ if (this.homeContext.receiver) {
+ stage = this.homeContext.receiver.parentThatIsA(StageMorph);
+ if (stage) {
+ stage.threads.stopAllForReceiverExcept(this.homeContext.receiver, this);
+ }
+ }
+};
+
Process.prototype.doWarp = function (body) {
// execute my contents block atomically (more or less)
var outer = this.context.outerContext, // for tail call elimination