[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

another mvbind problem?



I see I missed a case, so here's a better patch.
It's to be applied instead-of, not in-addtion-to
the last one.  Sorry!

http://sayre.sysc.pdx.edu:8001/clisp/bugfixes/compiler.lsp

Index: compiler.lsp
===================================================================
RCS file: /u/marcus/cvs/clisp/src/compiler.lsp,v
retrieving revision 1.6
diff -c -r1.6 compiler.lsp
*** compiler.lsp	1996/03/26 00:51:04	1.6
--- compiler.lsp	1996/05/03 11:05:29
***************
*** 6718,6733 ****
                             `(,anode1
                               ,@(let ((len (length symbols))
                                       (type (anode-type anode1)))
!                                     (cond ((equal type '(PRIMOP VALUES))
!                                            (let ((count (length (remove-if-not #'anode-p (anode-code anode1)))))
!                                              (if (eql count len)
!                                                  `((NV-TO-STACK ,len))
!                                                  `((MV-TO-STACK) (PUSH-NIL ,(- len count)))
!                                                  )))
!                                           ((member type '(VAR VARSET CONST))
!                                            `((MV-TO-STACK) (PUSH-NIL ,(1- len))))
!                                           (t `((NV-TO-STACK ,len)))
!                                )    )
                               ,@(c-make-closure closurevars closuredummy-venvc closuredummy-stackz)
                               ,@ ; Binden von special- oder Closure-Variablen:
                                 (do ((stackvarlistr stackvarlist (cdr stackvarlistr))
--- 6718,6733 ----
                             `(,anode1
                               ,@(let ((len (length symbols))
                                       (type (anode-type anode1)))
!                                     (cond ((and (consp type) (eq (first type) 'PRIMOP))
!                                            (case (second type)
!                                              (VALUES-LIST `((NV-TO-STACK ,len)))
!                                              (VALUES (let ((count (length (remove-if-not #'anode-p (anode-code anode1)))))
!                                                        (if (>= count len)
!                                                            `((NV-TO-STACK ,len))
!                                                            `((MV-TO-STACK) (PUSH-NIL ,(- len count))))))
!                                              (otherwise `((MV-TO-STACK) (PUSH-NIL ,(1- len))))))
!                                           ((member type '(VAR VARSET CONST)) `((MV-TO-STACK) (PUSH-NIL ,(1- len))))
!                                           (t `((NV-TO-STACK ,len)))))
                               ,@(c-make-closure closurevars closuredummy-venvc closuredummy-stackz)
                               ,@ ; Binden von special- oder Closure-Variablen:
                                 (do ((stackvarlistr stackvarlist (cdr stackvarlistr))