refactored scanning for message senders

pull/95/head
jmoenig 2020-09-04 11:53:08 +02:00
rodzic 8baaece26d
commit 2bcc3d7264
5 zmienionych plików z 42 dodań i 58 usunięć

Wyświetl plik

@ -11,6 +11,9 @@
* Norwegian, thanks, Olav!
* German
### 2020-09-04
* byob, blocks, objects: refactored scanning for message senders
### 2020-09-03
* byob: experimental: Inspect & export dependencies for global custom blocks (shift-right-click for context menu)
* byob: new feature: "export block definition" including dependencies

Wyświetl plik

@ -8,13 +8,13 @@
<script src="src/morphic.js?version=2020-07-23"></script>
<script src="src/symbols.js?version=2020-07-21"></script>
<script src="src/widgets.js?version=2020-07-27"></script>
<script src="src/blocks.js?version=2020-09-03"></script>
<script src="src/blocks.js?version=2020-09-04"></script>
<script src="src/threads.js?version=2020-09-02"></script>
<script src="src/objects.js?version=2020-09-03"></script>
<script src="src/objects.js?version=2020-09-04"></script>
<script src="src/gui.js?version=2020-09-01"></script>
<script src="src/paint.js?version=2020-05-17"></script>
<script src="src/lists.js?version=2020-07-01"></script>
<script src="src/byob.js?version=2020-09-03"></script>
<script src="src/byob.js?version=2020-09-04"></script>
<script src="src/tables.js?version=2020-05-18"></script>
<script src="src/sketch.js?version=2020-07-13"></script>
<script src="src/video.js?version=2019-06-27"></script>

Wyświetl plik

@ -158,7 +158,7 @@ CustomCommandBlockMorph, SymbolMorph, ToggleButtonMorph, DialMorph*/
// Global stuff ////////////////////////////////////////////////////////
modules.blocks = '2020-September-03';
modules.blocks = '2020-September-04';
var SyntaxElementMorph;
var BlockMorph;
@ -3173,6 +3173,37 @@ BlockMorph.prototype.showMessageUsers = function () {
}
};
BlockMorph.prototype.isSending = function (message, receiverName, known = []) {
if (typeof message === 'number') {
message = message.toString();
}
return this.allChildren().some(morph => {
var event, eventReceiver;
if (morph.isCustomBlock &&
morph.isGlobal &&
contains(known, morph.definition)
) {
return true;
}
if ((morph.selector) &&
contains(
['doBroadcast', 'doBroadcastAndWait', 'doSend'],
morph.selector)
) {
event = morph.inputs()[0].evaluate();
if (morph.selector === 'doSend') {
eventReceiver = morph.inputs()[1].evaluate();
}
return ((morph.selector !== 'doSend') ||
(receiverName === eventReceiver)) &&
((event === message) ||
(message instanceof Array &&
message[0] === 'any message'));
}
return false;
});
};
BlockMorph.prototype.developersMenu = function () {
var menu = BlockMorph.uber.developersMenu.call(this);
menu.addLine();

Wyświetl plik

@ -107,7 +107,7 @@ WatcherMorph, Variable, BooleanSlotMorph, XML_Serializer, SnapTranslator*/
// Global stuff ////////////////////////////////////////////////////////
modules.byob = '2020-September-03';
modules.byob = '2020-September-04';
// Declarations
@ -589,32 +589,9 @@ CustomBlockDefinition.prototype.collectDependencies = function (
};
CustomBlockDefinition.prototype.isSending = function (message, receiverName) {
if (typeof message === 'number') {
message = message.toString();
}
return this.scripts.concat(
this.body ? [this.body.expression] : []
).some(script =>
script.allChildren().some(morph => {
var event, eventReceiver;
if ((morph.selector) &&
contains(
['doBroadcast', 'doBroadcastAndWait', 'doSend'],
morph.selector)
) {
event = morph.inputs()[0].evaluate();
if (morph.selector === 'doSend') {
eventReceiver = morph.inputs()[1].evaluate();
}
return ((morph.selector !== 'doSend') ||
(receiverName === eventReceiver)) &&
((event === message) ||
(message instanceof Array &&
message[0] === 'any message'));
}
return false;
})
);
).some(script => script.isSending(message, receiverName));
};
// CustomCommandBlockMorph /////////////////////////////////////////////

Wyświetl plik

@ -84,7 +84,7 @@ BlockEditorMorph, BlockDialogMorph, PrototypeHatBlockMorph, BooleanSlotMorph,
localize, TableMorph, TableFrameMorph, normalizeCanvas, VectorPaintEditorMorph,
HandleMorph, AlignmentMorph, Process, XML_Element, WorldMap, copyCanvas*/
modules.objects = '2020-September-03';
modules.objects = '2020-September-04';
var SpriteMorph;
var StageMorph;
@ -5774,35 +5774,8 @@ SpriteMorph.prototype.allMessageNames = function () {
};
SpriteMorph.prototype.allSendersOf = function (message, receiverName, known) {
if (typeof message === 'number') {
message = message.toString();
}
return this.allScripts().filter(script =>
script.allChildren().some(morph => {
var event, eventReceiver;
if (morph.isCustomBlock &&
morph.isGlobal &&
contains(known, morph.definition)
) {
return true;
}
if ((morph.selector) &&
contains(
['doBroadcast', 'doBroadcastAndWait', 'doSend'],
morph.selector)
) {
event = morph.inputs()[0].evaluate();
if (morph.selector === 'doSend') {
eventReceiver = morph.inputs()[1].evaluate();
}
return ((morph.selector !== 'doSend') ||
(receiverName === eventReceiver)) &&
((event === message) ||
(message instanceof Array &&
message[0] === 'any message'));
}
return false;
})
script.isSending(message, receiverName, known)
);
};