diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2015-09-08 07:08:14 -0700 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2015-09-08 07:08:14 -0700 |
commit | de13bcb2991b62a3703532cd3a1cc9a8da4df8ac (patch) | |
tree | d4788450a917cb457bcc3de2ae8849275d284dfb /lib.c | |
parent | 94d029b0f24756b84a94ce2b3f8fd5739166b0c5 (diff) | |
download | txr-de13bcb2991b62a3703532cd3a1cc9a8da4df8ac.tar.gz txr-de13bcb2991b62a3703532cd3a1cc9a8da4df8ac.tar.bz2 txr-de13bcb2991b62a3703532cd3a1cc9a8da4df8ac.zip |
Allow runaway lazy list computation to be interrupted.
* lib.c (car, cdr, car_l, cdr_l):
Check for signal before calling forcing
function of a lazy cons.
Diffstat (limited to 'lib.c')
-rw-r--r-- | lib.c | 4 |
1 files changed, 4 insertions, 0 deletions
@@ -284,6 +284,7 @@ val car(val cons) if (cons->lc.func == nil) { return cons->lc.car; } else { + sig_check_fast(); funcall1(cons->lc.func, cons); cons->lc.func = nil; return cons->lc.car; @@ -314,6 +315,7 @@ val cdr(val cons) if (cons->lc.func == nil) { return cons->lc.cdr; } else { + sig_check_fast(); funcall1(cons->lc.func, cons); cons->lc.func = nil; return cons->lc.cdr; @@ -387,6 +389,7 @@ loc car_l(val cons) return mkloc(cons->c.car, cons); case LCONS: if (cons->lc.func) { + sig_check_fast(); funcall1(cons->lc.func, cons); cons->lc.func = nil; } @@ -403,6 +406,7 @@ loc cdr_l(val cons) return mkloc(cons->c.cdr, cons); case LCONS: if (cons->lc.func) { + sig_check_fast(); funcall1(cons->lc.func, cons); cons->lc.func = nil; } |