A good example of how you (miss) used Smalltalk super-powers for the good or the evil !
http://www.cincomsmalltalk.com/userblogs/travis/blogView?showComments=true&printTitle=Smalltalk_SuperPowers&entry=3368180772 ESUG then OOPSLA 2008 Nicolas 2011/8/12 Max Leske <[email protected]>: > Good luck with refactoring *that*… > > > On 12.08.2011, at 17:12, Igor Stasenko wrote: > >> DiskProxy>>comeFullyUpOnReload: smartRefStream >> "Internalize myself into a fully alive object after raw loading from a >> DataStream. (See my class comment.) DataStream will substitute the >> object from this eval for the DiskProxy." >> >> | globalObj symbol arrayIndex | >> symbol := globalObjectName. "See if class is mapped to another >> name" >> (smartRefStream respondsTo: #renamed) >> ifTrue: [ >> "If in outPointers in an ImageSegment, remember >> original class >> name. >> See mapClass:installIn:. Would be lost otherwise." >>>>>>> (thisContext sender sender sender sender sender sender >>>>>>> sender sender receiver class == ImageSegment >>>>>>> and: [ thisContext sender sender sender sender >>>>>>> method == (DataStream compiledMethodAt: #readArray) ]) >> ifTrue: [ >> arrayIndex := thisContext sender >> sender sender sender tempAt: >> 4. "index var in readArray. Later safer to find i on stack >> of context." >> smartRefStream renamedConv at: >> arrayIndex put: symbol ]. "save >> original name" >> symbol := smartRefStream renamed at: symbol ifAbsent: >> [ symbol ] ]. "map" >> globalObj := Smalltalk globals >> at: symbol >> ifAbsent: [ >> preSelector == nil & (constructorSelector = #yourself) >> ifTrue: [ >> Transcript >> cr; >> show: symbol , ' is >> undeclared.'. >> (Undeclared includesKey: symbol) >> ifTrue: [ ^ Undeclared at: >> symbol ]. >> Undeclared at: symbol put: nil. >> ^ nil ]. >> ^ self error: 'Global "' , symbol , '" not found' ]. >> preSelector >> ifNotNil: [ >> Symbol >> hasInterned: preSelector >> ifTrue: [ :selector | >> [ globalObj := globalObj perform: >> selector ] >> on: Error >> do: [ :ex | >> ex messageText = 'key >> not found' >> ifTrue: [ ^ >> nil ]. >> ^ ex signal ] ] ]. >> "keep the Proxy if Project does not exist" >> constructorSelector ifNil: [ ^ globalObj ]. >> Symbol >> hasInterned: constructorSelector >> ifTrue: [ :selector | >> [ ^ globalObj perform: selector withArguments: >> constructorArgs ] >> on: Error >> do: [ :ex | >> ex messageText = 'key not found' >> ifTrue: [ ^ nil ]. >> ^ ex signal ] ]. "args not >> checked against Renamed" >> ^ nil >> >> -- >> Best regards, >> Igor Stasenko AKA sig. >> > > >
