diff options
author | Peter Mikkelsen <petermikkelsen10@gmail.com> | 2022-01-21 15:18:22 +0000 |
---|---|---|
committer | Peter Mikkelsen <petermikkelsen10@gmail.com> | 2022-01-21 15:18:22 +0000 |
commit | 40c021d964bc60d2b60dd78022e180c964ea1b67 (patch) | |
tree | aee97fdfef0378c94871579b8bc12cbdca583553 /apl9.h | |
parent | 1ddd7de5b15f52c13a5c084445253655a94bd970 (diff) |
Implement better error handling, but still no error guards
Diffstat (limited to 'apl9.h')
-rw-r--r-- | apl9.h | 37 |
1 files changed, 35 insertions, 2 deletions
@@ -39,6 +39,20 @@ typedef enum FunctypeQuad, } functionType; +typedef enum +{ + ESyntax = 1, + EParse, + EValue, + EDomain, + ERank, + EType, + ELength, + EIndex, + EShape, + ENotImplemented, +} errorCodes; + /* Data types */ typedef struct Array Array; typedef struct Statement Statement; @@ -48,6 +62,8 @@ typedef struct Datum Datum; typedef struct Symbol Symbol; typedef struct Symtab Symtab; typedef struct QuadnameDef QuadnameDef; +typedef struct ErrorHandler ErrorHandler; + struct Array { arrayDataType type; @@ -143,6 +159,12 @@ struct QuadnameDef opdyad dyadop; }; +struct ErrorHandler +{ + Rune *msg; + jmp_buf jmp; +}; + /* Function prototypes for the different source files */ /* main.c */ Datum *evalline(Rune *, int); @@ -196,6 +218,16 @@ Array *rundfn(Rune *, Array *, Array *); /* quadnames.c */ Datum quadnamedatum(QuadnameDef); +/* error.c */ +void throwerror(Rune *, int); +#define SETUPERROR(e) {\ + jmp_buf old;\ + memcpy(old, globalerror.jmp, sizeof(jmp_buf));\ + e = setjmp(globalerror.jmp);\ + if(e != 0)\ + memcpy(globalerror.jmp, old, sizeof(jmp_buf));\ +} + /* Monadic functions from function.c */ Array *fnSame(Array *); Array *fnTally(Array *); @@ -238,7 +270,6 @@ Array *opOver(Datum *, Datum *, Array *, Array *); /* Global variables */ extern int traceeval; /* eval.c */ extern int debugmem; /* memory.c */ -extern Rune *errormsg; /* eval.c */ extern int datasizes[]; /* array.c */ extern Rune primfuncnames[]; /* functions.c */ extern Rune primmonopnames[]; /* operators.c */ @@ -252,4 +283,6 @@ 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 */
\ No newline at end of file +extern int printprecision; /* print.c */ +extern ErrorHandler globalerror; /* error.c */ +extern Rune *errorstrs[]; /* error.c */
\ No newline at end of file |