[armedbear-ticket] [armedbear] #277: reinitialize-instance on class metaobjects incorrect

armedbear armedbear-devel at common-lisp.net
Mon Dec 3 07:37:15 UTC 2012


#277: reinitialize-instance on class metaobjects incorrect
-----------------------+----------------------------------------------------
 Reporter:  rschlatte  |       Owner:  rschlatte
     Type:  defect     |      Status:  new      
 Priority:  major      |   Milestone:           
Component:  (A)MOP     |     Version:           
 Keywords:             |  
-----------------------+----------------------------------------------------
 Reported by Pascal Costanza:

 Consider the following test case:
 {{{
 CL-USER(1): (use-package :mop)
 T
 CL-USER(2): (defclass a () ())
 #<STANDARD-CLASS A {794563AA}>
 CL-USER(3): (defclass b (a) ())
 #<STANDARD-CLASS B {62F6FB59}>
 CL-USER(4): (finalize-inheritance (find-class 'a))
 NIL
 CL-USER(5): (finalize-inheritance (find-class 'b))
 NIL
 CL-USER(6): (class-precedence-list (find-class 'b))
 (#<STANDARD-CLASS B {62F6FB59}> #<STANDARD-CLASS A {794563AA}> #<STANDARD-
 CLASS STANDARD-OBJECT {23309E87}> #<BUILT-IN-CLASS T {100C62C8}>)
 CL-USER(7): (reinitialize-instance (find-class 'b))
 #<STANDARD-CLASS B {62F6FB59}>
 CL-USER(8): (class-precedence-list (find-class 'b))
 (#<STANDARD-CLASS B {62F6FB59}> #<STANDARD-CLASS STANDARD-OBJECT
 {23309E87}> #<BUILT-IN-CLASS T {100C62C8}>)
 }}}
 The invocation of reinitialize-instance obviously reinitialized the
 direct-superclasses slot, and thus removed the superclass a.

 However, according to the HyperSpec, the general protocol for
 reinitialize-instance is always that slots for which no initargs are
 provided through reinitialize-instance should be left untouched. This also
 restated implicitly in the CLOS MOP specification, for example in the
 section "Initialization of Class Metaobjects:" The defaulted superclass
 list is specified to be only assigned during initialization, but not
 during reinitialization.

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


More information about the armedbear-ticket mailing list