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