to allow special handling of IC procedure references.
#| -*-Scheme-*-
-$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/rtlgen/rgcomb.scm,v 1.25 1987/06/13 00:14:10 cph Exp $
+$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/rtlgen/rgcomb.scm,v 1.26 1987/06/13 03:00:39 cph Exp $
Copyright (c) 1987 Massachusetts Institute of Technology
(let ((operator (subproblem-value (combination-operator combination)))
(frame-size* (1+ frame-size)))
(let ((name (variable-name (reference-variable operator))))
- (if compiler:cache-free-variables?
+ ;; This predicate assumes that (reference-block operator)
+ ;; returns an IC block.
+ (if (ic-block/use-lookup? (reference-block operator))
(let* ((temp (make-temporary))
(cell (rtl:make-fetch temp))
(contents (rtl:make-fetch cell)))
#| -*-Scheme-*-
-$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/rtlgen/rgproc.scm,v 1.1 1987/05/07 00:22:51 cph Exp $
+$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/rtlgen/rgproc.scm,v 1.2 1987/06/13 03:01:28 cph Exp $
Copyright (c) 1987 Massachusetts Institute of Technology
(define-export (generate/procedure-header procedure body)
(if (procedure/ic? procedure)
- body
+ (scfg*scfg->scfg!
+ (rtl:make-procedure-heap-check procedure)
+ body)
(scfg-append!
((if (or (procedure-rest procedure)
(and (procedure/closure? procedure)
(find-variable block variable
(lambda (locative) locative)
(lambda (nearest-ic-locative name)
+ (error "Missing closure variable" variable))
+ (lambda (name)
(error "Missing closure variable" variable))))
environment)))))
d3 1
a4 1
-$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/rtlgen/rgrval.scm,v 1.9 1987/06/01 20:29:50 cph Exp $
+$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/rtlgen/rgrval.scm,v 1.10 1987/06/13 02:55:54 cph Exp $
#| -*-Scheme-*-
Copyright (c) 1987 Massachusetts Institute of Technology
-$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/rtlgen/rgrval.scm,v 1.9 1987/06/01 20:29:50 cph Exp $
+$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/rtlgen/rgrval.scm,v 1.10 1987/06/13 02:55:54 cph Exp $
Copyright (c) 1988, 1990 Massachusetts Institute of Technology
(lambda (locative)
(expression-value/simple (rtl:make-fetch locative)))
(lambda (environment name)
- (if compiler:cache-free-variables?
- (generate/cached-reference name (reference-safe? reference))
- (expression-value/temporary
- (rtl:make-interpreter-call:lookup
- environment
- (intern-scode-variable! (reference-block reference) name)
- (reference-safe? reference))
- (rtl:interpreter-call-result:lookup))))))))
+ (expression-value/temporary
+ (rtl:make-interpreter-call:lookup
+ environment
+ (intern-scode-variable! (reference-block reference) name)
+ (reference-safe? reference))
+ (rtl:interpreter-call-result:lookup)))
+ (lambda (name)
+ (generate/cached-reference name (reference-safe? reference)))))))
(define (generate/cached-reference name safe?)
(let ((temp (make-temporary))
(expression-value/simple (rtl:make-constant false)))
((ic-block? block)
(expression-value/simple
- (if compiler:cache-free-variables?
- (rtl:make-constant false)
+ (if (ic-block/use-lookup? block)
(let ((closure-block (procedure-closure-block procedure)))
(if (ic-block? closure-block)
(rtl:make-fetch register:environment)
- (closure-ic-locative closure-block block))))))
+ (closure-ic-locative closure-block block)))
+ (rtl:make-constant false))))
((closure-block? block)
(let ((closure-block (procedure-closure-block procedure)))
(define (loop variables)
(let ((pushes
(let ((parent (block-parent block))
(pushes (loop (block-bound-variables block))))
- (if (and parent (not compiler:cache-free-variables?))
+ (if (and parent (ic-block/use-lookup? parent))
(cons (rtl:make-push
(closure-ic-locative closure-block
parent))
#| -*-Scheme-*-
-$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/rtlgen/rgstmt.scm,v 1.6 1987/06/01 20:30:23 cph Exp $
+$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/rtlgen/rgstmt.scm,v 1.7 1987/06/13 02:57:08 cph Exp $
Copyright (c) 1987 Massachusetts Institute of Technology
(lambda (prefix expression)
(scfg*scfg->scfg!
prefix
- (find-variable (definition-block node) (definition-lvalue node)
- (lambda (locative)
- (error "Definition of compiled variable"))
+ (transmit-values (find-definition-variable node)
(lambda (environment name)
(rtl:make-interpreter-call:define environment name
expression))))))))
(lambda (locative)
(rtl:make-assignment locative expression))
(lambda (environment name)
- (if compiler:cache-free-variables?
- (generate/cached-assignment name expression)
- (rtl:make-interpreter-call:set! environment
- (intern-scode-variable! block name)
- expression))))))
+ (rtl:make-interpreter-call:set! environment
+ (intern-scode-variable! block name)
+ expression))
+ (lambda (name)
+ (generate/cached-assignment name expression)))))
(define (generate/cached-assignment name value)
(let ((temp (make-temporary)))