From 412e1b2826382144e6d66cad3c9a5540f2785542 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sun, 9 Aug 2026 21:36:22 +0100 Subject: Make type params on native type node optional --- .../ast/untyped/UntypedNativeTypeDefinitionNode.java | 20 ++++++-------------- .../zwobble/hobgoblin/compiler/parser/Parser.java | 6 +++--- .../hobgoblin/compiler/typechecker/TypeChecker.java | 2 +- 3 files changed, 10 insertions(+), 18 deletions(-) (limited to 'src/main/java/org') diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/ast/untyped/UntypedNativeTypeDefinitionNode.java b/src/main/java/org/zwobble/hobgoblin/compiler/ast/untyped/UntypedNativeTypeDefinitionNode.java index 43d642e..c992a0d 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/ast/untyped/UntypedNativeTypeDefinitionNode.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/ast/untyped/UntypedNativeTypeDefinitionNode.java @@ -7,17 +7,17 @@ package org.zwobble.hobgoblin.compiler.ast.untyped; public record UntypedNativeTypeDefinitionNode( String name, - java.util.List typeParams, + java.util.Optional> typeParams, org.zwobble.hobgoblin.compiler.ast.DocComment docComment, org.zwobble.hobgoblin.compiler.sources.Source source ) implements org.zwobble.hobgoblin.compiler.ast.untyped.UntypedNamespaceStatementNode { public static org.zwobble.hobgoblin.compiler.ast.untyped.UntypedNativeTypeDefinitionNode.Builder arbitrary() { - return new org.zwobble.hobgoblin.compiler.ast.untyped.UntypedNativeTypeDefinitionNode.Builder("", java.util.List.of(), org.zwobble.hobgoblin.compiler.ast.HobgoblinNativeAst.arbitraryDocComment(), org.zwobble.hobgoblin.compiler.sources.HobgoblinNativeSources.arbitrarySource()); + return new org.zwobble.hobgoblin.compiler.ast.untyped.UntypedNativeTypeDefinitionNode.Builder("", java.util.Optional.empty(), org.zwobble.hobgoblin.compiler.ast.HobgoblinNativeAst.arbitraryDocComment(), org.zwobble.hobgoblin.compiler.sources.HobgoblinNativeSources.arbitrarySource()); } public record Builder( String name, - java.util.List typeParams, + java.util.Optional> typeParams, org.zwobble.hobgoblin.compiler.ast.DocComment docComment, org.zwobble.hobgoblin.compiler.sources.Source source ) implements org.zwobble.hobgoblin.compiler.ast.untyped.UntypedNamespaceStatementNode.Builder { @@ -29,20 +29,12 @@ public record UntypedNativeTypeDefinitionNode( return new org.zwobble.hobgoblin.compiler.ast.untyped.UntypedNativeTypeDefinitionNode.Builder(name, typeParams, docComment, source); } - public org.zwobble.hobgoblin.compiler.ast.untyped.UntypedNativeTypeDefinitionNode.Builder withTypeParams(java.util.List typeParams) { - return new org.zwobble.hobgoblin.compiler.ast.untyped.UntypedNativeTypeDefinitionNode.Builder(name, typeParams, docComment, source); - } - - public org.zwobble.hobgoblin.compiler.ast.untyped.UntypedNativeTypeDefinitionNode.Builder addTypeParam(org.zwobble.hobgoblin.compiler.ast.untyped.UntypedTypeParamNode typeParam) { - var typeParams = new java.util.ArrayList(this.typeParams); - typeParams.add(typeParam); + public org.zwobble.hobgoblin.compiler.ast.untyped.UntypedNativeTypeDefinitionNode.Builder withTypeParams(java.util.Optional> typeParams) { return new org.zwobble.hobgoblin.compiler.ast.untyped.UntypedNativeTypeDefinitionNode.Builder(name, typeParams, docComment, source); } - public org.zwobble.hobgoblin.compiler.ast.untyped.UntypedNativeTypeDefinitionNode.Builder addTypeParam(org.zwobble.hobgoblin.compiler.ast.untyped.UntypedTypeParamNode.Builder typeParam) { - var typeParams = new java.util.ArrayList(this.typeParams); - typeParams.add(typeParam.build()); - return new org.zwobble.hobgoblin.compiler.ast.untyped.UntypedNativeTypeDefinitionNode.Builder(name, typeParams, docComment, source); + public org.zwobble.hobgoblin.compiler.ast.untyped.UntypedNativeTypeDefinitionNode.Builder withTypeParams(java.util.List typeParams) { + return new org.zwobble.hobgoblin.compiler.ast.untyped.UntypedNativeTypeDefinitionNode.Builder(name, java.util.Optional.of(typeParams), docComment, source); } public org.zwobble.hobgoblin.compiler.ast.untyped.UntypedNativeTypeDefinitionNode.Builder withDocComment(org.zwobble.hobgoblin.compiler.ast.DocComment docComment) { diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/parser/Parser.java b/src/main/java/org/zwobble/hobgoblin/compiler/parser/Parser.java index 1e03672..e66d271 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/parser/Parser.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/parser/Parser.java @@ -319,9 +319,9 @@ public class Parser { ); } - private static List parseTypeParams(TokenIterator tokens) { + private static Optional> parseTypeParams(TokenIterator tokens) { if (!tokens.trySkip(TokenType.SYMBOL_SQUARE_OPEN)) { - return List.of(); + return Optional.empty(); } var typeParams = parseMany( @@ -341,7 +341,7 @@ public class Parser { tokens.skip(TokenType.SYMBOL_SQUARE_CLOSE); - return typeParams; + return Optional.of(typeParams); } static UntypedTypeLevelExpressionNode parseTypeLevelExpression( 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 e1ad8d2..3aac97f 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeChecker.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeChecker.java @@ -169,7 +169,7 @@ public class TypeChecker { var nativeTypeOrConstructor = untyped.typeParams().isEmpty() ? new TypeOrConstructor.Type<>(nativeType) : new TypeOrConstructor.Constructor<>(new NativeTypeConstructor( - untyped.typeParams().stream() + untyped.typeParams().get().stream() .map(typeParam -> new TypeParam(typeParam.name())) .toList(), nativeType -- cgit v1.2.3