aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-10-21 11:28:25 +0100
committerMichael Williamson <mike@zwobble.org>2023-10-21 11:28:25 +0100
commit040377e9319d87a5bec94d2ea4c79bfb0458930d (patch)
treead430adf9e8f74050d3bea3f02b566530ea5ec20 /src/main/java
parent3c9ee59ff297da12a26e53063a52cbeb238661c1 (diff)
Export vals from namespace in type checker
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java29
1 files changed, 20 insertions, 9 deletions
diff --git a/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java b/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java
index 30121611..cc68861a 100644
--- a/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java
+++ b/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java
@@ -160,7 +160,7 @@ public class TypeChecker {
var rightResult = typeCheckExpression(untyped.right(), context);
var right = rightResult.value();
context = rightResult.context();
-
+
var operator = typeCheckBinaryOperator(
untyped.operator(),
left.type(),
@@ -781,13 +781,24 @@ public class TypeChecker {
dependencyChecker.check();
var declaredVariables = DeclaredVariables.forNamespaceStatements(untyped.body(), P.vector());
-
- var fieldTypes = typedBody.stream()
- .flatMap(bodyStatement ->
- bodyStatement instanceof TypedFunctionDefinitionNode functionDefinition
- ? Stream.of(Map.<String, Type>entry(functionDefinition.name(), functionDefinition.type()))
- : Stream.of()
- )
+ // TODO: explicit exports
+
+ var namespaceFinalContext = context;
+ var fieldTypes = declaredVariables.stream()
+ .filter(variable -> switch (variable.variableType()) {
+ case CONSTANT -> true;
+ case IMPORT -> false;
+ case PARAM -> false;
+ case VAL -> true;
+ case VAR -> false;
+ })
+ .map(variable -> Map.entry(
+ variable.name(),
+ namespaceFinalContext.compileTimeLookup(variable.name())
+ .orElseThrow() // TODO: better error
+ .type()
+ .orElseThrow() // TODO: better error
+ ))
.collect(PCollectors.toOrderedMap());
var fieldNames = fieldTypes.keys();
@@ -1221,7 +1232,7 @@ public class TypeChecker {
.toList();
var type = Types.commonSupertype(caseBodyTypes);
-
+
return context.toResult(new TypedWhenNode(
typedExpression,
typedCases,