From 4524a8a16574887bfdb0ee66984709c8158470a6 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sat, 1 Aug 2026 09:17:30 +0100 Subject: Add Box type --- .../java/org/zwobble/hobgoblin/compiler/HobgoblinCompiler.java | 1 + .../java/org/zwobble/hobgoblin/compiler/builtins/NativeTypes.java | 7 +++++++ .../hobgoblin/compiler/output/generators/java/JavaGenerator.java | 5 ++++- .../compiler/output/generators/rust/RustGeneratorConfig.java | 1 + 4 files changed, 13 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/HobgoblinCompiler.java b/src/main/java/org/zwobble/hobgoblin/compiler/HobgoblinCompiler.java index 6f4c65d..eb78e2a 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/HobgoblinCompiler.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/HobgoblinCompiler.java @@ -48,6 +48,7 @@ public class HobgoblinCompiler { typeCheckerContext.addNativeType(NativeTypes.INT_32); typeCheckerContext.addNativeType(NativeTypes.INT_64); typeCheckerContext.addNativeType(NativeTypes.STRING); + typeCheckerContext.addNativeTypeConstructor(NativeTypes.BOX); typeCheckerContext.addNativeTypeConstructor(NativeTypes.LIST); typeCheckerContext.addNativeTypeConstructor(NativeTypes.OPTION); typeCheckerContext.addNativeTypeConstructor(NativeTypes.SHARED); 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 58c8143..7f8cf0f 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/builtins/NativeTypes.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/builtins/NativeTypes.java @@ -13,6 +13,13 @@ public class NativeTypes { public static SimpleNativeType INT_64 = SimpleNativeType.builtin("Int64"); public static SimpleNativeType STRING = SimpleNativeType.builtin("String"); + public static final SimpleNativeType BOX_INNER = SimpleNativeType.builtin("Box"); + + public static TypeConstructor BOX = new TypeConstructor<>( + List.of(new TypeParam("T")), + BOX_INNER + ); + public static final SimpleNativeType LIST_INNER = SimpleNativeType.builtin("List"); public static TypeConstructor LIST = new TypeConstructor<>( diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/java/JavaGenerator.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/java/JavaGenerator.java index 35bb931..eab31b4 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/java/JavaGenerator.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/java/JavaGenerator.java @@ -210,7 +210,10 @@ public class JavaGenerator { return type; } - if (!constructedNativeType.constructor().equals(NativeTypes.SHARED)) { + if ( + !constructedNativeType.constructor().equals(NativeTypes.SHARED) && + !constructedNativeType.constructor().equals(NativeTypes.BOX) + ) { return type; } diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rust/RustGeneratorConfig.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rust/RustGeneratorConfig.java index 13721d4..3f5e4d5 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rust/RustGeneratorConfig.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rust/RustGeneratorConfig.java @@ -57,6 +57,7 @@ public record RustGeneratorConfig( Map.entry(NativeTypes.INT_32, new RustNativeTypeConfig(RustTypes.I32)), Map.entry(NativeTypes.INT_64, new RustNativeTypeConfig(RustTypes.I64)), Map.entry(NativeTypes.STRING, new RustNativeTypeConfig(RustTypes.STRING)), + Map.entry(NativeTypes.BOX_INNER, new RustNativeTypeConfig(RustTypes.BOX)), Map.entry(NativeTypes.LIST_INNER, new RustNativeTypeConfig(RustPath.global("std", "vec", "Vec"))), Map.entry(NativeTypes.OPTION_INNER, new RustNativeTypeConfig(RustPath.global("std", "option", "Option"))), Map.entry(NativeTypes.SHARED_INNER, new RustNativeTypeConfig(RustPath.global("std", "sync", "Arc"))) -- cgit v1.2.3