diff options
author | Peter Mikkelsen <peter@pmikkelsen.com> | 2022-02-09 01:16:03 +0000 |
---|---|---|
committer | Peter Mikkelsen <peter@pmikkelsen.com> | 2022-02-09 01:16:03 +0000 |
commit | 6ed5b9f6d3fdeeed8ecd43b18bae642ec1ec24b1 (patch) | |
tree | cee3f787af7fb7e8b892fb661f63dc9248cd5f61 /apl9.h | |
parent | 8fd005f6185ac76ed0ac2495bd97ee817b472040 (diff) |
Add much better memory handling (We now track and free Datum * structs)
Diffstat (limited to 'apl9.h')
-rw-r--r-- | apl9.h | 30 |
1 files changed, 20 insertions, 10 deletions
@@ -104,7 +104,7 @@ struct Array struct Statement { int ntoks; - Datum *toks; + Datum **toks; Statement *guard; Statement *next; }; @@ -144,6 +144,7 @@ struct Datum { datumTag tag; int shy; + int refs; union { Array *array; Statement stmt; @@ -159,9 +160,9 @@ struct Symbol { int undefined; Rune *name; - Datum value; + Datum *value; Datum *(*getfn)(void); - void (*setfn)(Datum); + void (*setfn)(Datum *); }; struct Symtab @@ -182,7 +183,7 @@ struct QuadnameDef Rune *name; datumTag tag; Datum *(*get)(void); - void (*set)(Datum); + void (*set)(Datum *); fnmonad monadfn; fndyad dyadfn; opmonad monadop; @@ -225,11 +226,10 @@ struct Mail /* Function prototypes for the different source files */ /* main.c */ Datum *evalline(Rune *, Biobuf *, int); -Rune *prompt(Rune *); /* print.c */ -Rune *ppdatum(Datum); -Rune *ppdatums(Datum *, int); +Rune *ppdatum(Datum *); +Rune *ppdatums(Datum **, int); Rune *pparray(Array *); Rune *ppoperator(Operator); Rune *ppfunction(Function); @@ -273,11 +273,20 @@ void globalDIVset(int); /* memory.c */ void *emalloc(ulong); +void *emallocz(ulong, int); +void *erealloc(void *, ulong); void checkmem(char *); - Array *allocarray(int, int, int); void freearray(Array *); void incarrayref(Array *); +Datum *allocdatum(int, int); +void freedatum(Datum *); +void incdatumref(Datum *); +void freefunction(Function); +void freeoperator(Operator); +void freestatement(Statement); +Function dupfunction(Function); +Operator dupoperator(Operator); /* functions.c */ Array *runfunc(Function, Array *,Array *); @@ -286,7 +295,7 @@ Array *runtrain(Function *, int, Array *, Array *, Array *); /* quadnames.c */ void initquadnames(void); -Datum quadnamedatum(QuadnameDef); +Datum *quadnamedatum(QuadnameDef); /* error.c */ void throwerror(Rune *, int); @@ -442,7 +451,8 @@ extern opmonad monadoperatordefs[]; /* operators.c */ extern opdyad dyadoperatordefs[]; /* operators.c */ extern fndyad hybridfunctiondefs[]; /* hybrids.c */ extern opmonad hybridoperatordefs[]; /* hybrids.c */ -extern int alloccounts; /* memory.c */ +extern int arrayalloccounts; /* memory.c */ +extern int datumalloccounts; /* memory.c */ extern QuadnameDef quadnames[]; /* quadnames.c */ extern int printprecision; /* print.c */ extern ErrorHandler globalerror; /* error.c */ |