From e275bf9ff105bbb3e12fcf15e3ab755ed0cd26cf Mon Sep 17 00:00:00 2001 From: glenda Date: Sun, 18 Sep 2022 19:58:41 +0000 Subject: Chain the symbol tables, not the dfn frames --- apl9.h | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) (limited to 'apl9.h') diff --git a/apl9.h b/apl9.h index 69d50b6..99f9f98 100644 --- a/apl9.h +++ b/apl9.h @@ -134,7 +134,7 @@ struct Operator int code; Rune *dop; }; - DfnFrame *scope; + Symtab *scope; Datum *left; Datum *right; }; @@ -155,7 +155,7 @@ struct Function QuadnameDef *quad; FunctionTrain train; }; - DfnFrame *scope; + Symtab *scope; Array *left; }; @@ -188,6 +188,8 @@ struct Symtab int nsyms; int io; /* index origin */ int div; /* division method */ + uvlong refs; + Symtab *chain; Symbol **syms; }; @@ -228,8 +230,6 @@ struct DfnFrame Datum *righto; ErrorGuard *errorguards; /* a linked list of error handlers */ DfnFrame *prev; /* prev in the call stack */ - DfnFrame *chain; /* prev in the lexical scope */ - int keep; /* prevents it from being freed */ }; struct ThreadData @@ -296,7 +296,7 @@ Datum *eval(Statement *, int); Symbol *getsym(Rune *, int); void initsymtab(void); DfnFrame *getcurrentdfn(void); -DfnFrame *pushdfnframe(Rune *, DfnFrame *, Datum *, Datum *, Array *, Array *); +DfnFrame *pushdfnframe(Rune *, Symtab *, Datum *, Datum *, Array *, Array *); DfnFrame *dupdfnframe(DfnFrame *); void freedfnframe(DfnFrame *, int); void popdfnframe(void); @@ -304,7 +304,9 @@ vlong globalIO(void); void globalIOset(vlong); int globalDIV(void); void globalDIVset(int); -DfnFrame *dupscope(DfnFrame *); +Symtab *dupscope(Symtab *); +Symtab *getcurrentsymtab(void); +void freesymtab(Symtab *); /* memory.c */ void *emalloc(ulong); -- cgit v1.2.3