diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-07-22 11:57:30 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-07-22 11:57:30 +0100 |
| commit | 90c08384a3b129f970295aa2a02df032900b800f (patch) | |
| tree | 208904c882567189006f6383100cfe4ee79cbbd7 /src/main/java | |
| parent | e01d4e5be2093eb9eb9fca62b8eaaa59d7ec882a (diff) | |
Add PatioDataValue::layout()
Diffstat (limited to 'src/main/java')
8 files changed, 33 insertions, 4 deletions
diff --git a/src/main/java/org/shedlang/compiler/patio/PatioCodeGenStrings.java b/src/main/java/org/shedlang/compiler/patio/PatioCodeGenStrings.java index a9b7c753..e45a43e9 100644 --- a/src/main/java/org/shedlang/compiler/patio/PatioCodeGenStrings.java +++ b/src/main/java/org/shedlang/compiler/patio/PatioCodeGenStrings.java @@ -2,6 +2,7 @@ package org.shedlang.compiler.patio; import org.shedlang.compiler.patio.ast.PatioDataElementImmutable; import org.shedlang.compiler.patio.ast.operands.PatioDataPtr; +import org.shedlang.compiler.patio.ast.types.PatioDataLayouts; import org.shedlang.compiler.patio.ast.types.PatioDataValue; import org.shedlang.compiler.patio.ast.types.PatioDataValues; import org.shedlang.compiler.sources.Source; @@ -27,7 +28,7 @@ public class PatioCodeGenStrings { var dataValue = PatioDataValues.struct(List.of( PatioDataValues.int_(codeUnits.length), - PatioDataValues.array(codeUnitsDataValues) + PatioDataValues.array(PatioDataLayouts.BYTE, codeUnitsDataValues) )); var elementNameResult = context.allocateCompilationUnitElementName( diff --git a/src/main/java/org/shedlang/compiler/patio/ast/PatioSerializer.java b/src/main/java/org/shedlang/compiler/patio/ast/PatioSerializer.java index 977aa815..d867b525 100644 --- a/src/main/java/org/shedlang/compiler/patio/ast/PatioSerializer.java +++ b/src/main/java/org/shedlang/compiler/patio/ast/PatioSerializer.java @@ -331,6 +331,7 @@ public class PatioSerializer { case PatioDataValueArray array -> treeList( treeIdentifier("array"), + dataLayoutToTree(array.elementLayout()), treeList( array.elements().stream() .map(element -> dataValueToTree(element)) diff --git a/src/main/java/org/shedlang/compiler/patio/ast/types/PatioDataValue.java b/src/main/java/org/shedlang/compiler/patio/ast/types/PatioDataValue.java index 2c71d9df..b55dc07b 100644 --- a/src/main/java/org/shedlang/compiler/patio/ast/types/PatioDataValue.java +++ b/src/main/java/org/shedlang/compiler/patio/ast/types/PatioDataValue.java @@ -1,4 +1,5 @@ package org.shedlang.compiler.patio.ast.types; public sealed interface PatioDataValue permits PatioDataValueArray, PatioDataValueByte, PatioDataValueInt, PatioDataValueStruct { + PatioDataLayout layout(); } diff --git a/src/main/java/org/shedlang/compiler/patio/ast/types/PatioDataValueArray.java b/src/main/java/org/shedlang/compiler/patio/ast/types/PatioDataValueArray.java index 136ef54b..e2681c72 100644 --- a/src/main/java/org/shedlang/compiler/patio/ast/types/PatioDataValueArray.java +++ b/src/main/java/org/shedlang/compiler/patio/ast/types/PatioDataValueArray.java @@ -2,5 +2,12 @@ package org.shedlang.compiler.patio.ast.types; import java.util.List; -public record PatioDataValueArray(List<PatioDataValue> elements) implements PatioDataValue { +public record PatioDataValueArray( + PatioDataLayout elementLayout, + List<PatioDataValue> elements +) implements PatioDataValue { + @Override + public PatioDataLayout layout() { + return PatioDataLayouts.array(elementLayout, elements.size()); + } } diff --git a/src/main/java/org/shedlang/compiler/patio/ast/types/PatioDataValueByte.java b/src/main/java/org/shedlang/compiler/patio/ast/types/PatioDataValueByte.java index 7ca2a997..4f300f02 100644 --- a/src/main/java/org/shedlang/compiler/patio/ast/types/PatioDataValueByte.java +++ b/src/main/java/org/shedlang/compiler/patio/ast/types/PatioDataValueByte.java @@ -1,4 +1,8 @@ package org.shedlang.compiler.patio.ast.types; public record PatioDataValueByte(byte value) implements PatioDataValue { + @Override + public PatioDataLayout layout() { + return PatioDataLayouts.BYTE; + } } diff --git a/src/main/java/org/shedlang/compiler/patio/ast/types/PatioDataValueInt.java b/src/main/java/org/shedlang/compiler/patio/ast/types/PatioDataValueInt.java index db53a7a7..96542f68 100644 --- a/src/main/java/org/shedlang/compiler/patio/ast/types/PatioDataValueInt.java +++ b/src/main/java/org/shedlang/compiler/patio/ast/types/PatioDataValueInt.java @@ -1,4 +1,8 @@ package org.shedlang.compiler.patio.ast.types; public record PatioDataValueInt(int value) implements PatioDataValue { + @Override + public PatioDataLayout layout() { + return PatioDataLayouts.INT; + } } diff --git a/src/main/java/org/shedlang/compiler/patio/ast/types/PatioDataValueStruct.java b/src/main/java/org/shedlang/compiler/patio/ast/types/PatioDataValueStruct.java index e8f1a23e..279d2a79 100644 --- a/src/main/java/org/shedlang/compiler/patio/ast/types/PatioDataValueStruct.java +++ b/src/main/java/org/shedlang/compiler/patio/ast/types/PatioDataValueStruct.java @@ -3,4 +3,12 @@ package org.shedlang.compiler.patio.ast.types; import java.util.List; public record PatioDataValueStruct(List<PatioDataValue> elements) implements PatioDataValue { + @Override + public PatioDataLayout layout() { + return PatioDataLayouts.struct( + elements.stream() + .map(element -> element.layout()) + .toList() + ); + } } diff --git a/src/main/java/org/shedlang/compiler/patio/ast/types/PatioDataValues.java b/src/main/java/org/shedlang/compiler/patio/ast/types/PatioDataValues.java index 7c59e95b..fa158b6b 100644 --- a/src/main/java/org/shedlang/compiler/patio/ast/types/PatioDataValues.java +++ b/src/main/java/org/shedlang/compiler/patio/ast/types/PatioDataValues.java @@ -5,8 +5,11 @@ import java.util.List; public class PatioDataValues { private PatioDataValues() {} - public static PatioDataValue array(List<PatioDataValue> elements) { - return new PatioDataValueArray(elements); + public static PatioDataValue array( + PatioDataLayout elementLayout, + List<PatioDataValue> elements + ) { + return new PatioDataValueArray(elementLayout, elements); } public static PatioDataValue byte_(int value) { |
