If combination has a `continuation-push', prevent that continuation
authorChris Hanson <org/chris-hanson/cph>
Tue, 20 Dec 1988 23:13:20 +0000 (23:13 +0000)
committerChris Hanson <org/chris-hanson/cph>
Tue, 20 Dec 1988 23:13:20 +0000 (23:13 +0000)
from being pushed when the combination is constant folded in any way.

v7/src/compiler/base/ctypes.scm
v7/src/compiler/fgopt/sideff.scm

index f445b1e97ed617a2fa84d14cb99bf47bac688476..544a6da7ce4f7069ccba693a5cb84cde00e0f2ef 100644 (file)
@@ -1,6 +1,6 @@
 #| -*-Scheme-*-
 
-$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/base/ctypes.scm,v 4.8 1988/12/13 13:02:21 cph Exp $
+$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/base/ctypes.scm,v 4.9 1988/12/20 23:13:08 cph Exp $
 
 Copyright (c) 1988 Massachusetts Institute of Technology
 
@@ -154,7 +154,11 @@ MIT in each case. |#
   (let ((continuation (combination/continuation combination)))
     (set-application-type! combination 'RETURN)
     (set-application-operator! combination continuation)
-    (set-application-operands! combination (list rvalue))))
+    (set-application-operands! combination (list rvalue)))
+  (let ((push (combination/continuation-push combination)))
+    (if (and push (rvalue-known-value (combination/continuation combination)))
+       (set-virtual-continuation/type! (virtual-return-operator push)
+                                       continuation-type/effect))))
 
 (define-integrable (make-return block continuation rvalue)
   (make-application 'RETURN block continuation (list rvalue) false))
@@ -164,7 +168,7 @@ MIT in each case. |#
 
 (define-integrable return/context application-context)
 (define-integrable return/operator application-operator)
-
+(define-integrable return/continuation-push application-continuation-push)
 (define-integrable (return/operand return)
   (car (application-operands return)))
 \f
index 4e6472efeeebc40af4fcc5430abbcd35bf92ad1b..3a711219c588c69acf1ffdd1f9b9e201baa417fd 100644 (file)
@@ -1,6 +1,6 @@
 #| -*-Scheme-*-
 
-$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/fgopt/sideff.scm,v 1.3 1988/12/13 18:21:52 cph Exp $
+$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/fgopt/sideff.scm,v 1.4 1988/12/20 23:13:20 cph Exp $
 
 Copyright (c) 1988 Massachusetts Institute of Technology
 
@@ -317,7 +317,8 @@ MIT in each case. |#
 
 (define (analyze-combination! app)
   (define (simplify-combination! value)
-    (combination/trivial! app value)
+    (combination/constant! app
+                          (r/lvalue->rvalue (combination/context app) value))
     (enqueue-node! (block-procedure (application-block app))))
 
   (define (check value op-vals)
@@ -403,16 +404,6 @@ MIT in each case. |#
       (make-reference context r/lvalue false)
       r/lvalue))
 \f
-(define (combination/trivial! comb r/lvalue)
-  (let ((push (combination/continuation-push comb)))
-    (if (and push (rvalue-known-value (combination/continuation comb)))
-       (set-virtual-continuation/type!
-        (virtual-return-operator push)
-        continuation-type/effect)))
-  (combination/constant!
-   comb
-   (r/lvalue->rvalue (combination/context comb) r/lvalue)))
-
 (define (procedure/trivial! procedure kind)
   (let ((place (assq 'TRIVIAL (procedure-properties procedure))))
     (cond ((not place)