"D. Martinez" <denis.marti...@live.com> writes: > Thank you Pascal for pointing this out, but I don't think this relates to my > problem. > I have looked at MKCL source and it was evident that it does not > implement superclass validation at this time. > Its MOP is not supported either in Closer-MOP so I assume it is somewhat > young. > Quoting for clos/standard.lsp: > ;; FIXME!!! Here should come the invocation of VALIDATE-SUPERCLASS! > As I have played with various CLs I noted that some required > VALIDATE-SUPERCLASS and some did not. I have not really checked what > is the standard's stance on this. > > I can trace the error rising from defclass to standard.lsp in mkcl. > It is the cond clause from ensure-class-using-class. I display some more > information to post here. > ((not (eq (class-of class) metaclass)) > (format *error-output* "class: ~A~%" class) > (format *error-output* "(class-of class): ~A~%" (class-of class)) > (format *error-output* "metaclass: ~A~%" metaclass) > (error "When redefining a class, the metaclass can not change."))) > > Which provides this output > > class: &<The A-CLASS A 140012460512096> > (class-of class): &<The STANDARD-CLASS A-CLASS 140012464325568> > metaclass: &<The STANDARD-CLASS A-CLASS 140012460537344> > Error during command line arguments processing: > When redefining a class, the metaclass can not change.. > > This does show that A-CLASS is intanciated twice, and it is why the EQ test > fails. > The mystery is why there happen two instanciations when I use ASDF.
An explaination could be that MKCL uses the same environment for compilation and loading, and that ASDF does both COMPILE-FILE and LOAD (when the file is not already compiled). A compiler doesn't have to define the class completely when compiling; it only has to do the following: If a defclass form appears as a top level form, the compiler must make the class name be recognized as a valid type name in subsequent declarations (as for deftype) and be recognized as a valid class name for defmethod parameter specializers and for use as the :metaclass option of a subsequent defclass. The compiler must make the class definition available to be returned by find-class when its environment argument is a value received as the environment parameter of a macro. You could test and compare: 1.1- remove the fasl files. 1.2- from a fresh image, (asdf:oos 'asdf:load-source-op :hello) this only LOAD the source file (situation :execute) 2.1- remove the fasl files (if any) 2.2- from a fresh image, (asdf:oos 'asdf:load-op :hello) this uses COMPILE-FILE and LOAD (situations :compile-toplevel and :load-toplevel) 3.1- keep the fasl files from the previous compilation. 3.2- from a fresh image, (asdf:oos 'asdf:load-op :hello) this should only LOAD the fasl file (situation :load-toplevel) -- __Pascal Bourguignon__ http://www.informatimago.com/ “The factory of the future will have only two employees, a man and a dog. The man will be there to feed the dog. The dog will be there to keep the man from touching the equipment.” -- Carl Bass CEO Autodesk _______________________________________________ Asdf-devel mailing list Asdf-devel@common-lisp.net http://mailman.common-lisp.net/cgi-bin/mailman/listinfo/asdf-devel