[armedbear-ticket] [armedbear] #107: (setf (values (struct-slot struct)) (values 42)) fails

armedbear armedbear-devel at common-lisp.net
Fri Oct 1 17:27:20 UTC 2010


#107: (setf (values (struct-slot struct)) (values 42)) fails
-------------------------------------+--------------------------------------
 Reporter:  mmohamed                 |       Owner:  somebody
     Type:  defect                   |      Status:  new     
 Priority:  major                    |   Milestone:          
Component:  CLOS                     |     Version:          
 Keywords:  SETF VALUES STRUCT-SLOT  |  
-------------------------------------+--------------------------------------
 ;;; reported by Zach Beane
 ;;; http://common-lisp.net/pipermail/armedbear-
 devel/2010-October/001521.html

 Here's a file that triggers an ABCL bug:

     ;;;; abcl-bug.lisp

     (defpackage #:abcl-bug
       (:use #:cl)
       (:export #:trigger))

     (in-package #:abcl-bug)

     (defstruct mystruct
       slot)

     (defun trigger ()
       (let ((struct (make-mystruct)))
         (setf (values (mystruct-slot struct))
               (values 42))
         struct))

 Here's what happens when I run it:

     Armed Bear Common Lisp 0.22.0
     Java 1.6.0_18 Sun Microsystems Inc.
     OpenJDK 64-Bit Server VM
     Low-level initialization completed in 0.445 seconds.
     Startup completed in 1.688 seconds.
     Type ":help" for a list of available commands.
     CL-USER(1): (load (compile-file "abcl-bug"))
     ; Compiling /tmp/abcl-bug.lisp ...
     ; (DEFPACKAGE #:ABCL-BUG ...)
     ; (IN-PACKAGE #:ABCL-BUG)
     ; (DEFSTRUCT MYSTRUCT ...)
     ; (DEFUN TRIGGER ...)
     ; Wrote /tmp/abcl-bug.abcl (0.447 seconds)
     T
     CL-USER(2): (abcl-bug:trigger)
     #<THREAD "interpreter" {1653033E}>: Debugger invoked on condition of
 type UNDEFINED-FUNCTION
       The function (SETF SYSTEM:STRUCTURE-REF) is undefined.
     Restarts:
       0: TOP-LEVEL Return to top level.
     [1] CL-USER(3): :bt
       0: (SYSTEM:BACKTRACE)
       1: (INVOKE-DEBUGGER #<UNDEFINED-FUNCTION {8FE2509}>)
       2: org.armedbear.lisp.Lisp.error(Lisp.java:353)
       3:
 org.armedbear.lisp.Symbol.getSymbolSetfFunctionOrDie(Symbol.java:399)
       4: org.armedbear.lisp.abcl_bug_9.execute(abcl-bug.lisp:11)
       5: org.armedbear.lisp.LispThread.execute(LispThread.java:552)
       6: org.armedbear.lisp.Lisp.evalCall(Lisp.java:514)
       7: org.armedbear.lisp.Lisp.eval(Lisp.java:485)
     [1] CL-USER(4):

 I would expect to get a structure back with SLOT set to 42, instead of
 this error.

 This is a strange case (you normally wouldn't use VALUES there) but it
 comes from some larger real code that sets multiple struct slots from a
 multiple-value-returning function.

-- 
Ticket URL: <http://trac.common-lisp.net/armedbear/ticket/107>
armedbear <http://common-lisp.net/project/armedbear>
armedbear


More information about the armedbear-ticket mailing list