Add extra suffix when generating if/return block.

Also fix loops in Lua.
This commit is contained in:
Neil Fraser
2019-05-13 14:26:38 -07:00
committed by Neil Fraser
parent ba18ae2159
commit 0259f8bb48
11 changed files with 117 additions and 79 deletions

View File

@@ -40,7 +40,7 @@ Blockly.Dart['controls_repeat_ext'] = function(block) {
Blockly.Dart.ORDER_ASSIGNMENT) || '0';
}
var branch = Blockly.Dart.statementToCode(block, 'DO');
branch = Blockly.Dart.addLoopTrap(branch, block.id);
branch = Blockly.Dart.addLoopTrap(branch, block);
var code = '';
var loopVar = Blockly.Dart.variableDB_.getDistinctName(
'count', Blockly.Variables.NAME_TYPE);
@@ -66,7 +66,7 @@ Blockly.Dart['controls_whileUntil'] = function(block) {
until ? Blockly.Dart.ORDER_UNARY_PREFIX :
Blockly.Dart.ORDER_NONE) || 'false';
var branch = Blockly.Dart.statementToCode(block, 'DO');
branch = Blockly.Dart.addLoopTrap(branch, block.id);
branch = Blockly.Dart.addLoopTrap(branch, block);
if (until) {
argument0 = '!' + argument0;
}
@@ -84,7 +84,7 @@ Blockly.Dart['controls_for'] = function(block) {
var increment = Blockly.Dart.valueToCode(block, 'BY',
Blockly.Dart.ORDER_ASSIGNMENT) || '1';
var branch = Blockly.Dart.statementToCode(block, 'DO');
branch = Blockly.Dart.addLoopTrap(branch, block.id);
branch = Blockly.Dart.addLoopTrap(branch, block);
var code;
if (Blockly.isNumber(argument0) && Blockly.isNumber(argument1) &&
Blockly.isNumber(increment)) {
@@ -145,7 +145,7 @@ Blockly.Dart['controls_forEach'] = function(block) {
var argument0 = Blockly.Dart.valueToCode(block, 'LIST',
Blockly.Dart.ORDER_ASSIGNMENT) || '[]';
var branch = Blockly.Dart.statementToCode(block, 'DO');
branch = Blockly.Dart.addLoopTrap(branch, block.id);
branch = Blockly.Dart.addLoopTrap(branch, block);
var code = 'for (var ' + variable0 + ' in ' + argument0 + ') {\n' +
branch + '}\n';
return code;

View File

@@ -34,20 +34,19 @@ Blockly.Dart['procedures_defreturn'] = function(block) {
var funcName = Blockly.Dart.variableDB_.getName(block.getFieldValue('NAME'),
Blockly.Procedures.NAME_TYPE);
var branch = Blockly.Dart.statementToCode(block, 'STACK');
var id = block.id.replace(/\$/g, '$$$$'); // Issue 251.
if (Blockly.Dart.STATEMENT_SUFFIX) {
branch = Blockly.Dart.prefixLines(
Blockly.Dart.STATEMENT_SUFFIX.replace(/%1/g, '\'' + id + '\''),
Blockly.Dart.injectId(Blockly.Dart.STATEMENT_SUFFIX, block),
Blockly.Dart.INDENT) + branch;
}
if (Blockly.Dart.INFINITE_LOOP_TRAP) {
branch = Blockly.Dart.prefixLines(
Blockly.Dart.INFINITE_LOOP_TRAP.replace(/%1/g, '\'' + id + '\''),
Blockly.Dart.injectId(Blockly.Dart.INFINITE_LOOP_TRAP, block),
Blockly.Dart.INDENT) + branch;
}
if (Blockly.Dart.STATEMENT_PREFIX) {
branch = Blockly.Dart.prefixLines(
Blockly.Dart.STATEMENT_PREFIX.replace(/%1/g, '\'' + id + '\''),
Blockly.Dart.injectId(Blockly.Dart.STATEMENT_PREFIX, block),
Blockly.Dart.INDENT) + branch;
}
var returnValue = Blockly.Dart.valueToCode(block, 'RETURN',
@@ -104,6 +103,13 @@ Blockly.Dart['procedures_ifreturn'] = function(block) {
var condition = Blockly.Dart.valueToCode(block, 'CONDITION',
Blockly.Dart.ORDER_NONE) || 'false';
var code = 'if (' + condition + ') {\n';
if (Blockly.Dart.STATEMENT_SUFFIX) {
// Inject any statement suffix here since the regular one at the end
// will not get executed if the return is triggered.
code += Blockly.Dart.prefixLines(
Blockly.Dart.injectId(Blockly.Dart.STATEMENT_SUFFIX, block),
Blockly.Dart.INDENT);
}
if (block.hasReturnValue_) {
var value = Blockly.Dart.valueToCode(block, 'VALUE',
Blockly.Dart.ORDER_NONE) || 'null';