From a2871ec4e2afd4a8bff033f8488b1c207d4c7a70 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sat, 2 Dec 2023 20:14:30 +0000 Subject: Extract generateFreeVariables() --- .../org/shedlang/compiler/shid/ShidCodeGen.java | 27 +++++++++++++--------- 1 file changed, 16 insertions(+), 11 deletions(-) (limited to 'src/main/java') 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 -- cgit v1.2.3