2016-07-26 15:08 GMT+02:00 Denis Kudriashov <dionisiydk@gmail.com>:
Hi.
Look at UndefinedObject instance side methods. You will see class hierarchy protocol. For example nil understands #subclasses message:
nil subclasses "==> {ProtoObject}"
ProtoObjects superclass is nil, so maybe it just should behave the same way for all other objects. ByteString superclass subclasses includes: ByteString. "true" ProtoObject superclass subclasses includes: ProtoObject. "true"
It implemented like this:
UndefinedObject >>subclassesDo: aBlock "Evaluate aBlock with all subclasses of nil. Others are not direct subclasses of Class."
^ Class subclassesDo: [:cl | cl isMeta ifTrue: [aBlock value: cl soleInstance]].
So my question is: why it needs to be like that? And does it really needed?
I removed all this methods and not saw any problem.