summaryrefslogtreecommitdiff
path: root/eval.c
diff options
context:
space:
mode:
Diffstat (limited to 'eval.c')
-rw-r--r--eval.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/eval.c b/eval.c
index 7d9afbe..e794a38 100644
--- a/eval.c
+++ b/eval.c
@@ -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;