diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-12-02 20:14:30 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-12-02 20:14:30 +0000 |
| commit | a2871ec4e2afd4a8bff033f8488b1c207d4c7a70 (patch) | |
| tree | 4d862239dcdb2a848c5a91ddbf6d5dea1c301b37 /src/main/java | |
| parent | 924780282799cf9a26e1f93d43c197af8828c6f0 (diff) | |
Extract generateFreeVariables()
Diffstat (limited to 'src/main/java')
| -rw-r--r-- | src/main/java/org/shedlang/compiler/shid/ShidCodeGen.java | 27 |
1 files changed, 16 insertions, 11 deletions
diff --git a/src/main/java/org/shedlang/compiler/shid/ShidCodeGen.java b/src/main/java/org/shedlang/compiler/shid/ShidCodeGen.java index 47190813..3d52861e 100644 --- a/src/main/java/org/shedlang/compiler/shid/ShidCodeGen.java +++ b/src/main/java/org/shedlang/compiler/shid/ShidCodeGen.java @@ -252,22 +252,13 @@ public class ShidCodeGen { context = context.exitBlock(); - var freeVariables = FreeVariables.builder(); - for (var shedFreeVariable : body.freeVariables()) { - var freeVariableLocalName = context.shedVariableToLocal(shedFreeVariable.name()); - for (var freeVariableSource : shedFreeVariable.referenceSources()) { - freeVariables = freeVariables.plus( - freeVariableLocalName, - freeVariableSource - ); - } - } + var freeVariables = generateFreeVariables(body.freeVariables(), context); var defineFunctionInstruction = new ShidDefineFunction( name, positionalParams, namedParams, - freeVariables.build(), + freeVariables, bodyInstructions, source ); @@ -275,6 +266,20 @@ public class ShidCodeGen { return context.addInstruction(defineFunctionInstruction); } + private static FreeVariables generateFreeVariables(FreeVariables shedFreeVariables, Context context) { + var freeVariables = FreeVariables.builder(); + for (var shedFreeVariable : shedFreeVariables) { + var freeVariableLocalName = context.shedVariableToLocal(shedFreeVariable.name()); + for (var freeVariableSource : shedFreeVariable.referenceSources()) { + freeVariables = freeVariables.plus( + freeVariableLocalName, + freeVariableSource + ); + } + } + return freeVariables.build(); + } + private static Context compileFunctionDefinition( TypedFunctionDefinitionNode node, Context context |
