From a64e6cecb093db448dafb806d752357c9011b33c Mon Sep 17 00:00:00 2001 From: Chris Hanson Date: Tue, 8 Aug 1989 01:21:29 +0000 Subject: [PATCH] In `continuation/next-continuation-offset', check to see if popping-limit corresponds to continuation that is always known. If so, keep searching up the stack for another continuation. --- v7/src/compiler/rtlgen/rtlgen.scm | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/v7/src/compiler/rtlgen/rtlgen.scm b/v7/src/compiler/rtlgen/rtlgen.scm index 9a2d52777..a84fcaf33 100644 --- a/v7/src/compiler/rtlgen/rtlgen.scm +++ b/v7/src/compiler/rtlgen/rtlgen.scm @@ -1,6 +1,6 @@ #| -*-Scheme-*- -$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/rtlgen/rtlgen.scm,v 4.18 1989/05/31 20:02:25 jinx Rel $ +$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/rtlgen/rtlgen.scm,v 4.19 1989/08/08 01:21:29 cph Exp $ Copyright (c) 1988, 1989 Massachusetts Institute of Technology @@ -202,11 +202,21 @@ MIT in each case. |# (if (stack-block? block) (let ((popping-limit (block-popping-limit block))) (and popping-limit - (let loop ((block block) (offset offset)) - (let ((offset (+ offset (block-frame-size block)))) - (if (eq? block popping-limit) - offset - (loop (block-parent block) offset)))))) offset)) + (let ((offset + (let loop ((block block) (offset offset)) + (let ((offset (+ offset (block-frame-size block)))) + (if (eq? block popping-limit) + offset + (loop (block-parent block) offset))))) + (stack-link (block-stack-link popping-limit))) + (if (and stack-link + (continuation-block? stack-link) + (continuation/always-known-operator? + (block-procedure stack-link))) + (continuation/next-continuation-offset (block-parent stack-link) + offset) + offset)))) + offset)) (define (generate/continuation-entry/pop-extra continuation) (pop-continuation-extra (continuation/closing-block continuation))) -- 2.25.1