From de13bcb2991b62a3703532cd3a1cc9a8da4df8ac Mon Sep 17 00:00:00 2001 From: Kaz Kylheku Date: Tue, 8 Sep 2015 07:08:14 -0700 Subject: 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. --- lib.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib.c b/lib.c index e93a73fb..d31a06bb 100644 --- a/lib.c +++ b/lib.c @@ -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; } -- cgit v1.2.3