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


Reply via email to