diff --git a/.gitignore b/.gitignore index 1e85899..e331a4f 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ */build/** */dist/** */.idea/** +.idea diff --git a/block-lexical-variables/src/blocks/lexical-variables.js b/block-lexical-variables/src/blocks/lexical-variables.js index 4a75fa7..da517a6 100644 --- a/block-lexical-variables/src/blocks/lexical-variables.js +++ b/block-lexical-variables/src/blocks/lexical-variables.js @@ -768,7 +768,7 @@ Blockly.Blocks['local_declaration_expression'] = { this.setStyle('variables_blocks'); this.initLocals(); // this.appendIndentedValueInput('RETURN') - this.appendValueInput('RETURN') + this.appendStatementInput('STACK') .appendField( Blockly.Msg.LANG_VARIABLES_LOCAL_DECLARATION_EXPRESSION_IN_RETURN); // Create plug for expression output diff --git a/block-lexical-variables/src/blocks/procedures.js b/block-lexical-variables/src/blocks/procedures.js index f634b75..58383fc 100644 --- a/block-lexical-variables/src/blocks/procedures.js +++ b/block-lexical-variables/src/blocks/procedures.js @@ -1056,3 +1056,12 @@ Blockly.Blocks['procedures_callreturn'] = { removeProcedureValue: Blockly.Blocks.procedures_callnoreturn.removeProcedureValue, }; + +Blockly.Blocks['procedures_ifreturn'] = { + init: function() { + this.appendValueInput('VALUE').appendField( + "RETURN"); + this.setPreviousStatement(true); + this.setStyle('procedure_blocks'); + }, +}; \ No newline at end of file diff --git a/block-lexical-variables/src/generators/lexical-variables.js b/block-lexical-variables/src/generators/lexical-variables.js index ff738ba..6d96a3a 100644 --- a/block-lexical-variables/src/generators/lexical-variables.js +++ b/block-lexical-variables/src/generators/lexical-variables.js @@ -67,7 +67,26 @@ javascriptGenerator['local_declaration_statement'] = function() { return code; }; -javascriptGenerator['local_declaration_expression'] = function() { - // TODO - return 'NOT IMPLEMENTED YET'; + +Blockly.JavaScript['local_declaration_expression'] = function() { + let code = '(function() {\n '; + let hasVar = this.getFieldValue('VAR0') + if(hasVar) { + code += 'let ' + for (let i=0; this.getFieldValue('VAR' + i); i++) { + code += (Shared.usePrefixInCode ? 'local_' : '') + + this.getFieldValue('VAR' + i); + code += ' = ' + ( Blockly.JavaScript.valueToCode(this, + 'DECL' + i, Blockly.JavaScript.ORDER_NONE) || '0' ); + code += ', '; + } + // Get rid of the last comma + code = code.slice(0, -2); + code += ';\n'; + } + + code += Blockly.JavaScript.statementToCode(this, 'STACK', + Blockly.JavaScript.ORDER_NONE); + code += '\n})()\n'; + return [code, Blockly.JavaScript.ORDER_NONE]; }; diff --git a/block-lexical-variables/src/generators/procedures.js b/block-lexical-variables/src/generators/procedures.js index 1522da5..c9edc0e 100644 --- a/block-lexical-variables/src/generators/procedures.js +++ b/block-lexical-variables/src/generators/procedures.js @@ -22,3 +22,8 @@ javascriptGenerator['procedures_callreturn'] = function(block) { const code = funcName + '(' + args.join(', ') + ')'; return [code, javascriptGenerator.ORDER_FUNCTION_CALL]; }; + +Blockly.JavaScript['procedures_ifreturn'] = function (block) { + let retVal = Blockly.JavaScript.valueToCode(block, 'VALUE', Blockly.JavaScript.ORDER_ATOMIC); + return '\nreturn ' + retVal + ';\n' +}; \ No newline at end of file