diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-07-03 12:11:20 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-07-03 12:11:20 +0100 |
| commit | 9a79e487595ac1fdbf4e9c69963440bd979aa107 (patch) | |
| tree | 91e3099883de790e126d390672afb2085748b7c6 /src/main/java | |
| parent | 79886c47c164aafb25c533ecc20cb93554fa2c08 (diff) | |
Define val type
Diffstat (limited to 'src/main/java')
| -rw-r--r-- | src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java | 10 | ||||
| -rw-r--r-- | src/main/java/org/shedlang/compiler/typechecker/TypeCheckerContext.java | 14 |
2 files changed, 21 insertions, 3 deletions
diff --git a/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java b/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java index 228f1fa0..1dd4b118 100644 --- a/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java +++ b/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java @@ -403,7 +403,7 @@ public class TypeChecker { var expression = expressionResult.value(); context = expressionResult.context(); - var targetResult = typeCheckTarget(val.target(), context); + var targetResult = typeCheckTarget(val.target(), expression.type(), context); var target = targetResult.value(); context = targetResult.context(); @@ -412,11 +412,15 @@ public class TypeChecker { private static TypeCheckerResult<TypedTargetNode> typeCheckTarget( UntypedTargetNode target, + Type expressionType, TypeCheckerContext context ) { return switch (target) { - case UntypedTargetNode.Variable variable -> - context.toResult(new TypedTargetNode.Variable(variable.name(), target.source())); + case UntypedTargetNode.Variable variable -> { + context = context.define(variable.name(), expressionType); + + yield context.toResult(new TypedTargetNode.Variable(variable.name(), target.source())); + } }; } } diff --git a/src/main/java/org/shedlang/compiler/typechecker/TypeCheckerContext.java b/src/main/java/org/shedlang/compiler/typechecker/TypeCheckerContext.java index 71a02101..2cf99f9f 100644 --- a/src/main/java/org/shedlang/compiler/typechecker/TypeCheckerContext.java +++ b/src/main/java/org/shedlang/compiler/typechecker/TypeCheckerContext.java @@ -71,6 +71,20 @@ public class TypeCheckerContext { return Optional.ofNullable(environment.get(name)); } + public TypeCheckerContext define( + String name, + Type type + ) { + // TODO: check if already defined + return new TypeCheckerContext( + this.environment.plus(name, type), + this.effect, + this.boundVariables, + this.freeVariables, + this.namespaceTypeInfo + ); + } + public Effect effect() { return effect; } |
