diff options
| author | Michael Williamson <mike@zwobble.org> | 2026-06-12 20:33:18 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2026-06-12 20:45:25 +0100 |
| commit | 4b69bc1f750388f1a9238f4dd3bb66e91d982c97 (patch) | |
| tree | 210b1946fc0424e348e3c9cb7e6b838694e330fc /src/main | |
| parent | 17c98fecd0142074089a62d8e7904bdff5e6fcea (diff) | |
Add Option type
Diffstat (limited to 'src/main')
4 files changed, 12 insertions, 1 deletions
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/HobgoblinCompiler.java b/src/main/java/org/zwobble/hobgoblin/compiler/HobgoblinCompiler.java index 8d28d7f..4093938 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/HobgoblinCompiler.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/HobgoblinCompiler.java @@ -38,6 +38,7 @@ public class HobgoblinCompiler { typeCheckerContext.addNativeType(NativeTypes.INT_64); typeCheckerContext.addNativeType(NativeTypes.STRING); typeCheckerContext.addNativeTypeConstructor(NativeTypes.LIST); + typeCheckerContext.addNativeTypeConstructor(NativeTypes.OPTION); for (var sourceFile : collectSourceFiles(sourceDirectory)) { var namespaceName = sourceFileNamespaceName(sourceDirectory, sourceFile); diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/builtins/NativeTypes.java b/src/main/java/org/zwobble/hobgoblin/compiler/builtins/NativeTypes.java index 1ce8e0e..201fea3 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/builtins/NativeTypes.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/builtins/NativeTypes.java @@ -17,4 +17,11 @@ public class NativeTypes { List.of(new TypeParam("T")), LIST_INNER ); + + public static final SimpleNativeType OPTION_INNER = SimpleNativeType.builtin("Option"); + + public static TypeConstructor<SimpleNativeType> OPTION = new TypeConstructor<>( + List.of(new TypeParam("T")), + OPTION_INNER + ); } diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/java/JavaGeneratorConfig.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/java/JavaGeneratorConfig.java index be2fa95..9be9eed 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/java/JavaGeneratorConfig.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/java/JavaGeneratorConfig.java @@ -72,7 +72,8 @@ public record JavaGeneratorConfig( Map.entry(NativeTypes.INT_32, JavaNativeTypeConfig.primitive(JavaTypeRef.INT, JavaTypeRef.INT_BOXED, new JavaIntegerLiteral(0))), Map.entry(NativeTypes.INT_64, JavaNativeTypeConfig.primitive(JavaTypeRef.LONG, JavaTypeRef.LONG_BOXED, new JavaIntegerLiteral(0))), Map.entry(NativeTypes.STRING, JavaNativeTypeConfig.of(JavaTypeRef.STRING, new JavaStringLiteral(""))), - Map.entry(NativeTypes.LIST_INNER, JavaNativeTypeConfig.of(JavaTypeRef.LIST, new JavaStaticMethodCall(JavaTypeRef.LIST, "of", List.of()))) + Map.entry(NativeTypes.LIST_INNER, JavaNativeTypeConfig.of(JavaTypeRef.LIST, new JavaStaticMethodCall(JavaTypeRef.LIST, "of", List.of()))), + Map.entry(NativeTypes.OPTION_INNER, JavaNativeTypeConfig.of(JavaTypeRef.OPTIONAL, new JavaStaticMethodCall(JavaTypeRef.OPTIONAL, "empty", List.of()))) ); public Optional<JavaNativeTypeConfig> nativeTypeConfig(SimpleNativeType type) { diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaTypeRef.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaTypeRef.java index d58d073..2738098 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaTypeRef.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaTypeRef.java @@ -51,5 +51,7 @@ public record JavaTypeRef(List<String> packageName, List<String> typeNames, List public static final JavaTypeRef OBJECT = topLevel(List.of("java", "lang"), "Object"); + public static final JavaTypeRef OPTIONAL = topLevel(List.of("java", "util"), "Optional"); + public static final JavaTypeRef STREAM = topLevel(List.of("java", "util", "stream"), "Stream"); } |
