Change procedure application simulator to make unsupplied optional
authorChris Hanson <org/chris-hanson/cph>
Tue, 28 Jul 1987 22:50:34 +0000 (22:50 +0000)
committerChris Hanson <org/chris-hanson/cph>
Tue, 28 Jul 1987 22:50:34 +0000 (22:50 +0000)
(and required!) arguments be unknowable.  We could actually do better
by making them be connected to an unassigned object but that isn't too
important right now.

v7/src/compiler/fgopt/simapp.scm

index e874b5af25205de6fc7fe25d14b7eff4a448ca28..68c6a91a573bac7e3d4883be188dd9850c7e7970 100644 (file)
@@ -1,6 +1,6 @@
 #| -*-Scheme-*-
 
-$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/fgopt/simapp.scm,v 1.2 1987/06/30 19:50:45 cph Exp $
+$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/fgopt/simapp.scm,v 1.3 1987/07/28 22:50:34 cph Exp $
 
 Copyright (c) 1987 Massachusetts Institute of Technology
 
@@ -83,7 +83,7 @@ MIT in each case. |#
            (if (procedure? operator)
                (apply-procedure operator))
            true)))))
-
+\f
 (define (procedure-applicator operands combination-value)
   (let ((number-supplied (length operands)))
     (lambda (procedure)
@@ -99,10 +99,15 @@ MIT in each case. |#
                   (vnode-unknowable! rest)))
              ((> number-supplied (+ number-required number-optional))
               (warn "Too many arguments" procedure operands))))
-      (for-each vnode-connect!
-               (append (procedure-required procedure)
-                       (procedure-optional procedure))
-               operands)
+      (let loop ((parameters
+                 (append (procedure-required procedure)
+                         (procedure-optional procedure)))
+                (operands operands))
+       (if (not (null? parameters))
+           (if (null? operands)
+               (for-each vnode-unknowable! parameters)
+               (begin (vnode-connect! (car parameters) (car operands))
+                      (loop (cdr parameters) (cdr operands))))))
       ((vnode-connect!:vnode (procedure-value procedure)) combination-value))))
 \f
 (define-integrable (vnode-connect! vnode operand)