aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-12-02 20:14:30 +0000
committerMichael Williamson <mike@zwobble.org>2023-12-02 20:14:30 +0000
commita2871ec4e2afd4a8bff033f8488b1c207d4c7a70 (patch)
tree4d862239dcdb2a848c5a91ddbf6d5dea1c301b37 /src/main/java
parent924780282799cf9a26e1f93d43c197af8828c6f0 (diff)
Extract generateFreeVariables()
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/shid/ShidCodeGen.java27
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