summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2026-05-03 12:03:24 +0100
committerMichael Williamson <mike@zwobble.org>2026-05-03 12:03:24 +0100
commit93baba8070b505f24aa2d3382922c72564044f2b (patch)
tree478662df86e199d45f4aac5363fdb870c9591955
parent3f8039bff09578fc3219503ca34a4d99833a7323 (diff)
Rename scalar type to native type
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/HobgoblinCompiler.java4
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/builtins/BuiltinTypes.java7
-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/javatypes/JavaTypesGenerator.java18
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerGlobalContext.java10
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerNamespaceContext.java4
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/types/NativeType.java (renamed from src/main/java/org/zwobble/hobgoblin/compiler/types/ScalarType.java)2
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/types/Type.java2
-rw-r--r--src/test/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerStructDefinitionTests.java10
-rw-r--r--src/test/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerTypeLevelReferenceTests.java14
10 files changed, 39 insertions, 39 deletions
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/HobgoblinCompiler.java b/src/main/java/org/zwobble/hobgoblin/compiler/HobgoblinCompiler.java
index 873ecfd..7c2c6cc 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/HobgoblinCompiler.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/HobgoblinCompiler.java
@@ -1,7 +1,7 @@
package org.zwobble.hobgoblin.compiler;
import org.zwobble.hobgoblin.compiler.ast.typed.TypedNamespaceNode;
-import org.zwobble.hobgoblin.compiler.builtins.BuiltinTypes;
+import org.zwobble.hobgoblin.compiler.builtins.NativeTypes;
import org.zwobble.hobgoblin.compiler.config.ProjectConfig;
import org.zwobble.hobgoblin.compiler.parser.Parser;
import org.zwobble.hobgoblin.compiler.typechecker.TypeChecker;
@@ -37,7 +37,7 @@ public class HobgoblinCompiler {
var untypedNamespaceNode = Parser.parseNamespace(sourceText, namespaceName);
var typeCheckerContext = TypeCheckerGlobalContext.initial();
- typeCheckerContext.addBuiltinScalarType(BuiltinTypes.INT_32);
+ typeCheckerContext.addNativeType(NativeTypes.INT_32);
var typedNamespaceNode = TypeChecker.typeCheckNamespace(untypedNamespaceNode, typeCheckerContext);
typedNamespaceNodes.add(typedNamespaceNode);
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/builtins/BuiltinTypes.java b/src/main/java/org/zwobble/hobgoblin/compiler/builtins/BuiltinTypes.java
deleted file mode 100644
index 9ed5fcf..0000000
--- a/src/main/java/org/zwobble/hobgoblin/compiler/builtins/BuiltinTypes.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package org.zwobble.hobgoblin.compiler.builtins;
-
-import org.zwobble.hobgoblin.compiler.types.ScalarType;
-
-public class BuiltinTypes {
- public static ScalarType INT_32 = new ScalarType("Int32");
-}
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/builtins/NativeTypes.java b/src/main/java/org/zwobble/hobgoblin/compiler/builtins/NativeTypes.java
new file mode 100644
index 0000000..7a2f181
--- /dev/null
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/builtins/NativeTypes.java
@@ -0,0 +1,7 @@
+package org.zwobble.hobgoblin.compiler.builtins;
+
+import org.zwobble.hobgoblin.compiler.types.NativeType;
+
+public class NativeTypes {
+ public static NativeType INT_32 = new NativeType("Int32");
+}
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatypes/JavaTypesGenerator.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatypes/JavaTypesGenerator.java
index 8fa60a7..2f5c620 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatypes/JavaTypesGenerator.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatypes/JavaTypesGenerator.java
@@ -4,7 +4,7 @@ import org.zwobble.hobgoblin.compiler.ast.typed.TypedNamespaceNode;
import org.zwobble.hobgoblin.compiler.ast.typed.TypedStructDefinitionNode;
import org.zwobble.hobgoblin.compiler.ast.typed.TypedSumDefinitionNode;
import org.zwobble.hobgoblin.compiler.ast.typed.TypedTypeLevelExpressionNode;
-import org.zwobble.hobgoblin.compiler.builtins.BuiltinTypes;
+import org.zwobble.hobgoblin.compiler.builtins.NativeTypes;
import org.zwobble.hobgoblin.compiler.config.OutputConfig;
import org.zwobble.hobgoblin.compiler.output.CodeWriter;
import org.zwobble.hobgoblin.compiler.output.generators.Generator;
@@ -132,20 +132,20 @@ public class JavaTypesGenerator implements Generator {
private JavaTypeRef generateTypeRef(Type type) {
return switch (type) {
- case StructType structType ->
- new JavaTypeRef(namespaceToJavaPackageParts(structType.namespaceName()), structType.name());
-
- case SumType sumType ->
- new JavaTypeRef(namespaceToJavaPackageParts(sumType.namespaceName()), sumType.name());
-
- case ScalarType scalarType -> {
- if (type.equals(BuiltinTypes.INT_32)) {
+ case NativeType nativeType -> {
+ if (type.equals(NativeTypes.INT_32)) {
yield new JavaTypeRef(List.of(), "int");
} else {
throw new UnsupportedOperationException("TODO");
}
}
+ case StructType structType ->
+ new JavaTypeRef(namespaceToJavaPackageParts(structType.namespaceName()), structType.name());
+
+ case SumType sumType ->
+ new JavaTypeRef(namespaceToJavaPackageParts(sumType.namespaceName()), sumType.name());
+
case TypeLevelValueType typeLevelValueType ->
throw new UnsupportedOperationException("TODO");
};
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerGlobalContext.java b/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerGlobalContext.java
index 849da2f..e98afc0 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerGlobalContext.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerGlobalContext.java
@@ -1,7 +1,7 @@
package org.zwobble.hobgoblin.compiler.typechecker;
import org.zwobble.hobgoblin.compiler.types.NamespaceName;
-import org.zwobble.hobgoblin.compiler.types.ScalarType;
+import org.zwobble.hobgoblin.compiler.types.NativeType;
import org.zwobble.hobgoblin.compiler.types.Type;
import org.zwobble.hobgoblin.compiler.types.TypeLevelValueType;
@@ -9,7 +9,7 @@ import java.util.HashMap;
import java.util.Map;
public class TypeCheckerGlobalContext {
- private final Map<String, Type> builtins = new HashMap<>();
+ private final Map<String, Type> nativeTypes = new HashMap<>();
public static TypeCheckerGlobalContext initial() {
return new TypeCheckerGlobalContext();
@@ -18,11 +18,11 @@ public class TypeCheckerGlobalContext {
private TypeCheckerGlobalContext() {
}
- public void addBuiltinScalarType(ScalarType type) {
- this.builtins.put(type.name(), new TypeLevelValueType(type));
+ public void addNativeType(NativeType type) {
+ this.nativeTypes.put(type.name(), new TypeLevelValueType(type));
}
public TypeCheckerNamespaceContext enterNamespace(NamespaceName namespaceName) {
- return TypeCheckerNamespaceContext.initial(namespaceName, this.builtins);
+ return TypeCheckerNamespaceContext.initial(namespaceName, this.nativeTypes);
}
}
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerNamespaceContext.java b/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerNamespaceContext.java
index 353209b..b18267b 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerNamespaceContext.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerNamespaceContext.java
@@ -10,9 +10,9 @@ import java.util.stream.Collectors;
public class TypeCheckerNamespaceContext {
public static TypeCheckerNamespaceContext initial(
NamespaceName namespaceName,
- Map<String, Type> builtins
+ Map<String, Type> nativeTypes
) {
- var variables = builtins.entrySet().stream()
+ var variables = nativeTypes.entrySet().stream()
.collect(Collectors.toMap(
entry -> entry.getKey(),
entry -> Variable.defined(entry.getValue())
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/types/ScalarType.java b/src/main/java/org/zwobble/hobgoblin/compiler/types/NativeType.java
index 22032a1..2a45a1f 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/types/ScalarType.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/types/NativeType.java
@@ -1,6 +1,6 @@
package org.zwobble.hobgoblin.compiler.types;
-public record ScalarType(String name) implements Type {
+public record NativeType(String name) implements Type {
@Override
public String describe() {
return name;
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/types/Type.java b/src/main/java/org/zwobble/hobgoblin/compiler/types/Type.java
index 4155d05..eeccb8b 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/types/Type.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/types/Type.java
@@ -1,5 +1,5 @@
package org.zwobble.hobgoblin.compiler.types;
-public sealed interface Type extends TypeLevelValue permits ScalarType, StructType, SumType, TypeLevelValueType {
+public sealed interface Type extends TypeLevelValue permits NativeType, StructType, SumType, TypeLevelValueType {
String name();
}
diff --git a/src/test/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerStructDefinitionTests.java b/src/test/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerStructDefinitionTests.java
index aec039b..2409b65 100644
--- a/src/test/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerStructDefinitionTests.java
+++ b/src/test/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerStructDefinitionTests.java
@@ -11,7 +11,7 @@ import org.zwobble.hobgoblin.compiler.ast.untyped.UntypedStructDefinitionNode;
import org.zwobble.hobgoblin.compiler.ast.untyped.UntypedStructFieldDefinitionNode;
import org.zwobble.hobgoblin.compiler.sources.NullSource;
import org.zwobble.hobgoblin.compiler.types.NamespaceName;
-import org.zwobble.hobgoblin.compiler.types.ScalarType;
+import org.zwobble.hobgoblin.compiler.types.NativeType;
import org.zwobble.hobgoblin.compiler.types.StructType;
import org.zwobble.hobgoblin.compiler.types.TypeLevelValueType;
@@ -45,8 +45,8 @@ public class TypeCheckerStructDefinitionTests {
@Test
public void fieldsAreTypeChecked() {
- var int32Type = new ScalarType("Int32");
- var int64Type = new ScalarType("Int64");
+ var int32Type = new NativeType("Int32");
+ var int64Type = new NativeType("Int64");
var untyped = new UntypedStructDefinitionNode(
"X",
List.of(
@@ -92,7 +92,7 @@ public class TypeCheckerStructDefinitionTests {
@Test
public void structCanUseTypeDefinedLater() {
- var int32Type = new ScalarType("Int32");
+ var int32Type = new NativeType("Int32");
var namespaceName = NamespaceName.of("a", "b");
var untyped = new UntypedNamespaceNode(
namespaceName,
@@ -115,7 +115,7 @@ public class TypeCheckerStructDefinitionTests {
NullSource.INSTANCE
);
var context = TypeCheckerContextArb.globalContext();
- context.addBuiltinScalarType(int32Type);
+ context.addNativeType(int32Type);
var typed = TypeChecker.typeCheckNamespace(untyped, context);
diff --git a/src/test/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerTypeLevelReferenceTests.java b/src/test/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerTypeLevelReferenceTests.java
index 76572a4..b2dcc62 100644
--- a/src/test/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerTypeLevelReferenceTests.java
+++ b/src/test/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerTypeLevelReferenceTests.java
@@ -3,7 +3,7 @@ package org.zwobble.hobgoblin.compiler.typechecker;
import org.junit.jupiter.api.Test;
import org.zwobble.hobgoblin.compiler.ast.typed.TypedTypeLevelReferenceNode;
import org.zwobble.hobgoblin.compiler.ast.untyped.UntypedArb;
-import org.zwobble.hobgoblin.compiler.types.ScalarType;
+import org.zwobble.hobgoblin.compiler.types.NativeType;
import org.zwobble.hobgoblin.compiler.types.TypeLevelValueType;
import org.zwobble.hobgoblin.compiler.types.TypeSet;
@@ -44,8 +44,8 @@ public class TypeCheckerTypeLevelReferenceTests {
var untyped = UntypedArb.typeLevelReference("X");
var context = TypeCheckerContextArb.namespaceContext();
context.declare("X");
- var scalarType = new ScalarType("Int");
- context.define("X", scalarType);
+ var nativeType = new NativeType("Int");
+ context.define("X", nativeType);
var error = assertThrows(
UnexpectedTypeError.class,
@@ -53,7 +53,7 @@ public class TypeCheckerTypeLevelReferenceTests {
);
assertThat(error.expected(), equalTo(new TypeSet.MetaType()));
- assertThat(error.actual(), equalTo(scalarType));
+ assertThat(error.actual(), equalTo(nativeType));
}
@Test
@@ -61,15 +61,15 @@ public class TypeCheckerTypeLevelReferenceTests {
var untyped = UntypedArb.typeLevelReference("X");
var context = TypeCheckerContextArb.namespaceContext();
context.declare("X");
- var scalarType = new ScalarType("Int");
- context.define("X", new TypeLevelValueType(scalarType));
+ var nativeType = new NativeType("Int");
+ context.define("X", new TypeLevelValueType(nativeType));
var typed = TypeChecker.typeCheckTypeLevelExpression(untyped, context);
assertThat(typed, instanceOf(
TypedTypeLevelReferenceNode.class,
has("name", TypedTypeLevelReferenceNode::name, equalTo("X")),
- has("value", TypedTypeLevelReferenceNode::value, equalTo(scalarType))
+ has("value", TypedTypeLevelReferenceNode::value, equalTo(nativeType))
));
}
}