summaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2026-09-27 19:49:22 +0100
committerMichael Williamson <mike@zwobble.org>2026-09-27 19:49:22 +0100
commit73fd8c4a3d9f593ed2a5394a5b34b88a27938e27 (patch)
tree0040423f7c89608e85834dfbae905d603538579a /src/main/java
parent1d9f757a461269c8b72785c767e46f00ade3b843 (diff)
Define typed AST in hobgoblin
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/ast/typed/TypedEnumDefinitionNode.java67
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/ast/typed/TypedEnumVariantDefinitionNode.java36
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/ast/typed/TypedNamespaceNode.java59
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/ast/typed/TypedNamespaceStatementNode.java16
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/ast/typed/TypedNativeTypeDefinitionNode.java50
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/ast/typed/TypedStructDefinitionNode.java63
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/ast/typed/TypedStructFieldDefinitionNode.java43
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/ast/typed/TypedSumDefinitionNode.java86
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/ast/typed/TypedSumVariantDefinitionNode.java38
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javapreciselymatchers/JavaPreciselyMatchersGenerator.java2
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatransient0/JavaTransient0Generator.java4
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatypes/JavaTypesGenerator.java6
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rusttransient0/RustTransient0Generator.java4
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rusttypes/RustTypesGenerator.java4
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/generators/typescripttypes/TypescriptTypesGenerator.java6
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeChecker.java4
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/types/HobgoblinNativeTypes.java26
17 files changed, 435 insertions, 79 deletions
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/ast/typed/TypedEnumDefinitionNode.java b/src/main/java/org/zwobble/hobgoblin/compiler/ast/typed/TypedEnumDefinitionNode.java
index a307a67..c9b5f5b 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/ast/typed/TypedEnumDefinitionNode.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/ast/typed/TypedEnumDefinitionNode.java
@@ -1,18 +1,65 @@
-package org.zwobble.hobgoblin.compiler.ast.typed;
+// Generated by hobgoblin.
-import org.zwobble.hobgoblin.compiler.ast.DocComment;
-import org.zwobble.hobgoblin.compiler.sources.Source;
-import org.zwobble.hobgoblin.compiler.types.EnumType;
+package org.zwobble.hobgoblin.compiler.ast.typed;
-import java.util.List;
+// Custom area start: org.zwobble.hobgoblin.compiler.ast.typed.TypedEnumDefinitionNode imports
+// Custom area end: org.zwobble.hobgoblin.compiler.ast.typed.TypedEnumDefinitionNode imports
public record TypedEnumDefinitionNode(
- EnumType type,
- List<TypedEnumVariantDefinitionNode> variants,
- DocComment docComment,
- Source source
-) implements TypedNamespaceStatementNode {
+ org.zwobble.hobgoblin.compiler.types.EnumType type,
+ java.util.List<org.zwobble.hobgoblin.compiler.ast.typed.TypedEnumVariantDefinitionNode> variants,
+ org.zwobble.hobgoblin.compiler.ast.DocComment docComment,
+ org.zwobble.hobgoblin.compiler.sources.Source source
+) implements org.zwobble.hobgoblin.compiler.ast.typed.TypedNamespaceStatementNode {
+ public static org.zwobble.hobgoblin.compiler.ast.typed.TypedEnumDefinitionNode.Builder arbitrary() {
+ return new org.zwobble.hobgoblin.compiler.ast.typed.TypedEnumDefinitionNode.Builder(org.zwobble.hobgoblin.compiler.types.HobgoblinNativeTypes.arbitraryEnumType(), java.util.List.of(), org.zwobble.hobgoblin.compiler.ast.HobgoblinNativeAst.arbitraryDocComment(), org.zwobble.hobgoblin.compiler.sources.HobgoblinNativeSources.arbitrarySource());
+ }
+
+ public record Builder(
+ org.zwobble.hobgoblin.compiler.types.EnumType type,
+ java.util.List<org.zwobble.hobgoblin.compiler.ast.typed.TypedEnumVariantDefinitionNode> variants,
+ org.zwobble.hobgoblin.compiler.ast.DocComment docComment,
+ org.zwobble.hobgoblin.compiler.sources.Source source
+ ) implements org.zwobble.hobgoblin.compiler.ast.typed.TypedNamespaceStatementNode.Builder {
+ public org.zwobble.hobgoblin.compiler.ast.typed.TypedEnumDefinitionNode build() {
+ return new org.zwobble.hobgoblin.compiler.ast.typed.TypedEnumDefinitionNode(type, variants, docComment, source);
+ }
+
+ public org.zwobble.hobgoblin.compiler.ast.typed.TypedEnumDefinitionNode.Builder withType(org.zwobble.hobgoblin.compiler.types.EnumType type) {
+ return new org.zwobble.hobgoblin.compiler.ast.typed.TypedEnumDefinitionNode.Builder(type, variants, docComment, source);
+ }
+
+ public org.zwobble.hobgoblin.compiler.ast.typed.TypedEnumDefinitionNode.Builder withVariants(java.util.List<org.zwobble.hobgoblin.compiler.ast.typed.TypedEnumVariantDefinitionNode> variants) {
+ return new org.zwobble.hobgoblin.compiler.ast.typed.TypedEnumDefinitionNode.Builder(type, variants, docComment, source);
+ }
+
+ public org.zwobble.hobgoblin.compiler.ast.typed.TypedEnumDefinitionNode.Builder addVariant(org.zwobble.hobgoblin.compiler.ast.typed.TypedEnumVariantDefinitionNode variant) {
+ var variants = new java.util.ArrayList<org.zwobble.hobgoblin.compiler.ast.typed.TypedEnumVariantDefinitionNode>(this.variants);
+ variants.add(variant);
+ return new org.zwobble.hobgoblin.compiler.ast.typed.TypedEnumDefinitionNode.Builder(type, variants, docComment, source);
+ }
+
+ public org.zwobble.hobgoblin.compiler.ast.typed.TypedEnumDefinitionNode.Builder addVariant(org.zwobble.hobgoblin.compiler.ast.typed.TypedEnumVariantDefinitionNode.Builder variant) {
+ var variants = new java.util.ArrayList<org.zwobble.hobgoblin.compiler.ast.typed.TypedEnumVariantDefinitionNode>(this.variants);
+ variants.add(variant.build());
+ return new org.zwobble.hobgoblin.compiler.ast.typed.TypedEnumDefinitionNode.Builder(type, variants, docComment, source);
+ }
+
+ public org.zwobble.hobgoblin.compiler.ast.typed.TypedEnumDefinitionNode.Builder withDocComment(org.zwobble.hobgoblin.compiler.ast.DocComment docComment) {
+ return new org.zwobble.hobgoblin.compiler.ast.typed.TypedEnumDefinitionNode.Builder(type, variants, docComment, source);
+ }
+
+ public org.zwobble.hobgoblin.compiler.ast.typed.TypedEnumDefinitionNode.Builder withSource(org.zwobble.hobgoblin.compiler.sources.Source source) {
+ return new org.zwobble.hobgoblin.compiler.ast.typed.TypedEnumDefinitionNode.Builder(type, variants, docComment, source);
+ }
+
+ // Custom area start: org.zwobble.hobgoblin.compiler.ast.typed.TypedEnumDefinitionNode.Builder body
+ // Custom area end: org.zwobble.hobgoblin.compiler.ast.typed.TypedEnumDefinitionNode.Builder body
+ }
+
+ // Custom area start: org.zwobble.hobgoblin.compiler.ast.typed.TypedEnumDefinitionNode body
public String name() {
return this.type.name();
}
+ // Custom area end: org.zwobble.hobgoblin.compiler.ast.typed.TypedEnumDefinitionNode body
}
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/ast/typed/TypedEnumVariantDefinitionNode.java b/src/main/java/org/zwobble/hobgoblin/compiler/ast/typed/TypedEnumVariantDefinitionNode.java
index 7036136..da735e1 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/ast/typed/TypedEnumVariantDefinitionNode.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/ast/typed/TypedEnumVariantDefinitionNode.java
@@ -1,6 +1,38 @@
+// Generated by hobgoblin.
+
package org.zwobble.hobgoblin.compiler.ast.typed;
-import org.zwobble.hobgoblin.compiler.sources.Source;
+// Custom area start: org.zwobble.hobgoblin.compiler.ast.typed.TypedEnumVariantDefinitionNode imports
+// Custom area end: org.zwobble.hobgoblin.compiler.ast.typed.TypedEnumVariantDefinitionNode imports
+
+public record TypedEnumVariantDefinitionNode(
+ String name,
+ org.zwobble.hobgoblin.compiler.sources.Source source
+) {
+ public static org.zwobble.hobgoblin.compiler.ast.typed.TypedEnumVariantDefinitionNode.Builder arbitrary() {
+ return new org.zwobble.hobgoblin.compiler.ast.typed.TypedEnumVariantDefinitionNode.Builder("", org.zwobble.hobgoblin.compiler.sources.HobgoblinNativeSources.arbitrarySource());
+ }
+
+ public record Builder(
+ String name,
+ org.zwobble.hobgoblin.compiler.sources.Source source
+ ) {
+ public org.zwobble.hobgoblin.compiler.ast.typed.TypedEnumVariantDefinitionNode build() {
+ return new org.zwobble.hobgoblin.compiler.ast.typed.TypedEnumVariantDefinitionNode(name, source);
+ }
+
+ public org.zwobble.hobgoblin.compiler.ast.typed.TypedEnumVariantDefinitionNode.Builder withName(String name) {
+ return new org.zwobble.hobgoblin.compiler.ast.typed.TypedEnumVariantDefinitionNode.Builder(name, source);
+ }
+
+ public org.zwobble.hobgoblin.compiler.ast.typed.TypedEnumVariantDefinitionNode.Builder withSource(org.zwobble.hobgoblin.compiler.sources.Source source) {
+ return new org.zwobble.hobgoblin.compiler.ast.typed.TypedEnumVariantDefinitionNode.Builder(name, source);
+ }
+
+ // Custom area start: org.zwobble.hobgoblin.compiler.ast.typed.TypedEnumVariantDefinitionNode.Builder body
+ // Custom area end: org.zwobble.hobgoblin.compiler.ast.typed.TypedEnumVariantDefinitionNode.Builder body
+ }
-public record TypedEnumVariantDefinitionNode(String name, Source source) {
+ // Custom area start: org.zwobble.hobgoblin.compiler.ast.typed.TypedEnumVariantDefinitionNode body
+ // Custom area end: org.zwobble.hobgoblin.compiler.ast.typed.TypedEnumVariantDefinitionNode body
}
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/ast/typed/TypedNamespaceNode.java b/src/main/java/org/zwobble/hobgoblin/compiler/ast/typed/TypedNamespaceNode.java
index 805498f..fcb2fe9 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/ast/typed/TypedNamespaceNode.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/ast/typed/TypedNamespaceNode.java
@@ -1,13 +1,56 @@
-package org.zwobble.hobgoblin.compiler.ast.typed;
+// Generated by hobgoblin.
-import org.zwobble.hobgoblin.compiler.sources.Source;
-import org.zwobble.hobgoblin.compiler.types.NamespaceName;
+package org.zwobble.hobgoblin.compiler.ast.typed;
-import java.util.List;
+// Custom area start: org.zwobble.hobgoblin.compiler.ast.typed.TypedNamespaceNode imports
+// Custom area end: org.zwobble.hobgoblin.compiler.ast.typed.TypedNamespaceNode imports
public record TypedNamespaceNode(
- NamespaceName namespaceName,
- List<TypedNamespaceStatementNode> body,
- Source source
-) implements TypedNode {
+ org.zwobble.hobgoblin.compiler.types.NamespaceName namespaceName,
+ java.util.List<org.zwobble.hobgoblin.compiler.ast.typed.TypedNamespaceStatementNode> body,
+ org.zwobble.hobgoblin.compiler.sources.Source source
+) {
+ public static org.zwobble.hobgoblin.compiler.ast.typed.TypedNamespaceNode.Builder arbitrary() {
+ return new org.zwobble.hobgoblin.compiler.ast.typed.TypedNamespaceNode.Builder(org.zwobble.hobgoblin.compiler.types.HobgoblinNativeTypes.arbitraryNamespaceName(), java.util.List.of(), org.zwobble.hobgoblin.compiler.sources.HobgoblinNativeSources.arbitrarySource());
+ }
+
+ public record Builder(
+ org.zwobble.hobgoblin.compiler.types.NamespaceName namespaceName,
+ java.util.List<org.zwobble.hobgoblin.compiler.ast.typed.TypedNamespaceStatementNode> body,
+ org.zwobble.hobgoblin.compiler.sources.Source source
+ ) {
+ public org.zwobble.hobgoblin.compiler.ast.typed.TypedNamespaceNode build() {
+ return new org.zwobble.hobgoblin.compiler.ast.typed.TypedNamespaceNode(namespaceName, body, source);
+ }
+
+ public org.zwobble.hobgoblin.compiler.ast.typed.TypedNamespaceNode.Builder withNamespaceName(org.zwobble.hobgoblin.compiler.types.NamespaceName namespaceName) {
+ return new org.zwobble.hobgoblin.compiler.ast.typed.TypedNamespaceNode.Builder(namespaceName, body, source);
+ }
+
+ public org.zwobble.hobgoblin.compiler.ast.typed.TypedNamespaceNode.Builder withBody(java.util.List<org.zwobble.hobgoblin.compiler.ast.typed.TypedNamespaceStatementNode> body) {
+ return new org.zwobble.hobgoblin.compiler.ast.typed.TypedNamespaceNode.Builder(namespaceName, body, source);
+ }
+
+ public org.zwobble.hobgoblin.compiler.ast.typed.TypedNamespaceNode.Builder addBodyElement(org.zwobble.hobgoblin.compiler.ast.typed.TypedNamespaceStatementNode bodyElement) {
+ var body = new java.util.ArrayList<org.zwobble.hobgoblin.compiler.ast.typed.TypedNamespaceStatementNode>(this.body);
+ body.add(bodyElement);
+ return new org.zwobble.hobgoblin.compiler.ast.typed.TypedNamespaceNode.Builder(namespaceName, body, source);
+ }
+
+ public org.zwobble.hobgoblin.compiler.ast.typed.TypedNamespaceNode.Builder addBodyElement(org.zwobble.hobgoblin.compiler.ast.typed.TypedNamespaceStatementNode.Builder bodyElement) {
+ var body = new java.util.ArrayList<org.zwobble.hobgoblin.compiler.ast.typed.TypedNamespaceStatementNode>(this.body);
+ body.add(bodyElement.build());
+ return new org.zwobble.hobgoblin.compiler.ast.typed.TypedNamespaceNode.Builder(namespaceName, body, source);
+ }
+
+ public org.zwobble.hobgoblin.compiler.ast.typed.TypedNamespaceNode.Builder withSource(org.zwobble.hobgoblin.compiler.sources.Source source) {
+ return new org.zwobble.hobgoblin.compiler.ast.typed.TypedNamespaceNode.Builder(namespaceName, body, source);
+ }
+
+ // Custom area start: org.zwobble.hobgoblin.compiler.ast.typed.TypedNamespaceNode.Builder body
+ // Custom area end: org.zwobble.hobgoblin.compiler.ast.typed.TypedNamespaceNode.Builder body
+ }
+
+ // Custom area start: org.zwobble.hobgoblin.compiler.ast.typed.TypedNamespaceNode body
+ // Custom area end: org.zwobble.hobgoblin.compiler.ast.typed.TypedNamespaceNode body
}
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 fdd45b7..ac01a37 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,18 @@
+// Generated by hobgoblin.
+
package org.zwobble.hobgoblin.compiler.ast.typed;
-public sealed interface TypedNamespaceStatementNode extends TypedNode permits TypedEnumDefinitionNode, TypedNativeTypeDefinitionNode, TypedStructDefinitionNode, TypedSumDefinitionNode {
+// Custom area start: org.zwobble.hobgoblin.compiler.ast.typed.TypedNamespaceStatementNode imports
+// Custom area end: org.zwobble.hobgoblin.compiler.ast.typed.TypedNamespaceStatementNode imports
+
+public sealed interface TypedNamespaceStatementNode permits org.zwobble.hobgoblin.compiler.ast.typed.TypedEnumDefinitionNode, org.zwobble.hobgoblin.compiler.ast.typed.TypedNativeTypeDefinitionNode, org.zwobble.hobgoblin.compiler.ast.typed.TypedStructDefinitionNode, org.zwobble.hobgoblin.compiler.ast.typed.TypedSumDefinitionNode {
+ public interface Builder {
+ public org.zwobble.hobgoblin.compiler.ast.typed.TypedNamespaceStatementNode build();
+
+ // Custom area start: org.zwobble.hobgoblin.compiler.ast.typed.TypedNamespaceStatementNode.Builder body
+ // Custom area end: org.zwobble.hobgoblin.compiler.ast.typed.TypedNamespaceStatementNode.Builder body
+ }
+
+ // Custom area start: org.zwobble.hobgoblin.compiler.ast.typed.TypedNamespaceStatementNode body
+ // Custom area end: org.zwobble.hobgoblin.compiler.ast.typed.TypedNamespaceStatementNode body
}
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/ast/typed/TypedNativeTypeDefinitionNode.java b/src/main/java/org/zwobble/hobgoblin/compiler/ast/typed/TypedNativeTypeDefinitionNode.java
index 487a80b..933660a 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/ast/typed/TypedNativeTypeDefinitionNode.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/ast/typed/TypedNativeTypeDefinitionNode.java
@@ -1,16 +1,46 @@
+// Generated by hobgoblin.
+
package org.zwobble.hobgoblin.compiler.ast.typed;
-import org.zwobble.hobgoblin.compiler.ast.DocComment;
-import org.zwobble.hobgoblin.compiler.sources.Source;
-import org.zwobble.hobgoblin.compiler.types.SimpleNativeType;
-import org.zwobble.hobgoblin.compiler.types.TypeOrConstructor;
+// Custom area start: org.zwobble.hobgoblin.compiler.ast.typed.TypedNativeTypeDefinitionNode imports
+// Custom area end: org.zwobble.hobgoblin.compiler.ast.typed.TypedNativeTypeDefinitionNode imports
public record TypedNativeTypeDefinitionNode(
- TypeOrConstructor<SimpleNativeType> typeOrConstructor,
- DocComment docComment,
- Source source
-) implements TypedNamespaceStatementNode {
- public String name() {
- return this.typeOrConstructor.name();
+ org.zwobble.hobgoblin.compiler.types.TypeOrConstructor<org.zwobble.hobgoblin.compiler.types.SimpleNativeType> typeOrConstructor,
+ org.zwobble.hobgoblin.compiler.ast.DocComment docComment,
+ org.zwobble.hobgoblin.compiler.sources.Source source
+) implements org.zwobble.hobgoblin.compiler.ast.typed.TypedNamespaceStatementNode {
+ public static org.zwobble.hobgoblin.compiler.ast.typed.TypedNativeTypeDefinitionNode.Builder arbitrary() {
+ return new org.zwobble.hobgoblin.compiler.ast.typed.TypedNativeTypeDefinitionNode.Builder(org.zwobble.hobgoblin.compiler.types.HobgoblinNativeTypes.arbitraryTypeOrConstructor(() -> {
+ return org.zwobble.hobgoblin.compiler.types.HobgoblinNativeTypes.arbitrarySimpleNativeType();
+ }), org.zwobble.hobgoblin.compiler.ast.HobgoblinNativeAst.arbitraryDocComment(), org.zwobble.hobgoblin.compiler.sources.HobgoblinNativeSources.arbitrarySource());
+ }
+
+ public record Builder(
+ org.zwobble.hobgoblin.compiler.types.TypeOrConstructor<org.zwobble.hobgoblin.compiler.types.SimpleNativeType> typeOrConstructor,
+ org.zwobble.hobgoblin.compiler.ast.DocComment docComment,
+ org.zwobble.hobgoblin.compiler.sources.Source source
+ ) implements org.zwobble.hobgoblin.compiler.ast.typed.TypedNamespaceStatementNode.Builder {
+ public org.zwobble.hobgoblin.compiler.ast.typed.TypedNativeTypeDefinitionNode build() {
+ return new org.zwobble.hobgoblin.compiler.ast.typed.TypedNativeTypeDefinitionNode(typeOrConstructor, docComment, source);
+ }
+
+ public org.zwobble.hobgoblin.compiler.ast.typed.TypedNativeTypeDefinitionNode.Builder withTypeOrConstructor(org.zwobble.hobgoblin.compiler.types.TypeOrConstructor<org.zwobble.hobgoblin.compiler.types.SimpleNativeType> typeOrConstructor) {
+ return new org.zwobble.hobgoblin.compiler.ast.typed.TypedNativeTypeDefinitionNode.Builder(typeOrConstructor, docComment, source);
+ }
+
+ public org.zwobble.hobgoblin.compiler.ast.typed.TypedNativeTypeDefinitionNode.Builder withDocComment(org.zwobble.hobgoblin.compiler.ast.DocComment docComment) {
+ return new org.zwobble.hobgoblin.compiler.ast.typed.TypedNativeTypeDefinitionNode.Builder(typeOrConstructor, docComment, source);
+ }
+
+ public org.zwobble.hobgoblin.compiler.ast.typed.TypedNativeTypeDefinitionNode.Builder withSource(org.zwobble.hobgoblin.compiler.sources.Source source) {
+ return new org.zwobble.hobgoblin.compiler.ast.typed.TypedNativeTypeDefinitionNode.Builder(typeOrConstructor, docComment, source);
+ }
+
+ // Custom area start: org.zwobble.hobgoblin.compiler.ast.typed.TypedNativeTypeDefinitionNode.Builder body
+ // Custom area end: org.zwobble.hobgoblin.compiler.ast.typed.TypedNativeTypeDefinitionNode.Builder body
}
+
+ // Custom area start: org.zwobble.hobgoblin.compiler.ast.typed.TypedNativeTypeDefinitionNode body
+ // Custom area end: org.zwobble.hobgoblin.compiler.ast.typed.TypedNativeTypeDefinitionNode body
}
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/ast/typed/TypedStructDefinitionNode.java b/src/main/java/org/zwobble/hobgoblin/compiler/ast/typed/TypedStructDefinitionNode.java
index f747e44..c88c3dc 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/ast/typed/TypedStructDefinitionNode.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/ast/typed/TypedStructDefinitionNode.java
@@ -1,20 +1,59 @@
-package org.zwobble.hobgoblin.compiler.ast.typed;
+// Generated by hobgoblin.
-import org.zwobble.hobgoblin.compiler.ast.DocComment;
-import org.zwobble.hobgoblin.compiler.sources.Source;
-import org.zwobble.hobgoblin.compiler.types.SimpleStructType;
-import org.zwobble.hobgoblin.compiler.types.TypeOrConstructor;
+package org.zwobble.hobgoblin.compiler.ast.typed;
-import java.util.List;
-import java.util.Optional;
+// Custom area start: org.zwobble.hobgoblin.compiler.ast.typed.TypedStructDefinitionNode imports
+// Custom area end: org.zwobble.hobgoblin.compiler.ast.typed.TypedStructDefinitionNode imports
public record TypedStructDefinitionNode(
- TypeOrConstructor<SimpleStructType> typeOrConstructor,
- Optional<List<TypedStructFieldDefinitionNode>> fields,
- DocComment docComment,
- Source source
-) implements TypedNamespaceStatementNode {
+ org.zwobble.hobgoblin.compiler.types.TypeOrConstructor<org.zwobble.hobgoblin.compiler.types.SimpleStructType> typeOrConstructor,
+ java.util.Optional<java.util.List<org.zwobble.hobgoblin.compiler.ast.typed.TypedStructFieldDefinitionNode>> fields,
+ org.zwobble.hobgoblin.compiler.ast.DocComment docComment,
+ org.zwobble.hobgoblin.compiler.sources.Source source
+) implements org.zwobble.hobgoblin.compiler.ast.typed.TypedNamespaceStatementNode {
+ public static org.zwobble.hobgoblin.compiler.ast.typed.TypedStructDefinitionNode.Builder arbitrary() {
+ return new org.zwobble.hobgoblin.compiler.ast.typed.TypedStructDefinitionNode.Builder(org.zwobble.hobgoblin.compiler.types.HobgoblinNativeTypes.arbitraryTypeOrConstructor(() -> {
+ return org.zwobble.hobgoblin.compiler.types.HobgoblinNativeTypes.arbitrarySimpleStructType();
+ }), java.util.Optional.empty(), org.zwobble.hobgoblin.compiler.ast.HobgoblinNativeAst.arbitraryDocComment(), org.zwobble.hobgoblin.compiler.sources.HobgoblinNativeSources.arbitrarySource());
+ }
+
+ public record Builder(
+ org.zwobble.hobgoblin.compiler.types.TypeOrConstructor<org.zwobble.hobgoblin.compiler.types.SimpleStructType> typeOrConstructor,
+ java.util.Optional<java.util.List<org.zwobble.hobgoblin.compiler.ast.typed.TypedStructFieldDefinitionNode>> fields,
+ org.zwobble.hobgoblin.compiler.ast.DocComment docComment,
+ org.zwobble.hobgoblin.compiler.sources.Source source
+ ) implements org.zwobble.hobgoblin.compiler.ast.typed.TypedNamespaceStatementNode.Builder {
+ public org.zwobble.hobgoblin.compiler.ast.typed.TypedStructDefinitionNode build() {
+ return new org.zwobble.hobgoblin.compiler.ast.typed.TypedStructDefinitionNode(typeOrConstructor, fields, docComment, source);
+ }
+
+ public org.zwobble.hobgoblin.compiler.ast.typed.TypedStructDefinitionNode.Builder withTypeOrConstructor(org.zwobble.hobgoblin.compiler.types.TypeOrConstructor<org.zwobble.hobgoblin.compiler.types.SimpleStructType> typeOrConstructor) {
+ return new org.zwobble.hobgoblin.compiler.ast.typed.TypedStructDefinitionNode.Builder(typeOrConstructor, fields, docComment, source);
+ }
+
+ public org.zwobble.hobgoblin.compiler.ast.typed.TypedStructDefinitionNode.Builder withFields(java.util.Optional<java.util.List<org.zwobble.hobgoblin.compiler.ast.typed.TypedStructFieldDefinitionNode>> fields) {
+ return new org.zwobble.hobgoblin.compiler.ast.typed.TypedStructDefinitionNode.Builder(typeOrConstructor, fields, docComment, source);
+ }
+
+ public org.zwobble.hobgoblin.compiler.ast.typed.TypedStructDefinitionNode.Builder withFields(java.util.List<org.zwobble.hobgoblin.compiler.ast.typed.TypedStructFieldDefinitionNode> fields) {
+ return new org.zwobble.hobgoblin.compiler.ast.typed.TypedStructDefinitionNode.Builder(typeOrConstructor, java.util.Optional.of(fields), docComment, source);
+ }
+
+ public org.zwobble.hobgoblin.compiler.ast.typed.TypedStructDefinitionNode.Builder withDocComment(org.zwobble.hobgoblin.compiler.ast.DocComment docComment) {
+ return new org.zwobble.hobgoblin.compiler.ast.typed.TypedStructDefinitionNode.Builder(typeOrConstructor, fields, docComment, source);
+ }
+
+ public org.zwobble.hobgoblin.compiler.ast.typed.TypedStructDefinitionNode.Builder withSource(org.zwobble.hobgoblin.compiler.sources.Source source) {
+ return new org.zwobble.hobgoblin.compiler.ast.typed.TypedStructDefinitionNode.Builder(typeOrConstructor, fields, docComment, source);
+ }
+
+ // Custom area start: org.zwobble.hobgoblin.compiler.ast.typed.TypedStructDefinitionNode.Builder body
+ // Custom area end: org.zwobble.hobgoblin.compiler.ast.typed.TypedStructDefinitionNode.Builder body
+ }
+
+ // Custom area start: org.zwobble.hobgoblin.compiler.ast.typed.TypedStructDefinitionNode body
public String name() {
return this.typeOrConstructor.name();
}
+ // Custom area end: org.zwobble.hobgoblin.compiler.ast.typed.TypedStructDefinitionNode body
}
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/ast/typed/TypedStructFieldDefinitionNode.java b/src/main/java/org/zwobble/hobgoblin/compiler/ast/typed/TypedStructFieldDefinitionNode.java
index 739ea63..8824ffe 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/ast/typed/TypedStructFieldDefinitionNode.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/ast/typed/TypedStructFieldDefinitionNode.java
@@ -1,11 +1,44 @@
+// Generated by hobgoblin.
+
package org.zwobble.hobgoblin.compiler.ast.typed;
-import org.zwobble.hobgoblin.compiler.sources.Source;
-import org.zwobble.hobgoblin.compiler.types.Type;
+// Custom area start: org.zwobble.hobgoblin.compiler.ast.typed.TypedStructFieldDefinitionNode imports
+// Custom area end: org.zwobble.hobgoblin.compiler.ast.typed.TypedStructFieldDefinitionNode imports
public record TypedStructFieldDefinitionNode(
String name,
- TypedTypeLevelExpressionNode<Type> type,
- Source source
-) implements TypedNode {
+ org.zwobble.hobgoblin.compiler.types.Type type,
+ org.zwobble.hobgoblin.compiler.sources.Source source
+) {
+ public static org.zwobble.hobgoblin.compiler.ast.typed.TypedStructFieldDefinitionNode.Builder arbitrary() {
+ return new org.zwobble.hobgoblin.compiler.ast.typed.TypedStructFieldDefinitionNode.Builder("", org.zwobble.hobgoblin.compiler.types.HobgoblinNativeTypes.arbitraryType(), org.zwobble.hobgoblin.compiler.sources.HobgoblinNativeSources.arbitrarySource());
+ }
+
+ public record Builder(
+ String name,
+ org.zwobble.hobgoblin.compiler.types.Type type,
+ org.zwobble.hobgoblin.compiler.sources.Source source
+ ) {
+ public org.zwobble.hobgoblin.compiler.ast.typed.TypedStructFieldDefinitionNode build() {
+ return new org.zwobble.hobgoblin.compiler.ast.typed.TypedStructFieldDefinitionNode(name, type, source);
+ }
+
+ public org.zwobble.hobgoblin.compiler.ast.typed.TypedStructFieldDefinitionNode.Builder withName(String name) {
+ return new org.zwobble.hobgoblin.compiler.ast.typed.TypedStructFieldDefinitionNode.Builder(name, type, source);
+ }
+
+ public org.zwobble.hobgoblin.compiler.ast.typed.TypedStructFieldDefinitionNode.Builder withType(org.zwobble.hobgoblin.compiler.types.Type type) {
+ return new org.zwobble.hobgoblin.compiler.ast.typed.TypedStructFieldDefinitionNode.Builder(name, type, source);
+ }
+
+ public org.zwobble.hobgoblin.compiler.ast.typed.TypedStructFieldDefinitionNode.Builder withSource(org.zwobble.hobgoblin.compiler.sources.Source source) {
+ return new org.zwobble.hobgoblin.compiler.ast.typed.TypedStructFieldDefinitionNode.Builder(name, type, source);
+ }
+
+ // Custom area start: org.zwobble.hobgoblin.compiler.ast.typed.TypedStructFieldDefinitionNode.Builder body
+ // Custom area end: org.zwobble.hobgoblin.compiler.ast.typed.TypedStructFieldDefinitionNode.Builder body
+ }
+
+ // Custom area start: org.zwobble.hobgoblin.compiler.ast.typed.TypedStructFieldDefinitionNode body
+ // Custom area end: org.zwobble.hobgoblin.compiler.ast.typed.TypedStructFieldDefinitionNode body
}
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
index 374befe..b5702ab 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/ast/typed/TypedSumDefinitionNode.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/ast/typed/TypedSumDefinitionNode.java
@@ -1,19 +1,83 @@
-package org.zwobble.hobgoblin.compiler.ast.typed;
+// Generated by hobgoblin.
-import org.zwobble.hobgoblin.compiler.ast.DocComment;
-import org.zwobble.hobgoblin.compiler.sources.Source;
-import org.zwobble.hobgoblin.compiler.types.SumType;
+package org.zwobble.hobgoblin.compiler.ast.typed;
-import java.util.List;
+// Custom area start: org.zwobble.hobgoblin.compiler.ast.typed.TypedSumDefinitionNode imports
+// Custom area end: org.zwobble.hobgoblin.compiler.ast.typed.TypedSumDefinitionNode imports
public record TypedSumDefinitionNode(
- SumType type,
- List<TypedSumVariantDefinitionNode> variants,
- List<TypedStructFieldDefinitionNode> fields,
- DocComment docComment,
- Source source
-) implements TypedNamespaceStatementNode {
+ org.zwobble.hobgoblin.compiler.types.SumType type,
+ java.util.List<org.zwobble.hobgoblin.compiler.ast.typed.TypedSumVariantDefinitionNode> variants,
+ java.util.List<org.zwobble.hobgoblin.compiler.ast.typed.TypedStructFieldDefinitionNode> fields,
+ org.zwobble.hobgoblin.compiler.ast.DocComment docComment,
+ org.zwobble.hobgoblin.compiler.sources.Source source
+) implements org.zwobble.hobgoblin.compiler.ast.typed.TypedNamespaceStatementNode {
+ public static org.zwobble.hobgoblin.compiler.ast.typed.TypedSumDefinitionNode.Builder arbitrary() {
+ return new org.zwobble.hobgoblin.compiler.ast.typed.TypedSumDefinitionNode.Builder(org.zwobble.hobgoblin.compiler.types.HobgoblinNativeTypes.arbitrarySumType(), java.util.List.of(), java.util.List.of(), org.zwobble.hobgoblin.compiler.ast.HobgoblinNativeAst.arbitraryDocComment(), org.zwobble.hobgoblin.compiler.sources.HobgoblinNativeSources.arbitrarySource());
+ }
+
+ public record Builder(
+ org.zwobble.hobgoblin.compiler.types.SumType type,
+ java.util.List<org.zwobble.hobgoblin.compiler.ast.typed.TypedSumVariantDefinitionNode> variants,
+ java.util.List<org.zwobble.hobgoblin.compiler.ast.typed.TypedStructFieldDefinitionNode> fields,
+ org.zwobble.hobgoblin.compiler.ast.DocComment docComment,
+ org.zwobble.hobgoblin.compiler.sources.Source source
+ ) implements org.zwobble.hobgoblin.compiler.ast.typed.TypedNamespaceStatementNode.Builder {
+ public org.zwobble.hobgoblin.compiler.ast.typed.TypedSumDefinitionNode build() {
+ return new org.zwobble.hobgoblin.compiler.ast.typed.TypedSumDefinitionNode(type, variants, fields, docComment, source);
+ }
+
+ public org.zwobble.hobgoblin.compiler.ast.typed.TypedSumDefinitionNode.Builder withType(org.zwobble.hobgoblin.compiler.types.SumType type) {
+ return new org.zwobble.hobgoblin.compiler.ast.typed.TypedSumDefinitionNode.Builder(type, variants, fields, docComment, source);
+ }
+
+ public org.zwobble.hobgoblin.compiler.ast.typed.TypedSumDefinitionNode.Builder withVariants(java.util.List<org.zwobble.hobgoblin.compiler.ast.typed.TypedSumVariantDefinitionNode> variants) {
+ return new org.zwobble.hobgoblin.compiler.ast.typed.TypedSumDefinitionNode.Builder(type, variants, fields, docComment, source);
+ }
+
+ public org.zwobble.hobgoblin.compiler.ast.typed.TypedSumDefinitionNode.Builder addVariant(org.zwobble.hobgoblin.compiler.ast.typed.TypedSumVariantDefinitionNode variant) {
+ var variants = new java.util.ArrayList<org.zwobble.hobgoblin.compiler.ast.typed.TypedSumVariantDefinitionNode>(this.variants);
+ variants.add(variant);
+ return new org.zwobble.hobgoblin.compiler.ast.typed.TypedSumDefinitionNode.Builder(type, variants, fields, docComment, source);
+ }
+
+ public org.zwobble.hobgoblin.compiler.ast.typed.TypedSumDefinitionNode.Builder addVariant(org.zwobble.hobgoblin.compiler.ast.typed.TypedSumVariantDefinitionNode.Builder variant) {
+ var variants = new java.util.ArrayList<org.zwobble.hobgoblin.compiler.ast.typed.TypedSumVariantDefinitionNode>(this.variants);
+ variants.add(variant.build());
+ return new org.zwobble.hobgoblin.compiler.ast.typed.TypedSumDefinitionNode.Builder(type, variants, fields, docComment, source);
+ }
+
+ public org.zwobble.hobgoblin.compiler.ast.typed.TypedSumDefinitionNode.Builder withFields(java.util.List<org.zwobble.hobgoblin.compiler.ast.typed.TypedStructFieldDefinitionNode> fields) {
+ return new org.zwobble.hobgoblin.compiler.ast.typed.TypedSumDefinitionNode.Builder(type, variants, fields, docComment, source);
+ }
+
+ public org.zwobble.hobgoblin.compiler.ast.typed.TypedSumDefinitionNode.Builder addField(org.zwobble.hobgoblin.compiler.ast.typed.TypedStructFieldDefinitionNode field) {
+ var fields = new java.util.ArrayList<org.zwobble.hobgoblin.compiler.ast.typed.TypedStructFieldDefinitionNode>(this.fields);
+ fields.add(field);
+ return new org.zwobble.hobgoblin.compiler.ast.typed.TypedSumDefinitionNode.Builder(type, variants, fields, docComment, source);
+ }
+
+ public org.zwobble.hobgoblin.compiler.ast.typed.TypedSumDefinitionNode.Builder addField(org.zwobble.hobgoblin.compiler.ast.typed.TypedStructFieldDefinitionNode.Builder field) {
+ var fields = new java.util.ArrayList<org.zwobble.hobgoblin.compiler.ast.typed.TypedStructFieldDefinitionNode>(this.fields);
+ fields.add(field.build());
+ return new org.zwobble.hobgoblin.compiler.ast.typed.TypedSumDefinitionNode.Builder(type, variants, fields, docComment, source);
+ }
+
+ public org.zwobble.hobgoblin.compiler.ast.typed.TypedSumDefinitionNode.Builder withDocComment(org.zwobble.hobgoblin.compiler.ast.DocComment docComment) {
+ return new org.zwobble.hobgoblin.compiler.ast.typed.TypedSumDefinitionNode.Builder(type, variants, fields, docComment, source);
+ }
+
+ public org.zwobble.hobgoblin.compiler.ast.typed.TypedSumDefinitionNode.Builder withSource(org.zwobble.hobgoblin.compiler.sources.Source source) {
+ return new org.zwobble.hobgoblin.compiler.ast.typed.TypedSumDefinitionNode.Builder(type, variants, fields, docComment, source);
+ }
+
+ // Custom area start: org.zwobble.hobgoblin.compiler.ast.typed.TypedSumDefinitionNode.Builder body
+ // Custom area end: org.zwobble.hobgoblin.compiler.ast.typed.TypedSumDefinitionNode.Builder body
+ }
+
+ // Custom area start: org.zwobble.hobgoblin.compiler.ast.typed.TypedSumDefinitionNode body
public String name() {
return this.type.name();
}
+ // Custom area end: org.zwobble.hobgoblin.compiler.ast.typed.TypedSumDefinitionNode body
}
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
index 5c2dd6c..12235ad 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/ast/typed/TypedSumVariantDefinitionNode.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/ast/typed/TypedSumVariantDefinitionNode.java
@@ -1,10 +1,38 @@
+// Generated by hobgoblin.
+
package org.zwobble.hobgoblin.compiler.ast.typed;
-import org.zwobble.hobgoblin.compiler.sources.Source;
-import org.zwobble.hobgoblin.compiler.types.Type;
+// Custom area start: org.zwobble.hobgoblin.compiler.ast.typed.TypedSumVariantDefinitionNode imports
+// Custom area end: org.zwobble.hobgoblin.compiler.ast.typed.TypedSumVariantDefinitionNode imports
public record TypedSumVariantDefinitionNode(
- TypedTypeLevelExpressionNode<Type> type,
- Source source
-) implements TypedNode {
+ org.zwobble.hobgoblin.compiler.types.Type type,
+ org.zwobble.hobgoblin.compiler.sources.Source source
+) {
+ public static org.zwobble.hobgoblin.compiler.ast.typed.TypedSumVariantDefinitionNode.Builder arbitrary() {
+ return new org.zwobble.hobgoblin.compiler.ast.typed.TypedSumVariantDefinitionNode.Builder(org.zwobble.hobgoblin.compiler.types.HobgoblinNativeTypes.arbitraryType(), org.zwobble.hobgoblin.compiler.sources.HobgoblinNativeSources.arbitrarySource());
+ }
+
+ public record Builder(
+ org.zwobble.hobgoblin.compiler.types.Type type,
+ org.zwobble.hobgoblin.compiler.sources.Source source
+ ) {
+ public org.zwobble.hobgoblin.compiler.ast.typed.TypedSumVariantDefinitionNode build() {
+ return new org.zwobble.hobgoblin.compiler.ast.typed.TypedSumVariantDefinitionNode(type, source);
+ }
+
+ public org.zwobble.hobgoblin.compiler.ast.typed.TypedSumVariantDefinitionNode.Builder withType(org.zwobble.hobgoblin.compiler.types.Type type) {
+ return new org.zwobble.hobgoblin.compiler.ast.typed.TypedSumVariantDefinitionNode.Builder(type, source);
+ }
+
+ public org.zwobble.hobgoblin.compiler.ast.typed.TypedSumVariantDefinitionNode.Builder withSource(org.zwobble.hobgoblin.compiler.sources.Source source) {
+ return new org.zwobble.hobgoblin.compiler.ast.typed.TypedSumVariantDefinitionNode.Builder(type, source);
+ }
+
+ // Custom area start: org.zwobble.hobgoblin.compiler.ast.typed.TypedSumVariantDefinitionNode.Builder body
+ // Custom area end: org.zwobble.hobgoblin.compiler.ast.typed.TypedSumVariantDefinitionNode.Builder body
+ }
+
+ // Custom area start: org.zwobble.hobgoblin.compiler.ast.typed.TypedSumVariantDefinitionNode body
+ // Custom area end: org.zwobble.hobgoblin.compiler.ast.typed.TypedSumVariantDefinitionNode body
}
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javapreciselymatchers/JavaPreciselyMatchersGenerator.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javapreciselymatchers/JavaPreciselyMatchersGenerator.java
index 6155a81..6eb3ac1 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javapreciselymatchers/JavaPreciselyMatchersGenerator.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javapreciselymatchers/JavaPreciselyMatchersGenerator.java
@@ -246,7 +246,7 @@ public class JavaPreciselyMatchersGenerator implements Generator {
));
for (var field : structDefinition.fields().orElse(List.of())) {
- var fieldType = field.type().value();
+ var fieldType = field.type();
var typeParams = switch (structDefinition.typeOrConstructor()) {
case TypeOrConstructor.Constructor<SimpleStructType> constructor ->
Set.copyOf(constructor.value().params());
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatransient0/JavaTransient0Generator.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatransient0/JavaTransient0Generator.java
index 8d6b2b6..40bfbdf 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatransient0/JavaTransient0Generator.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatransient0/JavaTransient0Generator.java
@@ -761,7 +761,7 @@ public class JavaTransient0Generator implements Generator {
this.javaGenerator.generateFieldName(field.name()),
List.of()
),
- field.type().value(),
+ field.type(),
context
).stream())
.toList()
@@ -790,7 +790,7 @@ public class JavaTransient0Generator implements Generator {
structDefinition.fields().get().stream()
.flatMap(field -> generateDecode(
this.javaGenerator.generateFieldName(field.name()),
- field.type().value(),
+ field.type(),
context
).stream()),
Stream.of(new JavaReturn(new JavaNewExpression(
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 1112b67..01a05d0 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
@@ -211,7 +211,7 @@ public class JavaTypesGenerator implements Generator {
structDefinition.fields().orElse(List.of()).stream()
.map(field -> {
var arbitraryValue = ArbitraryValueAnalysis.arbitraryValue(
- field.type().value(),
+ field.type(),
context.typesInfo
);
@@ -365,7 +365,7 @@ public class JavaTypesGenerator implements Generator {
var javaFieldName = generateFieldName(field.name());
var withMethodName = generateFieldName("with" + lowerCamelCaseToUpperCamelCase(field.name()));
- var fieldType = this.javaGenerator.collapseType(field.type().value());
+ var fieldType = this.javaGenerator.collapseType(field.type());
methods.add(new JavaMethodDeclaration(
withMethodName,
@@ -581,7 +581,7 @@ public class JavaTypesGenerator implements Generator {
JavaVisibility.PUBLIC,
JavaMemberKind.INSTANCE,
List.of(),
- generateTypeRef(field.type().value(), context),
+ generateTypeRef(field.type(), context),
List.of(),
List.of(),
Optional.empty()
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rusttransient0/RustTransient0Generator.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rusttransient0/RustTransient0Generator.java
index 10b5c0a..6f6740c 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rusttransient0/RustTransient0Generator.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rusttransient0/RustTransient0Generator.java
@@ -506,7 +506,7 @@ public class RustTransient0Generator implements Generator {
this.rustGenerator.generateFieldName(field.name())
)
),
- field.type().value()
+ field.type()
))
.toList();
@@ -533,7 +533,7 @@ public class RustTransient0Generator implements Generator {
.<RustStatement>map(field -> new RustLetStatement(
this.rustGenerator.generateFieldName(field.name()),
false,
- generateDecode(field.type().value())
+ generateDecode(field.type())
))
.toList(),
Optional.of(new RustStructExpression(
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rusttypes/RustTypesGenerator.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rusttypes/RustTypesGenerator.java
index 0a62c64..634dbff 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rusttypes/RustTypesGenerator.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rusttypes/RustTypesGenerator.java
@@ -264,8 +264,8 @@ public class RustTypesGenerator implements Generator {
}
private RustType generateRustTypeExpression(
- TypedTypeLevelExpressionNode<Type> type
+ Type type
) {
- return this.rustGenerator.generateRustTypeExpression(type.value());
+ return this.rustGenerator.generateRustTypeExpression(type);
}
}
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/typescripttypes/TypescriptTypesGenerator.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/typescripttypes/TypescriptTypesGenerator.java
index 508de55..10217fb 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/typescripttypes/TypescriptTypesGenerator.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/typescripttypes/TypescriptTypesGenerator.java
@@ -278,7 +278,7 @@ public class TypescriptTypesGenerator implements Generator {
false,
true,
Optional.of(this.typescriptGenerator.generateTypeExpression(
- field.type().value(),
+ field.type(),
context
)),
Optional.empty()
@@ -309,7 +309,7 @@ public class TypescriptTypesGenerator implements Generator {
.map(field -> new TypescriptParam(
this.typescriptGenerator.generateFieldName(field.name()),
Optional.of(this.typescriptGenerator.generateTypeExpression(
- field.type().value(),
+ field.type(),
context
))
))
@@ -351,7 +351,7 @@ public class TypescriptTypesGenerator implements Generator {
new TypescriptTypeUnion(
sumDefinition.variants().stream()
.map(variant -> this.typescriptGenerator.generateTypeExpression(
- variant.type().value(),
+ variant.type(),
context
))
.toList()
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeChecker.java b/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeChecker.java
index b991a1c..2a09a7e 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeChecker.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeChecker.java
@@ -304,7 +304,7 @@ public class TypeChecker {
var fieldType = typeCheckMetaType(untypedField.type(), context);
var typedField = new TypedStructFieldDefinitionNode(
untypedField.name(),
- fieldType,
+ fieldType.value(),
untypedField.source()
);
typedFields.add(typedField);
@@ -334,7 +334,7 @@ public class TypeChecker {
for (var untypedVariant : untyped.variants()) {
var variantType = typeCheckMetaType(untypedVariant.type(), context);
var typedVariant = new TypedSumVariantDefinitionNode(
- variantType,
+ variantType.value(),
untyped.source()
);
typedVariants.add(typedVariant);
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/types/HobgoblinNativeTypes.java b/src/main/java/org/zwobble/hobgoblin/compiler/types/HobgoblinNativeTypes.java
index c08157d..14294f9 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/types/HobgoblinNativeTypes.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/types/HobgoblinNativeTypes.java
@@ -1,7 +1,33 @@
package org.zwobble.hobgoblin.compiler.types;
+import java.util.function.Supplier;
+
public class HobgoblinNativeTypes {
public static NamespaceName arbitraryNamespaceName() {
return NamespaceName.of();
}
+
+ public static Type arbitraryType() {
+ return arbitraryEnumType();
+ }
+
+ public static EnumType arbitraryEnumType() {
+ return new EnumType(arbitraryNamespaceName(), "");
+ }
+
+ public static SimpleNativeType arbitrarySimpleNativeType() {
+ return new SimpleNativeType(arbitraryNamespaceName(), "");
+ }
+
+ public static SimpleStructType arbitrarySimpleStructType() {
+ return new SimpleStructType(arbitraryNamespaceName(), "");
+ }
+
+ public static SumType arbitrarySumType() {
+ return new SumType(arbitraryNamespaceName(), "");
+ }
+
+ public static <T extends ConstructibleType> TypeOrConstructor<T> arbitraryTypeOrConstructor(Supplier<T> type) {
+ return TypeOrConstructor.type(type.get());
+ }
}