mirror of
https://github.com/google/blockly.git
synced 2026-01-11 02:47:09 +01:00
Add extra suffix when generating if/return block.
Also fix loops in Lua.
This commit is contained in:
@@ -198,12 +198,11 @@ Blockly.Generator.prototype.blockToCode = function(block, opt_thisOnly) {
|
||||
}
|
||||
return [this.scrub_(block, code[0], opt_thisOnly), code[1]];
|
||||
} else if (typeof code == 'string') {
|
||||
var id = block.id.replace(/\$/g, '$$$$'); // Issue 251.
|
||||
if (this.STATEMENT_PREFIX) {
|
||||
code = this.STATEMENT_PREFIX.replace(/%1/g, '\'' + id + '\'') + code;
|
||||
code = this.injectId(this.STATEMENT_PREFIX, block) + code;
|
||||
}
|
||||
if (this.STATEMENT_SUFFIX) {
|
||||
code = code + this.STATEMENT_SUFFIX.replace(/%1/g, '\'' + id + '\'');
|
||||
code = code + this.injectId(this.STATEMENT_SUFFIX, block);
|
||||
}
|
||||
return this.scrub_(block, code, opt_thisOnly);
|
||||
} else if (code === null) {
|
||||
@@ -315,26 +314,37 @@ Blockly.Generator.prototype.statementToCode = function(block, name) {
|
||||
* statement executes), and a statement prefix to the end of the loop block
|
||||
* (right before the loop statement executes).
|
||||
* @param {string} branch Code for loop contents.
|
||||
* @param {string} id ID of enclosing block.
|
||||
* @param {!Blockly.Block} block Enclosing block.
|
||||
* @return {string} Loop contents, with infinite loop trap added.
|
||||
*/
|
||||
Blockly.Generator.prototype.addLoopTrap = function(branch, id) {
|
||||
id = id.replace(/\$/g, '$$$$'); // Issue 251.
|
||||
Blockly.Generator.prototype.addLoopTrap = function(branch, block) {
|
||||
if (this.INFINITE_LOOP_TRAP) {
|
||||
branch = this.prefixLines(this.INFINITE_LOOP_TRAP.replace(/%1/g,
|
||||
'\'' + id + '\''), this.INDENT) + branch;
|
||||
branch = this.prefixLines(this.injectId(this.INFINITE_LOOP_TRAP, block),
|
||||
this.INDENT) + branch;
|
||||
}
|
||||
if (this.STATEMENT_SUFFIX) {
|
||||
branch = this.prefixLines(this.STATEMENT_SUFFIX.replace(/%1/g,
|
||||
'\'' + id + '\''), this.INDENT) + branch;
|
||||
branch = this.prefixLines(this.injectId(this.STATEMENT_SUFFIX, block),
|
||||
this.INDENT) + branch;
|
||||
}
|
||||
if (this.STATEMENT_PREFIX) {
|
||||
branch = branch + this.prefixLines(this.STATEMENT_PREFIX.replace(/%1/g,
|
||||
'\'' + id + '\''), this.INDENT);
|
||||
branch = branch + this.prefixLines(this.injectId(this.STATEMENT_PREFIX,
|
||||
block), this.INDENT);
|
||||
}
|
||||
return branch;
|
||||
};
|
||||
|
||||
/**
|
||||
* Inject a block ID into a message to replace '%1'.
|
||||
* Used for STATEMENT_PREFIX, STATEMENT_SUFFIX, and INFINITE_LOOP_TRAP.
|
||||
* @param {string} msg Code snippet with '%1'.
|
||||
* @param {!Blockly.Block} block Block which has an ID.
|
||||
* @return {string} Code snippet with ID.
|
||||
*/
|
||||
Blockly.Generator.prototype.injectId = function(msg, block) {
|
||||
var id = block.id.replace(/\$/g, '$$$$'); // Issue 251.
|
||||
return msg.replace(/%1/g, '\'' + id + '\'');
|
||||
}
|
||||
|
||||
/**
|
||||
* Comma-separated list of reserved words.
|
||||
* @type {string}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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';
|
||||
|
||||
@@ -40,7 +40,7 @@ Blockly.JavaScript['controls_repeat_ext'] = function(block) {
|
||||
Blockly.JavaScript.ORDER_ASSIGNMENT) || '0';
|
||||
}
|
||||
var branch = Blockly.JavaScript.statementToCode(block, 'DO');
|
||||
branch = Blockly.JavaScript.addLoopTrap(branch, block.id);
|
||||
branch = Blockly.JavaScript.addLoopTrap(branch, block);
|
||||
var code = '';
|
||||
var loopVar = Blockly.JavaScript.variableDB_.getDistinctName(
|
||||
'count', Blockly.Variables.NAME_TYPE);
|
||||
@@ -67,7 +67,7 @@ Blockly.JavaScript['controls_whileUntil'] = function(block) {
|
||||
until ? Blockly.JavaScript.ORDER_LOGICAL_NOT :
|
||||
Blockly.JavaScript.ORDER_NONE) || 'false';
|
||||
var branch = Blockly.JavaScript.statementToCode(block, 'DO');
|
||||
branch = Blockly.JavaScript.addLoopTrap(branch, block.id);
|
||||
branch = Blockly.JavaScript.addLoopTrap(branch, block);
|
||||
if (until) {
|
||||
argument0 = '!' + argument0;
|
||||
}
|
||||
@@ -85,7 +85,7 @@ Blockly.JavaScript['controls_for'] = function(block) {
|
||||
var increment = Blockly.JavaScript.valueToCode(block, 'BY',
|
||||
Blockly.JavaScript.ORDER_ASSIGNMENT) || '1';
|
||||
var branch = Blockly.JavaScript.statementToCode(block, 'DO');
|
||||
branch = Blockly.JavaScript.addLoopTrap(branch, block.id);
|
||||
branch = Blockly.JavaScript.addLoopTrap(branch, block);
|
||||
var code;
|
||||
if (Blockly.isNumber(argument0) && Blockly.isNumber(argument1) &&
|
||||
Blockly.isNumber(increment)) {
|
||||
@@ -146,7 +146,7 @@ Blockly.JavaScript['controls_forEach'] = function(block) {
|
||||
var argument0 = Blockly.JavaScript.valueToCode(block, 'LIST',
|
||||
Blockly.JavaScript.ORDER_ASSIGNMENT) || '[]';
|
||||
var branch = Blockly.JavaScript.statementToCode(block, 'DO');
|
||||
branch = Blockly.JavaScript.addLoopTrap(branch, block.id);
|
||||
branch = Blockly.JavaScript.addLoopTrap(branch, block);
|
||||
var code = '';
|
||||
// Cache non-trivial values to variables to prevent repeated look-ups.
|
||||
var listVar = argument0;
|
||||
|
||||
@@ -34,20 +34,19 @@ Blockly.JavaScript['procedures_defreturn'] = function(block) {
|
||||
var funcName = Blockly.JavaScript.variableDB_.getName(
|
||||
block.getFieldValue('NAME'), Blockly.Procedures.NAME_TYPE);
|
||||
var branch = Blockly.JavaScript.statementToCode(block, 'STACK');
|
||||
var id = block.id.replace(/\$/g, '$$$$'); // Issue 251.
|
||||
if (Blockly.JavaScript.STATEMENT_SUFFIX) {
|
||||
branch = Blockly.JavaScript.prefixLines(
|
||||
Blockly.JavaScript.STATEMENT_SUFFIX.replace(/%1/g, '\'' + id + '\''),
|
||||
Blockly.JavaScript.injectId(Blockly.JavaScript.STATEMENT_SUFFIX, block),
|
||||
Blockly.JavaScript.INDENT) + branch;
|
||||
}
|
||||
if (Blockly.JavaScript.INFINITE_LOOP_TRAP) {
|
||||
branch = Blockly.JavaScript.prefixLines(
|
||||
Blockly.JavaScript.INFINITE_LOOP_TRAP.replace(/%1/g, '\'' + id + '\''),
|
||||
Blockly.JavaScript.INDENT) + branch;
|
||||
Blockly.JavaScript.injectId(Blockly.JavaScript.INFINITE_LOOP_TRAP,
|
||||
block), Blockly.JavaScript.INDENT) + branch;
|
||||
}
|
||||
if (Blockly.JavaScript.STATEMENT_PREFIX) {
|
||||
branch = Blockly.JavaScript.prefixLines(
|
||||
Blockly.JavaScript.STATEMENT_PREFIX.replace(/%1/g, '\'' + id + '\''),
|
||||
Blockly.JavaScript.injectId(Blockly.JavaScript.STATEMENT_PREFIX, block),
|
||||
Blockly.JavaScript.INDENT) + branch;
|
||||
}
|
||||
var returnValue = Blockly.JavaScript.valueToCode(block, 'RETURN',
|
||||
@@ -104,6 +103,14 @@ Blockly.JavaScript['procedures_ifreturn'] = function(block) {
|
||||
var condition = Blockly.JavaScript.valueToCode(block, 'CONDITION',
|
||||
Blockly.JavaScript.ORDER_NONE) || 'false';
|
||||
var code = 'if (' + condition + ') {\n';
|
||||
if (Blockly.JavaScript.STATEMENT_SUFFIX) {
|
||||
// Inject any statement suffix here since the regular one at the end
|
||||
// will not get executed if the return is triggered.
|
||||
var id = block.id.replace(/\$/g, '$$$$'); // Issue 251.
|
||||
code += Blockly.JavaScript.prefixLines(
|
||||
Blockly.JavaScript.injectId(Blockly.JavaScript.STATEMENT_SUFFIX, block),
|
||||
Blockly.JavaScript.INDENT);
|
||||
}
|
||||
if (block.hasReturnValue_) {
|
||||
var value = Blockly.JavaScript.valueToCode(block, 'VALUE',
|
||||
Blockly.JavaScript.ORDER_NONE) || 'null';
|
||||
|
||||
@@ -45,37 +45,34 @@ Blockly.Lua.CONTINUE_STATEMENT = 'goto continue\n';
|
||||
*
|
||||
* @param {string} branch Generated code of the loop body
|
||||
* @return {string} Generated label or '' if unnecessary
|
||||
* @private
|
||||
*/
|
||||
Blockly.Lua.addContinueLabel = function(branch) {
|
||||
if (branch.indexOf(Blockly.Lua.CONTINUE_STATEMENT) > -1) {
|
||||
Blockly.Lua.addContinueLabel_ = function(branch) {
|
||||
if (branch.indexOf(Blockly.Lua.CONTINUE_STATEMENT) != -1) {
|
||||
return branch + Blockly.Lua.INDENT + '::continue::\n';
|
||||
} else {
|
||||
return branch;
|
||||
}
|
||||
};
|
||||
|
||||
Blockly.Lua['controls_repeat'] = function(block) {
|
||||
// Repeat n times (internal number).
|
||||
var repeats = parseInt(block.getFieldValue('TIMES'), 10);
|
||||
var branch = Blockly.Lua.statementToCode(block, 'DO') || '';
|
||||
branch = Blockly.Lua.addContinueLabel(branch);
|
||||
var loopVar = Blockly.Lua.variableDB_.getDistinctName(
|
||||
'count', Blockly.Variables.NAME_TYPE);
|
||||
var code = 'for ' + loopVar + ' = 1, ' + repeats + ' do\n' + branch + 'end\n';
|
||||
return code;
|
||||
};
|
||||
|
||||
Blockly.Lua['controls_repeat_ext'] = function(block) {
|
||||
// Repeat n times (external number).
|
||||
var repeats = Blockly.Lua.valueToCode(block, 'TIMES',
|
||||
Blockly.Lua.ORDER_NONE) || '0';
|
||||
// Repeat n times.
|
||||
if (block.getField('TIMES')) {
|
||||
// Internal number.
|
||||
var repeats = String(Number(block.getFieldValue('TIMES')));
|
||||
} else {
|
||||
// External number.
|
||||
var repeats = Blockly.Lua.valueToCode(block, 'TIMES',
|
||||
Blockly.Lua.ORDER_NONE) || '0';
|
||||
}
|
||||
if (Blockly.isNumber(repeats)) {
|
||||
repeats = parseInt(repeats, 10);
|
||||
} else {
|
||||
repeats = 'math.floor(' + repeats + ')';
|
||||
}
|
||||
var branch = Blockly.Lua.statementToCode(block, 'DO') || '\n';
|
||||
branch = Blockly.Lua.addContinueLabel(branch);
|
||||
var branch = Blockly.Lua.statementToCode(block, 'DO');
|
||||
branch = Blockly.Lua.addLoopTrap(branch, block);
|
||||
branch = Blockly.Lua.addContinueLabel_(branch);
|
||||
var loopVar = Blockly.Lua.variableDB_.getDistinctName(
|
||||
'count', Blockly.Variables.NAME_TYPE);
|
||||
var code = 'for ' + loopVar + ' = 1, ' + repeats + ' do\n' +
|
||||
@@ -83,15 +80,17 @@ Blockly.Lua['controls_repeat_ext'] = function(block) {
|
||||
return code;
|
||||
};
|
||||
|
||||
Blockly.Lua['controls_repeat'] = Blockly.Lua['controls_repeat_ext'];
|
||||
|
||||
Blockly.Lua['controls_whileUntil'] = function(block) {
|
||||
// Do while/until loop.
|
||||
var until = block.getFieldValue('MODE') == 'UNTIL';
|
||||
var argument0 = Blockly.Lua.valueToCode(block, 'BOOL',
|
||||
until ? Blockly.Lua.ORDER_UNARY :
|
||||
Blockly.Lua.ORDER_NONE) || 'false';
|
||||
var branch = Blockly.Lua.statementToCode(block, 'DO') || '\n';
|
||||
branch = Blockly.Lua.addLoopTrap(branch, block.id);
|
||||
branch = Blockly.Lua.addContinueLabel(branch);
|
||||
var branch = Blockly.Lua.statementToCode(block, 'DO');
|
||||
branch = Blockly.Lua.addLoopTrap(branch, block);
|
||||
branch = Blockly.Lua.addContinueLabel_(branch);
|
||||
if (until) {
|
||||
argument0 = 'not ' + argument0;
|
||||
}
|
||||
@@ -108,9 +107,9 @@ Blockly.Lua['controls_for'] = function(block) {
|
||||
Blockly.Lua.ORDER_NONE) || '0';
|
||||
var increment = Blockly.Lua.valueToCode(block, 'BY',
|
||||
Blockly.Lua.ORDER_NONE) || '1';
|
||||
var branch = Blockly.Lua.statementToCode(block, 'DO') || '\n';
|
||||
branch = Blockly.Lua.addLoopTrap(branch, block.id);
|
||||
branch = Blockly.Lua.addContinueLabel(branch);
|
||||
var branch = Blockly.Lua.statementToCode(block, 'DO');
|
||||
branch = Blockly.Lua.addLoopTrap(branch, block);
|
||||
branch = Blockly.Lua.addContinueLabel_(branch);
|
||||
var code = '';
|
||||
var incValue;
|
||||
if (Blockly.isNumber(startVar) && Blockly.isNumber(endVar) &&
|
||||
@@ -147,8 +146,9 @@ Blockly.Lua['controls_forEach'] = function(block) {
|
||||
block.getFieldValue('VAR'), Blockly.Variables.NAME_TYPE);
|
||||
var argument0 = Blockly.Lua.valueToCode(block, 'LIST',
|
||||
Blockly.Lua.ORDER_NONE) || '{}';
|
||||
var branch = Blockly.Lua.statementToCode(block, 'DO') || '\n';
|
||||
branch = Blockly.Lua.addContinueLabel(branch);
|
||||
var branch = Blockly.Lua.statementToCode(block, 'DO');
|
||||
branch = Blockly.Lua.addLoopTrap(branch, block);
|
||||
branch = Blockly.Lua.addContinueLabel_(branch);
|
||||
var code = 'for _, ' + variable0 + ' in ipairs(' + argument0 + ') do \n' +
|
||||
branch + 'end\n';
|
||||
return code;
|
||||
|
||||
@@ -34,20 +34,19 @@ Blockly.Lua['procedures_defreturn'] = function(block) {
|
||||
var funcName = Blockly.Lua.variableDB_.getName(
|
||||
block.getFieldValue('NAME'), Blockly.Procedures.NAME_TYPE);
|
||||
var branch = Blockly.Lua.statementToCode(block, 'STACK');
|
||||
var id = block.id.replace(/\$/g, '$$$$'); // Issue 251.
|
||||
if (Blockly.Lua.STATEMENT_SUFFIX) {
|
||||
branch = Blockly.Lua.prefixLines(
|
||||
Blockly.Lua.STATEMENT_SUFFIX.replace(/%1/g, '\'' + id + '\''),
|
||||
Blockly.Lua.injectId(Blockly.Lua.STATEMENT_SUFFIX, block),
|
||||
Blockly.Lua.INDENT) + branch;
|
||||
}
|
||||
if (Blockly.Lua.INFINITE_LOOP_TRAP) {
|
||||
branch = Blockly.Lua.prefixLines(
|
||||
Blockly.Lua.INFINITE_LOOP_TRAP.replace(/%1/g, '\'' + id + '\''),
|
||||
Blockly.Lua.injectId(Blockly.Lua.INFINITE_LOOP_TRAP, block),
|
||||
Blockly.Lua.INDENT) + branch;
|
||||
}
|
||||
if (Blockly.Lua.STATEMENT_PREFIX) {
|
||||
branch = Blockly.Lua.prefixLines(
|
||||
Blockly.Lua.STATEMENT_PREFIX.replace(/%1/g, '\'' + id + '\''),
|
||||
Blockly.Lua.injectId(Blockly.Lua.STATEMENT_PREFIX, block),
|
||||
Blockly.Lua.INDENT) + branch;
|
||||
}
|
||||
var returnValue = Blockly.Lua.valueToCode(block, 'RETURN',
|
||||
@@ -106,6 +105,13 @@ Blockly.Lua['procedures_ifreturn'] = function(block) {
|
||||
var condition = Blockly.Lua.valueToCode(block, 'CONDITION',
|
||||
Blockly.Lua.ORDER_NONE) || 'false';
|
||||
var code = 'if ' + condition + ' then\n';
|
||||
if (Blockly.Lua.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.Lua.prefixLines(
|
||||
Blockly.Lua.injectId(Blockly.Lua.STATEMENT_SUFFIX, block),
|
||||
Blockly.Lua.INDENT);
|
||||
}
|
||||
if (block.hasReturnValue_) {
|
||||
var value = Blockly.Lua.valueToCode(block, 'VALUE',
|
||||
Blockly.Lua.ORDER_NONE) || 'nil';
|
||||
|
||||
@@ -40,7 +40,7 @@ Blockly.PHP['controls_repeat_ext'] = function(block) {
|
||||
Blockly.PHP.ORDER_ASSIGNMENT) || '0';
|
||||
}
|
||||
var branch = Blockly.PHP.statementToCode(block, 'DO');
|
||||
branch = Blockly.PHP.addLoopTrap(branch, block.id);
|
||||
branch = Blockly.PHP.addLoopTrap(branch, block);
|
||||
var code = '';
|
||||
var loopVar = Blockly.PHP.variableDB_.getDistinctName(
|
||||
'count', Blockly.Variables.NAME_TYPE);
|
||||
@@ -66,7 +66,7 @@ Blockly.PHP['controls_whileUntil'] = function(block) {
|
||||
until ? Blockly.PHP.ORDER_LOGICAL_NOT :
|
||||
Blockly.PHP.ORDER_NONE) || 'false';
|
||||
var branch = Blockly.PHP.statementToCode(block, 'DO');
|
||||
branch = Blockly.PHP.addLoopTrap(branch, block.id);
|
||||
branch = Blockly.PHP.addLoopTrap(branch, block);
|
||||
if (until) {
|
||||
argument0 = '!' + argument0;
|
||||
}
|
||||
@@ -84,7 +84,7 @@ Blockly.PHP['controls_for'] = function(block) {
|
||||
var increment = Blockly.PHP.valueToCode(block, 'BY',
|
||||
Blockly.PHP.ORDER_ASSIGNMENT) || '1';
|
||||
var branch = Blockly.PHP.statementToCode(block, 'DO');
|
||||
branch = Blockly.PHP.addLoopTrap(branch, block.id);
|
||||
branch = Blockly.PHP.addLoopTrap(branch, block);
|
||||
var code;
|
||||
if (Blockly.isNumber(argument0) && Blockly.isNumber(argument1) &&
|
||||
Blockly.isNumber(increment)) {
|
||||
@@ -145,7 +145,7 @@ Blockly.PHP['controls_forEach'] = function(block) {
|
||||
var argument0 = Blockly.PHP.valueToCode(block, 'LIST',
|
||||
Blockly.PHP.ORDER_ASSIGNMENT) || '[]';
|
||||
var branch = Blockly.PHP.statementToCode(block, 'DO');
|
||||
branch = Blockly.PHP.addLoopTrap(branch, block.id);
|
||||
branch = Blockly.PHP.addLoopTrap(branch, block);
|
||||
var code = '';
|
||||
code += 'foreach (' + argument0 + ' as ' + variable0 +
|
||||
') {\n' + branch + '}\n';
|
||||
|
||||
@@ -55,20 +55,19 @@ Blockly.PHP['procedures_defreturn'] = function(block) {
|
||||
var funcName = Blockly.PHP.variableDB_.getName(
|
||||
block.getFieldValue('NAME'), Blockly.Procedures.NAME_TYPE);
|
||||
var branch = Blockly.PHP.statementToCode(block, 'STACK');
|
||||
var id = block.id.replace(/\$/g, '$$$$'); // Issue 251.
|
||||
if (Blockly.PHP.STATEMENT_SUFFIX) {
|
||||
branch = Blockly.PHP.prefixLines(
|
||||
Blockly.PHP.STATEMENT_SUFFIX.replace(/%1/g, '\'' + id + '\''),
|
||||
Blockly.PHP.injectId(Blockly.PHP.STATEMENT_SUFFIX, block),
|
||||
Blockly.PHP.INDENT) + branch;
|
||||
}
|
||||
if (Blockly.PHP.INFINITE_LOOP_TRAP) {
|
||||
branch = Blockly.PHP.prefixLines(
|
||||
Blockly.PHP.INFINITE_LOOP_TRAP.replace(/%1/g, '\'' + id + '\''),
|
||||
Blockly.PHP.injectId(Blockly.PHP.INFINITE_LOOP_TRAP, block),
|
||||
Blockly.PHP.INDENT) + branch;
|
||||
}
|
||||
if (Blockly.PHP.STATEMENT_PREFIX) {
|
||||
branch = Blockly.PHP.prefixLines(
|
||||
Blockly.PHP.STATEMENT_PREFIX.replace(/%1/g, '\'' + id + '\''),
|
||||
Blockly.PHP.injectId(Blockly.PHP.STATEMENT_PREFIX, block),
|
||||
Blockly.PHP.INDENT) + branch;
|
||||
}
|
||||
var returnValue = Blockly.PHP.valueToCode(block, 'RETURN',
|
||||
@@ -125,6 +124,14 @@ Blockly.PHP['procedures_ifreturn'] = function(block) {
|
||||
var condition = Blockly.PHP.valueToCode(block, 'CONDITION',
|
||||
Blockly.PHP.ORDER_NONE) || 'false';
|
||||
var code = 'if (' + condition + ') {\n';
|
||||
if (Blockly.PHP.STATEMENT_SUFFIX) {
|
||||
// Inject any statement suffix here since the regular one at the end
|
||||
// will not get executed if the return is triggered.
|
||||
var id = block.id.replace(/\$/g, '$$$$'); // Issue 251.
|
||||
code += Blockly.PHP.prefixLines(
|
||||
Blockly.PHP.injectId(Blockly.PHP.STATEMENT_SUFFIX, block),
|
||||
Blockly.PHP.INDENT);
|
||||
}
|
||||
if (block.hasReturnValue_) {
|
||||
var value = Blockly.PHP.valueToCode(block, 'VALUE',
|
||||
Blockly.PHP.ORDER_NONE) || 'null';
|
||||
|
||||
@@ -45,8 +45,7 @@ Blockly.Python['controls_repeat_ext'] = function(block) {
|
||||
repeats = 'int(' + repeats + ')';
|
||||
}
|
||||
var branch = Blockly.Python.statementToCode(block, 'DO');
|
||||
branch = Blockly.Python.addLoopTrap(branch, block.id) ||
|
||||
Blockly.Python.PASS;
|
||||
branch = Blockly.Python.addLoopTrap(branch, block) || Blockly.Python.PASS;
|
||||
var loopVar = Blockly.Python.variableDB_.getDistinctName(
|
||||
'count', Blockly.Variables.NAME_TYPE);
|
||||
var code = 'for ' + loopVar + ' in range(' + repeats + '):\n' + branch;
|
||||
@@ -62,8 +61,7 @@ Blockly.Python['controls_whileUntil'] = function(block) {
|
||||
until ? Blockly.Python.ORDER_LOGICAL_NOT :
|
||||
Blockly.Python.ORDER_NONE) || 'False';
|
||||
var branch = Blockly.Python.statementToCode(block, 'DO');
|
||||
branch = Blockly.Python.addLoopTrap(branch, block.id) ||
|
||||
Blockly.Python.PASS;
|
||||
branch = Blockly.Python.addLoopTrap(branch, block) || Blockly.Python.PASS;
|
||||
if (until) {
|
||||
argument0 = 'not ' + argument0;
|
||||
}
|
||||
@@ -81,8 +79,7 @@ Blockly.Python['controls_for'] = function(block) {
|
||||
var increment = Blockly.Python.valueToCode(block, 'BY',
|
||||
Blockly.Python.ORDER_NONE) || '1';
|
||||
var branch = Blockly.Python.statementToCode(block, 'DO');
|
||||
branch = Blockly.Python.addLoopTrap(branch, block.id) ||
|
||||
Blockly.Python.PASS;
|
||||
branch = Blockly.Python.addLoopTrap(branch, block) || Blockly.Python.PASS;
|
||||
|
||||
var code = '';
|
||||
var range;
|
||||
@@ -193,8 +190,7 @@ Blockly.Python['controls_forEach'] = function(block) {
|
||||
var argument0 = Blockly.Python.valueToCode(block, 'LIST',
|
||||
Blockly.Python.ORDER_RELATIONAL) || '[]';
|
||||
var branch = Blockly.Python.statementToCode(block, 'DO');
|
||||
branch = Blockly.Python.addLoopTrap(branch, block.id) ||
|
||||
Blockly.Python.PASS;
|
||||
branch = Blockly.Python.addLoopTrap(branch, block) || Blockly.Python.PASS;
|
||||
var code = 'for ' + variable0 + ' in ' + argument0 + ':\n' + branch;
|
||||
return code;
|
||||
};
|
||||
|
||||
@@ -56,20 +56,19 @@ Blockly.Python['procedures_defreturn'] = function(block) {
|
||||
var funcName = Blockly.Python.variableDB_.getName(
|
||||
block.getFieldValue('NAME'), Blockly.Procedures.NAME_TYPE);
|
||||
var branch = Blockly.Python.statementToCode(block, 'STACK');
|
||||
var id = block.id.replace(/\$/g, '$$$$'); // Issue 251.
|
||||
if (Blockly.Python.STATEMENT_SUFFIX) {
|
||||
branch = Blockly.Python.prefixLines(
|
||||
Blockly.Python.STATEMENT_SUFFIX.replace( /%1/g, '\'' + id + '\''),
|
||||
Blockly.Python.injectId(Blockly.Python.STATEMENT_SUFFIX, block),
|
||||
Blockly.Python.INDENT) + branch;
|
||||
}
|
||||
if (Blockly.Python.INFINITE_LOOP_TRAP) {
|
||||
branch = Blockly.Python.prefixLines(
|
||||
Blockly.Python.INFINITE_LOOP_TRAP.replace(/%1/g, '\'' + id + '\''),
|
||||
Blockly.Python.injectId(Blockly.Python.INFINITE_LOOP_TRAP, block),
|
||||
Blockly.Python.INDENT) + branch;
|
||||
}
|
||||
if (Blockly.Python.STATEMENT_PREFIX) {
|
||||
branch = Blockly.Python.prefixLines(
|
||||
Blockly.Python.STATEMENT_PREFIX.replace( /%1/g, '\'' + id + '\''),
|
||||
Blockly.Python.injectId(Blockly.Python.STATEMENT_PREFIX, block),
|
||||
Blockly.Python.INDENT) + branch;
|
||||
}
|
||||
var returnValue = Blockly.Python.valueToCode(block, 'RETURN',
|
||||
@@ -128,6 +127,13 @@ Blockly.Python['procedures_ifreturn'] = function(block) {
|
||||
var condition = Blockly.Python.valueToCode(block, 'CONDITION',
|
||||
Blockly.Python.ORDER_NONE) || 'False';
|
||||
var code = 'if ' + condition + ':\n';
|
||||
if (Blockly.Python.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.Python.prefixLines(
|
||||
Blockly.Python.injectId(Blockly.Python.STATEMENT_SUFFIX, block),
|
||||
Blockly.Python.INDENT);
|
||||
}
|
||||
if (block.hasReturnValue_) {
|
||||
var value = Blockly.Python.valueToCode(block, 'VALUE',
|
||||
Blockly.Python.ORDER_NONE) || 'None';
|
||||
|
||||
Reference in New Issue
Block a user