aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-07-20 11:03:37 +0100
committerMichael Williamson <mike@zwobble.org>2023-07-20 11:05:05 +0100
commit0179b06d4fa2ebd4d814bf904e545e8bf19cb9b1 (patch)
tree0636f723e20dce0318b4ed1f9bfd5c0f4d3b5a30 /src/main/java
parente1d08e0909ddc2de089da0d5db111fd405975b65 (diff)
Mark generated functions as private
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/patio/PatioCodeGenClosures.java2
-rw-r--r--src/main/java/org/shedlang/compiler/patio/PatioCodeGenContext.java3
-rw-r--r--src/main/java/org/shedlang/compiler/patio/PatioInstructionSerializer.java3
-rw-r--r--src/main/java/org/shedlang/compiler/patio/instructions/PatioFunctionDefinition.java23
-rw-r--r--src/main/java/org/shedlang/compiler/treetext/Trees.java4
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);
}