summaryrefslogtreecommitdiff
path: root/src/main
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2026-08-01 09:17:30 +0100
committerMichael Williamson <mike@zwobble.org>2026-08-01 09:17:30 +0100
commit4524a8a16574887bfdb0ee66984709c8158470a6 (patch)
treec7a171667fa76851d7e61e7f2ead607fb0823a6f /src/main
parentb433dc94a228a89977da9ee6a4739e2f1da69d66 (diff)
Add Box type
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/HobgoblinCompiler.java1
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/builtins/NativeTypes.java7
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/generators/java/JavaGenerator.java5
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rust/RustGeneratorConfig.java1
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")))