summaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java')
-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")))