The call to ensure-class without :metaclass 'py-core-type succeeds. The call with the :metaclass argument fails inside change-class: (defmethod change-class ((instance standard-object) (new-class standard-class) &rest initargs) (unless (class-finalized-p new-class) (finalize-inheritance new-class)) (let ((cpl (class-precedence-list new-class))) (dolist (class cpl) (macrolet ((frob (class-name) `(when (eq class (find-class ',class-name)) (error 'metaobject-initialization-violation :format-control "~@<Cannot ~S objects into ~S metaobjects.~@:>" :format-arguments (list 'change-class ',class-name) :references (list '(:amop :initialization ,class-name)))))) (frob class) (frob generic-function) (frob method) (frob slot-definition)))) (change-class-internal instance new-class initargs)) CLASS is on the class precedence list of PY-CORE-TYPE. bob ==================== Willem Broekema writes: > Hello Bob, > > On Thu, May 1, 2008 at 5:52 PM, Robert Brown <brown at google.com> wrote: > > > I tried to get CLPython up and running on the latest SBCL. The diff below > > contains a couple of easy fixes. SBCL wants BREAK's argument to be a > > string > > and SBCL's LOOP does not like a negative loop increment. > > > Thanks for the patches! > > > > The real porting problem right now is CLOS related. SBCL does not like > > the > > following code in core/classes.lisp: > > > > ;; Fix superclass and metaclass of PY-DICT. > > (ensure-class 'py-dict > > :direct-superclasses (list 'py-core-object) > > :metaclass 'py-core-type) > > > > I get the following error: > > > > debugger invoked on a SB-PCL::METAOBJECT-INITIALIZATION-VIOLATION in > > thread > > #<THREAD "initial thread" {11701A79}>: > > Cannot CHANGE-CLASS objects into CLASS metaobjects. > > See also: > > AMOP, Initialization of Class Metaobjects > > > > I think the problem is that PY-DICT is a normal class and the ENSURE-CLASS > > call tries to turn it into a metaclass. Anyway, I'm far from a CLOS > > expert. > > > Well, class py-dict is not turned into a metaclass here, at least that's not > the intention. :) The superclass and metaclass of it are changed but py-dict > remains a non-metaclass class. So I think the actual error message is > incorrect, but something else is wrong. > > The problem might be that you can not change the metaclasses of a class > using ensure-class. Could you please check if the call to ensure-class > without the metaclass change is accepted? > > (ensure-class 'py-dict > :direct-superclasses (list 'py-core-object)) > > Thanks, > - Willem
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4