diff options
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | lib.c | 10 |
2 files changed, 13 insertions, 2 deletions
@@ -1,3 +1,8 @@ +2012-01-19 Kaz Kylheku <kaz@kylheku.com> + + * lib.c (car_l, cdr_l): Bugfix: do not call the lazy cons + force function if it is already nil, and set it to nil afterward. + 2012-01-12 Kaz Kylheku <kaz@kylheku.com> * eval.c (eval_init): Make lazy_appendv function @@ -246,7 +246,10 @@ val *car_l(val cons) case CONS: return &cons->c.car; case LCONS: - funcall1(cons->lc.func, cons); + if (cons->lc.func) { + funcall1(cons->lc.func, cons); + cons->lc.func = nil; + } return &cons->lc.car; default: type_mismatch(lit("~s is not a cons"), cons, nao); @@ -259,7 +262,10 @@ val *cdr_l(val cons) case CONS: return &cons->c.cdr; case LCONS: - funcall1(cons->lc.func, cons); + if (cons->lc.func) { + funcall1(cons->lc.func, cons); + cons->lc.func = nil; + } return &cons->lc.cdr; default: type_mismatch(lit("~s is not a cons"), cons, nao); |