diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-10-21 11:28:25 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-10-21 11:28:25 +0100 |
| commit | 040377e9319d87a5bec94d2ea4c79bfb0458930d (patch) | |
| tree | ad430adf9e8f74050d3bea3f02b566530ea5ec20 /src/main/java | |
| parent | 3c9ee59ff297da12a26e53063a52cbeb238661c1 (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.java | 29 |
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, |
