##
## 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
	}"
}