Prevent collisions between user functions and helper functions.

This commit is contained in:
Neil Fraser
2016-06-12 12:19:08 -07:00
parent 97000e725f
commit 477562b597
8 changed files with 21 additions and 16 deletions

View File

@@ -251,7 +251,7 @@ Blockly.JavaScript['math_on_list'] = function(block) {
code = 'Math.max.apply(null, ' + list + ')';
break;
case 'AVERAGE':
// math_median([null,null,1,3]) == 2.0.
// mathMean([null,null,1,3]) == 2.0.
var functionName = Blockly.JavaScript.provideFunction_(
'mathMean',
[ 'function ' + Blockly.JavaScript.FUNCTION_NAME_PLACEHOLDER_ +
@@ -264,7 +264,7 @@ Blockly.JavaScript['math_on_list'] = function(block) {
code = functionName + '(' + list + ')';
break;
case 'MEDIAN':
// math_median([null,null,1,3]) == 2.0.
// mathMedian([null,null,1,3]) == 2.0.
var functionName = Blockly.JavaScript.provideFunction_(
'mathMedian',
[ 'function ' + Blockly.JavaScript.FUNCTION_NAME_PLACEHOLDER_ +

View File

@@ -49,14 +49,15 @@ Blockly.JavaScript['procedures_defreturn'] = function(block) {
returnValue = ' return ' + returnValue + ';\n';
}
var args = [];
for (var x = 0; x < block.arguments_.length; x++) {
args[x] = Blockly.JavaScript.variableDB_.getName(block.arguments_[x],
for (var i = 0; i < block.arguments_.length; i++) {
args[i] = Blockly.JavaScript.variableDB_.getName(block.arguments_[i],
Blockly.Variables.NAME_TYPE);
}
var code = 'function ' + funcName + '(' + args.join(', ') + ') {\n' +
branch + returnValue + '}';
code = Blockly.JavaScript.scrub_(block, code);
Blockly.JavaScript.definitions_[funcName] = code;
// Add % so as not to collide with helper functions in definitions list.
Blockly.JavaScript.definitions_['%' + funcName] = code;
return null;
};
@@ -70,8 +71,8 @@ Blockly.JavaScript['procedures_callreturn'] = function(block) {
var funcName = Blockly.JavaScript.variableDB_.getName(
block.getFieldValue('NAME'), Blockly.Procedures.NAME_TYPE);
var args = [];
for (var x = 0; x < block.arguments_.length; x++) {
args[x] = Blockly.JavaScript.valueToCode(block, 'ARG' + x,
for (var i = 0; i < block.arguments_.length; i++) {
args[i] = Blockly.JavaScript.valueToCode(block, 'ARG' + i,
Blockly.JavaScript.ORDER_COMMA) || 'null';
}
var code = funcName + '(' + args.join(', ') + ')';
@@ -83,8 +84,8 @@ Blockly.JavaScript['procedures_callnoreturn'] = function(block) {
var funcName = Blockly.JavaScript.variableDB_.getName(
block.getFieldValue('NAME'), Blockly.Procedures.NAME_TYPE);
var args = [];
for (var x = 0; x < block.arguments_.length; x++) {
args[x] = Blockly.JavaScript.valueToCode(block, 'ARG' + x,
for (var i = 0; i < block.arguments_.length; i++) {
args[i] = Blockly.JavaScript.valueToCode(block, 'ARG' + i,
Blockly.JavaScript.ORDER_COMMA) || 'null';
}
var code = funcName + '(' + args.join(', ') + ');\n';