aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2024-01-21 17:06:00 +0000
committerMichael Williamson <mike@zwobble.org>2024-01-21 17:06:00 +0000
commitde25b93ec50da213047fe423f77583c92d692eca (patch)
tree1581419b1426db4e64ab9d5182ef43da5f82ec3e /src/main/java
parentf4c370d0a0b62f3a85e19f492107138d9a9fb4a2 (diff)
Add Patio type index
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/backends/llvm/codegen/PatioToLlvm.java15
-rw-r--r--src/main/java/org/shedlang/compiler/backends/wasm/PatioToWasm.java8
-rw-r--r--src/main/java/org/shedlang/compiler/patio/PatioSerializer.java6
-rw-r--r--src/main/java/org/shedlang/compiler/patio/types/PatioDataLayout.java2
-rw-r--r--src/main/java/org/shedlang/compiler/patio/types/PatioDataLayoutTypeIndex.java5
-rw-r--r--src/main/java/org/shedlang/compiler/patio/types/PatioDataLayouts.java4
-rw-r--r--src/main/java/org/shedlang/compiler/patio/types/PatioType.java2
-rw-r--r--src/main/java/org/shedlang/compiler/patio/types/PatioTypeIndexType.java5
-rw-r--r--src/main/java/org/shedlang/compiler/patio/types/PatioTypes.java1
9 files changed, 46 insertions, 2 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 8810f886..1a7c46a8 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
@@ -1063,6 +1063,9 @@ public class PatioToLlvm {
patioOffsets.minus(0),
llvmOffsets.plus(LlvmTypedOperand.structureIndex(patioOffset))
);
+
+ case PatioDataLayoutTypeIndex patioDataLayoutTypeIndex ->
+ throw new RuntimeException("offset not allowed for type indices");
};
}
}
@@ -1114,6 +1117,9 @@ public class PatioToLlvm {
patioOffsets.minus(0),
target
);
+
+ case PatioDataLayoutTypeIndex patioDataLayoutTypeIndex ->
+ LlvmTypes.INT_32;
};
}
@@ -1192,6 +1198,9 @@ public class PatioToLlvm {
case PatioIntType patioIntType ->
target.patioIntType();
+ case PatioTypeIndexType patioTypeIndexType ->
+ LlvmTypes.INT_32;
+
case PatioVoidType patioVoidType ->
LlvmTypes.VOID;
};
@@ -1232,6 +1241,9 @@ public class PatioToLlvm {
.map(element -> patioDataLayoutToLlvmType(element, target))
.toList()
);
+
+ case PatioDataLayoutTypeIndex patioDataLayoutTypeIndex ->
+ LlvmTypes.INT_32;
};
}
@@ -1279,6 +1291,9 @@ public class PatioToLlvm {
))
.toList()
);
+
+ case PatioDataLayoutTypeIndex patioDataLayoutTypeIndex ->
+ new LlvmOperandInt(0);
};
}
diff --git a/src/main/java/org/shedlang/compiler/backends/wasm/PatioToWasm.java b/src/main/java/org/shedlang/compiler/backends/wasm/PatioToWasm.java
index 2fd8916f..e9589935 100644
--- a/src/main/java/org/shedlang/compiler/backends/wasm/PatioToWasm.java
+++ b/src/main/java/org/shedlang/compiler/backends/wasm/PatioToWasm.java
@@ -621,6 +621,9 @@ public class PatioToWasm {
patioDataLayoutStruct.elements().stream()
.map(element -> sizeOf(element, target))
.reduce(0, Integer::sum);
+
+ case PatioDataLayoutTypeIndex patioDataLayoutTypeIndex ->
+ WasmValueType.I32.sizeBytes();
};
}
@@ -660,6 +663,9 @@ public class PatioToWasm {
}
patioDataLayout = patioDataLayoutStruct.elements().get(patioOffset);
}
+ case PatioDataLayoutTypeIndex patioDataLayoutTypeIndex -> {
+ throw new RuntimeException("offset not allowed for type indices");
+ }
}
}
@@ -781,6 +787,8 @@ public class PatioToWasm {
target.functionPointerType();
case PatioIntType patioIntType ->
target.patioIntType();
+ case PatioTypeIndexType patioTypeIndexType ->
+ WasmValueType.I32;
case PatioVoidType patioVoidType ->
throw new IllegalArgumentException("Cannot have void values");
};
diff --git a/src/main/java/org/shedlang/compiler/patio/PatioSerializer.java b/src/main/java/org/shedlang/compiler/patio/PatioSerializer.java
index be6200e0..7a0a0d06 100644
--- a/src/main/java/org/shedlang/compiler/patio/PatioSerializer.java
+++ b/src/main/java/org/shedlang/compiler/patio/PatioSerializer.java
@@ -455,6 +455,9 @@ public class PatioSerializer {
case PatioIntType intType ->
treeIdentifier("int");
+ case PatioTypeIndexType typeIndexType ->
+ treeIdentifier("type-index");
+
case PatioVoidType voidType ->
treeIdentifier("void");
};
@@ -493,6 +496,9 @@ public class PatioSerializer {
.toList()
)
);
+
+ case PatioDataLayoutTypeIndex typeIndex ->
+ treeIdentifier("type-index");
};
}
diff --git a/src/main/java/org/shedlang/compiler/patio/types/PatioDataLayout.java b/src/main/java/org/shedlang/compiler/patio/types/PatioDataLayout.java
index 9649cecf..74704517 100644
--- a/src/main/java/org/shedlang/compiler/patio/types/PatioDataLayout.java
+++ b/src/main/java/org/shedlang/compiler/patio/types/PatioDataLayout.java
@@ -1,4 +1,4 @@
package org.shedlang.compiler.patio.types;
-public sealed interface PatioDataLayout permits PatioDataLayoutArray, PatioDataLayoutBool, PatioDataLayoutByte, PatioDataLayoutDataPointer, PatioDataLayoutFunctionPointer, PatioDataLayoutInt, PatioDataLayoutStruct {
+public sealed interface PatioDataLayout permits PatioDataLayoutArray, PatioDataLayoutBool, PatioDataLayoutByte, PatioDataLayoutDataPointer, PatioDataLayoutFunctionPointer, PatioDataLayoutInt, PatioDataLayoutStruct, PatioDataLayoutTypeIndex {
}
diff --git a/src/main/java/org/shedlang/compiler/patio/types/PatioDataLayoutTypeIndex.java b/src/main/java/org/shedlang/compiler/patio/types/PatioDataLayoutTypeIndex.java
new file mode 100644
index 00000000..9aafb675
--- /dev/null
+++ b/src/main/java/org/shedlang/compiler/patio/types/PatioDataLayoutTypeIndex.java
@@ -0,0 +1,5 @@
+package org.shedlang.compiler.patio.types;
+
+public record PatioDataLayoutTypeIndex() implements PatioDataLayout {
+ public static final PatioDataLayoutTypeIndex INSTANCE = new PatioDataLayoutTypeIndex();
+}
diff --git a/src/main/java/org/shedlang/compiler/patio/types/PatioDataLayouts.java b/src/main/java/org/shedlang/compiler/patio/types/PatioDataLayouts.java
index c28124aa..39a2c199 100644
--- a/src/main/java/org/shedlang/compiler/patio/types/PatioDataLayouts.java
+++ b/src/main/java/org/shedlang/compiler/patio/types/PatioDataLayouts.java
@@ -11,6 +11,7 @@ public class PatioDataLayouts {
public static final PatioDataLayout DATA_POINTER = PatioDataLayoutDataPointer.INSTANCE;
public static final PatioDataLayout FUNCTION_POINTER = PatioDataLayoutFunctionPointer.INSTANCE;
public static final PatioDataLayout INT = PatioDataLayoutInt.INSTANCE;
+ public static final PatioDataLayout TYPE_INDEX = PatioDataLayoutTypeIndex.INSTANCE;
public static PatioDataLayout array(PatioDataLayout element, int size) {
return new PatioDataLayoutArray(element, size);
@@ -37,6 +38,9 @@ public class PatioDataLayouts {
case PatioIntType patioIntType ->
INT;
+ case PatioTypeIndexType patioTypeIndexType ->
+ TYPE_INDEX;
+
case PatioVoidType patioVoidType ->
throw new UnsupportedOperationException("TODO");
};
diff --git a/src/main/java/org/shedlang/compiler/patio/types/PatioType.java b/src/main/java/org/shedlang/compiler/patio/types/PatioType.java
index 13caa01d..eaed08ee 100644
--- a/src/main/java/org/shedlang/compiler/patio/types/PatioType.java
+++ b/src/main/java/org/shedlang/compiler/patio/types/PatioType.java
@@ -1,4 +1,4 @@
package org.shedlang.compiler.patio.types;
-public sealed interface PatioType permits PatioBoolType, PatioByteType, PatioDataPointerType, PatioFunctionPointerType, PatioIntType, PatioVoidType {
+public sealed interface PatioType permits PatioBoolType, PatioByteType, PatioDataPointerType, PatioFunctionPointerType, PatioIntType, PatioTypeIndexType, PatioVoidType {
}
diff --git a/src/main/java/org/shedlang/compiler/patio/types/PatioTypeIndexType.java b/src/main/java/org/shedlang/compiler/patio/types/PatioTypeIndexType.java
new file mode 100644
index 00000000..1463e0e9
--- /dev/null
+++ b/src/main/java/org/shedlang/compiler/patio/types/PatioTypeIndexType.java
@@ -0,0 +1,5 @@
+package org.shedlang.compiler.patio.types;
+
+public record PatioTypeIndexType() implements PatioType {
+ public static final PatioTypeIndexType INSTANCE = new PatioTypeIndexType();
+}
diff --git a/src/main/java/org/shedlang/compiler/patio/types/PatioTypes.java b/src/main/java/org/shedlang/compiler/patio/types/PatioTypes.java
index dcfbd08e..352eaa44 100644
--- a/src/main/java/org/shedlang/compiler/patio/types/PatioTypes.java
+++ b/src/main/java/org/shedlang/compiler/patio/types/PatioTypes.java
@@ -9,5 +9,6 @@ public class PatioTypes {
public static final PatioDataPointerType DATA_POINTER = PatioDataPointerType.INSTANCE;
public static final PatioFunctionPointerType FUNCTION_POINTER = PatioFunctionPointerType.INSTANCE;
public static final PatioIntType INT = PatioIntType.INSTANCE;
+ public static final PatioTypeIndexType TYPE_INDEX = PatioTypeIndexType.INSTANCE;
public static final PatioVoidType VOID = PatioVoidType.INSTANCE;
}