Fixed bug in (AND ...) expression
authorStephen Adams <edu/mit/csail/zurich/adams>
Wed, 8 Mar 1995 05:14:24 +0000 (05:14 +0000)
committerStephen Adams <edu/mit/csail/zurich/adams>
Wed, 8 Mar 1995 05:14:24 +0000 (05:14 +0000)
v8/src/compiler/base/parass.scm

index 5fe51a118f9e555f05e30912c3da3668af81d49d..b09900b1828f83ab1faa6216f430a628c9e8cb52 100644 (file)
@@ -1,6 +1,6 @@
 #| -*-Scheme-*-
 
-$Id: parass.scm,v 1.1 1994/11/19 02:02:36 adams Exp $
+$Id: parass.scm,v 1.2 1995/03/08 05:14:24 adams Exp $
 
 Copyright (c) 1994 Massachusetts Institute of Technology
 
@@ -46,33 +46,34 @@ MIT in each case. |#
                            (topo-node/make dependency)))
                    dependencies)))
     (for-each
-     (lambda (pair)
-       (let ((before (cdr pair)))
-        (for-each
-         (lambda (dependent)
-           (let ((pair (assq dependent pairs)))
-             (and pair
-                  (let ((after (cdr pair)))
-                    ;; For parallel assignment,
-                    ;; self-dependence is irrelevant.
-                    (and (not (eq? after before))
-                         (set-topo-node/before!
-                          after
-                          (cons before (topo-node/before after)))
-                         (set-topo-node/after!
-                          before
-                          (cons after (topo-node/after before))))))))
-         (cdr (topo-node/contents before)))))
-     pairs)
+       (lambda (pair)
+         (let ((before (cdr pair)))
+           (for-each
+               (lambda (dependent)
+                 (let ((pair (assq dependent pairs)))
+                   (if pair
+                       (let ((after (cdr pair)))
+                         ;; For parallel assignment,
+                         ;; self-dependence is irrelevant.
+                         (if (not (eq? after before))
+                             (begin
+                               (set-topo-node/before!
+                                after
+                                (cons before (topo-node/before after)))
+                               (set-topo-node/after!
+                                before
+                                (cons after (topo-node/after before)))))))))
+             (cdr (topo-node/contents before)))))
+      pairs)
     ;; *** This should use the heuristics for n < 6 ***
-    (let loop ((nodes* (reverse (sort-topologically (map cdr pairs))))
-              (result '())
+    (let loop ((nodes*  (reverse (sort-topologically (map cdr pairs))))
+              (result  '())
               (needed-to-right '()))
       (if (null? nodes*)
          result
-         (let* ((node (car nodes*))
-                (dependency (topo-node/contents node))
-                (references (cdr dependency)))
+         (let* ((node        (car nodes*))
+                (dependency  (topo-node/contents node))
+                (references  (cdr dependency)))
            (loop (cdr nodes*)
                  (cons (vector (topo-node/early? node)
                                dependency
@@ -84,15 +85,15 @@ MIT in each case. |#
                   (conc-name topo-node/)
                   (constructor topo-node/make (contents)))
   (contents false read-only true)
-  (before '() read-only false)
-  (after '() read-only false)
-  (nbefore false read-only false)
-  (early? false read-only false)
+  (before   '()   read-only false)
+  (after    '()   read-only false)
+  (nbefore  false read-only false)
+  (early?   false read-only false)
   (dequeued false read-only false))
 
 (define (sort-topologically nodes)
-  (let* ((nnodes (length nodes))
-        (buckets (make-vector (+ 1 nnodes) '())))
+  (let* ((nnodes   (length nodes))
+        (buckets  (make-vector (+ 1 nnodes) '())))
     (define (update! node)
       (set-topo-node/dequeued! node true)
       (for-each (lambda (node*)
@@ -108,7 +109,7 @@ MIT in each case. |#
                                     nbefore*
                                     (cons node*
                                           (vector-ref buckets nbefore*))))))
-               (topo-node/after node)))
+       (topo-node/after node)))
 
     (define (phase-2 left accum)
       ;; There must be a cycle, remove an early block
@@ -143,5 +144,5 @@ MIT in each case. |#
                  (vector-set! buckets
                               n
                               (cons node (vector-ref buckets n)))))
-             nodes)
+      nodes)
     (phase-1 nnodes '())))
\ No newline at end of file