summaryrefslogtreecommitdiff
path: root/apl9.h
diff options
context:
space:
mode:
Diffstat (limited to 'apl9.h')
-rw-r--r--apl9.h14
1 files changed, 8 insertions, 6 deletions
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);