[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