diff --git a/boards/default_src/arduino_avr/blocks/procedures.js b/boards/default_src/arduino/blocks/procedures.js similarity index 97% rename from boards/default_src/arduino_avr/blocks/procedures.js rename to boards/default_src/arduino/blocks/procedures.js index 32ca98fe..68efecff 100644 --- a/boards/default_src/arduino_avr/blocks/procedures.js +++ b/boards/default_src/arduino/blocks/procedures.js @@ -498,7 +498,7 @@ export const procedures_defreturn = { this.appendValueInput('RETURN') .setAlign(Blockly.inputs.Align.RIGHT) .appendField(Blockly.Msg['PROCEDURES_DEFRETURN_RETURN']) - .appendField(new Blockly.FieldDropdown(Variables.DATA_TYPE), "TYPE"); + .appendField(new Blockly.FieldDropdown(Procedures.DATA_TYPE, this.adjustReturnInput.bind(this)), "TYPE"); this.setMutator(new Blockly.icons.MutatorIcon(['procedures_mutatorarg'], this)); if ((this.workspace.options.comments || (this.workspace.options.parentWorkspace && @@ -513,11 +513,45 @@ export const procedures_defreturn = { this.argumentVarModels_ = []; this.setStatements_(true); this.statementConnection_ = null; + this.returnType = 'void'; + }, + adjustReturnInput: function (value) { + const fieldName = 'RETRUN_TYPE'; + if (value === 'CUSTOM') { + if (!this.getField(fieldName)) { + this.getInput('RETURN').appendField( + new Blockly.FieldTextInput(this.returnType ?? ''), + fieldName, + ); + } + } else { + if (this.getField('RETRUN_TYPE')) { + this.returnType = this.getFieldValue('RETRUN_TYPE') || 'void'; + } + this.getInput('RETURN').removeField(fieldName, true); + } }, setStatements_: procedures_defnoreturn.setStatements_, updateParams_: procedures_defnoreturn.updateParams_, mutationToDom: procedures_defnoreturn.mutationToDom, domToMutation: procedures_defnoreturn.domToMutation, + saveExtraState: function () { + const output = procedures_defnoreturn.saveExtraState.call(this) ?? {}; + if (this.getField('RETRUN_TYPE')) { + output['returnType'] = this.getFieldValue('RETRUN_TYPE'); + } + return output; + }, + loadExtraState: function (state) { + this.returnType = state?.returnType; + if (!this.getField('RETRUN_TYPE')) { + this.getInput('RETURN').appendField( + new Blockly.FieldTextInput(this.returnType ?? ''), + 'RETRUN_TYPE', + ); + } + procedures_defnoreturn.loadExtraState.call(this, state); + }, decompose: procedures_defnoreturn.decompose, compose: procedures_defnoreturn.compose, /** @@ -1096,6 +1130,8 @@ export const procedures_callreturn = { updateShape_: procedures_callnoreturn.updateShape_, mutationToDom: procedures_callnoreturn.mutationToDom, domToMutation: procedures_callnoreturn.domToMutation, + saveExtraState: procedures_callnoreturn.saveExtraState, + loadExtraState: procedures_callnoreturn.loadExtraState, renameVar: procedures_callnoreturn.renameVar, getVars: procedures_callnoreturn.getVars, getVarModels: procedures_callnoreturn.getVarModels, diff --git a/boards/default_src/arduino_avr/blocks/variables.js b/boards/default_src/arduino/blocks/variables.js similarity index 100% rename from boards/default_src/arduino_avr/blocks/variables.js rename to boards/default_src/arduino/blocks/variables.js diff --git a/boards/default_src/arduino/export.js b/boards/default_src/arduino/export.js index 9b1be182..4a8c935e 100644 --- a/boards/default_src/arduino/export.js +++ b/boards/default_src/arduino/export.js @@ -1,7 +1,11 @@ import * as ArduinoEthernetBlocks from './blocks/ethernet'; +import * as ArduinoProceduresBlocks from './blocks/procedures'; import * as ArduinoTextBlocks from './blocks/text'; +import * as ArduinoVariablesBlocks from './blocks/variables'; +import * as ArduinoProceduresGenerators from './generators/procedures'; import * as ArduinoEthernetGenerators from './generators/ethernet'; import * as ArduinoTextGenerators from './generators/text'; +import * as ArduinoVariablesGenerators from './generators/variables'; import Names from './others/names'; import Procedures from './others/procedures'; import Variables from './others/variables'; @@ -9,9 +13,13 @@ import { ArduinoGenerator, Arduino } from './arduino_generator'; export { ArduinoEthernetBlocks, + ArduinoProceduresBlocks, ArduinoTextBlocks, + ArduinoVariablesBlocks, ArduinoEthernetGenerators, + ArduinoProceduresGenerators, ArduinoTextGenerators, + ArduinoVariablesGenerators, Names, Procedures, Variables, diff --git a/boards/default_src/arduino_avr/generators/procedures.js b/boards/default_src/arduino/generators/procedures.js similarity index 95% rename from boards/default_src/arduino_avr/generators/procedures.js rename to boards/default_src/arduino/generators/procedures.js index 468c6d66..ab180a60 100644 --- a/boards/default_src/arduino_avr/generators/procedures.js +++ b/boards/default_src/arduino/generators/procedures.js @@ -12,6 +12,13 @@ export const procedures_defreturn = function (_, generator) { var returnValue = generator.valueToCode(this, 'RETURN', generator.ORDER_NONE) || ''; var type = this.getFieldValue('TYPE'); + if (type === 'CUSTOM') { + if (this.getField('RETRUN_TYPE')) { + type = this.getFieldValue('RETRUN_TYPE'); + } else { + type = 'void'; + } + } if (returnValue) { returnValue = ' return ' + returnValue + ';\n'; } diff --git a/boards/default_src/arduino_avr/generators/variables.js b/boards/default_src/arduino/generators/variables.js similarity index 100% rename from boards/default_src/arduino_avr/generators/variables.js rename to boards/default_src/arduino/generators/variables.js diff --git a/boards/default_src/arduino/others/procedures.js b/boards/default_src/arduino/others/procedures.js index 9177545b..d3d6d253 100644 --- a/boards/default_src/arduino/others/procedures.js +++ b/boards/default_src/arduino/others/procedures.js @@ -25,9 +25,15 @@ * @namespace */ import * as Blockly from 'blockly/core'; +import Variables from './variables'; const Procedures = {}; +Procedures.DATA_TYPE = [ + ...Variables.DATA_TYPE, + [Blockly.Msg.MIXLY_OTHER, 'CUSTOM'] +]; + /** * Constant to separate procedure names from variables and generated functions * when running generators. diff --git a/boards/default_src/arduino_avr/export.js b/boards/default_src/arduino_avr/export.js index aa4c4816..e2f4b279 100644 --- a/boards/default_src/arduino_avr/export.js +++ b/boards/default_src/arduino_avr/export.js @@ -13,14 +13,12 @@ import * as ArduinoAVRLogicBlocks from './blocks/logic'; import * as ArduinoAVRMathBlocks from './blocks/math'; import * as ArduinoAVRPinoutBlocks from './blocks/pinout'; import * as ArduinoAVRPinsBlocks from './blocks/pins'; -import * as ArduinoAVRProceduresBlocks from './blocks/procedures'; import * as ArduinoAVRScoopBlocks from './blocks/scoop'; import * as ArduinoAVRSensorBlocks from './blocks/sensor'; import * as ArduinoAVRSerialBlocks from './blocks/serial'; import * as ArduinoAVRStorageBlocks from './blocks/storage'; import * as ArduinoAVRTextBlocks from './blocks/text'; import * as ArduinoAVRToolsBlocks from './blocks/tools'; -import * as ArduinoAVRVariablesBlocks from './blocks/variables'; import * as ArduinoAVRActuatorGenerators from './generators/actuator'; import * as ArduinoAVRBlynkGenerators from './generators/blynk'; @@ -35,14 +33,12 @@ import * as ArduinoAVRLogicGenerators from './generators/logic'; import * as ArduinoAVRMathGenerators from './generators/math'; import * as ArduinoAVRPinoutGenerators from './generators/pinout'; import * as ArduinoAVRPinsGenerators from './generators/pins'; -import * as ArduinoAVRProceduresGenerators from './generators/procedures'; import * as ArduinoAVRScoopGenerators from './generators/scoop'; import * as ArduinoAVRSensorGenerators from './generators/sensor'; import * as ArduinoAVRSerialGenerators from './generators/serial'; import * as ArduinoAVRStorageGenerators from './generators/storage'; import * as ArduinoAVRTextGenerators from './generators/text'; import * as ArduinoAVRToolsGenerators from './generators/tools'; -import * as ArduinoAVRVariablesGenerators from './generators/variables'; export { ArduinoAVRPins, @@ -59,14 +55,12 @@ export { ArduinoAVRMathBlocks, ArduinoAVRPinoutBlocks, ArduinoAVRPinsBlocks, - ArduinoAVRProceduresBlocks, ArduinoAVRScoopBlocks, ArduinoAVRSensorBlocks, ArduinoAVRSerialBlocks, ArduinoAVRStorageBlocks, ArduinoAVRTextBlocks, ArduinoAVRToolsBlocks, - ArduinoAVRVariablesBlocks, ArduinoAVRActuatorGenerators, ArduinoAVRBlynkGenerators, ArduinoAVRCommunicateGenerators, @@ -80,12 +74,10 @@ export { ArduinoAVRMathGenerators, ArduinoAVRPinoutGenerators, ArduinoAVRPinsGenerators, - ArduinoAVRProceduresGenerators, ArduinoAVRScoopGenerators, ArduinoAVRSensorGenerators, ArduinoAVRSerialGenerators, ArduinoAVRStorageGenerators, ArduinoAVRTextGenerators, - ArduinoAVRToolsGenerators, - ArduinoAVRVariablesGenerators + ArduinoAVRToolsGenerators }; \ No newline at end of file diff --git a/boards/default_src/arduino_avr/index.js b/boards/default_src/arduino_avr/index.js index 169a2cfb..25904c2e 100644 --- a/boards/default_src/arduino_avr/index.js +++ b/boards/default_src/arduino_avr/index.js @@ -3,9 +3,13 @@ import { Profile } from 'mixly'; import { ArduinoEthernetBlocks, + ArduinoProceduresBlocks, ArduinoTextBlocks, + ArduinoVariablesBlocks, ArduinoEthernetGenerators, + ArduinoProceduresGenerators, ArduinoTextGenerators, + ArduinoVariablesGenerators, Procedures, Variables, Arduino @@ -26,14 +30,12 @@ import { ArduinoAVRMathBlocks, ArduinoAVRPinoutBlocks, ArduinoAVRPinsBlocks, - ArduinoAVRProceduresBlocks, ArduinoAVRScoopBlocks, ArduinoAVRSensorBlocks, ArduinoAVRSerialBlocks, ArduinoAVRStorageBlocks, ArduinoAVRTextBlocks, ArduinoAVRToolsBlocks, - ArduinoAVRVariablesBlocks, ArduinoAVRActuatorGenerators, ArduinoAVRBlynkGenerators, ArduinoAVRCommunicateGenerators, @@ -47,14 +49,12 @@ import { ArduinoAVRMathGenerators, ArduinoAVRPinoutGenerators, ArduinoAVRPinsGenerators, - ArduinoAVRProceduresGenerators, ArduinoAVRScoopGenerators, ArduinoAVRSensorGenerators, ArduinoAVRSerialGenerators, ArduinoAVRStorageGenerators, ArduinoAVRTextGenerators, - ArduinoAVRToolsGenerators, - ArduinoAVRVariablesGenerators + ArduinoAVRToolsGenerators } from './'; import './css/color.css'; @@ -72,7 +72,9 @@ Object.assign(Profile.default, ArduinoAVRPins.arduino_standard); Object.assign( Blockly.Blocks, ArduinoEthernetBlocks, + ArduinoProceduresBlocks, ArduinoTextBlocks, + ArduinoVariablesBlocks, ArduinoAVRActuatorBlocks, ArduinoAVRBlynkBlocks, ArduinoAVRCommunicateBlocks, @@ -86,20 +88,20 @@ Object.assign( ArduinoAVRMathBlocks, ArduinoAVRPinoutBlocks, ArduinoAVRPinsBlocks, - ArduinoAVRProceduresBlocks, ArduinoAVRScoopBlocks, ArduinoAVRSensorBlocks, ArduinoAVRSerialBlocks, ArduinoAVRStorageBlocks, ArduinoAVRTextBlocks, - ArduinoAVRToolsBlocks, - ArduinoAVRVariablesBlocks + ArduinoAVRToolsBlocks ); Object.assign( Blockly.Arduino.forBlock, ArduinoEthernetGenerators, + ArduinoProceduresGenerators, ArduinoTextGenerators, + ArduinoVariablesGenerators, ArduinoAVRActuatorGenerators, ArduinoAVRBlynkGenerators, ArduinoAVRCommunicateGenerators, @@ -113,12 +115,10 @@ Object.assign( ArduinoAVRMathGenerators, ArduinoAVRPinoutGenerators, ArduinoAVRPinsGenerators, - ArduinoAVRProceduresGenerators, ArduinoAVRScoopGenerators, ArduinoAVRSensorGenerators, ArduinoAVRSerialGenerators, ArduinoAVRStorageGenerators, ArduinoAVRTextGenerators, - ArduinoAVRToolsGenerators, - ArduinoAVRVariablesGenerators + ArduinoAVRToolsGenerators ); \ No newline at end of file diff --git a/boards/default_src/arduino_esp32/index.js b/boards/default_src/arduino_esp32/index.js index 3ef10cfc..de1c58d5 100644 --- a/boards/default_src/arduino_esp32/index.js +++ b/boards/default_src/arduino_esp32/index.js @@ -3,9 +3,13 @@ import { Profile } from 'mixly'; import { ArduinoEthernetBlocks, + ArduinoProceduresBlocks, ArduinoTextBlocks, + ArduinoVariablesBlocks, ArduinoEthernetGenerators, + ArduinoProceduresGenerators, ArduinoTextGenerators, + ArduinoVariablesGenerators, Procedures, Variables, Arduino @@ -24,13 +28,11 @@ import { ArduinoAVRLogicBlocks, ArduinoAVRMathBlocks, ArduinoAVRPinsBlocks, - ArduinoAVRProceduresBlocks, ArduinoAVRSensorBlocks, ArduinoAVRSerialBlocks, ArduinoAVRStorageBlocks, ArduinoAVRTextBlocks, ArduinoAVRToolsBlocks, - ArduinoAVRVariablesBlocks, ArduinoAVRActuatorGenerators, ArduinoAVRBlynkGenerators, ArduinoAVRCommunicateGenerators, @@ -43,13 +45,11 @@ import { ArduinoAVRLogicGenerators, ArduinoAVRMathGenerators, ArduinoAVRPinsGenerators, - ArduinoAVRProceduresGenerators, ArduinoAVRSensorGenerators, ArduinoAVRSerialGenerators, ArduinoAVRStorageGenerators, ArduinoAVRTextGenerators, - ArduinoAVRToolsGenerators, - ArduinoAVRVariablesGenerators + ArduinoAVRToolsGenerators } from '@mixly/arduino-avr'; import { @@ -112,7 +112,9 @@ addBoardFSItem(); Object.assign( Blockly.Blocks, ArduinoEthernetBlocks, + ArduinoProceduresBlocks, ArduinoTextBlocks, + ArduinoVariablesBlocks, ArduinoAVRActuatorBlocks, ArduinoAVRBlynkBlocks, ArduinoAVRCommunicateBlocks, @@ -125,13 +127,11 @@ Object.assign( ArduinoAVRLogicBlocks, ArduinoAVRMathBlocks, ArduinoAVRPinsBlocks, - ArduinoAVRProceduresBlocks, ArduinoAVRSensorBlocks, ArduinoAVRSerialBlocks, ArduinoAVRStorageBlocks, ArduinoAVRTextBlocks, ArduinoAVRToolsBlocks, - ArduinoAVRVariablesBlocks, ArduinoESP32ActuatorBlocks, ArduinoESP32CommunicateBlocks, ArduinoESP32ControlBlocks, @@ -152,7 +152,9 @@ Object.assign( Object.assign( Blockly.Arduino.forBlock, ArduinoEthernetGenerators, + ArduinoProceduresGenerators, ArduinoTextGenerators, + ArduinoVariablesGenerators, ArduinoAVRActuatorGenerators, ArduinoAVRBlynkGenerators, ArduinoAVRCommunicateGenerators, @@ -165,13 +167,11 @@ Object.assign( ArduinoAVRLogicGenerators, ArduinoAVRMathGenerators, ArduinoAVRPinsGenerators, - ArduinoAVRProceduresGenerators, ArduinoAVRSensorGenerators, ArduinoAVRSerialGenerators, ArduinoAVRStorageGenerators, ArduinoAVRTextGenerators, ArduinoAVRToolsGenerators, - ArduinoAVRVariablesGenerators, ArduinoESP32ActuatorGenerators, ArduinoESP32CommunicateGenerators, ArduinoESP32ControlGenerators, diff --git a/boards/default_src/arduino_esp8266/index.js b/boards/default_src/arduino_esp8266/index.js index a27ff636..5490e88f 100644 --- a/boards/default_src/arduino_esp8266/index.js +++ b/boards/default_src/arduino_esp8266/index.js @@ -3,9 +3,13 @@ import { Profile } from 'mixly'; import { ArduinoEthernetBlocks, + ArduinoProceduresBlocks, ArduinoTextBlocks, + ArduinoVariablesBlocks, ArduinoEthernetGenerators, + ArduinoProceduresGenerators, ArduinoTextGenerators, + ArduinoVariablesGenerators, Procedures, Variables, Arduino @@ -24,13 +28,11 @@ import { ArduinoAVRLogicBlocks, ArduinoAVRMathBlocks, ArduinoAVRPinsBlocks, - ArduinoAVRProceduresBlocks, ArduinoAVRSensorBlocks, ArduinoAVRSerialBlocks, ArduinoAVRStorageBlocks, ArduinoAVRTextBlocks, ArduinoAVRToolsBlocks, - ArduinoAVRVariablesBlocks, ArduinoAVRActuatorGenerators, ArduinoAVRBlynkGenerators, ArduinoAVRCommunicateGenerators, @@ -43,13 +45,11 @@ import { ArduinoAVRLogicGenerators, ArduinoAVRMathGenerators, ArduinoAVRPinsGenerators, - ArduinoAVRProceduresGenerators, ArduinoAVRSensorGenerators, ArduinoAVRSerialGenerators, ArduinoAVRStorageGenerators, ArduinoAVRTextGenerators, - ArduinoAVRToolsGenerators, - ArduinoAVRVariablesGenerators + ArduinoAVRToolsGenerators } from '@mixly/arduino-avr'; import { @@ -86,7 +86,9 @@ addBoardFSItem(); Object.assign( Blockly.Blocks, ArduinoEthernetBlocks, + ArduinoProceduresBlocks, ArduinoTextBlocks, + ArduinoVariablesBlocks, ArduinoAVRActuatorBlocks, ArduinoAVRBlynkBlocks, ArduinoAVRCommunicateBlocks, @@ -99,13 +101,11 @@ Object.assign( ArduinoAVRLogicBlocks, ArduinoAVRMathBlocks, ArduinoAVRPinsBlocks, - ArduinoAVRProceduresBlocks, ArduinoAVRSensorBlocks, ArduinoAVRSerialBlocks, ArduinoAVRStorageBlocks, ArduinoAVRTextBlocks, ArduinoAVRToolsBlocks, - ArduinoAVRVariablesBlocks, ArduinoESP8266EthernetBlocks, ArduinoESP8266PinoutBlocks ); @@ -113,7 +113,9 @@ Object.assign( Object.assign( Blockly.Arduino.forBlock, ArduinoEthernetGenerators, + ArduinoProceduresGenerators, ArduinoTextGenerators, + ArduinoVariablesGenerators, ArduinoAVRActuatorGenerators, ArduinoAVRBlynkGenerators, ArduinoAVRCommunicateGenerators, @@ -126,13 +128,11 @@ Object.assign( ArduinoAVRLogicGenerators, ArduinoAVRMathGenerators, ArduinoAVRPinsGenerators, - ArduinoAVRProceduresGenerators, ArduinoAVRSensorGenerators, ArduinoAVRSerialGenerators, ArduinoAVRStorageGenerators, ArduinoAVRTextGenerators, ArduinoAVRToolsGenerators, - ArduinoAVRVariablesGenerators, ArduinoESP8266EthernetGenerators, ArduinoESP8266PinoutGenerators ); \ No newline at end of file