diff options
Diffstat (limited to 'apl9.h')
-rw-r--r-- | apl9.h | 26 |
1 files changed, 20 insertions, 6 deletions
@@ -67,6 +67,7 @@ typedef struct Symbol Symbol; typedef struct Symtab Symtab; typedef struct QuadnameDef QuadnameDef; typedef struct ErrorHandler ErrorHandler; +typedef struct DfnFrame DfnFrame; struct Array { @@ -178,6 +179,13 @@ struct ErrorHandler jmp_buf jmp; }; +struct DfnFrame +{ + Rune *code; + Symtab *symtab; + DfnFrame *prev; +}; + /* Function prototypes for the different source files */ /* main.c */ Datum *evalline(Rune *, int); @@ -214,9 +222,15 @@ Array *fillelement(Array *); Datum *eval(Statement *, int); /* symbol.c */ -Symbol *getsym(Symtab *, Rune *); -Symtab *newsymtab(void); -void freesymtab(Symtab *); +Symbol *getsym(Rune *); +void initsymtab(void); +DfnFrame *getcurrentdfn(void); +DfnFrame *pushdfnframe(Rune *); +void popdfnframe(void); +vlong globalIO(void); +void globalIOset(vlong); +int globalDIV(void); +void globalDIVset(int); /* memory.c */ void *emalloc(ulong); @@ -271,6 +285,7 @@ Array *fnShape(Array *); Array *fnReverseLast(Array *); Array *fnReverseFirst(Array *); Array *fnTranspose(Array *); +Array *fnSelfRef1(Array *); /* Dyadic functions from function.c */ Array *fnPlus(Array *, Array *); @@ -300,6 +315,7 @@ Array *fnIndex(Array *, Array *); Array *fnCatenateLast(Array *, Array *); Array *fnCatenateFirst(Array *, Array *); Array *fnReshape(Array *, Array *); +Array *fnSelfRef2(Array *, Array *); /* Monadic operators from operators.c */ Array *opEach(Datum *, Array *, Array *); @@ -332,10 +348,8 @@ extern opmonad monadoperatordefs[]; /* operators.c */ extern opdyad dyadoperatordefs[]; /* operators.c */ extern fndyad hybridfunctiondefs[]; /* hybrids.c */ extern opmonad hybridoperatordefs[]; /* hybrids.c */ -extern Symtab *globalsymtab; /* symbol.c */ -extern Symtab *currentsymtab; /* symbol.c */ extern int alloccounts; /* memory.c */ extern QuadnameDef quadnames[]; /* quadnames.c */ extern int printprecision; /* print.c */ extern ErrorHandler globalerror; /* error.c */ -extern Rune *errorstrs[]; /* error.c */
\ No newline at end of file +extern Rune *errorstrs[]; /* error.c */ |