Search in your emails for this same method. I've been surprised before you
;)

On Fri, Aug 12, 2011 at 5:12 PM, Igor Stasenko <[email protected]> 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.
>
>


-- 
Mariano
http://marianopeck.wordpress.com

Reply via email to