From 5d3d2e2067e10e10a6ede7ae83e53b7890ad8765 Mon Sep 17 00:00:00 2001 From: jwklong Date: Wed, 21 Oct 2026 19:08:07 +0100 Subject: [PATCH] constants Signed-off-by: jwklong --- src/compiler/enums.js | 2 +- src/compiler/irgen.js | 15 ++++++++++++++- src/engine/blocks.js | 2 +- 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/compiler/enums.js b/src/compiler/enums.js index cfc22f1d03..c9d39f8d09 100644 --- a/src/compiler/enums.js +++ b/src/compiler/enums.js @@ -357,8 +357,8 @@ const InputOpcode = { PM_OP_COMPARE_EXPANDABLE: 'op.compareExpandable', PM_OP_CHARACTER_TO_CODE: 'op.characterToCode', PM_OP_CODE_TO_CHARACTER: 'op.codeToCharacter', - PM_OP_COUNT_APPEAR_TIMES: 'op.countAppearTimes', PM_OP_CONSTRAIN: 'op.constrain', + PM_OP_COUNT_APPEAR_TIMES: 'op.countAppearTimes', PM_OP_DECODE_B16: 'op.decodeBase16', PM_OP_DECODE_B64: 'op.decodeBase64', PM_OP_DECODE_URI: 'op.decodeURI', diff --git a/src/compiler/irgen.js b/src/compiler/irgen.js index 17e114051a..1e839c8ac5 100644 --- a/src/compiler/irgen.js +++ b/src/compiler/irgen.js @@ -373,7 +373,7 @@ class ScriptTreeGenerator { const broadcastOption = block.fields.BROADCAST_OPTION; const broadcastVariable = this.target.lookupBroadcastMsg(broadcastOption.id, broadcastOption.value); // TODO: empty string probably isn't the correct fallback - const broadcastName = broadcastVariable ? broadcastVariable.name : ''; + const broadcastName = broadcastVariable ? broadcastVariable.name : (broadcastOption.value === 'message1' ? 'message1' : ''); return this.createConstantInput(broadcastName); } @@ -391,6 +391,10 @@ class ScriptTreeGenerator { return new IntermediateInput(InputOpcode.LOOKS_SIZE_GET, InputType.NUMBER_POS | InputType.NUMBER_ZERO); //pm looks + case 'looks_backdrops': + return this.createConstantInput(block.fields.BACKDROP.value); + case 'looks_costume': + return this.createConstantInput(block.fields.COSTUME.value); case 'looks_getEffectValue': return new IntermediateInput(InputOpcode.PM_LOOKS_GET_EFFECT, InputType.NUMBER, { effect: block.fields.EFFECT.value.toLowerCase() @@ -628,6 +632,13 @@ class ScriptTreeGenerator { return new IntermediateInput(InputOpcode.PM_OP_CODE_TO_CHARACTER, InputType.STRING, { one: this.descendInputOfBlock(block, 'ONE').toType(InputType.NUMBER) }); + case 'operator_constant': + switch (block.fields.CONSTANT.value) { + case 'pi': return this.createConstantInput(Math.PI); + case 'euler': return this.createConstantInput(Math.E); + case 'goldenratio': return this.createConstantInput((1 + Math.sqrt(5)) / 2); + } + return this.createConstantInput(0); case 'operator_countAppearTimes': return new IntermediateInput(InputOpcode.PM_OP_COUNT_APPEAR_TIMES, InputType.NUMBER, { text1: this.descendInputOfBlock(block, 'TEXT1').toType(InputType.STRING), @@ -1076,6 +1087,8 @@ class ScriptTreeGenerator { regex: this.descendInputOfBlock(block, 'reg').toType(InputType.STRING), flags: this.descendInputOfBlock(block, 'regrule').toType(InputType.STRING) }); + case 'sensing_sprites': + return this.createConstantInput(block.fields.SPRITE.value); case 'sensing_thing_has_number': { let text = this.descendInputOfBlock(block, 'TEXT1'); if (text.isSubtypeOf(InputType.NUMBER)) return this.createConstantInput(true); diff --git a/src/engine/blocks.js b/src/engine/blocks.js index 5788e36297..629baa5f59 100644 --- a/src/engine/blocks.js +++ b/src/engine/blocks.js @@ -1368,7 +1368,7 @@ class Blocks { return null; } const spriteMenuNames = ['TOWARDS', 'TO', 'OBJECT', 'VIDEOONMENU2', - 'DISTANCETOMENU', 'TOUCHINGOBJECTMENU', 'CLONE_OPTION']; + 'DISTANCETOMENU', 'TOUCHINGOBJECTMENU', 'CLONE_OPTION', 'SPRITE']; for (let i = 0; i < spriteMenuNames.length; i++) { const menuName = spriteMenuNames[i]; if (Object.prototype.hasOwnProperty.call(block.fields, menuName)) {