From 040377e9319d87a5bec94d2ea4c79bfb0458930d Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sat, 21 Oct 2023 11:28:25 +0100 Subject: Export vals from namespace in type checker --- .../shedlang/compiler/typechecker/TypeChecker.java | 29 +++++++++++++++------- 1 file changed, 20 insertions(+), 9 deletions(-) (limited to 'src/main/java') 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.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, -- cgit v1.2.3