Change generation of `delay' objects to use new format of promises
authorChris Hanson <org/chris-hanson/cph>
Sat, 2 Jan 1988 15:17:31 +0000 (15:17 +0000)
committerChris Hanson <org/chris-hanson/cph>
Sat, 2 Jan 1988 15:17:31 +0000 (15:17 +0000)
understood by the microcode.  The compiled code directly generates a
promise object, which contains a compiled procedure of no arguments.
The microcode invokes this procedure to generate the result.

v7/src/compiler/fggen/fggen.scm

index 7959af0e10a3c93076e5f82c30660c522e7ab015..d406e638ee5c0aeaf16e4d766e152b8e3a181d39 100644 (file)
@@ -1,6 +1,6 @@
 #| -*-Scheme-*-
 
-$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/fggen/fggen.scm,v 4.2 1987/12/30 06:42:50 cph Exp $
+$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/fggen/fggen.scm,v 4.3 1988/01/02 15:17:31 cph Exp $
 
 Copyright (c) 1987 Massachusetts Institute of Technology
 
@@ -578,26 +578,6 @@ MIT in each case. |#
 \f
 ;;;; Rewrites
 
-(define (generate/access block continuation expression)
-  (scode/access-components expression
-    (lambda (environment name)
-      (generate/combination
-       block
-       continuation
-       (scode/make-combination (ucode-primitive lexical-reference)
-                              (list environment name))))))
-
-(define (generate/comment block continuation expression)
-  (generate/expression block
-                      continuation
-                      (scode/comment-expression expression)))
-
-(define (generate/delay block continuation expression)
-  (generate/lambda block
-                  continuation
-                  (scode/make-lambda lambda-tag:delay '() '() false '() '()
-                                     (scode/delay-expression expression))))
-
 (define (generate/disjunction block continuation expression)
   ((continuation/case continuation
                      generate/disjunction/value
@@ -628,6 +608,31 @@ MIT in each case. |#
                                                   predicate
                                                   alternative))))))))
 \f
+(define (generate/access block continuation expression)
+  (scode/access-components expression
+    (lambda (environment name)
+      (generate/combination
+       block
+       continuation
+       (scode/make-combination (ucode-primitive lexical-reference)
+                              (list environment name))))))
+
+(define (generate/comment block continuation expression)
+  (generate/expression block
+                      continuation
+                      (scode/comment-expression expression)))
+
+(define (generate/delay block continuation expression)
+  (generate/combination
+   block
+   continuation
+   (scode/make-combination
+    (ucode-primitive system-pair-cons)
+    (list (ucode-type delayed)
+         0
+         (scode/make-lambda lambda-tag:unnamed '() '() false '() '()
+                            (scode/delay-expression expression))))))
+
 (define (generate/error-combination block continuation expression)
   (scode/error-combination-components expression
     (lambda (message irritants)