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!


Reply via email to