From ae413b3defdde71acbbb59b455e5e15321df6893 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Fri, 31 Jul 2026 11:51:54 +0100 Subject: Add Int8 type --- .../java/org/zwobble/hobgoblin/compiler/HobgoblinCompiler.java | 1 + .../org/zwobble/hobgoblin/compiler/builtins/NativeTypes.java | 1 + .../compiler/output/generators/java/JavaGeneratorConfig.java | 1 + .../generators/javatransient0/JavaTransient0Generator.java | 10 ++++++++++ .../compiler/output/generators/rust/RustGeneratorConfig.java | 1 + .../generators/rusttransient0/RustTransient0Generator.java | 10 ++++++++++ .../hobgoblin/compiler/output/lang/java/ast/JavaTypeRef.java | 2 ++ .../zwobble/hobgoblin/compiler/output/lang/rust/RustTypes.java | 1 + 8 files changed, 27 insertions(+) (limited to 'src/main/java') diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/HobgoblinCompiler.java b/src/main/java/org/zwobble/hobgoblin/compiler/HobgoblinCompiler.java index 6c3a494..e4622a0 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/HobgoblinCompiler.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/HobgoblinCompiler.java @@ -50,6 +50,7 @@ public class HobgoblinCompiler { var typeCheckerContext = TypeCheckerGlobalContext.initial(); typeCheckerContext.addNativeType(NativeTypes.BOOL); + typeCheckerContext.addNativeType(NativeTypes.INT_8); typeCheckerContext.addNativeType(NativeTypes.INT_32); typeCheckerContext.addNativeType(NativeTypes.INT_64); typeCheckerContext.addNativeType(NativeTypes.STRING); 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 8f96709..58c8143 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/builtins/NativeTypes.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/builtins/NativeTypes.java @@ -8,6 +8,7 @@ import java.util.List; public class NativeTypes { public static SimpleNativeType BOOL = SimpleNativeType.builtin("Bool"); + public static SimpleNativeType INT_8 = SimpleNativeType.builtin("Int8"); public static SimpleNativeType INT_32 = SimpleNativeType.builtin("Int32"); public static SimpleNativeType INT_64 = SimpleNativeType.builtin("Int64"); public static SimpleNativeType STRING = SimpleNativeType.builtin("String"); 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 2b04294..fa4dd85 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 @@ -79,6 +79,7 @@ public record JavaGeneratorConfig( private static final Map DEFAULT_NATIVE_TYPE_CONFIGS = Map.ofEntries( Map.entry(NativeTypes.BOOL, JavaNativeTypeConfig.primitive(JavaTypeRef.BOOLEAN, JavaTypeRef.BOOLEAN_BOXED, new JavaBooleanLiteral(false))), + Map.entry(NativeTypes.INT_8, JavaNativeTypeConfig.primitive(JavaTypeRef.INT, JavaTypeRef.BYTE_BOXED, new JavaIntegerLiteral(0))), 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(""))), diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatransient0/JavaTransient0Generator.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatransient0/JavaTransient0Generator.java index 1c7c962..7e3219a 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatransient0/JavaTransient0Generator.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatransient0/JavaTransient0Generator.java @@ -172,6 +172,8 @@ public class JavaTransient0Generator implements Generator { List.of( generateEncodeBoolMethod(), generateDecodeBoolMethod(), + generateEncodeInt8Method(), + generateDecodeInt8Method(), generateEncodeInt32Method(), generateDecodeInt32Method(), generateEncodeInt64Method(), @@ -211,6 +213,14 @@ public class JavaTransient0Generator implements Generator { ); } + private JavaMethodDeclaration generateEncodeInt8Method() { + return generateEncodeIntMethod(NativeTypes.INT_8, 8); + } + + private JavaMethodDeclaration generateDecodeInt8Method() { + return generateDecodeIntMethod(NativeTypes.INT_8, 8); + } + private JavaMethodDeclaration generateEncodeInt32Method() { return generateEncodeIntMethod(NativeTypes.INT_32, 32); } 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 823189e..13721d4 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 @@ -53,6 +53,7 @@ public record RustGeneratorConfig( private static final Map DEFAULT_NATIVE_TYPE_CONFIGS = Map.ofEntries( Map.entry(NativeTypes.BOOL, new RustNativeTypeConfig(RustTypes.BOOL)), + Map.entry(NativeTypes.INT_8, new RustNativeTypeConfig(RustTypes.I8)), 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)), diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rusttransient0/RustTransient0Generator.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rusttransient0/RustTransient0Generator.java index 1401b83..2af97a8 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rusttransient0/RustTransient0Generator.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rusttransient0/RustTransient0Generator.java @@ -72,6 +72,8 @@ public class RustTransient0Generator implements Generator { List.of( generateEncodeBoolFunction(), generateDecodeBoolFunction(), + generateEncodeInt8Function(), + generateDecodeInt8Function(), generateEncodeInt32Function(), generateDecodeInt32Function(), generateEncodeInt64Function(), @@ -146,6 +148,14 @@ public class RustTransient0Generator implements Generator { ); } + private RustItem generateEncodeInt8Function() { + return generateEncodeIntFunction(NativeTypes.INT_8); + } + + private RustItem generateDecodeInt8Function() { + return generateDecodeIntFunction(NativeTypes.INT_8, 8); + } + private RustItem generateEncodeInt32Function() { return generateEncodeIntFunction(NativeTypes.INT_32); } 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 ef2686a..6f88a6c 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 @@ -52,6 +52,8 @@ public record JavaTypeRef( public static final JavaTypeRef BOOLEAN = primitive("boolean"); public static final JavaTypeRef BOOLEAN_BOXED = topLevel(JavaPackages.JAVA_LANG, JavaIdentifier.of("Boolean")); + public static final JavaTypeRef BYTE = primitive("byte"); + public static final JavaTypeRef BYTE_BOXED = topLevel(JavaPackages.JAVA_LANG, JavaIdentifier.of("Byte")); public static final JavaTypeRef INT = primitive("int"); public static final JavaTypeRef INT_BOXED = topLevel(JavaPackages.JAVA_LANG, JavaIdentifier.of("Integer")); public static final JavaTypeRef LONG = primitive("long"); diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/RustTypes.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/RustTypes.java index 3b55420..ec473b1 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/RustTypes.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/RustTypes.java @@ -13,6 +13,7 @@ public class RustTypes { } public static RustPath BOOL = RustPath.primitive("bool"); + public static RustPath I8 = RustPath.primitive("i8"); public static RustPath I32 = RustPath.primitive("i32"); public static RustPath I64 = RustPath.primitive("i64"); public static RustPath USIZE = RustPath.primitive("usize"); -- cgit v1.2.3