Skip to content

Commit 03e8f08

Browse files
committed
Move methods into definitions
1 parent d2bc58f commit 03e8f08

File tree

2 files changed

+17
-18
lines changed

2 files changed

+17
-18
lines changed

src/blocks/mrc_class_method_def.ts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -337,12 +337,13 @@ export const setup = function() {
337337
Blockly.Blocks[PARAM_CONTAINER_BLOCK_NAME] = METHOD_PARAM_CONTAINER;
338338
};
339339

340-
import { Order, PythonGenerator } from 'blockly/python';
340+
import { Order } from 'blockly/python';
341+
import { ExtendedPythonGenerator } from '../editor/extended_python_generator';
341342

342343

343344
export const pythonFromBlock = function (
344345
block: ClassMethodDefBlock,
345-
generator: PythonGenerator,
346+
generator: ExtendedPythonGenerator,
346347
) {
347348
const blocklyName = block.mrcPythonMethodName ? block.mrcPythonMethodName : block.getFieldValue('NAME');
348349

@@ -378,6 +379,9 @@ export const pythonFromBlock = function (
378379
// After executing the function body, revisit this block for the return.
379380
xfix2 = xfix1;
380381
}
382+
if(block.mrcPythonMethodName == '__init__'){
383+
branch = generator.INDENT + "self.mechanisms = []\n" + branch;
384+
}
381385
if (returnValue) {
382386
returnValue = generator.INDENT + 'return ' + returnValue + '\n';
383387
} else if (!branch) {
@@ -397,11 +401,6 @@ export const pythonFromBlock = function (
397401
'(' +
398402
paramString +
399403
'):\n';
400-
401-
if(block.mrcPythonMethodName == '__init__'){
402-
code += generator.INDENT + "self.mechanisms = []\n";
403-
404-
}
405404

406405
code +=
407406
xfix1 +
@@ -410,6 +409,7 @@ export const pythonFromBlock = function (
410409
xfix2 +
411410
returnValue;
412411
code = generator.scrub_(block, code);
412+
generator.addMethod(funcName, code);
413413

414414
return code;
415415
}

src/editor/extended_python_generator.ts

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,9 @@ export class ExtendedPythonGenerator extends PythonGenerator {
158158
addImport(importModule: string): void {
159159
this.definitions_['import_' + importModule] = 'import ' + importModule;
160160
}
161+
addMethod(methodName: string, code : string): void {
162+
this.definitions_['%' + methodName] = code;
163+
}
161164

162165
classParentFromModuleType(moduleType : string) : string{
163166
if(moduleType == commonStorage.MODULE_TYPE_PROJECT){
@@ -186,31 +189,27 @@ export class ExtendedPythonGenerator extends PythonGenerator {
186189
// Convert the definitions dictionary into a list.
187190
const imports = [];
188191
const definitions = [];
192+
const methods = [];
189193
for (let name in this.definitions_) {
190194
const def = this.definitions_[name];
191195
if (def.match(/^(from\s+\S+\s+)?import\s+\S+/)) {
192196
imports.push(def);
193-
} else {
197+
} else if (name.match(/^%.*/)){
198+
methods.push(def);
199+
} else{
194200
definitions.push(def);
195201
}
196202
}
197-
// Call Blockly.CodeGenerator's finish. This is required to be done this way
198-
// because we derive from PythonGenerator which dervies from CodeGenerator
199-
// This section except for the class_def part is all copied from Blockly's
200-
// PythonGenerator. It can't be derived because it needs the class insertion
201-
// in the middle.
202-
code = Blockly.CodeGenerator.prototype.finish(code);
203+
this.definitions_ = Object.create(null);
204+
this.functionNames_ = Object.create(null);
203205
this.isInitialized = false;
204206

205207
let class_def = "class " + className + "(" + classParent + "):\n";
206-
if (!code) {
207-
code = "pass";
208-
}
209208

210209
this.nameDB_!.reset();
211210
const allDefs = imports.join('\n') + '\n\n' + definitions.join('\n\n');
212211
return allDefs.replace(/\n\n+/g, '\n\n').replace(/\n*$/, '\n\n\n') + class_def +
213-
this.prefixLines(code, this.INDENT);
212+
this.prefixLines(methods.join('\n\n'), this.INDENT);
214213
}
215214
}
216215

0 commit comments

Comments
 (0)