From d8f48218f7389bcc0bfff1bcf98c0dcf0d34958a Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Wed, 22 Nov 2023 22:04:27 +0000 Subject: Add exception type definitions to Patio --- .../org/shedlang/compiler/backends/llvm/LlvmPatioCodeGen.java | 5 +++++ .../org/shedlang/compiler/backends/wasm/WasmPatioCodeGen.java | 3 +++ .../compiler/patio/ast/PatioCompilationUnitElement.java | 2 +- .../compiler/patio/ast/PatioExceptionTypeDefinition.java | 11 +++++++++++ .../java/org/shedlang/compiler/patio/ast/PatioSerializer.java | 7 +++++++ 5 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 src/main/java/org/shedlang/compiler/patio/ast/PatioExceptionTypeDefinition.java (limited to 'src/main/java') 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"), -- cgit v1.2.3