summaryrefslogtreecommitdiff
path: root/eval.c
diff options
context:
space:
mode:
authorPeter Mikkelsen <petermikkelsen10@gmail.com>2022-01-24 21:29:00 +0000
committerPeter Mikkelsen <petermikkelsen10@gmail.com>2022-01-24 21:29:00 +0000
commitfbbd0b34314d58cc4d210e5ff07c2726fdadd659 (patch)
tree84b4fc5b3dbdcdb688f32c248fcb508253f55fa0 /eval.c
parenta4cc3e44e0fcf15159c68f7af45e8decd0c30ba4 (diff)
re-open symbols before read, as they may have changed due to shadowing. Example of code this commit fixes:
before: a←10 {a←⍵ ⋄ a} 20 10 a 10 now: a←10 {a←⍵ ⋄ a} 20 20 a 10
Diffstat (limited to 'eval.c')
-rw-r--r--eval.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/eval.c b/eval.c
index 2e9a78e..bacd724 100644
--- a/eval.c
+++ b/eval.c
@@ -136,6 +136,8 @@ Datum *
lookup(Datum var)
{
traceprint("VAR LOOKUP %S\n", var.symbol->name);
+ /* re-assign the symbol, since it may have been changed by shadowing */
+ var.symbol = getsym(var.symbol->name, 0);
if(var.symbol->undefined){
Rune *msg = runesmprint("Undefined name: %S", var.symbol->name);