diff options
| author | Michael Williamson <mike@zwobble.org> | 2025-01-12 22:00:07 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2025-01-12 22:00:14 +0000 |
| commit | a3aadd9903e64a7a459227e28feeee03d05560b3 (patch) | |
| tree | 9a165fe3e590660dbb8cd24853d25084b3aa757c /src/main/java | |
| parent | 2d8959f02570b18d318ab5e75d4f90128ea4fcd0 (diff) | |
Lift Shid param to top-level
Diffstat (limited to 'src/main/java')
7 files changed, 34 insertions, 31 deletions
diff --git a/src/main/java/org/shedlang/compiler/shid/ShidCodeGen.java b/src/main/java/org/shedlang/compiler/shid/ShidCodeGen.java index 194d4708..2c371d4b 100644 --- a/src/main/java/org/shedlang/compiler/shid/ShidCodeGen.java +++ b/src/main/java/org/shedlang/compiler/shid/ShidCodeGen.java @@ -199,14 +199,14 @@ public class ShidCodeGen { var c = context; var positionalParams = params.positional().stream() - .map(param -> new ShidDefineFunction.Param( + .map(param -> new ShidParam( c.shedVariableToLocal(param.name()), param.source() )) .toList(); var namedParams = params.named().stream() - .map(param -> new ShidDefineFunction.Param( + .map(param -> new ShidParam( c.shedVariableToLocal(param.name()), param.source() )) @@ -446,19 +446,19 @@ public class ShidCodeGen { new ShidLocalLoad(receiverLocalName, node.source()) ); - var shidPositionalParams = new ArrayList<ShidDefineFunction.Param>(); + var shidPositionalParams = new ArrayList<ShidParam>(); for (var positionalParamName : shedPositionalParamNames) { var shidParamName = context.shedVariableToLocal(positionalParamName); - shidPositionalParams.add(new ShidDefineFunction.Param(shidParamName, node.source())); + shidPositionalParams.add(new ShidParam(shidParamName, node.source())); context = context.addInstruction( new ShidLocalLoad(shidParamName, node.source()) ); } - var shidNamedParams = new ArrayList<ShidDefineFunction.Param>(); + var shidNamedParams = new ArrayList<ShidParam>(); for (var namedParam : methodType.namedParams()) { var shidParamName = context.shedVariableToLocal(namedParam.name()); - shidNamedParams.add(new ShidDefineFunction.Param(shidParamName, node.source())); + shidNamedParams.add(new ShidParam(shidParamName, node.source())); context = context.addInstruction( new ShidLocalLoad(shidParamName, node.source()) ); diff --git a/src/main/java/org/shedlang/compiler/shid/instructions/ShidDefineFunction.java b/src/main/java/org/shedlang/compiler/shid/instructions/ShidDefineFunction.java index 46b6c81e..3843b0bc 100644 --- a/src/main/java/org/shedlang/compiler/shid/instructions/ShidDefineFunction.java +++ b/src/main/java/org/shedlang/compiler/shid/instructions/ShidDefineFunction.java @@ -14,16 +14,13 @@ import java.util.List; */ public record ShidDefineFunction( String name, - List<Param> positionalParams, - List<Param> namedParams, + List<ShidParam> positionalParams, + List<ShidParam> namedParams, FreeVariables freeVariables, ShidBlock body, Variant variant, Source source ) implements ShidInstruction { - public record Param(String name, Source source) { - - } public enum Variant { EFFECT_HANDLER_METHOD, @@ -48,8 +45,8 @@ public record ShidDefineFunction( public record Builder( String name, - PVector<Param> positionalParams, - PVector<Param> namedParams, + PVector<ShidParam> positionalParams, + PVector<ShidParam> namedParams, FreeVariables.Builder freeVariables, PVector<ShidInstruction> body, ShidDefineFunction.Variant variant @@ -80,7 +77,7 @@ public record ShidDefineFunction( public Builder addPositionalParam(String name) { return new Builder( this.name, - this.positionalParams.plus(new Param(name, Sources.NULL)), + this.positionalParams.plus(new ShidParam(name, Sources.NULL)), this.namedParams, this.freeVariables, this.body, @@ -92,7 +89,7 @@ public record ShidDefineFunction( return new Builder( this.name, this.positionalParams, - this.namedParams.plus(new Param(name, Sources.NULL)), + this.namedParams.plus(new ShidParam(name, Sources.NULL)), this.freeVariables, this.body, this.variant diff --git a/src/main/java/org/shedlang/compiler/shid/instructions/ShidParam.java b/src/main/java/org/shedlang/compiler/shid/instructions/ShidParam.java new file mode 100644 index 00000000..7465406e --- /dev/null +++ b/src/main/java/org/shedlang/compiler/shid/instructions/ShidParam.java @@ -0,0 +1,6 @@ +package org.shedlang.compiler.shid.instructions; + +import org.shedlang.compiler.sources.Source; + +public record ShidParam(String name, Source source) { +} diff --git a/src/main/java/org/shedlang/compiler/shidtopatio/ShidToPatioClosures.java b/src/main/java/org/shedlang/compiler/shidtopatio/ShidToPatioClosures.java index 4a96a2bf..624a2787 100644 --- a/src/main/java/org/shedlang/compiler/shidtopatio/ShidToPatioClosures.java +++ b/src/main/java/org/shedlang/compiler/shidtopatio/ShidToPatioClosures.java @@ -11,7 +11,7 @@ import org.shedlang.compiler.patio.types.PatioDataLayout; import org.shedlang.compiler.patio.types.PatioDataLayouts; import org.shedlang.compiler.patio.types.PatioType; import org.shedlang.compiler.patio.types.PatioTypes; -import org.shedlang.compiler.shid.instructions.ShidDefineFunction; +import org.shedlang.compiler.shid.instructions.ShidParam; import org.shedlang.compiler.sources.Source; import org.shedlang.compiler.util.P; @@ -95,8 +95,8 @@ class ShidToPatioClosures { } static ShidToPatioContext defineParams( - List<ShidDefineFunction.Param> positionalParams, - List<ShidDefineFunction.Param> namedParams, + List<ShidParam> positionalParams, + List<ShidParam> namedParams, ShidToPatioContext bodyContext ) { var orderedNamedParams = sortedBy(namedParams, param -> param.name()); @@ -113,8 +113,8 @@ class ShidToPatioClosures { PatioLocalRef destination, ShidToPatioCompilationUnitElementSpace functionElementSpace, String name, - List<ShidDefineFunction.Param> positionalParams, - List<ShidDefineFunction.Param> namedParams, + List<ShidParam> positionalParams, + List<ShidParam> namedParams, ClosureRuntimeType closureRuntimeType, BiFunction<PatioLocalRef, ShidToPatioContext, ShidToPatioContext> storeAdditional, FreeVariables freeVariables, diff --git a/src/main/java/org/shedlang/compiler/shidtopatio/ShidToPatioEffects.java b/src/main/java/org/shedlang/compiler/shidtopatio/ShidToPatioEffects.java index 648e62f1..6d2ba0e3 100644 --- a/src/main/java/org/shedlang/compiler/shidtopatio/ShidToPatioEffects.java +++ b/src/main/java/org/shedlang/compiler/shidtopatio/ShidToPatioEffects.java @@ -12,7 +12,7 @@ import org.shedlang.compiler.patio.types.PatioDataLayout; import org.shedlang.compiler.patio.types.PatioDataLayouts; import org.shedlang.compiler.patio.types.PatioType; import org.shedlang.compiler.patio.types.PatioTypes; -import org.shedlang.compiler.shid.instructions.ShidDefineFunction; +import org.shedlang.compiler.shid.instructions.ShidParam; import org.shedlang.compiler.sources.Source; import org.shedlang.compiler.sources.Sources; import org.shedlang.compiler.types.UserDefinedEffect; @@ -209,7 +209,7 @@ public class ShidToPatioEffects { var positionalParams = IntStream.range(0, method.type().positionalParams().size()) // TODO: ensure names of positional params doesn't clash with named params - .mapToObj(paramIndex -> new ShidDefineFunction.Param("arg" + paramIndex, source)) + .mapToObj(paramIndex -> new ShidParam("arg" + paramIndex, source)) .toList(); context = ShidToPatioFunctions.create( @@ -217,7 +217,7 @@ public class ShidToPatioEffects { method.name(), positionalParams, method.type().namedParams().stream() - .map(namedParam -> new ShidDefineFunction.Param(namedParam.name(), source)) + .map(namedParam -> new ShidParam(namedParam.name(), source)) .toList(), FreeVariables.empty(), bodyContext -> { @@ -423,8 +423,8 @@ public class ShidToPatioEffects { public static ShidToPatioContext createEffectHandlerMethod( PatioLocalRef destination, String name, - List<ShidDefineFunction.Param> positionalParams, - List<ShidDefineFunction.Param> namedParams, + List<ShidParam> positionalParams, + List<ShidParam> namedParams, FreeVariables freeVariables, Function<ShidToPatioContext, ShidToPatioContext> generateBody, Source source, diff --git a/src/main/java/org/shedlang/compiler/shidtopatio/ShidToPatioFunctions.java b/src/main/java/org/shedlang/compiler/shidtopatio/ShidToPatioFunctions.java index 01527ae5..c4edd762 100644 --- a/src/main/java/org/shedlang/compiler/shidtopatio/ShidToPatioFunctions.java +++ b/src/main/java/org/shedlang/compiler/shidtopatio/ShidToPatioFunctions.java @@ -4,7 +4,7 @@ import org.shedlang.compiler.ast.typed.FreeVariables; import org.shedlang.compiler.patio.operands.PatioLocalRef; import org.shedlang.compiler.patio.types.PatioDataLayout; import org.shedlang.compiler.patio.types.PatioDataLayouts; -import org.shedlang.compiler.shid.instructions.ShidDefineFunction; +import org.shedlang.compiler.shid.instructions.ShidParam; import org.shedlang.compiler.sources.Source; import java.util.List; @@ -30,8 +30,8 @@ public class ShidToPatioFunctions { public static ShidToPatioContext create( PatioLocalRef destination, String name, - List<ShidDefineFunction.Param> positionalParams, - List<ShidDefineFunction.Param> namedParams, + List<ShidParam> positionalParams, + List<ShidParam> namedParams, FreeVariables freeVariables, Function<ShidToPatioContext, ShidToPatioContext> generateBody, Source source, diff --git a/src/main/java/org/shedlang/compiler/shidtopatio/ShidToPatioStructs.java b/src/main/java/org/shedlang/compiler/shidtopatio/ShidToPatioStructs.java index 0b88da20..4996b89b 100644 --- a/src/main/java/org/shedlang/compiler/shidtopatio/ShidToPatioStructs.java +++ b/src/main/java/org/shedlang/compiler/shidtopatio/ShidToPatioStructs.java @@ -8,9 +8,9 @@ import org.shedlang.compiler.patio.operands.PatioOperand; import org.shedlang.compiler.patio.types.PatioDataLayout; import org.shedlang.compiler.patio.types.PatioDataLayouts; import org.shedlang.compiler.patio.types.PatioTypes; -import org.shedlang.compiler.sources.Source; -import org.shedlang.compiler.shid.instructions.ShidDefineFunction; import org.shedlang.compiler.shid.instructions.ShidDefineStruct; +import org.shedlang.compiler.shid.instructions.ShidParam; +import org.shedlang.compiler.sources.Source; import org.shedlang.compiler.types.SimpleStructType; import org.shedlang.compiler.types.StructTypeInfo; import org.shedlang.compiler.util.Lists; @@ -86,7 +86,7 @@ public class ShidToPatioStructs { var structTypeInfo = context.structTypeInfo(type); var params = fields.stream() - .map(field -> new ShidDefineFunction.Param(field.name(), field.source())) + .map(field -> new ShidParam(field.name(), field.source())) .toList(); return ShidToPatioFunctions.create( |
