From 2ec7f973ce084932ffe25516dc3fe27e2011450d Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sat, 3 Feb 2024 11:39:30 +0000 Subject: Add visibility to PatioDataElementImmutable --- .../shedlang/compiler/backends/llvm/codegen/PatioToLlvm.java | 2 +- .../shedlang/compiler/patio/PatioDataElementImmutable.java | 1 + .../java/org/shedlang/compiler/patio/PatioSerializer.java | 1 + .../java/org/shedlang/compiler/patio/PatioVisibility.java | 12 +++++++++++- .../java/org/shedlang/compiler/shidtopatio/ShidToPatio.java | 1 + .../shedlang/compiler/shidtopatio/ShidToPatioStrings.java | 2 ++ .../java/org/shedlang/compiler/patio/PatioExampleTests.java | 2 ++ .../org/shedlang/compiler/patio/PatioSerializerTests.java | 3 ++- .../java/org/shedlang/compiler/patio/instructions/Patio.java | 8 +++++++- .../compiler/shidtopatio/ShidToPatioContextTests.java | 9 +++++++++ 10 files changed, 37 insertions(+), 4 deletions(-) (limited to 'src') 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 )) -- cgit v1.2.3