2022-03-31 00:21:32 +03:00
|
|
|
|
|
|
|
This tests a variable related bug in the ANF compiler.
|
|
|
|
|
|
|
|
The nested let would get flattened out, resulting in:
|
|
|
|
|
|
|
|
bar = result
|
|
|
|
|
|
|
|
which would be handled by renaming. However, the _context_ portion of
|
|
|
|
the rest of the code was not being renamed correctly, so `bar` would
|
|
|
|
remain in the definition of `baz`.
|
|
|
|
|
|
|
|
```unison
|
|
|
|
foo _ =
|
|
|
|
id x = x
|
2022-12-02 08:51:11 +03:00
|
|
|
void x = ()
|
2022-03-31 00:21:32 +03:00
|
|
|
bar = let
|
2022-12-02 08:51:11 +03:00
|
|
|
void (Debug.watch "hello" "hello")
|
2022-03-31 00:21:32 +03:00
|
|
|
result = 5
|
2022-12-02 08:51:11 +03:00
|
|
|
void (Debug.watch "goodbye" "goodbye")
|
2022-03-31 00:21:32 +03:00
|
|
|
result
|
|
|
|
baz = id bar
|
|
|
|
baz
|
|
|
|
|
|
|
|
> !foo
|
|
|
|
```
|
|
|
|
|
|
|
|
```ucm
|
|
|
|
|
|
|
|
I found and typechecked these definitions in scratch.u. If you
|
|
|
|
do an `add` or `update`, here's how your codebase would
|
|
|
|
change:
|
|
|
|
|
|
|
|
⍟ These new definitions are ok to `add`:
|
|
|
|
|
|
|
|
foo : ∀ _. _ -> Nat
|
|
|
|
|
|
|
|
Now evaluating any watch expressions (lines starting with
|
|
|
|
`>`)... Ctrl+C cancels.
|
|
|
|
|
2022-12-02 08:51:11 +03:00
|
|
|
12 | > !foo
|
2022-03-31 00:21:32 +03:00
|
|
|
⧩
|
|
|
|
5
|
|
|
|
|
|
|
|
```
|
|
|
|
```ucm
|
|
|
|
.> add
|
|
|
|
|
|
|
|
⍟ I've added these definitions:
|
|
|
|
|
|
|
|
foo : ∀ _. _ -> Nat
|
|
|
|
|
|
|
|
```
|