Class Class Object name instanceSize methods superClass variables Methods Class new | newObject | newObject <- self new: instanceSize. ^ (self == Class) ifTrue: [ newObject initialize ] ifFalse: [ newObject new ] ] Methods Class new: size " hack out block the right size and class " "create a new block, set its class" ^ < 22 < 58 size > self > ] Methods Class superClass: aClass superClass <- aClass ] Methods Class upSuperclassChain: aBlock aBlock value: self. (superClass notNil) ifTrue: [ superClass upSuperclassChain: aBlock ] ] Methods Class editMethod: name | m | m <- self methodNamed: name. (m notNil) ifTrue: [ self doEdit: m ] ifFalse: [ superClass notNil ifTrue: [ superClass editMethod: name ] ifFalse: [ 'no such method' print ] ] ] Methods Class methods ^ methods ] Methods Class printString ^ name asString ] Methods Class variables: nameArray variables <- nameArray. instanceSize <- superClass instanceSize + nameArray size ] Methods Class readMethods [ smalltalk inquire: 'Add a method (yn) ? ' ] whileTrue: [ self addMethod ] ] Methods Class addSubClass: aSymbol instanceVariableNames: aString | newClass | newClass <- Class new; name: aSymbol; superClass: self; variables: (aString words: [:x | x isAlphabetic ]). aSymbol assign: newClass. classes at: aSymbol put: newClass ] Methods Class fileOut | f | " file out whole class on class.st " f <- File new; name: (name asString,'.st'); mode: 'w'; open. self fileOutOn: f. f close. ] Methods Class subClasses ^ classes inject: List new into: [:x :y | (y superClass == self) ifTrue: [ x add: y]. x ] ] Methods Class superClass ^ superClass ] Methods Class doEdit: method " edit a method until it compiles correctly " [ method text: method text edit. (method compileWithClass: self) ifTrue: [ ^ true ] ifFalse: [ smalltalk inquire: 'edit again (yn) ? ' ] ] whileTrue. ^ false ] Methods Class name ^ name ] Methods Class respondsTo | theSet | theSet <- Dictionary new. self upSuperclassChain: [:x | theSet addAll: x methods ]. ^ theSet ] Methods Class fileOutMethodsOn: aFile " file out all methods " methods do: [:m | aFile print: 'Methods ', name. aFile print: m text. aFile print: ']' ] ] Methods Class initialize superClass <- Object. instanceSize <- 0. methods <- Dictionary new ] Methods Class watch: name | m | m <- self methodNamed: name. (m notNil) ifTrue: [ ^ m watch: [:a | ('executing ', name) print. a print] ] ifFalse: [ ^ 'no such method' ] ] Methods Class viewMethod: methodName | m | m <- self methodNamed: methodName. (m notNil) ifTrue: [ m signature print. m text print ] ifFalse: [ 'no such method' print ] ] Methods Class variables ^ variables ] Methods Class fileOutOn: aFile " file out class description " aFile printNoReturn: 'Class ', name , ' ', superClass. (variables notNil) ifTrue: [ variables do: [:v | aFile printNoReturn: ' ', v ]]. aFile print: ''. self fileOutMethodsOn: aFile. ] Methods Class readInstanceVariables self variables: ((smalltalk getPrompt: 'Instance Variables? ') words: [:x | x isAlphabetic ]) ] Methods Class instanceSize ^ instanceSize ] Methods Class methodNamed: name (methods includesKey: name) ifTrue: [ ^ methods at: name ]. (superClass notNil) ifTrue: [ ^ superClass methodNamed: name ]. ^ nil ] Methods Class name: aString name <- aString ] Methods Class addMethod | m | m <- Method new; text: ''. (self doEdit: m) ifTrue: [ methods at: m name put: m ] ] Methods Class display ('Class name: ', name asString) print. (superClass notNil) ifTrue: [ ('Superclass: ', superClass ) print ]. 'Instance Variables:' print. variables isNil ifTrue: [ 'no instance variables ' print ] ifFalse: [ variables display ]. 'Subclasses: ' print. self subClasses display ]