summaryrefslogtreecommitdiff
path: root/eval.c
diff options
context:
space:
mode:
Diffstat (limited to 'eval.c')
-rw-r--r--eval.c17
1 files changed, 10 insertions, 7 deletions
diff --git a/eval.c b/eval.c
index 1ff40ce..4f228a7 100644
--- a/eval.c
+++ b/eval.c
@@ -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 */