summaryrefslogtreecommitdiff
path: root/eval.c
diff options
context:
space:
mode:
authorPeter Mikkelsen <petermikkelsen10@gmail.com>2022-01-24 21:24:19 +0000
committerPeter Mikkelsen <petermikkelsen10@gmail.com>2022-01-24 21:24:19 +0000
commita4cc3e44e0fcf15159c68f7af45e8decd0c30ba4 (patch)
tree190517effb2fb585ad9e3a588ac2aaf646dbff46 /eval.c
parent468e0f6313fb620bd2f7ea469178fe02412ddc31 (diff)
Make sure variables are as local as they need to be
Diffstat (limited to 'eval.c')
-rw-r--r--eval.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/eval.c b/eval.c
index a2d4d43..2e9a78e 100644
--- a/eval.c
+++ b/eval.c
@@ -229,6 +229,9 @@ assign(Datum left, Datum right)
if(left.symbol->setfn != nil)
left.symbol->setfn(right);
else{
+ /* re-assign the symbol to one that is sure to be local. This enables shadowing */
+ left.symbol = getsym(left.symbol->name, 1);
+
if(left.symbol->undefined == 0 && left.symbol->value.tag == ArrayTag)
freearray(left.symbol->value.array);
left.symbol->value = right;