moo/stix/kernel/Class.st
2016-11-21 13:56:20 +00:00

54 lines
1.1 KiB
Smalltalk

##
## the Class object should be a variable-pointer object because
## it needs to accomodate class instance variables.
##
#class(#pointer) Class(Apex)
{
#dcl spec selfspec superclass subclasses name instvars classvars classinstvars pooldics instmthdic classmthdic.
#method(#class) basicNew
{
## you must not instantiate a new class this way.
self cannotInstantiate.
}
#method(#class) initialize
{
^self.
}
## ########################################################################
## most of the following methods can actually become class methods of Apex.
## if the instance varibles can be made accessible from the Apex class.
## ########################################################################
#method name
{
^self.name
}
#method superclass
{
^self.superclass
}
#method specNumInstVars
{
## shift right by 7 bits.
## see stix-prv.h for details.
^self.spec bitShift: -7
}
"#method inheritsFrom: aSuperclass
{
| c |
c := self superclass.
[c notNil] whileTrue: [
[ c == aSuperclass ] ifTrue: [^true].
c := c superclass.
].
^false
}"
}