diff --git a/prim-ctl.c b/prim-ctl.c index 8ebae1fd..19cb1dd6 100644 --- a/prim-ctl.c +++ b/prim-ctl.c @@ -15,11 +15,10 @@ PRIM(seq) { PRIM(if) { Ref(List *, lp, list); for (; lp != NULL; lp = lp->next) { - List *cond = eval1(lp->term, evalflags & (lp->next == NULL ? eval_inchild : 0)); - lp = lp->next; - if (lp == NULL) { - RefPop(lp); - return cond; + List *cond = ltrue; + if (lp->next != NULL) { + cond = eval1(lp->term, 0); + lp = lp->next; } if (istrue(cond)) { List *result = eval1(lp->term, evalflags); diff --git a/test/tests/option.es b/test/tests/option.es index 26fbe1ca..8276cc7d 100644 --- a/test/tests/option.es +++ b/test/tests/option.es @@ -14,6 +14,9 @@ test 'es -e' { 'false' false 'if {false} {true}' true 'if {true} {false}' false + 'if {false; true} {true}' true + 'if {true} {false; true}' false + 'if {false} {true} {false; true}' false '{true; {true; {false; true}}}' false # assignments