[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))