this file works in GCL, CLISP and LW but not in CMUCL:
-----
(defstruct a b c)
(defparameter *foo* #.(make-foo))
-----
As people have pointed out, ANSI 3.2.4.4 requires a MAKE-LOAD-FORM
method for that to work, so I added this:
#+cmu
(defmethod make-load-form ((self structure-object) &optional environment)
(make-load-form-saving-slots self :environment environment))
Then I get a zillion errors:
; In: DEFSTRUCT FOO
; (DEFSTRUCT FOO A B C)
; --> PROGN SETF LET* LET* KERNEL::FIND-CLASS OR LET KERNEL:CLASS-CELL-CLASS
; --> QUOTE PROGN PROGN SETF PCL::SET-SLOT-VALUE PCL::ACCESSOR-SET-SLOT-VALUE
; --> LET QUOTE PROGN PROGN SETF PCL::SET-SLOT-VALUE
; --> PCL::ACCESSOR-SET-SLOT-VALUE LET QUOTE PROGN PROGN SETF
; --> PCL::SET-SLOT-VALUE PCL::ACCESSOR-SET-SLOT-VALUE LET QUOTE PROGN PROGN
; --> SETF PCL::SET-SLOT-VALUE PCL::ACCESSOR-SET-SLOT-VALUE LET QUOTE PROGN
; --> PROGN SETF PCL::SET-SLOT-VALUE PCL::ACCESSOR-SET-SLOT-VALUE LET QUOTE
; --> PROGN PROGN SETF PCL::SET-SLOT-VALUE PCL::ACCESSOR-SET-SLOT-VALUE LET
; --> QUOTE PROGN PROGN SETF PCL::SET-SLOT-VALUE PCL::ACCESSOR-SET-SLOT-VALUE
; --> LET QUOTE PROGN PROGN SETF PCL::SET-SLOT-VALUE
; --> PCL::ACCESSOR-SET-SLOT-VALUE LET QUOTE PROGN PROGN SETF
; --> PCL::SET-SLOT-VALUE PCL::ACCESSOR-SET-SLOT-VALUE LET QUOTE PROGN PROGN
; --> SETF PCL::SET-SLOT-VALUE PCL::ACCESSOR-SET-SLOT-VALUE LET QUOTE PROGN
; --> PROGN SETF PCL::SET-SLOT-VALUE PCL::ACCESSOR-SET-SLOT-VALUE LET QUOTE
; --> PROGN PROGN SETF PCL::SET-SLOT-VALUE PCL::ACCESSOR-SET-SLOT-VALUE LET
; --> QUOTE PROGN PROGN SETF PCL::SET-SLOT-VALUE PCL::ACCESSOR-SET-SLOT-VALUE
; --> LET QUOTE PROGN PROGN SETF PCL::SET-SLOT-VALUE
; --> PCL::ACCESSOR-SET-SLOT-VALUE LET QUOTE PROGN PROGN SETF
; --> PCL::SET-SLOT-VALUE PCL::ACCESSOR-SET-SLOT-VALUE LET QUOTE PROGN PROGN
; --> SETF PCL::SET-SLOT-VALUE PCL::ACCESSOR-SET-SLOT-VALUE LET QUOTE PROGN
; --> PROGN SETF PCL::SET-SLOT-VALUE PCL::ACCESSOR-SET-SLOT-VALUE LET QUOTE
; --> PROGN PROGN SETF PCL::SET-SLOT-VALUE PCL::ACCESSOR-SET-SLOT-VALUE LET
; --> QUOTE PROGN PROGN SETF PCL::SET-SLOT-VALUE PCL::ACCESSOR-SET-SLOT-VALUE
; --> LET QUOTE PROGN PROGN SETF PCL::SET-SLOT-VALUE
; --> PCL::ACCESSOR-SET-SLOT-VALUE LET QUOTE PROGN PROGN SETF
; --> PCL::SET-SLOT-VALUE PCL::ACCESSOR-SET-SLOT-VALUE LET QUOTE PROGN PROGN
; --> SETF PCL::SET-SLOT-VALUE PCL::ACCESSOR-SET-SLOT-VALUE LET QUOTE PROGN
; --> PROGN SETF PCL::SET-SLOT-VALUE PCL::ACCESSOR-SET-SLOT-VALUE LET QUOTE
; --> PROGN PROGN SETF PCL::SET-SLOT-VALUE PCL::ACCESSOR-SET-SLOT-VALUE LET
; --> QUOTE PROGN PROGN SETF PCL::SET-SLOT-VALUE PCL::ACCESSOR-SET-SLOT-VALUE
; --> LET QUOTE PROGN PROGN SETF PCL::SET-SLOT-VALUE
; --> PCL::ACCESSOR-SET-SLOT-VALUE LET QUOTE PROGN PROGN SETF
; --> PCL::SET-SLOT-VALUE PCL::ACCESSOR-SET-SLOT-VALUE LET QUOTE PROGN PROGN
; --> SETF PCL::SET-SLOT-VALUE PCL::ACCESSOR-SET-SLOT-VALUE LET QUOTE PROGN
; --> PROGN SETF PCL::SET-SLOT-VALUE PCL::ACCESSOR-SET-SLOT-VALUE LET QUOTE
; --> PROGN PROGN SETF PCL::SET-SLOT-VALUE PCL::ACCESSOR-SET-SLOT-VALUE LET
; --> QUOTE PROGN PROGN SETF PCL::SET-SLOT-VALUE PCL::ACCESSOR-SET-SLOT-VALUE
; --> LET QUOTE PROGN PROGN SETF PCL::SET-SLOT-VALUE
; --> PCL::ACCESSOR-SET-SLOT-VALUE LET QUOTE PROGN PROGN SETF
; --> PCL::SET-SLOT-VALUE PCL::ACCESSOR-SET-SLOT-VALUE LET QUOTE PROGN PROGN
; --> SETF PCL::SET-SLOT-VALUE PCL::ACCESSOR-SET-SLOT-VALUE LET QUOTE PROGN
; --> PROGN SETF PCL::SET-SLOT-VALUE PCL::ACCESSOR-SET-SLOT-VALUE LET QUOTE
; --> PROGN PROGN SETF PCL::SET-SLOT-VALUE PCL::ACCESSOR-SET-SLOT-VALUE LET
; --> QUOTE PROGN PROGN SETF PCL::SET-SLOT-VALUE PCL::ACCESSOR-SET-SLOT-VALUE
; --> LET QUOTE PROGN PROGN SETF PCL::SET-SLOT-VALUE
; --> PCL::ACCESSOR-SET-SLOT-VALUE LET QUOTE PROGN PROGN SETF
; --> PCL::SET-SLOT-VALUE PCL::ACCESSOR-SET-SLOT-VALUE LET QUOTE PROGN PROGN
; --> SETF PCL::SET-SLOT-VALUE PCL::ACCESSOR-SET-SLOT-VALUE LET QUOTE PROGN
; --> PROGN SETF PCL::SET-SLOT-VALUE PCL::ACCESSOR-SET-SLOT-VALUE LET QUOTE
; --> PROGN PROGN SETF PCL::SET-SLOT-VALUE PCL::ACCESSOR-SET-SLOT-VALUE LET
; --> QUOTE PROGN PROGN SETF PCL::SET-SLOT-VALUE PCL::ACCESSOR-SET-SLOT-VALUE
; --> LET
; ==>
; '#<Function KERNEL::NAMED-SIMPLE-SUBTYPEP-TYPE-METHOD {10011F11}>
; Error: Cannot dump objects of type FUNCTION into fasl files.
;
; Byte Compiling Load Time Value of (PCL::ENSURE-ACCESSOR 'PCL::WRITER
'(PCL:SLOT-ACCESSOR :GLOBAL
KERNEL::COMPLEX-SUBTYPEP-ARG1 ...)
...):
do I need to redefine defstruct to always define a make-load-form method?!
--
Sam Steingold (http://www.podval.org/~sds) running w2k
<http://www.camera.org> <http://www.iris.org.il> <http://www.memri.org/>
<http://www.mideasttruth.com/> <http://www.honestreporting.com>
In C you can make mistakes, while in C++ you can also inherit them!