diff options
| author | Michael Williamson <mike@zwobble.org> | 2026-08-01 09:17:30 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2026-08-01 09:17:30 +0100 |
| commit | 4524a8a16574887bfdb0ee66984709c8158470a6 (patch) | |
| tree | c7a171667fa76851d7e61e7f2ead607fb0823a6f /src/main/java/org | |
| parent | b433dc94a228a89977da9ee6a4739e2f1da69d66 (diff) | |
Add Box type
Diffstat (limited to 'src/main/java/org')
4 files changed, 13 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 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<SimpleNativeType> BOX = new TypeConstructor<>( + List.of(new TypeParam("T")), + BOX_INNER + ); + public static final SimpleNativeType LIST_INNER = SimpleNativeType.builtin("List"); public static TypeConstructor<SimpleNativeType> 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"))) |
