From c7562ae41dc5531e82698c50c9080a9e36fefda3 Mon Sep 17 00:00:00 2001 From: Maribeth Bottorff Date: Fri, 25 Aug 2023 14:49:02 -0700 Subject: [PATCH 1/5] feat: add getVariableName and getProcedureName to CodeGenerator --- core/generator.ts | 36 +++++++++++++++++++++++++++++++++++ tests/mocha/generator_test.js | 31 ++++++++++++++++++++++++++++++ 2 files changed, 67 insertions(+) diff --git a/core/generator.ts b/core/generator.ts index 67a30a790fc..f91c5153f83 100644 --- a/core/generator.ts +++ b/core/generator.ts @@ -495,6 +495,42 @@ export class CodeGenerator { return this.functionNames_[desiredName]; } + /** + * Gets a unique, legal name for a user-defined variable. + * Before calling this method, the `nameDB_` property of the class + * must have been initialized already. This is typically done in + * the `init` function of the code generator class. + * + * @param nameOrId The ID of the variable to get a name for, + * or the proposed name for a variable not associated with an id. + * @returns A unique, legal name for the variable. + */ + getVariableName(nameOrId: string): string { + return this.getName(nameOrId, NameType.VARIABLE); + } + + /** + * Gets a unique, legal name for a user-defined procedure. + * Before calling this method, the `nameDB_` property of the class + * must have been initialized already. This is typically done in + * the `init` function of the code generator class. + * + * @param name The proposed name for a procedure. + * @returns A unique, legal name for the procedure. + */ + getProcedureName(name: string): string { + return this.getName(name, NameType.PROCEDURE); + } + + private getName(nameOrId: string, type: NameType): string { + if (!this.nameDB_) { + throw new Error( + 'Name database is not defined. You must initialize `nameDB_` in your generator class and call `init`.', + ); + } + return this.nameDB_.getName(nameOrId, type); + } + /** * Hook for code to run before code generation starts. * Subclasses may override this, e.g. to initialise the database of variable diff --git a/tests/mocha/generator_test.js b/tests/mocha/generator_test.js index eea386432a9..9ac67b27ca3 100644 --- a/tests/mocha/generator_test.js +++ b/tests/mocha/generator_test.js @@ -190,5 +190,36 @@ suite('Generator', function () { }); }); }); + + suite('Names', function () { + setup(function () { + class TestGenerator extends Blockly.CodeGenerator { + init() { + super.init(); + this.nameDB_ = sinon.createStubInstance(Blockly.Names, { + getName: 'foo', + }); + } + } + this.generator = new TestGenerator(); + }); + test('No nameDB_ initialized', function () { + chai.assert.throws(() => { + this.generator.getVariableName('foo'); + }); + }); + + test('Get variable name', function () { + this.generator.init(); + + chai.assert.equal(this.generator.getVariableName('foo'), 'foo'); + }); + + test('Get procedure name', function () { + this.generator.init(); + + chai.assert.equal(this.generator.getProcedureName('foo'), 'foo'); + }); + }); }); }); From 0c4439fbbea3ce84823ede482d8b5d6a3291f3d7 Mon Sep 17 00:00:00 2001 From: Maribeth Bottorff Date: Mon, 28 Aug 2023 14:33:23 -0700 Subject: [PATCH 2/5] feat: make nameDB_ public --- core/generator.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/generator.ts b/core/generator.ts index f91c5153f83..fa80dbc63dc 100644 --- a/core/generator.ts +++ b/core/generator.ts @@ -109,7 +109,7 @@ export class CodeGenerator { protected functionNames_: {[key: string]: string} = Object.create(null); /** A database of variable and procedure names. */ - protected nameDB_?: Names = undefined; + nameDB_?: Names = undefined; /** @param name Language name of this generator. */ constructor(name: string) { @@ -525,7 +525,7 @@ export class CodeGenerator { private getName(nameOrId: string, type: NameType): string { if (!this.nameDB_) { throw new Error( - 'Name database is not defined. You must initialize `nameDB_` in your generator class and call `init`.', + 'Name database is not defined. You must initialize `nameDB_` in your generator class and call `init` first.', ); } return this.nameDB_.getName(nameOrId, type); From f131d5c7f4081be9fdca2dd3295faebadd6c7c56 Mon Sep 17 00:00:00 2001 From: Maribeth Bottorff Date: Mon, 28 Aug 2023 14:33:48 -0700 Subject: [PATCH 3/5] feat: update block code generators to use new APIs --- generators/dart/loops.js | 6 ++---- generators/dart/math.js | 3 +-- generators/dart/procedures.js | 8 +++----- generators/dart/text.js | 3 +-- generators/dart/variables.js | 6 ++---- generators/javascript/loops.js | 7 +++---- generators/javascript/math.js | 3 +-- generators/javascript/procedures.js | 8 +++----- generators/javascript/text.js | 3 +-- generators/javascript/variables.js | 6 ++---- generators/lua/loops.js | 6 ++---- generators/lua/math.js | 3 +-- generators/lua/procedures.js | 8 +++----- generators/lua/text.js | 3 +-- generators/lua/variables.js | 6 ++---- generators/php/loops.js | 5 ++--- generators/php/math.js | 3 +-- generators/php/procedures.js | 13 ++++++------- generators/php/text.js | 3 +-- generators/php/variables.js | 6 ++---- generators/python/loops.js | 6 ++---- generators/python/math.js | 4 +--- generators/python/procedures.js | 14 ++++++-------- generators/python/python_generator.js | 2 +- generators/python/text.js | 3 +-- generators/python/variables.js | 6 ++---- 26 files changed, 53 insertions(+), 91 deletions(-) diff --git a/generators/dart/loops.js b/generators/dart/loops.js index b7735abf90b..9bdf0b9027d 100644 --- a/generators/dart/loops.js +++ b/generators/dart/loops.js @@ -63,8 +63,7 @@ export function controls_whileUntil(block, generator) { export function controls_for(block, generator) { // For loop. const variable0 = - generator.nameDB_.getName( - block.getFieldValue('VAR'), NameType.VARIABLE); + generator.getVariableName(block.getFieldValue('VAR')); const argument0 = generator.valueToCode(block, 'FROM', Order.ASSIGNMENT) || '0'; const argument1 = @@ -129,8 +128,7 @@ export function controls_for(block, generator) { export function controls_forEach(block, generator) { // For each loop. const variable0 = - generator.nameDB_.getName( - block.getFieldValue('VAR'), NameType.VARIABLE); + generator.getVariableName(block.getFieldValue('VAR')); const argument0 = generator.valueToCode(block, 'LIST', Order.ASSIGNMENT) || '[]'; let branch = generator.statementToCode(block, 'DO'); diff --git a/generators/dart/math.js b/generators/dart/math.js index 3d15d5a2f0d..e5381249e1b 100644 --- a/generators/dart/math.js +++ b/generators/dart/math.js @@ -224,8 +224,7 @@ export function math_change(block, generator) { const argument0 = generator.valueToCode(block, 'DELTA', Order.ADDITIVE) || '0'; const varName = - generator.nameDB_.getName( - block.getFieldValue('VAR'), NameType.VARIABLE); + generator.getVariableName(block.getFieldValue('VAR')); return varName + ' = (' + varName + ' is num ? ' + varName + ' : 0) + ' + argument0 + ';\n'; }; diff --git a/generators/dart/procedures.js b/generators/dart/procedures.js index c8d61cc8101..71ad2b6cf0f 100644 --- a/generators/dart/procedures.js +++ b/generators/dart/procedures.js @@ -18,8 +18,7 @@ import {Order} from './dart_generator.js'; export function procedures_defreturn(block, generator) { // Define a procedure with a return value. const funcName = - generator.nameDB_.getName( - block.getFieldValue('NAME'), NameType.PROCEDURE); + generator.getProcedureName(block.getFieldValue('NAME')); let xfix1 = ''; if (generator.STATEMENT_PREFIX) { xfix1 += generator.injectId(generator.STATEMENT_PREFIX, block); @@ -51,7 +50,7 @@ export function procedures_defreturn(block, generator) { const args = []; const variables = block.getVars(); for (let i = 0; i < variables.length; i++) { - args[i] = generator.nameDB_.getName(variables[i], NameType.VARIABLE); + args[i] = generator.getVariableName(variables[i]); } let code = returnType + ' ' + funcName + '(' + args.join(', ') + ') {\n' + xfix1 + loopTrap + branch + xfix2 + returnValue + '}'; @@ -68,8 +67,7 @@ export const procedures_defnoreturn = procedures_defreturn; export function procedures_callreturn(block, generator) { // Call a procedure with a return value. const funcName = - generator.nameDB_.getName( - block.getFieldValue('NAME'),NameType.PROCEDURE); + generator.getProcedureName(block.getFieldValue('NAME')); const args = []; const variables = block.getVars(); for (let i = 0; i < variables.length; i++) { diff --git a/generators/dart/text.js b/generators/dart/text.js index a1dcade42b5..c4070000f8a 100644 --- a/generators/dart/text.js +++ b/generators/dart/text.js @@ -57,8 +57,7 @@ export function text_join(block, generator) { export function text_append(block, generator) { // Append to a variable in place. const varName = - generator.nameDB_.getName( - block.getFieldValue('VAR'), NameType.VARIABLE); + generator.getVariableName(block.getFieldValue('VAR')); const value = generator.valueToCode(block, 'TEXT', Order.NONE) || "''"; return varName + ' = [' + varName + ', ' + value + '].join();\n'; }; diff --git a/generators/dart/variables.js b/generators/dart/variables.js index 2f628e39c12..5a72293aad7 100644 --- a/generators/dart/variables.js +++ b/generators/dart/variables.js @@ -18,8 +18,7 @@ import {Order} from './dart_generator.js'; export function variables_get(block, generator) { // Variable getter. const code = - generator.nameDB_.getName( - block.getFieldValue('VAR'), NameType.VARIABLE); + generator.getVariableName(block.getFieldValue('VAR')); return [code, Order.ATOMIC]; }; @@ -28,7 +27,6 @@ export function variables_set(block, generator) { const argument0 = generator.valueToCode(block, 'VALUE', Order.ASSIGNMENT) || '0'; const varName = - generator.nameDB_.getName( - block.getFieldValue('VAR'), NameType.VARIABLE); + generator.getVariableName(block.getFieldValue('VAR')); return varName + ' = ' + argument0 + ';\n'; }; diff --git a/generators/javascript/loops.js b/generators/javascript/loops.js index c93438b56a6..c0b7d2ac62c 100644 --- a/generators/javascript/loops.js +++ b/generators/javascript/loops.js @@ -66,8 +66,8 @@ export function controls_whileUntil(block, generator) { export function controls_for(block, generator) { // For loop. const variable0 = - generator.nameDB_.getName( - block.getFieldValue('VAR'), NameType.VARIABLE); + generator.getVariableName( + block.getFieldValue('VAR')); const argument0 = generator.valueToCode(block, 'FROM', Order.ASSIGNMENT) || '0'; const argument1 = @@ -129,8 +129,7 @@ export function controls_for(block, generator) { export function controls_forEach(block, generator) { // For each loop. const variable0 = - generator.nameDB_.getName( - block.getFieldValue('VAR'), NameType.VARIABLE); + generator.getVariableName(block.getFieldValue('VAR')); const argument0 = generator.valueToCode(block, 'LIST', Order.ASSIGNMENT) || '[]'; diff --git a/generators/javascript/math.js b/generators/javascript/math.js index ecba635232a..9f682579144 100644 --- a/generators/javascript/math.js +++ b/generators/javascript/math.js @@ -203,8 +203,7 @@ export function math_change(block, generator) { // Add to a variable in place. const argument0 = generator.valueToCode(block, 'DELTA', Order.ADDITION) || '0'; - const varName = generator.nameDB_.getName( - block.getFieldValue('VAR'), NameType.VARIABLE); + const varName = generator.getVariableName(block.getFieldValue('VAR')); return varName + ' = (typeof ' + varName + ' === \'number\' ? ' + varName + ' : 0) + ' + argument0 + ';\n'; }; diff --git a/generators/javascript/procedures.js b/generators/javascript/procedures.js index baa0ebe484c..abdec1b593d 100644 --- a/generators/javascript/procedures.js +++ b/generators/javascript/procedures.js @@ -17,8 +17,7 @@ import {Order} from './javascript_generator.js'; export function procedures_defreturn(block, generator) { // Define a procedure with a return value. - const funcName = generator.nameDB_.getName( - block.getFieldValue('NAME'), NameType.PROCEDURE); + const funcName = generator.getProcedureName(block.getFieldValue('NAME')); let xfix1 = ''; if (generator.STATEMENT_PREFIX) { xfix1 += generator.injectId( @@ -53,7 +52,7 @@ export function procedures_defreturn(block, generator) { const variables = block.getVars(); for (let i = 0; i < variables.length; i++) { args[i] = - generator.nameDB_.getName(variables[i], NameType.VARIABLE); + generator.getVariableName(variables[i]); } let code = 'function ' + funcName + '(' + args.join(', ') + ') {\n' + xfix1 + loopTrap + branch + xfix2 + returnValue + '}'; @@ -69,8 +68,7 @@ export const procedures_defnoreturn = procedures_defreturn; export function procedures_callreturn(block, generator) { // Call a procedure with a return value. - const funcName = generator.nameDB_.getName( - block.getFieldValue('NAME'), NameType.PROCEDURE); + const funcName = generator.getProcedureName(block.getFieldValue('NAME')); const args = []; const variables = block.getVars(); for (let i = 0; i < variables.length; i++) { diff --git a/generators/javascript/text.js b/generators/javascript/text.js index e3761293bc1..0a23800470b 100644 --- a/generators/javascript/text.js +++ b/generators/javascript/text.js @@ -102,8 +102,7 @@ export function text_join(block, generator) { export function text_append(block, generator) { // Append to a variable in place. - const varName = generator.nameDB_.getName( - block.getFieldValue('VAR'), NameType.VARIABLE); + const varName = generator.getVariableName(block.getFieldValue('VAR')); const value = generator.valueToCode(block, 'TEXT', Order.NONE) || "''"; const code = varName + ' += ' + diff --git a/generators/javascript/variables.js b/generators/javascript/variables.js index e67ce645b90..d2f16575040 100644 --- a/generators/javascript/variables.js +++ b/generators/javascript/variables.js @@ -17,8 +17,7 @@ import {Order} from './javascript_generator.js'; export function variables_get(block, generator) { // Variable getter. - const code = generator.nameDB_.getName(block.getFieldValue('VAR'), - NameType.VARIABLE); + const code = generator.getVariableName(block.getFieldValue('VAR')); return [code, Order.ATOMIC]; }; @@ -26,7 +25,6 @@ export function variables_set(block, generator) { // Variable setter. const argument0 = generator.valueToCode( block, 'VALUE', Order.ASSIGNMENT) || '0'; - const varName = generator.nameDB_.getName( - block.getFieldValue('VAR'), NameType.VARIABLE); + const varName = generator.getVariableName(block.getFieldValue('VAR')); return varName + ' = ' + argument0 + ';\n'; }; diff --git a/generators/lua/loops.js b/generators/lua/loops.js index 3c613cb98cb..4ef296a5eb6 100644 --- a/generators/lua/loops.js +++ b/generators/lua/loops.js @@ -88,8 +88,7 @@ export function controls_whileUntil(block, generator) { export function controls_for(block, generator) { // For loop. const variable0 = - generator.nameDB_.getName( - block.getFieldValue('VAR'), NameType.VARIABLE); + generator.getVariableName(block.getFieldValue('VAR')); const startVar = generator.valueToCode(block, 'FROM', Order.NONE) || '0'; const endVar = generator.valueToCode(block, 'TO', Order.NONE) || '0'; const increment = generator.valueToCode(block, 'BY', Order.NONE) || '1'; @@ -130,8 +129,7 @@ export function controls_for(block, generator) { export function controls_forEach(block, generator) { // For each loop. const variable0 = - generator.nameDB_.getName( - block.getFieldValue('VAR'), NameType.VARIABLE); + generator.getVariableName(block.getFieldValue('VAR')); const argument0 = generator.valueToCode(block, 'LIST', Order.NONE) || '{}'; let branch = generator.statementToCode(block, 'DO'); branch = generator.addLoopTrap(branch, block); diff --git a/generators/lua/math.js b/generators/lua/math.js index eb9f55a39e6..bf2bf4b7512 100644 --- a/generators/lua/math.js +++ b/generators/lua/math.js @@ -186,8 +186,7 @@ export function math_change(block, generator) { const argument0 = generator.valueToCode(block, 'DELTA', Order.ADDITIVE) || '0'; const varName = - generator.nameDB_.getName( - block.getFieldValue('VAR'), NameType.VARIABLE); + generator.getVariableName(block.getFieldValue('VAR')); return varName + ' = ' + varName + ' + ' + argument0 + '\n'; }; diff --git a/generators/lua/procedures.js b/generators/lua/procedures.js index cff655aaeb0..c92fa62576b 100644 --- a/generators/lua/procedures.js +++ b/generators/lua/procedures.js @@ -18,8 +18,7 @@ import {Order} from './lua_generator.js'; export function procedures_defreturn(block, generator) { // Define a procedure with a return value. const funcName = - generator.nameDB_.getName( - block.getFieldValue('NAME'), NameType.PROCEDURE); + generator.getProcedureName(block.getFieldValue('NAME')); let xfix1 = ''; if (generator.STATEMENT_PREFIX) { xfix1 += generator.injectId(generator.STATEMENT_PREFIX, block); @@ -51,7 +50,7 @@ export function procedures_defreturn(block, generator) { const args = []; const variables = block.getVars(); for (let i = 0; i < variables.length; i++) { - args[i] = generator.nameDB_.getName(variables[i], NameType.VARIABLE); + args[i] = generator.getVariableName(variables[i]); } let code = 'function ' + funcName + '(' + args.join(', ') + ')\n' + xfix1 + loopTrap + branch + xfix2 + returnValue + 'end\n'; @@ -68,8 +67,7 @@ export const procedures_defnoreturn = procedures_defreturn; export function procedures_callreturn(block, generator) { // Call a procedure with a return value. const funcName = - generator.nameDB_.getName( - block.getFieldValue('NAME'), NameType.PROCEDURE); + generator.getProcedureName(block.getFieldValue('NAME')); const args = []; const variables = block.getVars(); for (let i = 0; i < variables.length; i++) { diff --git a/generators/lua/text.js b/generators/lua/text.js index 2cf13f7c6c8..4e9ae5d0c90 100644 --- a/generators/lua/text.js +++ b/generators/lua/text.js @@ -58,8 +58,7 @@ export function text_join(block, generator) { export function text_append(block, generator) { // Append to a variable in place. const varName = - generator.nameDB_.getName( - block.getFieldValue('VAR'), NameType.VARIABLE); + generator.getVariableName(block.getFieldValue('VAR')); const value = generator.valueToCode(block, 'TEXT', Order.CONCATENATION) || "''"; return varName + ' = ' + varName + ' .. ' + value + '\n'; diff --git a/generators/lua/variables.js b/generators/lua/variables.js index f149f88416d..31941b98cbf 100644 --- a/generators/lua/variables.js +++ b/generators/lua/variables.js @@ -18,8 +18,7 @@ import {Order} from './lua_generator.js'; export function variables_get(block, generator) { // Variable getter. const code = - generator.nameDB_.getName( - block.getFieldValue('VAR'), NameType.VARIABLE); + generator.getVariableName(block.getFieldValue('VAR')); return [code, Order.ATOMIC]; }; @@ -27,7 +26,6 @@ export function variables_set(block, generator) { // Variable setter. const argument0 = generator.valueToCode(block, 'VALUE', Order.NONE) || '0'; const varName = - generator.nameDB_.getName( - block.getFieldValue('VAR'), NameType.VARIABLE); + generator.getVariableName(block.getFieldValue('VAR'); return varName + ' = ' + argument0 + '\n'; }; diff --git a/generators/php/loops.js b/generators/php/loops.js index 3e2cfab7453..2fa8460b0e4 100644 --- a/generators/php/loops.js +++ b/generators/php/loops.js @@ -62,7 +62,7 @@ export function controls_whileUntil(block, generator) { export function controls_for(block, generator) { // For loop. const variable0 = - generator.nameDB_.getName(block.getFieldValue('VAR'), NameType.VARIABLE); + generator.getVariableName(block.getFieldValue('VAR')); const argument0 = generator.valueToCode(block, 'FROM', Order.ASSIGNMENT) || '0'; const argument1 = @@ -127,8 +127,7 @@ export function controls_for(block, generator) { export function controls_forEach(block, generator) { // For each loop. const variable0 = - generator.nameDB_.getName( - block.getFieldValue('VAR'), NameType.VARIABLE); + generator.getVariableName(block.getFieldValue('VAR')); const argument0 = generator.valueToCode(block, 'LIST', Order.ASSIGNMENT) || '[]'; let branch = generator.statementToCode(block, 'DO'); diff --git a/generators/php/math.js b/generators/php/math.js index b5cd5340423..5b8a9f3df21 100644 --- a/generators/php/math.js +++ b/generators/php/math.js @@ -199,8 +199,7 @@ export function math_change(block, generator) { const argument0 = generator.valueToCode(block, 'DELTA', Order.ADDITION) || '0'; const varName = - generator.nameDB_.getName( - block.getFieldValue('VAR'), NameType.VARIABLE); + generator.getVariableName(block.getFieldValue('VAR')); return varName + ' += ' + argument0 + ';\n'; }; diff --git a/generators/php/procedures.js b/generators/php/procedures.js index 9ff0de082e7..26fe11bf998 100644 --- a/generators/php/procedures.js +++ b/generators/php/procedures.js @@ -23,10 +23,11 @@ export function procedures_defreturn(block, generator) { const globals = []; const workspace = block.workspace; const usedVariables = Variables.allUsedVarModels(workspace) || []; - for (let i = 0, variable; variable = usedVariables[i]; i++) { + for (const variable of usedVariables) { const varName = variable.name; + // getVars returns parameter names, not ids, for procedure blocks if (block.getVars().indexOf(varName) === -1) { - globals.push(generator.nameDB_.getName(varName, NameType.VARIABLE)); + globals.push(generator.getVariableName(varName)); } } // Add developer variables. @@ -41,8 +42,7 @@ export function procedures_defreturn(block, generator) { generator.INDENT + 'global ' + globals.join(', ') + ';\n' : ''; const funcName = - generator.nameDB_.getName( - block.getFieldValue('NAME'), NameType.PROCEDURE); + generator.getProcedureName(block.getFieldValue('NAME')); let xfix1 = ''; if (generator.STATEMENT_PREFIX) { xfix1 += generator.injectId(generator.STATEMENT_PREFIX, block); @@ -72,7 +72,7 @@ export function procedures_defreturn(block, generator) { const args = []; const variables = block.getVars(); for (let i = 0; i < variables.length; i++) { - args[i] = generator.nameDB_.getName(variables[i], NameType.VARIABLE); + args[i] = generator.getVariableName(variables[i]); } let code = 'function ' + funcName + '(' + args.join(', ') + ') {\n' + globalStr + xfix1 + loopTrap + branch + xfix2 + returnValue + '}'; @@ -89,8 +89,7 @@ export const procedures_defnoreturn = procedures_defreturn; export function procedures_callreturn(block, generator) { // Call a procedure with a return value. const funcName = - generator.nameDB_.getName( - block.getFieldValue('NAME'), NameType.PROCEDURE); + generator.getProcedureName(block.getFieldValue('NAME')); const args = []; const variables = block.getVars(); for (let i = 0; i < variables.length; i++) { diff --git a/generators/php/text.js b/generators/php/text.js index 91da583a819..fc5d01c0444 100644 --- a/generators/php/text.js +++ b/generators/php/text.js @@ -58,8 +58,7 @@ export function text_join(block, generator) { export function text_append(block, generator) { // Append to a variable in place. const varName = - generator.nameDB_.getName( - block.getFieldValue('VAR'), NameType.VARIABLE); + generator.getVariableName(block.getFieldValue('VAR')); const value = generator.valueToCode(block, 'TEXT', Order.ASSIGNMENT) || "''"; return varName + ' .= ' + value + ';\n'; diff --git a/generators/php/variables.js b/generators/php/variables.js index f29274da7ab..7813ccf2400 100644 --- a/generators/php/variables.js +++ b/generators/php/variables.js @@ -18,8 +18,7 @@ import {Order} from './php_generator.js'; export function variables_get(block, generator) { // Variable getter. const code = - generator.nameDB_.getName( - block.getFieldValue('VAR'), NameType.VARIABLE); + generator.getVariableName(block.getFieldValue('VAR')); return [code, Order.ATOMIC]; }; @@ -28,7 +27,6 @@ export function variables_set(block, generator) { const argument0 = generator.valueToCode(block, 'VALUE', Order.ASSIGNMENT) || '0'; const varName = - generator.nameDB_.getName( - block.getFieldValue('VAR'), NameType.VARIABLE); + generator.getVariableName(block.getFieldValue('VAR')); return varName + ' = ' + argument0 + ';\n'; }; diff --git a/generators/python/loops.js b/generators/python/loops.js index f66d90802f9..0a99f9f556a 100644 --- a/generators/python/loops.js +++ b/generators/python/loops.js @@ -59,8 +59,7 @@ export function controls_whileUntil(block, generator) { export function controls_for(block, generator) { // For loop. const variable0 = - generator.nameDB_.getName( - block.getFieldValue('VAR'), NameType.VARIABLE); + generator.getVariableName(block.getFieldValue('VAR')); let argument0 = generator.valueToCode(block, 'FROM', Order.NONE) || '0'; let argument1 = generator.valueToCode(block, 'TO', Order.NONE) || '0'; let increment = generator.valueToCode(block, 'BY', Order.NONE) || '1'; @@ -168,8 +167,7 @@ def ${generator.FUNCTION_NAME_PLACEHOLDER_}(start, stop, step): export function controls_forEach(block, generator) { // For each loop. const variable0 = - generator.nameDB_.getName( - block.getFieldValue('VAR'), NameType.VARIABLE); + generator.getVariableName(block.getFieldValue('VAR')); const argument0 = generator.valueToCode(block, 'LIST', Order.RELATIONAL) || '[]'; let branch = generator.statementToCode(block, 'DO'); diff --git a/generators/python/math.js b/generators/python/math.js index da792346c7b..9ee0ed86b8a 100644 --- a/generators/python/math.js +++ b/generators/python/math.js @@ -217,9 +217,7 @@ export function math_change(block, generator) { 'from numbers import Number'; const argument0 = generator.valueToCode(block, 'DELTA', Order.ADDITIVE) || '0'; - const varName = - generator.nameDB_.getName( - block.getFieldValue('VAR'), NameType.VARIABLE); + const varName = generator.getVariableName(block.getFieldValue('VAR')); return varName + ' = (' + varName + ' if isinstance(' + varName + ', Number) else 0) + ' + argument0 + '\n'; }; diff --git a/generators/python/procedures.js b/generators/python/procedures.js index 65e17ddc346..443817e2096 100644 --- a/generators/python/procedures.js +++ b/generators/python/procedures.js @@ -23,12 +23,12 @@ export function procedures_defreturn(block, generator) { const globals = []; const workspace = block.workspace; const usedVariables = Variables.allUsedVarModels(workspace) || []; - for (let i = 0, variable; (variable = usedVariables[i]); i++) { + for (const variable of usedVariables) { const varName = variable.name; + // getVars returns parameter names, not ids, for procedure blocks if (block.getVars().indexOf(varName) === -1) { - globals.push(generator.nameDB_.getName(varName, NameType.VARIABLE)); + globals.push(generator.getVariableName(varName)); } - } // Add developer variables. const devVarList = Variables.allDeveloperVariables(workspace); for (let i = 0; i < devVarList.length; i++) { @@ -41,8 +41,7 @@ export function procedures_defreturn(block, generator) { generator.INDENT + 'global ' + globals.join(', ') + '\n' : ''; const funcName = - generator.nameDB_.getName( - block.getFieldValue('NAME'), NameType.PROCEDURE); + generator.getProcedureName(block.getFieldValue('NAME')); let xfix1 = ''; if (generator.STATEMENT_PREFIX) { xfix1 += generator.injectId(generator.STATEMENT_PREFIX, block); @@ -75,7 +74,7 @@ export function procedures_defreturn(block, generator) { const args = []; const variables = block.getVars(); for (let i = 0; i < variables.length; i++) { - args[i] = generator.nameDB_.getName(variables[i], NameType.VARIABLE); + args[i] = generator.getVariableName(variables[i]); } let code = 'def ' + funcName + '(' + args.join(', ') + '):\n' + globalString + xfix1 + loopTrap + branch + xfix2 + returnValue; @@ -92,8 +91,7 @@ export const procedures_defnoreturn = procedures_defreturn; export function procedures_callreturn(block, generator) { // Call a procedure with a return value. const funcName = - generator.nameDB_.getName( - block.getFieldValue('NAME'), NameType.PROCEDURE); + generator.getProcedureName(block.getFieldValue('NAME')); const args = []; const variables = block.getVars(); for (let i = 0; i < variables.length; i++) { diff --git a/generators/python/python_generator.js b/generators/python/python_generator.js index 5e5836c476f..8aa145857c4 100644 --- a/generators/python/python_generator.js +++ b/generators/python/python_generator.js @@ -180,7 +180,7 @@ export class PythonGenerator extends CodeGenerator { const variables = Variables.allUsedVarModels(workspace); for (let i = 0; i < variables.length; i++) { defvars.push( - this.nameDB_.getName(variables[i].getId(), NameType.VARIABLE) + + this.getVariableName(variables[i].getId()) + ' = None'); } diff --git a/generators/python/text.js b/generators/python/text.js index 84fef551563..1331d9215a7 100644 --- a/generators/python/text.js +++ b/generators/python/text.js @@ -88,8 +88,7 @@ export function text_join(block, generator) { export function text_append(block, generator) { // Append to a variable in place. const varName = - generator.nameDB_.getName( - block.getFieldValue('VAR'), NameType.VARIABLE); + generator.getVariableName(block.getFieldValue('VAR')); const value = generator.valueToCode(block, 'TEXT', Order.NONE) || "''"; return varName + ' = str(' + varName + ') + ' + forceString(value)[0] + '\n'; }; diff --git a/generators/python/variables.js b/generators/python/variables.js index 5228bb89225..d9bf1f0cb31 100644 --- a/generators/python/variables.js +++ b/generators/python/variables.js @@ -18,8 +18,7 @@ import {Order} from './python_generator.js'; export function variables_get(block, generator) { // Variable getter. const code = - generator.nameDB_.getName( - block.getFieldValue('VAR'), NameType.VARIABLE); + generator.getVariableName(block.getFieldValue('VAR')); return [code, Order.ATOMIC]; }; @@ -28,7 +27,6 @@ export function variables_set(block, generator) { const argument0 = generator.valueToCode(block, 'VALUE', Order.NONE) || '0'; const varName = - generator.nameDB_.getName( - block.getFieldValue('VAR'), NameType.VARIABLE); + generator.getVariableName(block.getFieldValue('VAR')); return varName + ' = ' + argument0 + '\n'; }; From c20d95f8029226ef014022e84c28e6eb0a5b7644 Mon Sep 17 00:00:00 2001 From: Maribeth Bottorff Date: Mon, 28 Aug 2023 14:52:17 -0700 Subject: [PATCH 4/5] chore: fix build --- generators/lua/variables.js | 2 +- generators/python/procedures.js | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/generators/lua/variables.js b/generators/lua/variables.js index 31941b98cbf..1e1463b0fa3 100644 --- a/generators/lua/variables.js +++ b/generators/lua/variables.js @@ -26,6 +26,6 @@ export function variables_set(block, generator) { // Variable setter. const argument0 = generator.valueToCode(block, 'VALUE', Order.NONE) || '0'; const varName = - generator.getVariableName(block.getFieldValue('VAR'); + generator.getVariableName(block.getFieldValue('VAR')); return varName + ' = ' + argument0 + '\n'; }; diff --git a/generators/python/procedures.js b/generators/python/procedures.js index 443817e2096..1a508c47a1a 100644 --- a/generators/python/procedures.js +++ b/generators/python/procedures.js @@ -29,6 +29,7 @@ export function procedures_defreturn(block, generator) { if (block.getVars().indexOf(varName) === -1) { globals.push(generator.getVariableName(varName)); } + } // Add developer variables. const devVarList = Variables.allDeveloperVariables(workspace); for (let i = 0; i < devVarList.length; i++) { From 615d0a2d877789973ec958384c00a1d9e13bd106 Mon Sep 17 00:00:00 2001 From: Maribeth Bottorff Date: Mon, 28 Aug 2023 15:16:46 -0700 Subject: [PATCH 5/5] chore: remove unused imports --- generators/dart/math.js | 1 - generators/dart/procedures.js | 1 - generators/dart/text.js | 1 - generators/dart/variables.js | 1 - generators/javascript/math.js | 1 - generators/javascript/procedures.js | 1 - generators/javascript/text.js | 1 - generators/javascript/variables.js | 1 - generators/lua/math.js | 1 - generators/lua/procedures.js | 1 - generators/lua/text.js | 1 - generators/lua/variables.js | 1 - generators/php/math.js | 1 - generators/php/text.js | 1 - generators/php/variables.js | 1 - generators/python/math.js | 1 - generators/python/python_generator.js | 2 +- generators/python/variables.js | 1 - 18 files changed, 1 insertion(+), 18 deletions(-) diff --git a/generators/dart/math.js b/generators/dart/math.js index e5381249e1b..ef47b69c2f5 100644 --- a/generators/dart/math.js +++ b/generators/dart/math.js @@ -11,7 +11,6 @@ import * as goog from '../../closure/goog/goog.js'; goog.declareModuleId('Blockly.Dart.math'); -import {NameType} from '../../core/names.js'; import {Order} from './dart_generator.js'; diff --git a/generators/dart/procedures.js b/generators/dart/procedures.js index 71ad2b6cf0f..fa1567d9d24 100644 --- a/generators/dart/procedures.js +++ b/generators/dart/procedures.js @@ -11,7 +11,6 @@ import * as goog from '../../closure/goog/goog.js'; goog.declareModuleId('Blockly.Dart.procedures'); -import {NameType} from '../../core/names.js'; import {Order} from './dart_generator.js'; diff --git a/generators/dart/text.js b/generators/dart/text.js index c4070000f8a..86857b1d912 100644 --- a/generators/dart/text.js +++ b/generators/dart/text.js @@ -11,7 +11,6 @@ import * as goog from '../../closure/goog/goog.js'; goog.declareModuleId('Blockly.Dart.texts'); -import {NameType} from '../../core/names.js'; import {Order} from './dart_generator.js'; diff --git a/generators/dart/variables.js b/generators/dart/variables.js index 5a72293aad7..1ead651e077 100644 --- a/generators/dart/variables.js +++ b/generators/dart/variables.js @@ -11,7 +11,6 @@ import * as goog from '../../closure/goog/goog.js'; goog.declareModuleId('Blockly.Dart.variables'); -import {NameType} from '../../core/names.js'; import {Order} from './dart_generator.js'; diff --git a/generators/javascript/math.js b/generators/javascript/math.js index 9f682579144..b35f836f699 100644 --- a/generators/javascript/math.js +++ b/generators/javascript/math.js @@ -12,7 +12,6 @@ import * as goog from '../../closure/goog/goog.js'; goog.declareModuleId('Blockly.JavaScript.math'); -import {NameType} from '../../core/names.js'; import {Order} from './javascript_generator.js'; diff --git a/generators/javascript/procedures.js b/generators/javascript/procedures.js index abdec1b593d..5609054dff7 100644 --- a/generators/javascript/procedures.js +++ b/generators/javascript/procedures.js @@ -11,7 +11,6 @@ import * as goog from '../../closure/goog/goog.js'; goog.declareModuleId('Blockly.JavaScript.procedures'); -import {NameType} from '../../core/names.js'; import {Order} from './javascript_generator.js'; diff --git a/generators/javascript/text.js b/generators/javascript/text.js index 0a23800470b..f38e404d0b5 100644 --- a/generators/javascript/text.js +++ b/generators/javascript/text.js @@ -11,7 +11,6 @@ import * as goog from '../../closure/goog/goog.js'; goog.declareModuleId('Blockly.JavaScript.texts'); -import {NameType} from '../../core/names.js'; import {Order} from './javascript_generator.js'; diff --git a/generators/javascript/variables.js b/generators/javascript/variables.js index d2f16575040..b6764cd09a9 100644 --- a/generators/javascript/variables.js +++ b/generators/javascript/variables.js @@ -11,7 +11,6 @@ import * as goog from '../../closure/goog/goog.js'; goog.declareModuleId('Blockly.JavaScript.variables'); -import {NameType} from '../../core/names.js'; import {Order} from './javascript_generator.js'; diff --git a/generators/lua/math.js b/generators/lua/math.js index bf2bf4b7512..a40529597e8 100644 --- a/generators/lua/math.js +++ b/generators/lua/math.js @@ -11,7 +11,6 @@ import * as goog from '../../closure/goog/goog.js'; goog.declareModuleId('Blockly.Lua.math'); -import {NameType} from '../../core/names.js'; import {Order} from './lua_generator.js'; diff --git a/generators/lua/procedures.js b/generators/lua/procedures.js index c92fa62576b..46f4632ac25 100644 --- a/generators/lua/procedures.js +++ b/generators/lua/procedures.js @@ -11,7 +11,6 @@ import * as goog from '../../closure/goog/goog.js'; goog.declareModuleId('Blockly.Lua.procedures'); -import {NameType} from '../../core/names.js'; import {Order} from './lua_generator.js'; diff --git a/generators/lua/text.js b/generators/lua/text.js index 4e9ae5d0c90..cdd50ffa5c9 100644 --- a/generators/lua/text.js +++ b/generators/lua/text.js @@ -11,7 +11,6 @@ import * as goog from '../../closure/goog/goog.js'; goog.declareModuleId('Blockly.Lua.texts'); -import {NameType} from '../../core/names.js'; import {Order} from './lua_generator.js'; diff --git a/generators/lua/variables.js b/generators/lua/variables.js index 1e1463b0fa3..077a916d557 100644 --- a/generators/lua/variables.js +++ b/generators/lua/variables.js @@ -11,7 +11,6 @@ import * as goog from '../../closure/goog/goog.js'; goog.declareModuleId('Blockly.Lua.variables'); -import {NameType} from '../../core/names.js'; import {Order} from './lua_generator.js'; diff --git a/generators/php/math.js b/generators/php/math.js index 5b8a9f3df21..1cf93ce0e53 100644 --- a/generators/php/math.js +++ b/generators/php/math.js @@ -11,7 +11,6 @@ import * as goog from '../../closure/goog/goog.js'; goog.declareModuleId('Blockly.PHP.math'); -import {NameType} from '../../core/names.js'; import {Order} from './php_generator.js'; diff --git a/generators/php/text.js b/generators/php/text.js index fc5d01c0444..2860d7ced64 100644 --- a/generators/php/text.js +++ b/generators/php/text.js @@ -11,7 +11,6 @@ import * as goog from '../../closure/goog/goog.js'; goog.declareModuleId('Blockly.PHP.texts'); -import {NameType} from '../../core/names.js'; import {Order} from './php_generator.js'; diff --git a/generators/php/variables.js b/generators/php/variables.js index 7813ccf2400..2f0bc562c57 100644 --- a/generators/php/variables.js +++ b/generators/php/variables.js @@ -11,7 +11,6 @@ import * as goog from '../../closure/goog/goog.js'; goog.declareModuleId('Blockly.PHP.variables'); -import {NameType} from '../../core/names.js'; import {Order} from './php_generator.js'; diff --git a/generators/python/math.js b/generators/python/math.js index 9ee0ed86b8a..844d6966b52 100644 --- a/generators/python/math.js +++ b/generators/python/math.js @@ -11,7 +11,6 @@ import * as goog from '../../closure/goog/goog.js'; goog.declareModuleId('Blockly.Python.math'); -import {NameType} from '../../core/names.js'; import {Order} from './python_generator.js'; diff --git a/generators/python/python_generator.js b/generators/python/python_generator.js index 8aa145857c4..156170822d7 100644 --- a/generators/python/python_generator.js +++ b/generators/python/python_generator.js @@ -16,7 +16,7 @@ import * as stringUtils from '../../core/utils/string.js'; import * as Variables from '../../core/variables.js'; // import type {Block} from '../../core/block.js'; import {CodeGenerator} from '../../core/generator.js'; -import {Names, NameType} from '../../core/names.js'; +import {Names} from '../../core/names.js'; // import type {Workspace} from '../../core/workspace.js'; import {inputTypes} from '../../core/inputs/input_types.js'; diff --git a/generators/python/variables.js b/generators/python/variables.js index d9bf1f0cb31..f383a48b033 100644 --- a/generators/python/variables.js +++ b/generators/python/variables.js @@ -11,7 +11,6 @@ import * as goog from '../../closure/goog/goog.js'; goog.declareModuleId('Blockly.Python.variables'); -import {NameType} from '../../core/names.js'; import {Order} from './python_generator.js';