diff options
author | glenda <glenda@cirno> | 2022-09-18 19:58:41 +0000 |
---|---|---|
committer | glenda <glenda@cirno> | 2022-09-18 19:58:41 +0000 |
commit | e275bf9ff105bbb3e12fcf15e3ab755ed0cd26cf (patch) | |
tree | 8db2ea862204c026c2fe5670a15deaaeadc88960 /apl9.h | |
parent | 269c81f0217999367b4180e6a795142cbb2d02e7 (diff) |
Chain the symbol tables, not the dfn frames
Diffstat (limited to 'apl9.h')
-rw-r--r-- | apl9.h | 14 |
1 files changed, 8 insertions, 6 deletions
@@ -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); |