diff options
Diffstat (limited to 'eval.c')
-rw-r--r-- | eval.c | 17 |
1 files changed, 10 insertions, 7 deletions
@@ -4,7 +4,10 @@ #include "apl9.h" +#define traceprint if(traceeval)print + Rune *errormsg; +int traceeval; typedef Datum (*evalfn)(Datum, Datum); @@ -53,7 +56,7 @@ eval(Datum *tokens, int *ntoks) int maxlevel = 0; int offset; evalfn fn = nil; - print("CURRENT: %S\n", ppdatums(tokens, *ntoks)); + traceprint("CURRENT: %S\n", ppdatums(tokens, *ntoks)); for(offset = (*ntoks)-1; offset >= 0; offset--){ int level; if(offset == 0) @@ -67,7 +70,7 @@ eval(Datum *tokens, int *ntoks) Datum left = tokens[offset]; Datum right = tokens[offset+1]; fn = evalfns[left.tag][right.tag]; - print("Reducing %S and %S\n", ppdatum(left), ppdatum(right)); + traceprint("Reducing %S and %S\n", ppdatum(left), ppdatum(right)); break; }else if(level > maxlevel) maxlevel = level; @@ -88,7 +91,7 @@ eval(Datum *tokens, int *ntoks) Datum strand(Datum left, Datum right) { - print("Stranding\n"); + traceprint("Stranding\n"); Datum result; Array *leftarr = left.array->stranded ? left.array : fnEnclose(left.array); Array *rightarr = right.array->stranded ? right.array : fnEnclose(right.array); @@ -101,7 +104,7 @@ strand(Datum left, Datum right) Datum monadfun(Datum left, Datum right) { - print("Monadic function application\n"); + traceprint("Monadic function application\n"); Datum result; result.tag = ArrayTag; @@ -116,7 +119,7 @@ monadfun(Datum left, Datum right) Datum dyadfun(Datum left, Datum right) { - print("Applying left argument to function\n"); + traceprint("Applying left argument to function\n"); Datum result; result.tag = BoundFunctionTag, result.func = right.func; @@ -131,7 +134,7 @@ lpar(Datum left, Datum right) left.expr.ntoks++; left.expr.toks = realloc(left.expr.toks, sizeof(Datum) * left.expr.ntoks); left.expr.toks[left.expr.ntoks-1] = right; - print("LPAR: %S\n", ppdatums(left.expr.toks, left.expr.ntoks)); + traceprint("LPAR: %S\n", ppdatums(left.expr.toks, left.expr.ntoks)); return left; } @@ -140,7 +143,7 @@ rpar(Datum left, Datum right) { /* evaluate a parenthesis expression and return the result */ USED(right); - print("RPAR: %S\n", ppdatums(left.expr.toks, left.expr.ntoks)); + traceprint("RPAR: %S\n", ppdatums(left.expr.toks, left.expr.ntoks)); Datum *result = eval(left.expr.toks, &left.expr.ntoks); result[0].array->stranded = 0; return result[0]; /* TODO handle error if ntoks != 1 */ |