diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-07-20 11:03:37 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-07-20 11:05:05 +0100 |
| commit | 0179b06d4fa2ebd4d814bf904e545e8bf19cb9b1 (patch) | |
| tree | 0636f723e20dce0318b4ed1f9bfd5c0f4d3b5a30 /src/main/java | |
| parent | e1d08e0909ddc2de089da0d5db111fd405975b65 (diff) | |
Mark generated functions as private
Diffstat (limited to 'src/main/java')
5 files changed, 28 insertions, 7 deletions
diff --git a/src/main/java/org/shedlang/compiler/patio/PatioCodeGenClosures.java b/src/main/java/org/shedlang/compiler/patio/PatioCodeGenClosures.java index e662c053..b7afeba2 100644 --- a/src/main/java/org/shedlang/compiler/patio/PatioCodeGenClosures.java +++ b/src/main/java/org/shedlang/compiler/patio/PatioCodeGenClosures.java @@ -35,7 +35,7 @@ class PatioCodeGenClosures { var fullName = fullNameResult.value(); context = fullNameResult.context(); - context = context.createFunction(fullName, source, bodyContext -> { + context = context.createFunction(fullName, true, source, bodyContext -> { return bodyContext; }); diff --git a/src/main/java/org/shedlang/compiler/patio/PatioCodeGenContext.java b/src/main/java/org/shedlang/compiler/patio/PatioCodeGenContext.java index 6818d157..dd67f9f8 100644 --- a/src/main/java/org/shedlang/compiler/patio/PatioCodeGenContext.java +++ b/src/main/java/org/shedlang/compiler/patio/PatioCodeGenContext.java @@ -184,11 +184,12 @@ public record PatioCodeGenContext( public PatioCodeGenContext createFunction( String name, + boolean isPrivate, Source source, Function<PatioCodeGenContext, PatioCodeGenContext> createBody ) { return new PatioCodeGenContext( - this.compilationUnitContext.addElement(new PatioFunctionDefinition(name, source)), + this.compilationUnitContext.addElement(new PatioFunctionDefinition(name, isPrivate, source)), this.functionContext ); } diff --git a/src/main/java/org/shedlang/compiler/patio/PatioInstructionSerializer.java b/src/main/java/org/shedlang/compiler/patio/PatioInstructionSerializer.java index 393b4734..c5966bf8 100644 --- a/src/main/java/org/shedlang/compiler/patio/PatioInstructionSerializer.java +++ b/src/main/java/org/shedlang/compiler/patio/PatioInstructionSerializer.java @@ -34,7 +34,8 @@ public class PatioInstructionSerializer { case PatioFunctionDefinition functionDefinition -> treeListIndented( treeIdentifier("function"), - treeString(element.name()) + treeString(element.name()), + treeNamed("is-private", treeBool(functionDefinition.isPrivate())) ); }; } diff --git a/src/main/java/org/shedlang/compiler/patio/instructions/PatioFunctionDefinition.java b/src/main/java/org/shedlang/compiler/patio/instructions/PatioFunctionDefinition.java index 57ee63e3..9a81a879 100644 --- a/src/main/java/org/shedlang/compiler/patio/instructions/PatioFunctionDefinition.java +++ b/src/main/java/org/shedlang/compiler/patio/instructions/PatioFunctionDefinition.java @@ -5,19 +5,34 @@ import org.shedlang.compiler.sources.Sources; public record PatioFunctionDefinition( String name, + boolean isPrivate, Source source ) implements PatioCompilationUnitElement { public static Builder builder() { - return new Builder("f"); + return new Builder("f", true); } - public record Builder(String name) { + public record Builder(String name, boolean isPrivate) { public Builder withName(String name) { - return new Builder(name); + return new Builder( + name, + this.isPrivate + ); + } + + public Builder withIsPrivate(boolean isPrivate) { + return new Builder( + this.name, + isPrivate + ); } public PatioFunctionDefinition build() { - return new PatioFunctionDefinition(name, Sources.NULL); + return new PatioFunctionDefinition( + this.name, + this.isPrivate, + Sources.NULL + ); } } } diff --git a/src/main/java/org/shedlang/compiler/treetext/Trees.java b/src/main/java/org/shedlang/compiler/treetext/Trees.java index ba0e846a..fb7be9e5 100644 --- a/src/main/java/org/shedlang/compiler/treetext/Trees.java +++ b/src/main/java/org/shedlang/compiler/treetext/Trees.java @@ -6,6 +6,10 @@ import java.util.List; public class Trees { private Trees() {} + public static Tree treeBool(boolean value) { + return new TreeIdentifier(value ? "true" : "false"); + } + public static Tree treeIdentifier(String name) { return new TreeIdentifier(name); } |
