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.
>>
>
>
>

Reply via email to