Path: utzoo!utgpu!news-server.csri.toronto.edu!rpi!zaphod.mps.ohio-state.edu!wuarchive!uunet!tut.cis.ohio-state.edu!unreplyable!garbage From: jonl%kuwait@LUCID.COM (Jon L White) Newsgroups: comp.lang.clos Subject: Creating metaclasses Message-ID: <9105020636.AA28415@kuwait> Date: 2 May 91 06:36:43 GMT References: <9105020128.AA28067@cs.rpi.edu> Sender: welch@tut.cis.ohio-state.edu Distribution: inet Organization: CommonLoops Lines: 87 re: [make a metaclass MY-CLASS that is its own metaclass] The following excerpt from Chapter 6 seems to suggest that what I want is impossible. I hope it doesn't really make it "impossible", but simply leaves it as unspecified. The intent for Lucid's CLOS is to be able to do this, but after the 4.0 release went out, we discovered a glitch that prevented doing it in a straightforward way. Thanks to Kim Barrett of Chestnut Software for pointing this out last September; it is filed as bug report #05645 "RFE: want to be able to make circular CLASS-OF link", and with this patched, your example is quite feasible. [see the "dribble" below.] I say "feasible" rather than "straightforward", given all the constraints; for example, note the need for doing the defmethod for VALIDATE-SUPERCLASS at exactly the right point in time. [Of course, you could retract that method at a later time if you wanted to; but you might need it if you are expecting MY-OBJECT to serve as a kind of "maximal" class within the MY-CLASS metaclas hierarchy. For other variations on this theme, see my email msg: Date: Tue, 12 Feb 91 14:48:41 PST From: Jon L White To: kanderso@BBN.COM Cc: john@linus.mitre.org, barmar@think.com, commonloops@cis.ohio-state.edu Subject: accessing clos objects ] . . . > (load "/pods/central/patches/bug-5645") ;;; Loading binary file "/pods/central/patches/bug-5645.sbin" #P"/tmp_mnt/net/ss/patches/bug-5645.sbin" > (setq mo (defclass my-object (standard-object) ((file)))) # > (setq mc (defclass my-class (standard-class my-object) ((my-class-info)))) # > (defmethod clos-sys:validate-superclass ((x my-class) (Y standard-class)) t) # > (change-class mc mc) # > (change-class mo mc) # > (describe mo) Class Object: Name: MY-OBJECT MetaClass: MY-CLASS Class-Precedence-List: (MY-OBJECT STANDARD-OBJECT T) Direct-Superclasses: (STANDARD-OBJECT) Direct-Subclasses: (MY-CLASS) DirectSlots: SlotName Allocation TypeSpec FILE > (describe mc) Class Object: Name: MY-CLASS MetaClass: MY-CLASS Class-Precedence-List: (MY-CLASS STANDARD-CLASS CLOS::SLOTTED-CLASS CLASS MY-OBJECT STANDARD-OBJECT T) Direct-Superclasses: (STANDARD-CLASS MY-OBJECT) Direct-Subclasses: DirectSlots: SlotName Allocation TypeSpec MY-CLASS-INFO InheritedSlots: SlotName Allocation TypeSpec FILE CLOS::NAME CLOS::DIRECT-SUPERCLASSES CLOS::DIRECT-SUBCLASSES CLOS::DIRECT-METHODS CLOS::DIRECT-FORWARD-REFERENCED-SUPERCLASSES CLOS::PRECEDENCE-LIST CLOS::FULLY-DEFINED-P CLOS::WRAPPER-AND-ISLOT-COUNT CLOS::PLIST CLOS::DIRECT-SLOTS CLOS::SLOTS CLOS::DEFAULT-INITARGS CLOS-SYSTEM:SLOTD-INITARGS > -- JonL --