aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2024-02-03 11:39:30 +0000
committerMichael Williamson <mike@zwobble.org>2024-02-03 11:39:51 +0000
commit2ec7f973ce084932ffe25516dc3fe27e2011450d (patch)
treeaf59afa25fac6b454ce28ab58fc03aa0ef0ca507 /src
parent96b78561204020df21703a5fe8922bf49dc6e1f4 (diff)
Add visibility to PatioDataElementImmutable
Diffstat (limited to 'src')
-rw-r--r--src/main/java/org/shedlang/compiler/backends/llvm/codegen/PatioToLlvm.java2
-rw-r--r--src/main/java/org/shedlang/compiler/patio/PatioDataElementImmutable.java1
-rw-r--r--src/main/java/org/shedlang/compiler/patio/PatioSerializer.java1
-rw-r--r--src/main/java/org/shedlang/compiler/patio/PatioVisibility.java12
-rw-r--r--src/main/java/org/shedlang/compiler/shidtopatio/ShidToPatio.java1
-rw-r--r--src/main/java/org/shedlang/compiler/shidtopatio/ShidToPatioStrings.java2
-rw-r--r--src/test/java/org/shedlang/compiler/patio/PatioExampleTests.java2
-rw-r--r--src/test/java/org/shedlang/compiler/patio/PatioSerializerTests.java3
-rw-r--r--src/test/java/org/shedlang/compiler/patio/instructions/Patio.java8
-rw-r--r--src/test/java/org/shedlang/compiler/shidtopatio/ShidToPatioContextTests.java9
10 files changed, 37 insertions, 4 deletions
diff --git a/src/main/java/org/shedlang/compiler/backends/llvm/codegen/PatioToLlvm.java b/src/main/java/org/shedlang/compiler/backends/llvm/codegen/PatioToLlvm.java
index 859d79ab..aecefd7f 100644
--- a/src/main/java/org/shedlang/compiler/backends/llvm/codegen/PatioToLlvm.java
+++ b/src/main/java/org/shedlang/compiler/backends/llvm/codegen/PatioToLlvm.java
@@ -189,7 +189,7 @@ public class PatioToLlvm {
context.target()
)),
true,
- false,
+ patioDataElementImmutable.visibility().isPrivate(),
true
));
}
diff --git a/src/main/java/org/shedlang/compiler/patio/PatioDataElementImmutable.java b/src/main/java/org/shedlang/compiler/patio/PatioDataElementImmutable.java
index fef9f1fd..c2f90725 100644
--- a/src/main/java/org/shedlang/compiler/patio/PatioDataElementImmutable.java
+++ b/src/main/java/org/shedlang/compiler/patio/PatioDataElementImmutable.java
@@ -5,6 +5,7 @@ import org.shedlang.compiler.sources.Source;
public record PatioDataElementImmutable(
String name,
+ PatioVisibility visibility,
PatioDataValue value,
Source source
) implements PatioCompilationUnitElement {
diff --git a/src/main/java/org/shedlang/compiler/patio/PatioSerializer.java b/src/main/java/org/shedlang/compiler/patio/PatioSerializer.java
index d6db62c6..dc61d245 100644
--- a/src/main/java/org/shedlang/compiler/patio/PatioSerializer.java
+++ b/src/main/java/org/shedlang/compiler/patio/PatioSerializer.java
@@ -99,6 +99,7 @@ public class PatioSerializer {
treeList(
treeIdentifier("data-immutable"),
treeString(dataElementImmutable.name()),
+ visibilityToTree(dataElementImmutable.visibility()),
dataValueToTree(dataElementImmutable.value())
);
diff --git a/src/main/java/org/shedlang/compiler/patio/PatioVisibility.java b/src/main/java/org/shedlang/compiler/patio/PatioVisibility.java
index 55ccc361..b5bf6701 100644
--- a/src/main/java/org/shedlang/compiler/patio/PatioVisibility.java
+++ b/src/main/java/org/shedlang/compiler/patio/PatioVisibility.java
@@ -2,5 +2,15 @@ package org.shedlang.compiler.patio;
public enum PatioVisibility {
PRIVATE,
- PUBLIC,
+ PUBLIC;
+
+ public boolean isPrivate() {
+ return switch(this) {
+ case PRIVATE ->
+ true;
+
+ case PUBLIC ->
+ false;
+ };
+ }
}
diff --git a/src/main/java/org/shedlang/compiler/shidtopatio/ShidToPatio.java b/src/main/java/org/shedlang/compiler/shidtopatio/ShidToPatio.java
index 0831fd71..ba3995cb 100644
--- a/src/main/java/org/shedlang/compiler/shidtopatio/ShidToPatio.java
+++ b/src/main/java/org/shedlang/compiler/shidtopatio/ShidToPatio.java
@@ -1024,6 +1024,7 @@ public class ShidToPatio {
context = context.addCompilationUnitElement(new PatioDataElementImmutable(
"shed__rtti",
+ PatioVisibility.PUBLIC,
PatioDataValues.array(
PatioDataLayouts.struct(List.of(
PatioDataLayouts.INT32,
diff --git a/src/main/java/org/shedlang/compiler/shidtopatio/ShidToPatioStrings.java b/src/main/java/org/shedlang/compiler/shidtopatio/ShidToPatioStrings.java
index 25643169..599d3319 100644
--- a/src/main/java/org/shedlang/compiler/shidtopatio/ShidToPatioStrings.java
+++ b/src/main/java/org/shedlang/compiler/shidtopatio/ShidToPatioStrings.java
@@ -3,6 +3,7 @@ package org.shedlang.compiler.shidtopatio;
import org.shedlang.compiler.patio.PatioDataElementImmutable;
import org.shedlang.compiler.patio.PatioFunctionDeclaration;
import org.shedlang.compiler.patio.PatioLocal;
+import org.shedlang.compiler.patio.PatioVisibility;
import org.shedlang.compiler.patio.instructions.PatioCall;
import org.shedlang.compiler.patio.operands.PatioDataPtrConst;
import org.shedlang.compiler.patio.operands.PatioLocalRef;
@@ -57,6 +58,7 @@ public class ShidToPatioStrings {
context = context.addCompilationUnitElement(new PatioDataElementImmutable(
elementName,
+ PatioVisibility.PRIVATE,
dataValue,
source
));
diff --git a/src/test/java/org/shedlang/compiler/patio/PatioExampleTests.java b/src/test/java/org/shedlang/compiler/patio/PatioExampleTests.java
index 273ff21a..bc44f2ea 100644
--- a/src/test/java/org/shedlang/compiler/patio/PatioExampleTests.java
+++ b/src/test/java/org/shedlang/compiler/patio/PatioExampleTests.java
@@ -22,6 +22,7 @@ public abstract class PatioExampleTests {
public void canLoadDataElementInt() throws IOException, InterruptedException {
var patioDataElement = new PatioDataElementImmutable(
"answer",
+ PatioVisibility.PRIVATE,
PatioDataValues.int_(42),
Sources.NULL
);
@@ -53,6 +54,7 @@ public abstract class PatioExampleTests {
public void canLoadIntFromMiddleOfDataElement() throws IOException, InterruptedException {
var patioDataElement = new PatioDataElementImmutable(
"answer",
+ PatioVisibility.PRIVATE,
PatioDataValues.struct(List.of(
PatioDataValues.int_(37),
PatioDataValues.int_(42),
diff --git a/src/test/java/org/shedlang/compiler/patio/PatioSerializerTests.java b/src/test/java/org/shedlang/compiler/patio/PatioSerializerTests.java
index 3c27f7a3..baf1bdfd 100644
--- a/src/test/java/org/shedlang/compiler/patio/PatioSerializerTests.java
+++ b/src/test/java/org/shedlang/compiler/patio/PatioSerializerTests.java
@@ -46,6 +46,7 @@ public class PatioSerializerTests {
public void canSerializeDataElementImmutable() {
var element = Patio.dataElementImmutable(
"x",
+ PatioVisibility.PRIVATE,
PatioDataValues.array(
PatioDataLayouts.BYTE,
List.of(PatioDataValues.byte_(0x01), PatioDataValues.byte_(0x02))
@@ -55,7 +56,7 @@ public class PatioSerializerTests {
var string = PatioTesting.serializeCompilationUnitElement(element);
assertThat(string, equalTo("""
- (data-immutable "x" (array byte ((byte 0x01) (byte 0x02))))"""
+ (data-immutable "x" private (array byte ((byte 0x01) (byte 0x02))))"""
));
}
diff --git a/src/test/java/org/shedlang/compiler/patio/instructions/Patio.java b/src/test/java/org/shedlang/compiler/patio/instructions/Patio.java
index c54e0c30..5c82321f 100644
--- a/src/test/java/org/shedlang/compiler/patio/instructions/Patio.java
+++ b/src/test/java/org/shedlang/compiler/patio/instructions/Patio.java
@@ -84,9 +84,15 @@ public class Patio {
public static PatioDataElementImmutable dataElementImmutable(
String name,
+ PatioVisibility visibility,
PatioDataValue value
) {
- return new PatioDataElementImmutable(name, value, Sources.NULL);
+ return new PatioDataElementImmutable(
+ name,
+ visibility,
+ value,
+ Sources.NULL
+ );
}
public static PatioDataElementMutable dataElementMutable(
diff --git a/src/test/java/org/shedlang/compiler/shidtopatio/ShidToPatioContextTests.java b/src/test/java/org/shedlang/compiler/shidtopatio/ShidToPatioContextTests.java
index b7a6cb34..634ca53a 100644
--- a/src/test/java/org/shedlang/compiler/shidtopatio/ShidToPatioContextTests.java
+++ b/src/test/java/org/shedlang/compiler/shidtopatio/ShidToPatioContextTests.java
@@ -2,6 +2,7 @@ package org.shedlang.compiler.shidtopatio;
import org.junit.jupiter.api.Test;
import org.shedlang.compiler.patio.PatioDataElementImmutable;
+import org.shedlang.compiler.patio.PatioVisibility;
import org.shedlang.compiler.patio.types.PatioDataValues;
import org.shedlang.compiler.shidtopatio.errors.DuplicateCompilationUnitElementName;
import org.shedlang.compiler.sources.Sources;
@@ -17,11 +18,13 @@ public class ShidToPatioContextTests {
context = context.addCompilationUnitElement(new PatioDataElementImmutable(
"x",
+ PatioVisibility.PRIVATE,
PatioDataValues.int_(0),
Sources.NULL
));
context = context.addCompilationUnitElement(new PatioDataElementImmutable(
"y",
+ PatioVisibility.PRIVATE,
PatioDataValues.int_(0),
Sources.NULL
));
@@ -37,6 +40,7 @@ public class ShidToPatioContextTests {
var context = ShidToPatioContext.EMPTY
.addCompilationUnitElement(new PatioDataElementImmutable(
"x",
+ PatioVisibility.PRIVATE,
PatioDataValues.int_(0),
Sources.NULL
));
@@ -45,6 +49,7 @@ public class ShidToPatioContextTests {
DuplicateCompilationUnitElementName.class,
() -> context.addCompilationUnitElement(new PatioDataElementImmutable(
"x",
+ PatioVisibility.PRIVATE,
PatioDataValues.int_(0),
Sources.NULL
))
@@ -59,11 +64,13 @@ public class ShidToPatioContextTests {
context = context.ensureCompilationUnitElement(new PatioDataElementImmutable(
"x",
+ PatioVisibility.PRIVATE,
PatioDataValues.int_(0),
Sources.RUNTIME
));
context = context.ensureCompilationUnitElement(new PatioDataElementImmutable(
"x",
+ PatioVisibility.PRIVATE,
PatioDataValues.int_(0),
Sources.RUNTIME
));
@@ -78,6 +85,7 @@ public class ShidToPatioContextTests {
var context = ShidToPatioContext.EMPTY
.ensureCompilationUnitElement(new PatioDataElementImmutable(
"x",
+ PatioVisibility.PRIVATE,
PatioDataValues.int_(0),
Sources.RUNTIME
));
@@ -86,6 +94,7 @@ public class ShidToPatioContextTests {
DuplicateCompilationUnitElementName.class,
() -> context.ensureCompilationUnitElement(new PatioDataElementImmutable(
"x",
+ PatioVisibility.PRIVATE,
PatioDataValues.int_(1),
Sources.RUNTIME
))