PMetaclass.st
author Claus Gittinger <cg@exept.de>
Sun, 07 Jun 1998 02:08:56 +0200
changeset 3522 291ec553ac33
parent 2048 91eeef9b3106
permissions -rw-r--r--
restart of restartableProcesses must be done after reinitialization of the event dispatcher.

Metaclass subclass:#PrivateMetaclass
	instanceVariableNames:'owningClass'
	classVariableNames:''
	poolDictionaries:''
	category:'Kernel-Classes'
!

!PrivateMetaclass class methodsFor:'documentation'!

documentation
"
    A PrivateMetaclass is much like a regular Metaclass, but it is only visible (known)
    to some owningClass (which is also true for the PrivateMetaclasses sole instance).

    Its sourceCode, package and revision is forced to be the same as the owning classes'.
    Therefore, privateClasses delegate some queries to their owning class.

    Caution: support for private classes is an ST/X special feature.
             This mechanism may not be provided by other smalltalk systems,
             making your code unportable.
             (However, private classes can be simulated pretty easily, using classVariables
              or classInstance variables ...)

    [author:]
        Claus Gittinger

    [see also:]
        Behavior ClassDescription Class Metaclass
"
! !

!PrivateMetaclass methodsFor:'accessing'!

nameSpace
    "return the nameSpace I am contained in.
     For private classes, this is always nil"

    ^ nil

    "Created: 7.11.1996 / 13:19:18 / cg"
!

owningClass
    "return my owningClass"

    ^ owningClass

    "Created: 11.10.1996 / 16:55:43 / cg"
    "Modified: 11.10.1996 / 17:35:13 / cg"
!

setOwningClass:something
    "set my owningClass - this is not a public entry"

    owningClass := something.

    "Created: 11.10.1996 / 17:11:05 / cg"
    "Modified: 11.10.1996 / 17:35:24 / cg"
!

topOwningClass
    "return my outermost owningClass; that is the first non-private
     class along the owner-chain."

    |outerOwner|

    (outerOwner := owningClass owningClass) notNil ifTrue:[
        ^ owningClass topOwningClass
    ].
    ^ owningClass

    "Created: 3.1.1997 / 19:19:58 / cg"
    "Modified: 3.1.1997 / 19:50:05 / cg"
! !

!PrivateMetaclass methodsFor:'queries'!

isBuiltInClass
     ^ self == PrivateMetaclass
!

package
    "return my package-id"

    ^ owningClass package

    "Created: 15.10.1996 / 19:45:04 / cg"
! !

!PrivateMetaclass class methodsFor:'documentation'!

version
    ^ '$Header: /cvs/stx/stx/libbasic/Attic/PMetaclass.st,v 1.10 1997-01-03 18:52:14 cg Exp $'
! !