#| -*-Scheme-*-
-$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/base/toplev.scm,v 4.26 1990/03/26 23:45:38 jinx Exp $
+$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/base/toplev.scm,v 4.27 1990/04/03 04:50:30 jinx Exp $
Copyright (c) 1988, 1989, 1990 Massachusetts Institute of Technology
(phase/link)
*result*)))
\f
-(define (compile-recursively scode procedure-result?)
+(define (compile-recursively scode procedure-result? procedure-name)
;; Used by the compiler when it wants to compile subexpressions as
;; separate code-blocks.
;; The rtl output should be fixed.
(compiler-phase/visible
(string-append
"Compiling procedure: "
- (write-to-string (lambda-name scode)))
+ (write-to-string procedure-name))
do-it))
do-it))
(lambda ()
#| -*-Scheme-*-
-$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/fggen/canon.scm,v 1.7 1989/09/13 20:44:17 jinx Exp $
+$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/fggen/canon.scm,v 1.8 1990/04/03 04:50:50 jinx Rel $
-Copyright (c) 1988, 1989 Massachusetts Institute of Technology
+Copyright (c) 1988, 1989, 1990 Massachusetts Institute of Technology
This material was developed by the Scheme project at the Massachusetts
Institute of Technology, Department of Electrical Engineering and
MIT in each case. |#
;;;; Scode canonicalization.
+;;; package: (compiler fg-generator)
;;; canonicalize/top-level translates scode expressions into
;;; equivalent scode expressions where all implicit first class
needs? ; requires environment binding
splice?) ; top level can be moved
+(define *top-level-declarations*)
+
(define (canonicalize/top-level expression)
(if (eq? compiler:package-optimization-level 'NONE)
expression
- (let ((result
- (canonicalize/expression
- expression '()
- (if (and compiler:cache-free-variables?
- (not (eq? compiler:package-optimization-level 'LOW)))
- 'TOP-LEVEL
- 'FIRST-CLASS))))
- (if (canout-needs? result)
- (canonicalize/bind-environment (canout-expr result)
- (scode/make-the-environment)
- expression)
- (canout-expr result)))))
+ (fluid-let ((*top-level-declarations* '()))
+ (let ((result
+ (canonicalize/expression
+ expression '()
+ (if (and compiler:cache-free-variables?
+ (not (eq? compiler:package-optimization-level 'LOW)))
+ 'TOP-LEVEL
+ 'FIRST-CLASS))))
+ (if (canout-needs? result)
+ (canonicalize/bind-environment (canout-expr result)
+ (scode/make-the-environment)
+ expression)
+ (canout-expr result))))))
(define (canonicalize/optimization-low? context)
(or (eq? context 'FIRST-CLASS)
compiler:compile-by-procedures?)
(make-canout
(scode/make-directive
- (canout-expr canout)
+ (if (null? *top-level-declarations*)
+ (canout-expr canout)
+ (make-open-block '() *top-level-declarations* (canout-expr canout)))
'(COMPILE-PROCEDURE)
expr)
true
(scode/open-block-components
expr
(lambda (names decls body)
- (canonicalize/expression
- (unscan-defines names decls body)
- bound
- context))))))
+ (fluid-let ((*top-level-declarations*
+ (append decls *top-level-declarations*)))
+ (canonicalize/expression
+ (unscan-defines names decls body)
+ bound
+ context)))))))
\f
;;;; Hairier expressions
#| -*-Scheme-*-
-$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/fggen/fggen.scm,v 4.24 1990/02/02 18:38:34 cph Exp $
+$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/fggen/fggen.scm,v 4.25 1990/04/03 04:51:16 jinx Exp $
Copyright (c) 1988, 1989, 1990 Massachusetts Institute of Technology
MIT in each case. |#
;;;; Flow Graph Generation
+;;; package: (compiler fg-generator)
(declare (usual-integrations))
\f
(make-constant
(compile-recursively
(scode/quotation-expression expression)
+ false
false))))
((COMPILE-PROCEDURE)
- (if (not (scode/lambda? expression))
- (error "Bad compile-procedure directive" comment))
- (if compiler:compile-by-procedures?
- (continue/rvalue-constant
- block continuation
- (make-constant (compile-recursively expression true)))
- (generate/expression block continuation expression)))
+ (let ((process
+ (lambda (name)
+ (if compiler:compile-by-procedures?
+ (continue/rvalue-constant
+ block continuation
+ (make-constant
+ (compile-recursively expression true name)))
+ (generate/expression block continuation expression))))
+ (fail
+ (lambda ()
+ (error "Bad compile-procedure directive" comment))))
+ (cond ((scode/lambda? expression)
+ (process (lambda-name expression)))
+ ((scode/open-block? expression)
+ (scode/open-block-components
+ expression
+ (lambda (names decls body)
+ decls ; ignored
+ (if (and (null? names) (scode/lambda? body))
+ (process (lambda-name body))
+ (fail)))))
+ (else
+ (fail)))))
((ENCLOSE)
(generate/enclose block continuation expression))
(else