mirror of
https://github.com/google/blockly.git
synced 2026-01-04 23:50:12 +01:00
Cache list value in JS foreach loops.
This commit is contained in:
@@ -111,7 +111,7 @@ Blockly.JavaScript['controls_for'] = function(block) {
|
||||
// Cache non-trivial values to variables to prevent repeated look-ups.
|
||||
var startVar = argument0;
|
||||
if (!argument0.match(/^\w+$/) && !Blockly.isNumber(argument0)) {
|
||||
var startVar = Blockly.JavaScript.variableDB_.getDistinctName(
|
||||
startVar = Blockly.JavaScript.variableDB_.getDistinctName(
|
||||
variable0 + '_start', Blockly.Variables.NAME_TYPE);
|
||||
code += 'var ' + startVar + ' = ' + argument0 + ';\n';
|
||||
}
|
||||
@@ -152,12 +152,19 @@ Blockly.JavaScript['controls_forEach'] = function(block) {
|
||||
Blockly.JavaScript.ORDER_ASSIGNMENT) || '[]';
|
||||
var branch = Blockly.JavaScript.statementToCode(block, 'DO');
|
||||
branch = Blockly.JavaScript.addLoopTrap(branch, block.id);
|
||||
var code = '';
|
||||
// Cache non-trivial values to variables to prevent repeated look-ups.
|
||||
var listVar = argument0;
|
||||
if (!argument0.match(/^\w+$/)) {
|
||||
listVar = Blockly.JavaScript.variableDB_.getDistinctName(
|
||||
variable0 + '_list', Blockly.Variables.NAME_TYPE);
|
||||
code += 'var ' + listVar + ' = ' + argument0 + ';\n';
|
||||
}
|
||||
var indexVar = Blockly.JavaScript.variableDB_.getDistinctName(
|
||||
variable0 + '_index', Blockly.Variables.NAME_TYPE);
|
||||
branch = Blockly.JavaScript.INDENT + variable0 + ' = ' +
|
||||
argument0 + '[' + indexVar + '];\n' + branch;
|
||||
var code = 'for (var ' + indexVar + ' in ' + argument0 + ') {\n' +
|
||||
branch + '}\n';
|
||||
listVar + '[' + indexVar + '];\n' + branch;
|
||||
code += 'for (var ' + indexVar + ' in ' + listVar + ') {\n' + branch + '}\n';
|
||||
return code;
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user