diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-07-24 22:24:42 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-07-24 22:24:42 +0100 |
| commit | db5d22b9761149e5f16c1df4805072547ecf9f1f (patch) | |
| tree | fabb80bc91d66c6c1ed928be47d2c8b1b1d97d25 /src/test/java | |
| parent | b3640946e1e30ec4538b88399966b7b8b8680dd6 (diff) | |
Fix update of top lexical context
Diffstat (limited to 'src/test/java')
| -rw-r--r-- | src/test/java/org/shedlang/compiler/typechecker/TypeCheckerContextTests.java | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerContextTests.java b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerContextTests.java index 7a2d7d71..a9198b86 100644 --- a/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerContextTests.java +++ b/src/test/java/org/shedlang/compiler/typechecker/TypeCheckerContextTests.java @@ -76,6 +76,30 @@ public class TypeCheckerContextTests { } @Test + public void definingVariableOnlyAffectsTopMostLexicalContext() { + var context = TypeCheckerContext.EMPTY + .enterNamespace(P.map( + Map.entry("x", TypeCheckerContext.undefined()), + Map.entry("y", TypeCheckerContext.undefined()) + )); + + context = context.enterBlock(P.map( + Map.entry("x", TypeCheckerContext.undefined()) + )); + context = context.define("x", Types.STRING, Sources.NULL); + assertThat( + context.runtimeLookup("x", Sources.NULL).value(), + isOptionalOf(equalTo(TypeCheckerContext.defined(Types.STRING))) + ); + + context = context.exit(); + assertThat( + context.runtimeLookup("x", Sources.NULL).value(), + isOptionalOf(equalTo(TypeCheckerContext.undefined())) + ); + } + + @Test public void runtimeLookupUpdatesFreeVariablesUntilLexicalContextInWhichVariableIsDefined() { var context = TypeCheckerContext.EMPTY .enterBlock(P.map()) |
