From 0df2137ae4f03069398f6417d46d9a6d5bea1ce2 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Tue, 28 Apr 2026 23:38:42 +0100 Subject: Add TypedSumDefinitionNode --- .../compiler/ast/typed/TypedNamespaceStatementNode.java | 2 +- .../compiler/ast/typed/TypedSumDefinitionNode.java | 16 ++++++++++++++++ .../ast/typed/TypedSumVariantDefinitionNode.java | 10 ++++++++++ .../output/generators/javatypes/JavaTypesGenerator.java | 5 +++++ 4 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 src/main/java/org/zwobble/hobgoblin/compiler/ast/typed/TypedSumDefinitionNode.java create mode 100644 src/main/java/org/zwobble/hobgoblin/compiler/ast/typed/TypedSumVariantDefinitionNode.java diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/ast/typed/TypedNamespaceStatementNode.java b/src/main/java/org/zwobble/hobgoblin/compiler/ast/typed/TypedNamespaceStatementNode.java index 79dc0bb..6cab80c 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/ast/typed/TypedNamespaceStatementNode.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/ast/typed/TypedNamespaceStatementNode.java @@ -1,4 +1,4 @@ package org.zwobble.hobgoblin.compiler.ast.typed; -public sealed interface TypedNamespaceStatementNode extends TypedNode permits TypedStructDefinitionNode { +public sealed interface TypedNamespaceStatementNode extends TypedNode permits TypedStructDefinitionNode, TypedSumDefinitionNode { } diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/ast/typed/TypedSumDefinitionNode.java b/src/main/java/org/zwobble/hobgoblin/compiler/ast/typed/TypedSumDefinitionNode.java new file mode 100644 index 0000000..e04e2dd --- /dev/null +++ b/src/main/java/org/zwobble/hobgoblin/compiler/ast/typed/TypedSumDefinitionNode.java @@ -0,0 +1,16 @@ +package org.zwobble.hobgoblin.compiler.ast.typed; + +import org.zwobble.hobgoblin.compiler.sources.Source; +import org.zwobble.hobgoblin.compiler.types.SumType; + +import java.util.List; + +public record TypedSumDefinitionNode( + SumType type, + List variants, + Source source +) implements TypedNamespaceStatementNode { + public String name() { + return this.type.name(); + } +} diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/ast/typed/TypedSumVariantDefinitionNode.java b/src/main/java/org/zwobble/hobgoblin/compiler/ast/typed/TypedSumVariantDefinitionNode.java new file mode 100644 index 0000000..5c2dd6c --- /dev/null +++ b/src/main/java/org/zwobble/hobgoblin/compiler/ast/typed/TypedSumVariantDefinitionNode.java @@ -0,0 +1,10 @@ +package org.zwobble.hobgoblin.compiler.ast.typed; + +import org.zwobble.hobgoblin.compiler.sources.Source; +import org.zwobble.hobgoblin.compiler.types.Type; + +public record TypedSumVariantDefinitionNode( + TypedTypeLevelExpressionNode type, + Source source +) implements TypedNode { +} diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatypes/JavaTypesGenerator.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatypes/JavaTypesGenerator.java index 71fdba9..41070ef 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatypes/JavaTypesGenerator.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatypes/JavaTypesGenerator.java @@ -2,6 +2,7 @@ package org.zwobble.hobgoblin.compiler.output.generators.javatypes; import org.zwobble.hobgoblin.compiler.ast.typed.TypedNamespaceNode; import org.zwobble.hobgoblin.compiler.ast.typed.TypedStructDefinitionNode; +import org.zwobble.hobgoblin.compiler.ast.typed.TypedSumDefinitionNode; import org.zwobble.hobgoblin.compiler.ast.typed.TypedTypeLevelExpressionNode; import org.zwobble.hobgoblin.compiler.builtins.BuiltinTypes; import org.zwobble.hobgoblin.compiler.output.CodeWriter; @@ -64,6 +65,10 @@ public class JavaTypesGenerator implements Generator { throw new RuntimeException(e); } } + + case TypedSumDefinitionNode sumDefinition -> { + throw new UnsupportedOperationException("TODO"); + } } } } -- cgit v1.2.3