Here's a clue to your problem:
* (macroexpand '(multiple-value-setq (a b c) (values 1 2 3)))
(VALUES (SETF (VALUES A B C) (VALUES 1 2 3)))
T
In other words, CMUCL already has a setf expander for values, and
multiple-value-setq is defined in terms of it.
Tim
On Thursday, December 19, 2002, at 05:26 PM, Fabricio Chalub wrote:
>
> The following piece of code from CLOCC (DEFINE-SETF-EXPANDER VALUES,
> shown on the transcript) makes this version loose (apparently some
> infinite loop, eating huge amounts of memory) while compiling, eg,
> defsystem.lisp. I don't know whether the blame is on CMUCL or CLOCC
> (but it worked on CMUCL 18d).
>
> Here's an annotated transcript:
>
> Script started on Thu Dec 19 23:08:34 2002
> fc:~/werk/lisp/clocc/clocc/src/defsystem-3.x$ lisp -noinit
> CMU Common Lisp 18e-pre, built 2002-12-19 on melbourne, running on afx
> Send questions to [EMAIL PROTECTED] and bug reports to
> [EMAIL PROTECTED]
> Loaded subsystems:
> Python 1.0, target Intel x86
> CLOS based on PCL version: September 16 92 PCL (f)
> * (define-setf-expander values (&rest places &environment env)
> (loop :for pl :in places :with te :and va :and ne :and se :and ge :do
> (multiple-value-setq (te va ne se ge) (get-setf-expansion pl
> env))
> :append te :into te1 :append va :into va1 :append ne :into ne1
> :collect se :into se1 :collect ge :into ge1
> :finally (return (values te1 va1 ne1 (cons 'values se1)
> (cons 'values ge1)))))
>
> VALUES
> * (compile-file "defsystem.lisp")
> Converted CANONICALIZE-MODULE-NAME.
>
> [...]
>
> Compiling DEFUN COMPONENT-FULL-PATHNAME:
>
> [ here my memory usage goes up until the machine starts trashing ]
>
> Interrupted at #x107C8E1D.
>
> Restarts:
> 0: [CONTINUE] Return from BREAK.
> 1: [ABORT ] Return to Top-Level.
>
> Debug (type H for help)
>
> (UNIX::SIGINT-HANDLER #<unused-arg> #<unused-arg> #.(SYSTEM:INT-SAP
> #x3E222B48))
> Source: Error finding source:
> Error in function DEBUG::GET-FILE-TOP-LEVEL-FORM: Source file no
> longer exists:
> target:code/signal.lisp.
> 0] backtrace
>
> 0: (UNIX::SIGINT-HANDLER #<unused-arg>
> #<unused-arg>
> #.(SYSTEM:INT-SAP #x3E222B48))
> 1: (UNIX::SIGINT-HANDLER 3
> #<unused-arg>
> #<unused-arg>
> #.(SYSTEM:INT-SAP #x3E222B48))[:EXTERNAL]
> 2: ("Foreign function call land")
> 3: ("Foreign function call land")
> 4: ("Foreign function call land")
> 5: ("Foreign function call land")
> 6: (C::IR1-CONVERT-PROGN-BODY 3
> 260606983
> #<Continuation c1>
>
> ((ANSI-LOOP::WITH-LOOP-LIST-COLLECTION-HEAD # #)))[:EXTERNAL]
> 7: (C::IR1-CONVERT-AUX-BINDINGS #<Continuation c2>
> #<Continuation c1>
>
> ((ANSI-LOOP::WITH-LOOP-LIST-COLLECTION-HEAD #
>
> #))
> NIL
> ...)
> 8: (C::IR1-CONVERT-SPECIAL-BINDINGS #<Continuation c2> #<Continuation
> c1>
> ((ANSI-LOOP::WITH-LOOP-LIST-COLLECTION-HEAD # #)) NIL ...)
> 9: (C::IR1-CONVERT-LAMBDA-BODY
> ((ANSI-LOOP::WITH-LOOP-LIST-COLLECTION-HEAD # #))
> (#<C::LAMBDA-VAR #x4B4ED505 NAME= COMMON-LISP-USER::TE1>)
> NIL
> NIL
> ...)
> 10: (C::IR1-CONVERT-AUX-BINDINGS #<Continuation c3>
> #<Continuation c4>
>
> ((ANSI-LOOP::WITH-LOOP-LIST-COLLECTION-HEAD #
>
> #))
> (#<C::LAMBDA-VAR #x4B4ED505
> NAME= COMMON-LISP-USER::TE1>)
> ...)
>
> [ ... 500 kb of stack ommited here ... ]
>
> 1839: (C::IR1-CONVERT #<Continuation c584>
> #<Continuation c585>
> (LET* (# # #)
> (ANSI-LOOP::LOOP-BODY NIL # # # ...)))
> 1840: (C::IR1-CONVERT #<Continuation c584>
> #<Continuation c585>
> (ANSI-LOOP::WITH-LOOP-LIST-COLLECTION-HEAD
> (#:G9 #:G10 COMMON-LISP-USER::GE1)
> (ANSI-LOOP::LOOP-BODY NIL # # # ...)))
>
> Interrupted at #x80553B2.
>
> Restarts:
> 0: [CONTINUE] Return from BREAK.
> 1: [ABORT ] Return to debug level 1.
> 2: Return from BREAK.
> 3: Return to Top-Level.
>
> Debug (type H for help)
>
> (UNIX::SIGINT-HANDLER #<unused-arg> #<unused-arg> #.(SYSTEM:INT-SAP
> #x3E222190))
> Source: Error finding source:
> Error in function DEBUG::GET-FILE-TOP-LEVEL-FORM: Source file no
> longer exists:
> target:code/signal.lisp.
> 0]] 3
> Size lossage. No size function for object at 0x4bf55568
> First word of object: 0x10920e92
>
>
> Compilation unit aborted.
> 1460 fatal errors
> 1 warning
>
>
> * (quit)
> fc:~/werk/lisp/clocc/clocc/src/defsystem-3.x$
> Script done on Thu Dec 19 23:13:16 2002
>
> fc
> --
> http://raw.no-ip.com/~fc
>
>