aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-11-22 22:04:27 +0000
committerMichael Williamson <mike@zwobble.org>2023-11-22 22:04:27 +0000
commitd8f48218f7389bcc0bfff1bcf98c0dcf0d34958a (patch)
tree98988ef6ed58feaa2b21e4ff6449c8d12ac1811e /src/main/java
parent5494b33b978fc8ed1f50e63feb658de43bf78f58 (diff)
Add exception type definitions to Patio
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/backends/llvm/LlvmPatioCodeGen.java5
-rw-r--r--src/main/java/org/shedlang/compiler/backends/wasm/WasmPatioCodeGen.java3
-rw-r--r--src/main/java/org/shedlang/compiler/patio/ast/PatioCompilationUnitElement.java2
-rw-r--r--src/main/java/org/shedlang/compiler/patio/ast/PatioExceptionTypeDefinition.java11
-rw-r--r--src/main/java/org/shedlang/compiler/patio/ast/PatioSerializer.java7
5 files changed, 27 insertions, 1 deletions
diff --git a/src/main/java/org/shedlang/compiler/backends/llvm/LlvmPatioCodeGen.java b/src/main/java/org/shedlang/compiler/backends/llvm/LlvmPatioCodeGen.java
index e9329115..114922e4 100644
--- a/src/main/java/org/shedlang/compiler/backends/llvm/LlvmPatioCodeGen.java
+++ b/src/main/java/org/shedlang/compiler/backends/llvm/LlvmPatioCodeGen.java
@@ -38,6 +38,8 @@ public class LlvmPatioCodeGen {
patioTypeToLlvmType(patioFunctionDeclaration.returnType())
);
}
+ case PatioExceptionTypeDefinition patioExceptionTypeDefinition -> {
+ }
case PatioFunctionDefinition patioFunctionDefinition -> {
context = context.addFunctionNameToReturnType(
patioFunctionDefinition.name(),
@@ -70,6 +72,9 @@ public class LlvmPatioCodeGen {
case PatioDataElementMutable patioDataElementMutable ->
generateDataElementMutable(patioDataElementMutable, context);
+
+ case PatioExceptionTypeDefinition patioExceptionTypeDefinition ->
+ throw new UnsupportedOperationException("TODO");
case PatioFunctionDeclaration patioFunctionDeclaration ->
generateFunctionDeclaration(patioFunctionDeclaration, context);
diff --git a/src/main/java/org/shedlang/compiler/backends/wasm/WasmPatioCodeGen.java b/src/main/java/org/shedlang/compiler/backends/wasm/WasmPatioCodeGen.java
index 7e15fa18..3436ef1b 100644
--- a/src/main/java/org/shedlang/compiler/backends/wasm/WasmPatioCodeGen.java
+++ b/src/main/java/org/shedlang/compiler/backends/wasm/WasmPatioCodeGen.java
@@ -69,6 +69,9 @@ public class WasmPatioCodeGen {
new WasmImportDescriptor.Func(name, wasmFuncType)
));
}
+ case PatioExceptionTypeDefinition patioExceptionTypeDefinition -> {
+ throw new UnsupportedOperationException("TODO");
+ }
case PatioFunctionDefinition patioFunctionDefinition -> {
var name = patioFunctionDefinition.name();
diff --git a/src/main/java/org/shedlang/compiler/patio/ast/PatioCompilationUnitElement.java b/src/main/java/org/shedlang/compiler/patio/ast/PatioCompilationUnitElement.java
index 6caafb3d..038b0fba 100644
--- a/src/main/java/org/shedlang/compiler/patio/ast/PatioCompilationUnitElement.java
+++ b/src/main/java/org/shedlang/compiler/patio/ast/PatioCompilationUnitElement.java
@@ -2,7 +2,7 @@ package org.shedlang.compiler.patio.ast;
import org.shedlang.compiler.sources.Source;
-public sealed interface PatioCompilationUnitElement permits PatioDataElementImmutable, PatioDataElementMutable, PatioFunctionDeclaration, PatioFunctionDefinition {
+public sealed interface PatioCompilationUnitElement permits PatioDataElementImmutable, PatioDataElementMutable, PatioExceptionTypeDefinition, PatioFunctionDeclaration, PatioFunctionDefinition {
String name();
Source source();
}
diff --git a/src/main/java/org/shedlang/compiler/patio/ast/PatioExceptionTypeDefinition.java b/src/main/java/org/shedlang/compiler/patio/ast/PatioExceptionTypeDefinition.java
new file mode 100644
index 00000000..7dabc809
--- /dev/null
+++ b/src/main/java/org/shedlang/compiler/patio/ast/PatioExceptionTypeDefinition.java
@@ -0,0 +1,11 @@
+package org.shedlang.compiler.patio.ast;
+
+import org.shedlang.compiler.patio.ast.types.PatioType;
+import org.shedlang.compiler.sources.Source;
+
+public record PatioExceptionTypeDefinition(
+ String name,
+ PatioType valueType,
+ Source source
+) implements PatioCompilationUnitElement {
+}
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 2b052800..c333ea80 100644
--- a/src/main/java/org/shedlang/compiler/patio/ast/PatioSerializer.java
+++ b/src/main/java/org/shedlang/compiler/patio/ast/PatioSerializer.java
@@ -95,6 +95,13 @@ public class PatioSerializer {
dataLayoutToTree(dataElementMutable.layout())
);
+ case PatioExceptionTypeDefinition exceptionTypeDefinition ->
+ treeList(
+ treeIdentifier("exception-type"),
+ treeString(exceptionTypeDefinition.name()),
+ typeToTree(exceptionTypeDefinition.valueType())
+ );
+
case PatioFunctionDeclaration functionDeclaration ->
treeListIndented(
treeIdentifier("function-decl"),