[Pharo-project] I am petrified. I don't know what to say ........... (just look at that)
(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:
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." 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.
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 <siguctua@gmail.com> 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."
(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:
| 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." 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
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."
(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:
| 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." 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.
OMFG! :-((( -- Cheers, Peter. On 12 aug 2011, at 17:16, Max Leske <maxleske@gmail.com> wrote:
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."
(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:
| 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." 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.
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&p... ESUG then OOPSLA 2008 Nicolas 2011/8/12 Max Leske <maxleske@gmail.com>:
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."
         (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:
   | 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." 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.
You are really lucky. One the last dinosaurs.... there are rarer and rarer. May be you can improve with a timesRepeat: 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."
(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:
| 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." 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.
2011/8/12 Stéphane Ducasse <stephane.ducasse@inria.fr>:
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."
         (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:
   | 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." 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.
2011/8/12 Stéphane Ducasse <stephane.ducasse@inria.fr>:
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
Excellent idea. We will get more compact code :) We had a really good laugh. Pharo will become much more serious in the future so we should chase these dinosaurs now :)
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
2011/8/12 Nicolas Cellier <nicolas.cellier.aka.nice@gmail.com>:
2011/8/12 Stéphane Ducasse <stephane.ducasse@inria.fr>:
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
Oh, maybe we should not just stop at RE-factoring but also use factoring and write it ((thisContext asManyTimes: 3) repeat asManyTimes: 2) repeat sender but I'm unsure of the result... 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."
         (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:
   | 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." 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.
participants (6)
-
Igor Stasenko -
Mariano Martinez Peck -
Max Leske -
Nicolas Cellier -
Peter Hugosson-Miller -
Stéphane Ducasse