summaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2026-04-25 10:14:28 +0100
committerMichael Williamson <mike@zwobble.org>2026-04-25 10:14:28 +0100
commit7e0999200b57bfd01b04a8dd96cd8eed997ad2e2 (patch)
tree8edc2bedbfe6369f93fcb2a5dad9fb64307f5d3d /src/main/java/org/zwobble
parentb55bfe747a957a652cfd86bcadd918cf20dd51fd (diff)
Add stubbed function for type checking namespace
Diffstat (limited to 'src/main/java/org/zwobble')
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/HobgoblinCompiler.java7
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/ast/typed/TypedNamespaceNode.java1
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeChecker.java17
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerContext.java4
4 files changed, 26 insertions, 3 deletions
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/HobgoblinCompiler.java b/src/main/java/org/zwobble/hobgoblin/compiler/HobgoblinCompiler.java
index 9d95dae..7945944 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/HobgoblinCompiler.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/HobgoblinCompiler.java
@@ -1,6 +1,8 @@
package org.zwobble.hobgoblin.compiler;
import org.zwobble.hobgoblin.compiler.parser.Parser;
+import org.zwobble.hobgoblin.compiler.typechecker.TypeChecker;
+import org.zwobble.hobgoblin.compiler.typechecker.TypeCheckerContext;
import org.zwobble.hobgoblin.compiler.types.NamespaceName;
import org.zwobble.sourcetext.SourceText;
@@ -22,7 +24,10 @@ public class HobgoblinCompiler {
var namespaceName = NamespaceName.of();
var sourceContents = Files.readString(sourceFile.toPath(), StandardCharsets.UTF_8);
var sourceText = SourceText.fromString(sourceFile.toPath().toString(), sourceContents);
- var namespace = Parser.parseNamespace(sourceText, namespaceName);
+ var untypedNamespaceNode = Parser.parseNamespace(sourceText, namespaceName);
+
+ var typeCheckerContext = TypeCheckerContext.initial();
+ var typedNamespaceNode = TypeChecker.typeCheckNamespace(untypedNamespaceNode, typeCheckerContext);
}
}
}
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/ast/typed/TypedNamespaceNode.java b/src/main/java/org/zwobble/hobgoblin/compiler/ast/typed/TypedNamespaceNode.java
index 0f76f14..805498f 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/ast/typed/TypedNamespaceNode.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/ast/typed/TypedNamespaceNode.java
@@ -1,6 +1,5 @@
package org.zwobble.hobgoblin.compiler.ast.typed;
-import org.zwobble.hobgoblin.compiler.ast.untyped.UntypedNamespaceStatementNode;
import org.zwobble.hobgoblin.compiler.sources.Source;
import org.zwobble.hobgoblin.compiler.types.NamespaceName;
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeChecker.java b/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeChecker.java
index 56d4645..cfce407 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeChecker.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeChecker.java
@@ -1,18 +1,33 @@
package org.zwobble.hobgoblin.compiler.typechecker;
+import org.zwobble.hobgoblin.compiler.ast.typed.TypedNamespaceNode;
import org.zwobble.hobgoblin.compiler.ast.typed.TypedTypeLevelExpressionNode;
import org.zwobble.hobgoblin.compiler.ast.typed.TypedTypeLevelReferenceNode;
+import org.zwobble.hobgoblin.compiler.ast.untyped.UntypedNamespaceNode;
import org.zwobble.hobgoblin.compiler.ast.untyped.UntypedTypeLevelExpressionNode;
import org.zwobble.hobgoblin.compiler.ast.untyped.UntypedTypeLevelReferenceNode;
import org.zwobble.hobgoblin.compiler.types.TypeLevelValue;
import org.zwobble.hobgoblin.compiler.types.TypeLevelValueType;
import org.zwobble.hobgoblin.compiler.types.TypeSet;
+import java.util.List;
+
public class TypeChecker {
private TypeChecker() {
}
- public static TypedTypeLevelExpressionNode<? extends TypeLevelValue> typeCheckTypeLevelExpression(
+ public static TypedNamespaceNode typeCheckNamespace(
+ UntypedNamespaceNode untyped,
+ TypeCheckerContext context
+ ) {
+ return new TypedNamespaceNode(
+ untyped.namespaceName(),
+ List.of(),
+ untyped.source()
+ );
+ }
+
+ static TypedTypeLevelExpressionNode<? extends TypeLevelValue> typeCheckTypeLevelExpression(
UntypedTypeLevelExpressionNode untyped,
TypeCheckerContext context
) {
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerContext.java b/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerContext.java
index e861c30..b80246a 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerContext.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerContext.java
@@ -9,6 +9,10 @@ import java.util.Optional;
public class TypeCheckerContext {
private final Map<String, Variable> variables = new HashMap<>();
+ public static TypeCheckerContext initial() {
+ return new TypeCheckerContext();
+ }
+
public void declare(String name) {
// TODO: Check variable is not already declared.
this.variables.put(name, new Variable.Declared());