From 0256f809bc4cd67f882d71b9afda5d50f9feb535 Mon Sep 17 00:00:00 2001 From: Chris Hanson Date: Thu, 13 Oct 1988 10:34:23 +0000 Subject: [PATCH] When dynamic link is in use, it must be pushed even if the continuation is always known. --- v7/src/compiler/base/contin.scm | 11 ++++++----- v7/src/compiler/rtlgen/rgstmt.scm | 13 ++++++------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/v7/src/compiler/base/contin.scm b/v7/src/compiler/base/contin.scm index f9b65521b..4328f39c2 100644 --- a/v7/src/compiler/base/contin.scm +++ b/v7/src/compiler/base/contin.scm @@ -1,6 +1,6 @@ #| -*-Scheme-*- -$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/base/contin.scm,v 4.4 1988/08/18 01:34:39 cph Exp $ +$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/base/contin.scm,v 4.5 1988/10/13 10:34:10 cph Exp $ Copyright (c) 1988 Massachusetts Institute of Technology @@ -109,12 +109,13 @@ MIT in each case. |# (define (continuation/frame-size continuation) (let ((closing-block (continuation/closing-block continuation))) (+ (if (ic-block? closing-block) 1 0) + (if (and (stack-block? closing-block) + (stack-block/dynamic-link? closing-block)) + 1 + 0) (if (continuation/always-known-operator? continuation) 0 - (if (and (stack-block? closing-block) - (stack-block/dynamic-link? closing-block)) - 2 - 1))))) + 1)))) (define (uni-continuation? rvalue) (and (rvalue/procedure? rvalue) diff --git a/v7/src/compiler/rtlgen/rgstmt.scm b/v7/src/compiler/rtlgen/rgstmt.scm index 056cef226..63fa07b19 100644 --- a/v7/src/compiler/rtlgen/rgstmt.scm +++ b/v7/src/compiler/rtlgen/rgstmt.scm @@ -1,6 +1,6 @@ #| -*-Scheme-*- -$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/rtlgen/rgstmt.scm,v 4.5 1988/08/18 01:37:14 cph Exp $ +$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/rtlgen/rgstmt.scm,v 4.6 1988/10/13 10:34:23 cph Exp $ Copyright (c) 1988 Massachusetts Institute of Technology @@ -141,19 +141,18 @@ MIT in each case. |# (define (generate/continuation-cons block continuation) block (let ((closing-block (continuation/closing-block continuation))) - (scfg*scfg->scfg! + (scfg-append! (if (ic-block? closing-block) (rtl:make-push (rtl:make-fetch register:environment)) (make-null-cfg)) + (if (block/dynamic-link? closing-block) + (rtl:make-push-link) + (make-null-cfg)) (if (continuation/always-known-operator? continuation) (make-null-cfg) (begin (enqueue-continuation! continuation) - (scfg*scfg->scfg! - (if (block/dynamic-link? closing-block) - (rtl:make-push-link) - (make-null-cfg)) - (rtl:make-push-return (continuation/label continuation)))))))) + (rtl:make-push-return (continuation/label continuation))))))) (define (generate/pop pop) (rtl:make-pop (continuation*/register (pop-continuation pop)))) -- 2.25.1