summaryrefslogtreecommitdiff
path: root/symbol.c
diff options
context:
space:
mode:
authorPeter Mikkelsen <petermikkelsen10@gmail.com>2022-02-22 11:05:30 +0000
committerPeter Mikkelsen <petermikkelsen10@gmail.com>2022-02-22 11:05:30 +0000
commitdf6c3247c40b05266894d45136dc64f96b0cbac9 (patch)
tree568b29e803bc9e58a1147b64dedb9cbd3b34c13d /symbol.c
parent7c39c4eab3e16c201b22e0bf29e51006f60e99e7 (diff)
Implement lexical scope instead of dynamic scope rules.
Diffstat (limited to 'symbol.c')
-rw-r--r--symbol.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/symbol.c b/symbol.c
index 8f4797a..6e9aa4a 100644
--- a/symbol.c
+++ b/symbol.c
@@ -34,7 +34,7 @@ getsym(Rune *name, int fresh)
return tab->syms[i];
}
if(dfn)
- dfn = dfn->prev;
+ dfn = dfn->chain;
else
done = 1;
}while(!done && !fresh);
@@ -108,7 +108,7 @@ getcurrentdfn(void)
}
DfnFrame *
-pushdfnframe(Rune *code, Datum *lefto, Datum *righto, Array *left, Array *right)
+pushdfnframe(Rune *code, DfnFrame *scope, Datum *lefto, Datum *righto, Array *left, Array *right)
{
ThreadData *td = getthreaddata();
DfnFrame *new = emalloc(sizeof(DfnFrame));
@@ -129,6 +129,7 @@ pushdfnframe(Rune *code, Datum *lefto, Datum *righto, Array *left, Array *right)
new->right = right;
incarrayref(right);
new->prev = td->currentdfn;
+ new->chain = scope;
td->currentdfn = new;
return new;
}