new "this script" primitive in sensing, experimental

snap8
Jens Mönig 2022-06-22 14:01:02 +02:00
rodzic 6afe1f3908
commit 6732ce5331
5 zmienionych plików z 33 dodań i 7 usunięć

Wyświetl plik

@ -19,6 +19,7 @@
* new "label", "type", "scope" and "slots" choices in the OF BLOCK block-attribute reporter's dropdown
* new "set attribute of block" primitive, experimental
* new "define block" primitive, experimental
* new "this script" primitive, experimental
* new localization extension primitives in the "ide" category, hyperized
* new extension primitive for importing a costume from a url
* new support for setting the translation via the API
@ -51,6 +52,9 @@
* **Translation Updates:**
* German
### 2022-06-22
* objects, blocks, threads: new "this script" primitive in sensing, experimental
### 2022-06-21
* threads: fixed #3061

Wyświetl plik

@ -16,9 +16,9 @@
<script src="src/morphic.js?version=2022-04-26"></script>
<script src="src/symbols.js?version=2021-03-03"></script>
<script src="src/widgets.js?version=2021-17-09"></script>
<script src="src/blocks.js?version=2022-05-29"></script>
<script src="src/threads.js?version=2022-06-21"></script>
<script src="src/objects.js?version=2022-05-20"></script>
<script src="src/blocks.js?version=2022-06-22"></script>
<script src="src/threads.js?version=2022-06-22"></script>
<script src="src/objects.js?version=2022-06-22"></script>
<script src="src/scenes.js?version=2022-03-03"></script>
<script src="src/gui.js?version=2022-05-19"></script>
<script src="src/paint.js?version=2021-07-05"></script>

Wyświetl plik

@ -161,7 +161,7 @@ CostumeIconMorph, SoundIconMorph, SVG_Costume, embedMetadataPNG*/
// Global stuff ////////////////////////////////////////////////////////
modules.blocks = '2022-May-29';
modules.blocks = '2022-June-22';
var SyntaxElementMorph;
var BlockMorph;
@ -7474,6 +7474,7 @@ RingMorph.prototype.vanishForSimilar = function () {
block.selector === 'reportJSFunction' ||
block.selector === 'reportAttributeOf' ||
block.selector === 'reportCompiled' ||
block.selector === 'reportThisContext' ||
(block instanceof RingMorph)
) {
this.parent.replaceInput(this, block);

Wyświetl plik

@ -94,7 +94,7 @@ embedMetadataPNG*/
/*jshint esversion: 6*/
modules.objects = '2022-May-20';
modules.objects = '2022-June-22';
var SpriteMorph;
var StageMorph;
@ -1110,6 +1110,11 @@ SpriteMorph.prototype.initBlocks = function () {
category: 'sensing',
spec: 'define block %s %repRing'
},
reportThisContext: {
type: 'reporter',
category: 'sensing',
spec: 'this script'
},
// Operators
reifyScript: {
@ -2704,6 +2709,7 @@ SpriteMorph.prototype.blockTemplates = function (
blocks.push(block('reportBlockAttribute'));
blocks.push(block('doSetBlockAttribute'));
blocks.push(block('reportDefineBlock'));
blocks.push(block('reportThisContext'));
// for debugging: ///////////////
if (devMode) {
@ -9178,6 +9184,7 @@ StageMorph.prototype.blockTemplates = function (
blocks.push(block('reportBlockAttribute'));
blocks.push(block('doSetBlockAttribute'));
blocks.push(block('reportDefineBlock'));
blocks.push(block('reportThisContext'));
// for debugging: ///////////////
if (this.world().isDevMode) {

Wyświetl plik

@ -65,7 +65,7 @@ StagePickerMorph, CustomBlockDefinition*/
/*jshint esversion: 11, bitwise: false, evil: true*/
modules.threads = '2022-June-21';
modules.threads = '2022-June-22';
var ThreadManager;
var Process;
@ -1379,6 +1379,9 @@ Process.prototype.evaluate = function (
// parameter ID Symbol.for('arguments'), to be used for variadic inputs
outer.variables.addVar(Symbol.for('arguments'), args);
// assign a self-reference for introspection and recursion
outer.variables.addVar(Symbol.for('self'), context);
// assign arguments that are actually passed
if (parms.length > 0) {
@ -1546,6 +1549,17 @@ Process.prototype.initializeFor = function (context, args) {
this.context = runnable;
};
// Process introspection
Process.prototype.reportThisContext = function () {
var sym = Symbol.for('self'),
frame = this.context.variables.silentFind(sym);
if (frame) {
return frame.vars[sym].value;
}
return this.topBlock.reify();
};
// Process stopping blocks primitives
Process.prototype.doStopBlock = function () {
@ -1713,6 +1727,7 @@ Process.prototype.evaluateCustomBlock = function () {
this.readyToYield = true;
}
}
outer.variables.addVar(Symbol.for('self'), method.body || new Context());
runnable.expression = runnable.expression.blockSequence();
};
@ -5619,7 +5634,6 @@ Process.prototype.reportBasicBlockAttribute = function (attribute, block) {
return body.expression.inputs()[0].reify(body.inputs);
}
return body;
case 'category':
return expr ?
SpriteMorph.prototype.allCategories().indexOf(expr.category) + 1