summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2026-10-04 11:06:26 +0100
committerMichael Williamson <mike@zwobble.org>2026-10-04 11:06:26 +0100
commit78e75def13c9a0890f6a3880a95184fedc7ee13d (patch)
tree24007a6897470a455292a60c60f2ee70bc347723 /src
parentbe4da80bead1f5d4879919f88acfa22a9e638c20 (diff)
Support empty database schema definition
Diffstat (limited to 'src')
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeChecker.java19
1 files changed, 11 insertions, 8 deletions
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 e1c6854..8178d8d 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeChecker.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeChecker.java
@@ -36,8 +36,11 @@ public class TypeChecker {
var fields = new ArrayList<Field>();
for (var untypedStatement : untypedNamespace.body()) {
var type = declareNamespaceStatement(untypedStatement, namespaceContext);
- var field = new Field(untypedStatement.name(), type, untypedStatement.source());
- fields.add(field);
+
+ if (type.isPresent()) {
+ var field = new Field(untypedStatement.name(), type.get(), untypedStatement.source());
+ fields.add(field);
+ }
}
context.defineNamespace(untypedNamespace.namespaceName(), fields);
}
@@ -85,25 +88,25 @@ public class TypeChecker {
return typedNamespaceNodes;
}
- static Type declareNamespaceStatement(
+ static Optional<Type> declareNamespaceStatement(
UntypedNamespaceStatementNode untyped,
TypeCheckerNamespaceContext context
) {
return switch (untyped) {
case UntypedDatabaseSchemaDefinitionNode _ ->
- throw new UnsupportedOperationException("TODO");
+ Optional.empty();
case UntypedEnumDefinitionNode untypedEnumDefinitionNode ->
- declareEnumDefinitionNode(untyped, context);
+ Optional.of(declareEnumDefinitionNode(untyped, context));
case UntypedNativeTypeDefinitionNode untypedNativeTypeDefinition ->
- declareNativeTypeDefinition(untypedNativeTypeDefinition, context);
+ Optional.of(declareNativeTypeDefinition(untypedNativeTypeDefinition, context));
case UntypedStructDefinitionNode untypedStructDefinition ->
- declareStructDefinition(untypedStructDefinition, context);
+ Optional.of(declareStructDefinition(untypedStructDefinition, context));
case UntypedSumDefinitionNode untypedSumDefinition ->
- declareSumDefinition(untypedSumDefinition, context);
+ Optional.of(declareSumDefinition(untypedSumDefinition, context));
};
}