2011/8/12 Stéphane Ducasse <[email protected]>:
> You are really lucky.
> One the last dinosaurs.... there are rarer and rarer.
> May be you can improve with a timesRepeat:
>
Yes, good idea, refactoring with an even worse hack is a good joke,
For example (thisContext asManyTimes: 6) repeat sender
Object>>asManyTimes: anInteger
^ManyTimesProxy target: self times: anInteger
ManyTimesProxy>>repeat
^RepeatManyTimesProxy target: target times: count
RepeatManyTimesProxy>>doesNotUnderstand: aMessage
count <= 0 ifTrue: [^target].
count := count - 1.
target := target perform: aMessage selector with: aMessage arguments.
^self perform: aMessage selector with: aMessage arguments
Nicolas
>
> Stef
>
> On Aug 12, 2011, at 5:12 PM, 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.
>>
>
>
>