diff options
author | Peter Mikkelsen <petermikkelsen10@gmail.com> | 2022-01-20 23:07:08 +0000 |
---|---|---|
committer | Peter Mikkelsen <petermikkelsen10@gmail.com> | 2022-01-20 23:07:08 +0000 |
commit | 230aac3c644df9d80c8eba507e6bc7c710b26b52 (patch) | |
tree | a440f14305fe71e148e6835f319869e5f04c16c4 /eval.c | |
parent | 56ddfd33a5564afefdf264c91f2eca2ac3c37e08 (diff) |
Implement better dnfs semantics
Diffstat (limited to 'eval.c')
-rw-r--r-- | eval.c | 13 |
1 files changed, 8 insertions, 5 deletions
@@ -52,7 +52,7 @@ evalfn evalfns[11][11] = { }; Datum * -eval(Statement *stmt) +eval(Statement *stmt, int toplevel) { errormsg = nil; @@ -122,6 +122,9 @@ retry: } } if(stmt->ntoks == 1){ + int stop = 0; + if(toplevel == 0 && !stmt->toks[0].shy) + stop = 1; if(stmt->guard){ int guardOK = 1; if(stmt->toks[0].tag != ArrayTag) @@ -137,10 +140,10 @@ retry: exits(nil); } if(stmt->toks[0].array->intdata[0] == 1) - return eval(stmt->guard); + return eval(stmt->guard, toplevel); } - if(stmt->next) - return eval(stmt->next); + if(stmt->next && !stop) + return eval(stmt->next, toplevel); else return stmt->toks; }else @@ -215,7 +218,7 @@ parens(Datum left, Datum right) /* evaluate a parenthesis expression and return the result */ USED(right); traceprint("PARENS: %S\n", ppdatums(left.stmt.toks, left.stmt.ntoks)); - Datum *result = eval(&left.stmt); + Datum *result = eval(&left.stmt, 1); if(result[0].tag == ArrayTag) result[0].array->stranded = 0; result[0].shy = 0; |