aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-07-22 11:57:30 +0100
committerMichael Williamson <mike@zwobble.org>2023-07-22 11:57:30 +0100
commit90c08384a3b129f970295aa2a02df032900b800f (patch)
tree208904c882567189006f6383100cfe4ee79cbbd7 /src/main/java
parente01d4e5be2093eb9eb9fca62b8eaaa59d7ec882a (diff)
Add PatioDataValue::layout()
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/patio/PatioCodeGenStrings.java3
-rw-r--r--src/main/java/org/shedlang/compiler/patio/ast/PatioSerializer.java1
-rw-r--r--src/main/java/org/shedlang/compiler/patio/ast/types/PatioDataValue.java1
-rw-r--r--src/main/java/org/shedlang/compiler/patio/ast/types/PatioDataValueArray.java9
-rw-r--r--src/main/java/org/shedlang/compiler/patio/ast/types/PatioDataValueByte.java4
-rw-r--r--src/main/java/org/shedlang/compiler/patio/ast/types/PatioDataValueInt.java4
-rw-r--r--src/main/java/org/shedlang/compiler/patio/ast/types/PatioDataValueStruct.java8
-rw-r--r--src/main/java/org/shedlang/compiler/patio/ast/types/PatioDataValues.java7
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) {