Pharo-dev
By thread
pharo-dev@lists.pharo.org
By month
Messages by month
- ----- 2026 -----
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- 3 participants
- 144616 messages
Re: [Pharo-project] Hashed collection improvements: Some code
by Andres Valloud
Wonderful! I think I can contribute a different kind of brain surgery,
I'll try to hack that together in a bit.
Martin McClure wrote:
> OK, here's a filein that improves Pharo hashed collection performance
> quite a bit. Large collections are much faster, and small ones are
> pretty much the same speed as before. There are basically two fairly
> simple changes; the basic structure and algorithms of the collections is
> unchanged. The changes:
>
> 1. Spread identity hash values.
> 2. Make table sizes prime.
>
>
> File it into PharoCore-1.0-10491rc1.image. It'll take a minute or two
> since it has to rehash the world halfway through. I don't know how to
> make another kind of packaging that can do that, so I'll leave that to
> someone else.
>
> After the filein, there are some test failures, most of which do not
> seem to be *directly* related. I'm hoping someone that knows the
> affected tests can take a look and comment:
>
>
> Unexpectedly pass ObjectFinalizerTests>>#testFinalizationOfEquals
> Not clear why, but this does not seem to be a problem :-)
>
> Fails HostWindowTests>>#testOne
> But this test fails in the core image on Linux; HostWindows do not
> seem to be implemented for Linux.
>
> Error on FontTest>>#testMultistringFont
> Japanese StrikeFonts have nil characterToGlyphMap,
> #createCharacterToGlyphMap answers nil,
> not immediately clear how this is supposed to be initialized for fonts
> with codepoints > 255.
>
> PackageInfoTest>>testKernelPackage
> because some method in kernel package for Object is not in Object.
> I've changed #hash, so that's probably it.
>
> Regards,
>
> -Martin
>
Oct. 24, 2009
Re: [Pharo-project] (a = b) => (a hash = b hash)
by Andres Valloud
(furthermore, changing Interval>>hash to match that of Array in cases
like (1 to: SmallInteger minVal) is bound to cause unacceptable
performance penalties)
Andres Valloud wrote:
> I'd rather make the interval not equal to the array, at least with the
> message #=. Probably that can't be done safely. If that's the case,
> I'd say the best approach is to leave it "broken" but documented in
> terms of "some collections may compare 'reasonably', however, since
> equality in those cases is not well defined, then the rule a = b => a
> hash = b hash may be waived". For example, sure, #(1 2 3) = (1 to: 3),
> however you can't do (1 to: 3) at: 2 put: 5. And 1.0 may be equal to 1,
> but the numbers represent completely different things so even though the
> numeric value is the same, equality is ill defined, and so it's not
> necessary for the hashing rule to apply.
>
> Nicolas Cellier wrote:
>
>> http://bugs.squeak.org/view.php?id=3380
>> http://bugs.squeak.org/view.php?id=3488
>>
>> 2009/10/24 Andrew P. Black <black(a)cs.pdx.edu>:
>>
>>
>>> The golden rule of hashing is (a = b) => (a hash = b hash). Right?
>>>
>>> Look at this:
>>>
>>> (1 to: 10) species ---> Array
>>> #(1 2 3 4 5 6 7 8 9 10) species ---> Array
>>>
>>> (1 to: 10) = #(1 2 3 4 5 6 7 8 9 10) ---> true
>>>
>>> However,
>>>
>>> (1 to: 10) hash = #(1 2 3 4 5 6 7 8 9 10) hash ---> false.
>>>
>>> I believe that the last is a bug.
>>>
>>> Andrew
>>>
>>>
>>> _______________________________________________
>>> Pharo-project mailing list
>>> Pharo-project(a)lists.gforge.inria.fr
>>> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
>>>
>>>
>>>
>> _______________________________________________
>> Pharo-project mailing list
>> Pharo-project(a)lists.gforge.inria.fr
>> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
>>
>>
>>
>
> _______________________________________________
> Pharo-project mailing list
> Pharo-project(a)lists.gforge.inria.fr
> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
>
>
Oct. 24, 2009
Re: [Pharo-project] (a = b) => (a hash = b hash)
by Andres Valloud
I'd rather make the interval not equal to the array, at least with the
message #=. Probably that can't be done safely. If that's the case,
I'd say the best approach is to leave it "broken" but documented in
terms of "some collections may compare 'reasonably', however, since
equality in those cases is not well defined, then the rule a = b => a
hash = b hash may be waived". For example, sure, #(1 2 3) = (1 to: 3),
however you can't do (1 to: 3) at: 2 put: 5. And 1.0 may be equal to 1,
but the numbers represent completely different things so even though the
numeric value is the same, equality is ill defined, and so it's not
necessary for the hashing rule to apply.
Nicolas Cellier wrote:
> http://bugs.squeak.org/view.php?id=3380
> http://bugs.squeak.org/view.php?id=3488
>
> 2009/10/24 Andrew P. Black <black(a)cs.pdx.edu>:
>
>> The golden rule of hashing is (a = b) => (a hash = b hash). Right?
>>
>> Look at this:
>>
>> (1 to: 10) species ---> Array
>> #(1 2 3 4 5 6 7 8 9 10) species ---> Array
>>
>> (1 to: 10) = #(1 2 3 4 5 6 7 8 9 10) ---> true
>>
>> However,
>>
>> (1 to: 10) hash = #(1 2 3 4 5 6 7 8 9 10) hash ---> false.
>>
>> I believe that the last is a bug.
>>
>> Andrew
>>
>>
>> _______________________________________________
>> Pharo-project mailing list
>> Pharo-project(a)lists.gforge.inria.fr
>> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
>>
>>
>
> _______________________________________________
> Pharo-project mailing list
> Pharo-project(a)lists.gforge.inria.fr
> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
>
>
Oct. 24, 2009
[Pharo-project] [update 1.1] #11017
by Stéphane Ducasse
11017
-----
- 1220 followup some more #removeAll following
http://code.google.com/p/pharo/issues/detail?id=1220
- Issue 1321: [Sqeak trunk] Shallow copy of BlockClosure
Remove BlockClosure>postCopy
Oct. 24, 2009
Re: [Pharo-project] Broken "Recover Lost Changes"
by Adrian Lienhard
You can try to delete the part you posted below (including the last !).
In case you can/want to send me your changeset (or the image and
changes file) I can take a look.
Just to make sure, you selected the top item in the list shown after
selecting Tools > "Recover lost changes..."?
Cheers,
Adrian
On Oct 24, 2009, at 19:38 , John Toohey wrote:
> Not sure, this is the line from the changes file on disk :-
>
> !Trait method!
> open
> self status: #Opened
> !
>
> On Sat, Oct 24, 2009 at 03:09, Stéphane Ducasse
> <stephane.ducasse(a)inria.fr>wrote:
>
>> I think that the closure code shake a lot of foundation and that it
>> will take some cycles to get a stable system.
>> Now self is indeed not a message so was a period missing in your
>> code?
>>
>> Setf
>>
>> On Oct 23, 2009, at 10:27 PM, John Toohey wrote:
>>
>>> I have a 4 day old image that just froze. After restarting, I tried
>>> to recover the code changes since I saved my image yesterday, but
>>> the list of changes in the tool are an unordered list going back to
>>> February of this year. Even old code of mine from that time was in
>>> the list. After about an hour I managed to manually select the
>>> changes I've made since yesterday, and file them out. When I try to
>>> file them back in, I get an error from the debugger, and cannot
>>> continue. Anyone know what I can do to recover my source, or point
>>> me in the right direction to recover from this.
>>>
>>> This is the stacktrace from the debugger :-
>>>
>>> From: jt(a)parspro.com
>>> To: Pharo-project(a)lists.gforge.inria.fr
>>> Subject: [BUG]UndefinedObject(Object)>>doesNotUnderstand: #self
>>>
>>> here insert explanation of what you were doing, suspect changes
>>> you've made and so forth.
>>>
>>> 23 October 2009 4:19:05 pm
>>>
>>> VM: Mac OS - intel - 1058 - Squeak3.8.1 of '28 Aug 2006' [latest
>>> update: #6747] Squeak VM 4.1.1b2
>>> Image: Pharo1.0beta [Latest update: #10477]
>>>
>>> SecurityManager state:
>>> Restricted: false
>>> FileAccess: true
>>> SocketAccess: true
>>> Working Dir /Users/jpt/Dev/repos/Dev-Images/PharoCore-1.0-10477-BETA
>>> Trusted Dir /foobar/tooBar/forSqueak/bogus
>>> Untrusted Dir /Users/jpt/Library/Preferences/Squeak/Internet/My
>>> Squeak
>>>
>>> UndefinedObject(Object)>>doesNotUnderstand: #self
>>> Receiver: nil
>>> Arguments and temporary variables:
>>> aMessage: self
>>> exception: MessageNotUnderstood: receiver of
>>> "self" is
>> nil
>>> resumeValue: nil
>>> Receiver's instance variables:
>>> nil
>>>
>>> UndefinedObject>>DoIt
>>> Receiver: nil
>>> Arguments and temporary variables:
>>>
>>> Receiver's instance variables:
>>> nil
>>>
>>> Compiler>>evaluate:in:to:notifying:ifFail:logged:
>>> Receiver: a Compiler
>>> Arguments and temporary variables:
>>> textOrStream: 'publish
>>> self status: #Opened
>>> '
>>> aContext: nil
>>> receiver: nil
>>> aRequestor: nil
>>> failBlock: [closure] in Compiler
>>> class>>evaluate:for:notifying:logged:
>>> logFlag: false
>>> methodNode: DoIt
>>> ^ publish self status: #Opened
>>> method: a CompiledMethod(982:
>> UndefinedObject>>DoIt)
>>> value: nil
>>> toLog: nil
>>> itsSelection: nil
>>> itsSelectionString: nil
>>> Receiver's instance variables:
>>> sourceStream: a ReadStream 'publish
>>> self status: #Opened
>>> '
>>> requestor: nil
>>> class: UndefinedObject
>>> category: nil
>>> context: nil
>>> parser: a Parser
>>>
>>> Compiler class>>evaluate:for:notifying:logged:
>>> Receiver: Compiler
>>> Arguments and temporary variables:
>>> textOrString: 'publish
>>> self status: #Opened
>>> '
>>> anObject: nil
>>> aController: nil
>>> logFlag: false
>>> Receiver's instance variables:
>>> superclass: Object
>>> methodDict: a MethodDictionary
>>> (#compile:in:classified:notifying:ifFail:->a Comp...etc...
>>> format: 142
>>> instanceVariables: #('sourceStream' 'requestor'
>> 'class'
>>> 'category' 'context' 'p...etc...
>>> organization: ('deprecated'
>> format:in:notifying:contentsSymbol:)
>>> ('error handli...etc...
>>> subclasses: nil
>>> name: #Compiler
>>> classPool: a Dictionary()
>>> sharedPools: nil
>>> environment: Smalltalk
>>> category: #'Compiler-Kernel'
>>> traitComposition: nil
>>> localSelectors: nil
>>>
>>> Compiler class>>evaluate:for:logged:
>>> Receiver: Compiler
>>> Arguments and temporary variables:
>>> textOrString: 'publish
>>> self status: #Opened
>>> '
>>> anObject: nil
>>> logFlag: false
>>> Receiver's instance variables:
>>> superclass: Object
>>> methodDict: a MethodDictionary
>>> (#compile:in:classified:notifying:ifFail:->a Comp...etc...
>>> format: 142
>>> instanceVariables: #('sourceStream' 'requestor'
>> 'class'
>>> 'category' 'context' 'p...etc...
>>> organization: ('deprecated'
>> format:in:notifying:contentsSymbol:)
>>> ('error handli...etc...
>>> subclasses: nil
>>> name: #Compiler
>>> classPool: a Dictionary()
>>> sharedPools: nil
>>> environment: Smalltalk
>>> category: #'Compiler-Kernel'
>>> traitComposition: nil
>>> localSelectors: nil
>>>
>>> Compiler class>>evaluate:
>>> Receiver: Compiler
>>> Arguments and temporary variables:
>>> textOrString: 'publish
>>> self status: #Opened
>>> '
>>> Receiver's instance variables:
>>> superclass: Object
>>> methodDict: a MethodDictionary
>>> (#compile:in:classified:notifying:ifFail:->a Comp...etc...
>>> format: 142
>>> instanceVariables: #('sourceStream' 'requestor'
>> 'class'
>>> 'category' 'context' 'p...etc...
>>> organization: ('deprecated'
>> format:in:notifying:contentsSymbol:)
>>> ('error handli...etc...
>>> subclasses: nil
>>> name: #Compiler
>>> classPool: a Dictionary()
>>> sharedPools: nil
>>> environment: Smalltalk
>>> category: #'Compiler-Kernel'
>>> traitComposition: nil
>>> localSelectors: nil
>>>
>>> [] in ChangeRecord>>fileIn
>>> Receiver: a ChangeRecord
>>> Arguments and temporary variables:
>>> <<error during printing>
>>> Receiver's instance variables:
>>> file: MultiByteFileStream:
>> '/Users/jpt/Dev/repos/Dev-Images/
>>> PharoCore-1.0-10477...etc...
>>> position: 29712
>>> type: #doIt
>>> class: nil
>>> category: nil
>>> meta: nil
>>> stamp: nil
>>>
>>> BlockClosure>>ensure:
>>> Receiver: [closure] in ChangeRecord>>fileIn
>>> Arguments and temporary variables:
>>> aBlock: [closure] in
>> CursorWithMask(Cursor)>>showWhile:
>>> returnValue: nil
>>> b: nil
>>> Receiver's instance variables:
>>> outerContext: ChangeRecord>>fileIn
>>> startpc: 107
>>> numArgs: 0
>>>
>>> CursorWithMask(Cursor)>>showWhile:
>>> Receiver: ((CursorWithMask
>>> extent: 16@16
>>> depth: 1
>>> fromArray: #(
>>> 2r0
>>> 2r0
>>> 2r0
>>> 2r10000000010...etc...
>>> Arguments and temporary variables:
>>> aBlock: [closure] in ChangeRecord>>fileIn
>>> oldcursor: ((CursorWithMask
>>> extent: 16@16
>>> depth: 1
>>> fromArray: #(
>>> 2r0
>>> 2r1...etc...
>>> Receiver's instance variables:
>>> bits: a Bitmap of length 16
>>> width: 16
>>> height: 16
>>> depth: 1
>>> offset: -1@-1
>>> maskForm: Form(16x16x1)
>>>
>>> ChangeRecord>>fileIn
>>> Receiver: a ChangeRecord
>>> Arguments and temporary variables:
>>> <<error during printing>
>>> Receiver's instance variables:
>>> file: MultiByteFileStream:
>> '/Users/jpt/Dev/repos/Dev-Images/
>>> PharoCore-1.0-10477...etc...
>>> position: 29712
>>> type: #doIt
>>> class: nil
>>> category: nil
>>> meta: nil
>>> stamp: nil
>>>
>>> [] in ChangeList>>fileInSelections
>>> Receiver: a ChangeList
>>> Arguments and temporary variables:
>>> any: true
>>> selected: a ChangeRecord
>>> item: #(true)
>>> Receiver's instance variables:
>>> dependents: a DependentsArray(a SystemWindow(252) a
>>> PluggableListMorphOfMany(33...etc...
>>> contents: ''
>>> currentCompiledMethod: nil
>>> contentsSymbol: #showDiffs
>>> changeList: an OrderedCollection(a ChangeRecord a
>> ChangeRecord a
>>> ChangeRecord a...etc...
>>> list: an OrderedCollection('do it: ''From
>>> Pharo1.0beta of
>>> 16...ber 2009 at 3:57...etc...
>>> listIndex: 0
>>> listSelections: #(true true true true true true
>> true true true
>>> true true true t...etc...
>>> file: MultiByteFileStream:
>> '/Users/jpt/Dev/repos/Dev-Images/
>>> PharoCore-1.0-10477...etc...
>>> lostMethodPointer: nil
>>> showsVersions: nil
>>>
>>> Array(SequenceableCollection)>>with:do:
>>> Receiver: #(true true true true true true true true true true
>>> true
>>> true true true true true true tru...etc...
>>> Arguments and temporary variables:
>>> otherCollection: an OrderedCollection(a
>>> ChangeRecord
>> a
>>> ChangeRecord a ChangeRec...etc...
>>> twoArgBlock: [closure] in
>>> ChangeList>>fileInSelections
>>> index: 171
>>> indexLimiT: 274
>>> Receiver's instance variables:
>>> #(true true true true true true true true true true true true true
>>> true true true true tru...etc...
>>>
>>> ChangeList>>fileInSelections
>>> Receiver: a ChangeList
>>> Arguments and temporary variables:
>>> any: #(true)
>>> Receiver's instance variables:
>>> dependents: a DependentsArray(a SystemWindow(252) a
>>> PluggableListMorphOfMany(33...etc...
>>> contents: ''
>>> currentCompiledMethod: nil
>>> contentsSymbol: #showDiffs
>>> changeList: an OrderedCollection(a ChangeRecord a
>> ChangeRecord a
>>> ChangeRecord a...etc...
>>> list: an OrderedCollection('do it: ''From
>>> Pharo1.0beta of
>>> 16...ber 2009 at 3:57...etc...
>>> listIndex: 0
>>> listSelections: #(true true true true true true
>> true true true
>>> true true true t...etc...
>>> file: MultiByteFileStream:
>> '/Users/jpt/Dev/repos/Dev-Images/
>>> PharoCore-1.0-10477...etc...
>>> lostMethodPointer: nil
>>> showsVersions: nil
>>>
>>> PluggableButtonMorph>>performAction
>>> Receiver: a PluggableButtonMorph(824)
>>> Arguments and temporary variables:
>>>
>>> Receiver's instance variables:
>>> bounds: 1408@359 corner: 1749@383
>>> owner: an AlignmentMorph(3699)
>>> submorphs: an Array(an AlignmentMorph(921))
>>> fullBounds: 1408@359 corner: 1749@383
>>> color: (Color r: 0.827 g: 0.827 b: 0.827)
>>> extension: a MorphExtension (1404) [balloonText]
>> [other:
>>> (layoutPolicy -> a T...etc...
>>> borderWidth: 0
>>> borderColor: Color transparent
>>> model: a ChangeList
>>> label: 'file in selections'
>>> getStateSelector: nil
>>> actionSelector: #fileInSelections
>>> getLabelSelector: nil
>>> getMenuSelector: nil
>>> shortcutCharacter: nil
>>> askBeforeChanging: true
>>> triggerOnMouseDown: false
>>> offColor: Color white
>>> onColor: Color white
>>> feedbackColor: nil
>>> showSelectionFeedback: false
>>> allButtons: nil
>>> arguments: #()
>>> argumentsProvider: nil
>>> argumentsSelector: nil
>>>
>>> [] in PluggableButtonMorph>>mouseUp:
>>> Receiver: a PluggableButtonMorph(824)
>>> Arguments and temporary variables:
>>> <<error during printing>
>>> Receiver's instance variables:
>>> bounds: 1408@359 corner: 1749@383
>>> owner: an AlignmentMorph(3699)
>>> submorphs: an Array(an AlignmentMorph(921))
>>> fullBounds: 1408@359 corner: 1749@383
>>> color: (Color r: 0.827 g: 0.827 b: 0.827)
>>> extension: a MorphExtension (1404) [balloonText]
>> [other:
>>> (layoutPolicy -> a T...etc...
>>> borderWidth: 0
>>> borderColor: Color transparent
>>> model: a ChangeList
>>> label: 'file in selections'
>>> getStateSelector: nil
>>> actionSelector: #fileInSelections
>>> getLabelSelector: nil
>>> getMenuSelector: nil
>>> shortcutCharacter: nil
>>> askBeforeChanging: true
>>> triggerOnMouseDown: false
>>> offColor: Color white
>>> onColor: Color white
>>> feedbackColor: nil
>>> showSelectionFeedback: false
>>> allButtons: nil
>>> arguments: #()
>>> argumentsProvider: nil
>>> argumentsSelector: nil
>>>
>>> Array(SequenceableCollection)>>do:
>>> Receiver: an Array(a PluggableButtonMorph(786) a
>>> PluggableButtonMorph(3485) a PluggableButtonMorph(5...etc...
>>> Arguments and temporary variables:
>>> aBlock: [closure] in
>>> PluggableButtonMorph>>mouseUp:
>>> index: 4
>>> indexLimiT: 4
>>> Receiver's instance variables:
>>> an Array(a PluggableButtonMorph(786) a PluggableButtonMorph(3485) a
>>> PluggableButtonMorph(5...etc...
>>>
>>> PluggableButtonMorph>>mouseUp:
>>> Receiver: a PluggableButtonMorph(824)
>>> Arguments and temporary variables:
>>> evt: [1518@375 mouseUp 3690378 nil]
>>> all: an Array(a PluggableButtonMorph(786) a
>> PluggableButtonMorph
>>> (3485) a Plugga...etc...
>>> Receiver's instance variables:
>>> bounds: 1408@359 corner: 1749@383
>>> owner: an AlignmentMorph(3699)
>>> submorphs: an Array(an AlignmentMorph(921))
>>> fullBounds: 1408@359 corner: 1749@383
>>> color: (Color r: 0.827 g: 0.827 b: 0.827)
>>> extension: a MorphExtension (1404) [balloonText]
>> [other:
>>> (layoutPolicy -> a T...etc...
>>> borderWidth: 0
>>> borderColor: Color transparent
>>> model: a ChangeList
>>> label: 'file in selections'
>>> getStateSelector: nil
>>> actionSelector: #fileInSelections
>>> getLabelSelector: nil
>>> getMenuSelector: nil
>>> shortcutCharacter: nil
>>> askBeforeChanging: true
>>> triggerOnMouseDown: false
>>> offColor: Color white
>>> onColor: Color white
>>> feedbackColor: nil
>>> showSelectionFeedback: false
>>> allButtons: nil
>>> arguments: #()
>>> argumentsProvider: nil
>>> argumentsSelector: nil
>>>
>>> PluggableButtonMorph(Morph)>>handleMouseUp:
>>> Receiver: a PluggableButtonMorph(824)
>>> Arguments and temporary variables:
>>> anEvent: [1518@375 mouseUp 3690378 nil]
>>> Receiver's instance variables:
>>> bounds: 1408@359 corner: 1749@383
>>> owner: an AlignmentMorph(3699)
>>> submorphs: an Array(an AlignmentMorph(921))
>>> fullBounds: 1408@359 corner: 1749@383
>>> color: (Color r: 0.827 g: 0.827 b: 0.827)
>>> extension: a MorphExtension (1404) [balloonText]
>> [other:
>>> (layoutPolicy -> a T...etc...
>>> borderWidth: 0
>>> borderColor: Color transparent
>>> model: a ChangeList
>>> label: 'file in selections'
>>> getStateSelector: nil
>>> actionSelector: #fileInSelections
>>> getLabelSelector: nil
>>> getMenuSelector: nil
>>> shortcutCharacter: nil
>>> askBeforeChanging: true
>>> triggerOnMouseDown: false
>>> offColor: Color white
>>> onColor: Color white
>>> feedbackColor: nil
>>> showSelectionFeedback: false
>>> allButtons: nil
>>> arguments: #()
>>> argumentsProvider: nil
>>> argumentsSelector: nil
>>>
>>> MouseButtonEvent>>sentTo:
>>> Receiver: [1518@375 mouseUp 3690378 nil]
>>> Arguments and temporary variables:
>>> anObject: a PluggableButtonMorph(824)
>>> Receiver's instance variables:
>>> timeStamp: 3690378
>>> source: a HandMorph(3216)
>>> windowIndex: nil
>>> type: #mouseUp
>>> buttons: 0
>>> position: 1518@375
>>> handler: nil
>>> wasHandled: true
>>> whichButton: 4
>>>
>>> PluggableButtonMorph(Morph)>>handleEvent:
>>> Receiver: a PluggableButtonMorph(824)
>>> Arguments and temporary variables:
>>> anEvent: [1518@375 mouseUp 3690378 nil]
>>> Receiver's instance variables:
>>> bounds: 1408@359 corner: 1749@383
>>> owner: an AlignmentMorph(3699)
>>> submorphs: an Array(an AlignmentMorph(921))
>>> fullBounds: 1408@359 corner: 1749@383
>>> color: (Color r: 0.827 g: 0.827 b: 0.827)
>>> extension: a MorphExtension (1404) [balloonText]
>> [other:
>>> (layoutPolicy -> a T...etc...
>>> borderWidth: 0
>>> borderColor: Color transparent
>>> model: a ChangeList
>>> label: 'file in selections'
>>> getStateSelector: nil
>>> actionSelector: #fileInSelections
>>> getLabelSelector: nil
>>> getMenuSelector: nil
>>> shortcutCharacter: nil
>>> askBeforeChanging: true
>>> triggerOnMouseDown: false
>>> offColor: Color white
>>> onColor: Color white
>>> feedbackColor: nil
>>> showSelectionFeedback: false
>>> allButtons: nil
>>> arguments: #()
>>> argumentsProvider: nil
>>> argumentsSelector: nil
>>>
>>> PluggableButtonMorph(Morph)>>handleFocusEvent:
>>> Receiver: a PluggableButtonMorph(824)
>>> Arguments and temporary variables:
>>> anEvent: [1518@375 mouseUp 3690378 nil]
>>> Receiver's instance variables:
>>> bounds: 1408@359 corner: 1749@383
>>> owner: an AlignmentMorph(3699)
>>> submorphs: an Array(an AlignmentMorph(921))
>>> fullBounds: 1408@359 corner: 1749@383
>>> color: (Color r: 0.827 g: 0.827 b: 0.827)
>>> extension: a MorphExtension (1404) [balloonText]
>> [other:
>>> (layoutPolicy -> a T...etc...
>>> borderWidth: 0
>>> borderColor: Color transparent
>>> model: a ChangeList
>>> label: 'file in selections'
>>> getStateSelector: nil
>>> actionSelector: #fileInSelections
>>> getLabelSelector: nil
>>> getMenuSelector: nil
>>> shortcutCharacter: nil
>>> askBeforeChanging: true
>>> triggerOnMouseDown: false
>>> offColor: Color white
>>> onColor: Color white
>>> feedbackColor: nil
>>> showSelectionFeedback: false
>>> allButtons: nil
>>> arguments: #()
>>> argumentsProvider: nil
>>> argumentsSelector: nil
>>>
>>> [] in HandMorph>>sendFocusEvent:to:clear:
>>> Receiver: a HandMorph(3216)
>>> Arguments and temporary variables:
>>> <<error during printing>
>>> Receiver's instance variables:
>>> bounds: 1661@782 corner: 1677@798
>>> owner: a PasteUpMorph(1622) [world]
>>> submorphs: #()
>>> fullBounds: 1661@782 corner: 1677@798
>>> color: Color blue
>>> extension: a MorphExtension (539) [eventHandler
>>> = an
>> EventHandler]
>>> mouseFocus: nil
>>> keyboardFocus: nil
>>> eventListeners: nil
>>> mouseListeners: nil
>>> keyboardListeners: nil
>>> mouseClickState: nil
>>> mouseOverHandler: a MouseOverHandler
>>> lastMouseEvent: [1661@782 mouseUp 3788444 nil]
>>> targetOffset: 99@6
>>> damageRecorder: a DamageRecorder
>>> cacheCanvas: nil
>>> cachedCanvasHasHoles: true
>>> temporaryCursor: nil
>>> temporaryCursorOffset: nil
>>> hardwareCursor: nil
>>> hasChanged: true
>>> savedPatch: nil
>>> userInitials: ''
>>> lastEventBuffer: #(1 3788444 1661 782 0 0 0 1)
>>> lastKeyScanCode: 126
>>> combinedChar: nil
>>>
>>> [] in PasteUpMorph>>becomeActiveDuring:
>>> Receiver: a PasteUpMorph(1622) [world]
>>> Arguments and temporary variables:
>>> <<error during printing>
>>> Receiver's instance variables:
>>> bounds: 0@0 corner: 1920@1178
>>> owner: nil
>>> submorphs: an Array(a TaskbarMorph(3095) a
>> SystemWindow(3356) a
>>> SystemWindow(25...etc...
>>> fullBounds: nil
>>> color: Color gray
>>> extension: a MorphExtension (2543) [eventHandler
>>> = an
>>> EventHandler] [other: (...etc...
>>> borderWidth: 0
>>> borderColor: (Color r: 0.5 g: 0.5 b: 0.5)
>>> presenter: a Presenter (1246)
>>> model: a MorphicModel(1926)
>>> cursor: 1
>>> padding: 3
>>> backgroundMorph: nil
>>> isPartsBin: nil
>>> autoLineLayout: false
>>> indicateCursor: nil
>>> resizeToFit: nil
>>> wantsMouseOverHalos: nil
>>> worldState: a WorldState
>>> griddingOn: nil
>>>
>>> BlockClosure>>on:do:
>>> Receiver: [closure] in PasteUpMorph>>becomeActiveDuring:
>>> Arguments and temporary variables:
>>> exception: Error
>>> handlerAction: [closure] in
>> PasteUpMorph>>becomeActiveDuring:
>>> handlerActive: false
>>> Receiver's instance variables:
>>> outerContext: PasteUpMorph>>becomeActiveDuring:
>>> startpc: 67
>>> numArgs: 0
>>>
>>> PasteUpMorph>>becomeActiveDuring:
>>> Receiver: a PasteUpMorph(1622) [world]
>>> Arguments and temporary variables:
>>> aBlock: [closure] in
>> HandMorph>>sendFocusEvent:to:clear:
>>> priorWorld: a PasteUpMorph(1622) [world]
>>> priorHand: a HandMorph(3216)
>>> priorEvent: [1518@375 mouseOver red nil nil]
>>> Receiver's instance variables:
>>> bounds: 0@0 corner: 1920@1178
>>> owner: nil
>>> submorphs: an Array(a TaskbarMorph(3095) a
>> SystemWindow(3356) a
>>> SystemWindow(25...etc...
>>> fullBounds: nil
>>> color: Color gray
>>> extension: a MorphExtension (2543) [eventHandler
>>> = an
>>> EventHandler] [other: (...etc...
>>> borderWidth: 0
>>> borderColor: (Color r: 0.5 g: 0.5 b: 0.5)
>>> presenter: a Presenter (1246)
>>> model: a MorphicModel(1926)
>>> cursor: 1
>>> padding: 3
>>> backgroundMorph: nil
>>> isPartsBin: nil
>>> autoLineLayout: false
>>> indicateCursor: nil
>>> resizeToFit: nil
>>> wantsMouseOverHalos: nil
>>> worldState: a WorldState
>>> griddingOn: nil
>>>
>>> HandMorph>>sendFocusEvent:to:clear:
>>> Receiver: a HandMorph(3216)
>>> Arguments and temporary variables:
>>> anEvent: [1518@375 mouseUp 3690378 nil]
>>> focusHolder: a PluggableButtonMorph(824)
>>> aBlock: [closure] in HandMorph>>sendMouseEvent:
>>> w: a PasteUpMorph(1622) [world]
>>> result: #(nil)
>>> Receiver's instance variables:
>>> bounds: 1661@782 corner: 1677@798
>>> owner: a PasteUpMorph(1622) [world]
>>> submorphs: #()
>>> fullBounds: 1661@782 corner: 1677@798
>>> color: Color blue
>>> extension: a MorphExtension (539) [eventHandler
>>> = an
>> EventHandler]
>>> mouseFocus: nil
>>> keyboardFocus: nil
>>> eventListeners: nil
>>> mouseListeners: nil
>>> keyboardListeners: nil
>>> mouseClickState: nil
>>> mouseOverHandler: a MouseOverHandler
>>> lastMouseEvent: [1661@782 mouseUp 3788444 nil]
>>> targetOffset: 99@6
>>> damageRecorder: a DamageRecorder
>>> cacheCanvas: nil
>>> cachedCanvasHasHoles: true
>>> temporaryCursor: nil
>>> temporaryCursorOffset: nil
>>> hardwareCursor: nil
>>> hasChanged: true
>>> savedPatch: nil
>>> userInitials: ''
>>> lastEventBuffer: #(1 3788444 1661 782 0 0 0 1)
>>> lastKeyScanCode: 126
>>> combinedChar: nil
>>>
>>> HandMorph>>sendEvent:focus:clear:
>>> Receiver: a HandMorph(3216)
>>> Arguments and temporary variables:
>>> anEvent: [1518@375 mouseUp 3690378 nil]
>>> focusHolder: a PluggableButtonMorph(824)
>>> aBlock: [closure] in HandMorph>>sendMouseEvent:
>>> result: nil
>>> Receiver's instance variables:
>>> bounds: 1661@782 corner: 1677@798
>>> owner: a PasteUpMorph(1622) [world]
>>> submorphs: #()
>>> fullBounds: 1661@782 corner: 1677@798
>>> color: Color blue
>>> extension: a MorphExtension (539) [eventHandler
>>> = an
>> EventHandler]
>>> mouseFocus: nil
>>> keyboardFocus: nil
>>> eventListeners: nil
>>> mouseListeners: nil
>>> keyboardListeners: nil
>>> mouseClickState: nil
>>> mouseOverHandler: a MouseOverHandler
>>> lastMouseEvent: [1661@782 mouseUp 3788444 nil]
>>> targetOffset: 99@6
>>> damageRecorder: a DamageRecorder
>>> cacheCanvas: nil
>>> cachedCanvasHasHoles: true
>>> temporaryCursor: nil
>>> temporaryCursorOffset: nil
>>> hardwareCursor: nil
>>> hasChanged: true
>>> savedPatch: nil
>>> userInitials: ''
>>> lastEventBuffer: #(1 3788444 1661 782 0 0 0 1)
>>> lastKeyScanCode: 126
>>> combinedChar: nil
>>>
>>> HandMorph>>sendMouseEvent:
>>> Receiver: a HandMorph(3216)
>>> Arguments and temporary variables:
>>> anEvent: [1518@375 mouseUp 3690378 nil]
>>> Receiver's instance variables:
>>> bounds: 1661@782 corner: 1677@798
>>> owner: a PasteUpMorph(1622) [world]
>>> submorphs: #()
>>> fullBounds: 1661@782 corner: 1677@798
>>> color: Color blue
>>> extension: a MorphExtension (539) [eventHandler
>>> = an
>> EventHandler]
>>> mouseFocus: nil
>>> keyboardFocus: nil
>>> eventListeners: nil
>>> mouseListeners: nil
>>> keyboardListeners: nil
>>> mouseClickState: nil
>>> mouseOverHandler: a MouseOverHandler
>>> lastMouseEvent: [1661@782 mouseUp 3788444 nil]
>>> targetOffset: 99@6
>>> damageRecorder: a DamageRecorder
>>> cacheCanvas: nil
>>> cachedCanvasHasHoles: true
>>> temporaryCursor: nil
>>> temporaryCursorOffset: nil
>>> hardwareCursor: nil
>>> hasChanged: true
>>> savedPatch: nil
>>> userInitials: ''
>>> lastEventBuffer: #(1 3788444 1661 782 0 0 0 1)
>>> lastKeyScanCode: 126
>>> combinedChar: nil
>>>
>>> HandMorph>>handleEvent:
>>> Receiver: a HandMorph(3216)
>>> Arguments and temporary variables:
>>> anEvent: [1518@375 mouseUp 3690378 nil]
>>> evt: [1518@375 mouseUp 3690378 nil]
>>> ofs: nil
>>> Receiver's instance variables:
>>> bounds: 1661@782 corner: 1677@798
>>> owner: a PasteUpMorph(1622) [world]
>>> submorphs: #()
>>> fullBounds: 1661@782 corner: 1677@798
>>> color: Color blue
>>> extension: a MorphExtension (539) [eventHandler
>>> = an
>> EventHandler]
>>> mouseFocus: nil
>>> keyboardFocus: nil
>>> eventListeners: nil
>>> mouseListeners: nil
>>> keyboardListeners: nil
>>> mouseClickState: nil
>>> mouseOverHandler: a MouseOverHandler
>>> lastMouseEvent: [1661@782 mouseUp 3788444 nil]
>>> targetOffset: 99@6
>>> damageRecorder: a DamageRecorder
>>> cacheCanvas: nil
>>> cachedCanvasHasHoles: true
>>> temporaryCursor: nil
>>> temporaryCursorOffset: nil
>>> hardwareCursor: nil
>>> hasChanged: true
>>> savedPatch: nil
>>> userInitials: ''
>>> lastEventBuffer: #(1 3788444 1661 782 0 0 0 1)
>>> lastKeyScanCode: 126
>>> combinedChar: nil
>>>
>>> HandMorph>>processEvents
>>> Receiver: a HandMorph(3216)
>>> Arguments and temporary variables:
>>> evt: [1518@375 mouseUp 3690378 nil]
>>> evtBuf: #(1 3690378 1518 375 0 0 0 1)
>>> type: 1
>>> hadAny: false
>>> Receiver's instance variables:
>>> bounds: 1661@782 corner: 1677@798
>>> owner: a PasteUpMorph(1622) [world]
>>> submorphs: #()
>>> fullBounds: 1661@782 corner: 1677@798
>>> color: Color blue
>>> extension: a MorphExtension (539) [eventHandler
>>> = an
>> EventHandler]
>>> mouseFocus: nil
>>> keyboardFocus: nil
>>> eventListeners: nil
>>> mouseListeners: nil
>>> keyboardListeners: nil
>>> mouseClickState: nil
>>> mouseOverHandler: a MouseOverHandler
>>> lastMouseEvent: [1661@782 mouseUp 3788444 nil]
>>> targetOffset: 99@6
>>> damageRecorder: a DamageRecorder
>>> cacheCanvas: nil
>>> cachedCanvasHasHoles: true
>>> temporaryCursor: nil
>>> temporaryCursorOffset: nil
>>> hardwareCursor: nil
>>> hasChanged: true
>>> savedPatch: nil
>>> userInitials: ''
>>> lastEventBuffer: #(1 3788444 1661 782 0 0 0 1)
>>> lastKeyScanCode: 126
>>> combinedChar: nil
>>>
>>> [] in WorldState>>doOneCycleNowFor:
>>> Receiver: a WorldState
>>> Arguments and temporary variables:
>>> <<error during printing>
>>> Receiver's instance variables:
>>> hands: an Array(a HandMorph(3216))
>>> viewBox: 0@0 corner: 1920@1178
>>> canvas: a FormCanvas on:
>> DisplayScreen(1920x1178x32)
>>> damageRecorder: a DamageRecorder
>>> stepList: a Heap(StepMessage(#stepAt: -> 3PButton
>>> (#togglePrettyDiffing 247))(3P...etc...
>>> lastStepTime: 3788426
>>> lastStepMessage: nil
>>> lastCycleTime: 3788446
>>> commandHistory: a CommandHistory
>>> alarms: a Heap()
>>> lastAlarmTime: 3788426
>>>
>>> Array(SequenceableCollection)>>do:
>>> Receiver: an Array(a HandMorph(3216))
>>> Arguments and temporary variables:
>>> aBlock: [closure] in
>>> WorldState>>doOneCycleNowFor:
>>> index: 1
>>> indexLimiT: 1
>>> Receiver's instance variables:
>>> an Array(a HandMorph(3216))
>>>
>>> WorldState>>handsDo:
>>> Receiver: a WorldState
>>> Arguments and temporary variables:
>>> aBlock: [closure] in
>>> WorldState>>doOneCycleNowFor:
>>> Receiver's instance variables:
>>> hands: an Array(a HandMorph(3216))
>>> viewBox: 0@0 corner: 1920@1178
>>> canvas: a FormCanvas on:
>> DisplayScreen(1920x1178x32)
>>> damageRecorder: a DamageRecorder
>>> stepList: a Heap(StepMessage(#stepAt: -> 3PButton
>>> (#togglePrettyDiffing 247))(3P...etc...
>>> lastStepTime: 3788426
>>> lastStepMessage: nil
>>> lastCycleTime: 3788446
>>> commandHistory: a CommandHistory
>>> alarms: a Heap()
>>> lastAlarmTime: 3788426
>>>
>>> WorldState>>doOneCycleNowFor:
>>> Receiver: a WorldState
>>> Arguments and temporary variables:
>>> aWorld: a PasteUpMorph(1622) [world]
>>> Receiver's instance variables:
>>> hands: an Array(a HandMorph(3216))
>>> viewBox: 0@0 corner: 1920@1178
>>> canvas: a FormCanvas on:
>> DisplayScreen(1920x1178x32)
>>> damageRecorder: a DamageRecorder
>>> stepList: a Heap(StepMessage(#stepAt: -> 3PButton
>>> (#togglePrettyDiffing 247))(3P...etc...
>>> lastStepTime: 3788426
>>> lastStepMessage: nil
>>> lastCycleTime: 3788446
>>> commandHistory: a CommandHistory
>>> alarms: a Heap()
>>> lastAlarmTime: 3788426
>>>
>>> WorldState>>doOneCycleFor:
>>> Receiver: a WorldState
>>> Arguments and temporary variables:
>>> aWorld: a PasteUpMorph(1622) [world]
>>> Receiver's instance variables:
>>> hands: an Array(a HandMorph(3216))
>>> viewBox: 0@0 corner: 1920@1178
>>> canvas: a FormCanvas on:
>> DisplayScreen(1920x1178x32)
>>> damageRecorder: a DamageRecorder
>>> stepList: a Heap(StepMessage(#stepAt: -> 3PButton
>>> (#togglePrettyDiffing 247))(3P...etc...
>>> lastStepTime: 3788426
>>> lastStepMessage: nil
>>> lastCycleTime: 3788446
>>> commandHistory: a CommandHistory
>>> alarms: a Heap()
>>> lastAlarmTime: 3788426
>>>
>>> PasteUpMorph>>doOneCycle
>>> Receiver: a PasteUpMorph(1622) [world]
>>> Arguments and temporary variables:
>>>
>>> Receiver's instance variables:
>>> bounds: 0@0 corner: 1920@1178
>>> owner: nil
>>> submorphs: an Array(a TaskbarMorph(3095) a
>> SystemWindow(3356) a
>>> SystemWindow(25...etc...
>>> fullBounds: nil
>>> color: Color gray
>>> extension: a MorphExtension (2543) [eventHandler
>>> = an
>>> EventHandler] [other: (...etc...
>>> borderWidth: 0
>>> borderColor: (Color r: 0.5 g: 0.5 b: 0.5)
>>> presenter: a Presenter (1246)
>>> model: a MorphicModel(1926)
>>> cursor: 1
>>> padding: 3
>>> backgroundMorph: nil
>>> isPartsBin: nil
>>> autoLineLayout: false
>>> indicateCursor: nil
>>> resizeToFit: nil
>>> wantsMouseOverHalos: nil
>>> worldState: a WorldState
>>> griddingOn: nil
>>>
>>> [] in Project class>>spawnNewProcess
>>> Receiver: Project
>>> Arguments and temporary variables:
>>>
>>> Receiver's instance variables:
>>> superclass: Model
>>> methodDict: a MethodDictionary(size 167)
>>> format: 172
>>> instanceVariables: #('world' 'changeSet'
>>> 'transcript'
>>> 'parentProject' 'previous...etc...
>>> organization: ('*Polymorph-Widgets'
>>> assureTaskbarPresenceMatchesPreference crea...etc...
>>> subclasses: nil
>>> name: #Project
>>> classPool: a Dictionary(#AllProjects->an
>> OrderedCollection(a
>>> Project(Juliet)) #...etc...
>>> sharedPools: nil
>>> environment: Smalltalk
>>> category: #'System-Support'
>>> traitComposition: {}
>>> localSelectors: nil
>>>
>>> [] in BlockClosure>>newProcess
>>> Receiver: [closure] in Project class>>spawnNewProcess
>>> Arguments and temporary variables:
>>>
>>> Receiver's instance variables:
>>> outerContext: Project class>>spawnNewProcess
>>> startpc: 53
>>> numArgs: 0
>>>
>>>
>>> --- The full stack ---
>>> UndefinedObject(Object)>>doesNotUnderstand: #self
>>> UndefinedObject>>DoIt
>>> Compiler>>evaluate:in:to:notifying:ifFail:logged:
>>> Compiler class>>evaluate:for:notifying:logged:
>>> Compiler class>>evaluate:for:logged:
>>> Compiler class>>evaluate:
>>> [] in ChangeRecord>>fileIn
>>> BlockClosure>>ensure:
>>> CursorWithMask(Cursor)>>showWhile:
>>> ChangeRecord>>fileIn
>>> [] in ChangeList>>fileInSelections
>>> Array(SequenceableCollection)>>with:do:
>>> ChangeList>>fileInSelections
>>> PluggableButtonMorph>>performAction
>>> [] in PluggableButtonMorph>>mouseUp:
>>> Array(SequenceableCollection)>>do:
>>> PluggableButtonMorph>>mouseUp:
>>> PluggableButtonMorph(Morph)>>handleMouseUp:
>>> MouseButtonEvent>>sentTo:
>>> PluggableButtonMorph(Morph)>>handleEvent:
>>> PluggableButtonMorph(Morph)>>handleFocusEvent:
>>> [] in HandMorph>>sendFocusEvent:to:clear:
>>> [] in PasteUpMorph>>becomeActiveDuring:
>>> BlockClosure>>on:do:
>>> PasteUpMorph>>becomeActiveDuring:
>>> HandMorph>>sendFocusEvent:to:clear:
>>> HandMorph>>sendEvent:focus:clear:
>>> HandMorph>>sendMouseEvent:
>>> HandMorph>>handleEvent:
>>> HandMorph>>processEvents
>>> [] in WorldState>>doOneCycleNowFor:
>>> Array(SequenceableCollection)>>do:
>>> WorldState>>handsDo:
>>> WorldState>>doOneCycleNowFor:
>>> WorldState>>doOneCycleFor:
>>> PasteUpMorph>>doOneCycle
>>> [] in Project class>>spawnNewProcess
>>> [] in BlockClosure>>newProcess
>>>
>>>
>>> --
>>> -JT
>>>
>>>
>>> _______________________________________________
>>> Pharo-project mailing list
>>> Pharo-project(a)lists.gforge.inria.fr
>>> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
>>
>>
>> _______________________________________________
>> Pharo-project mailing list
>> Pharo-project(a)lists.gforge.inria.fr
>> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
>>
>
>
>
> --
> -JT
> _______________________________________________
> Pharo-project mailing list
> Pharo-project(a)lists.gforge.inria.fr
> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
Oct. 24, 2009
Re: [Pharo-project] Broken "Recover Lost Changes"
by John Toohey
Not sure, this is the line from the changes file on disk :-
!Trait method!
open
self status: #Opened
!
On Sat, Oct 24, 2009 at 03:09, Stéphane Ducasse
<stephane.ducasse(a)inria.fr>wrote:
> I think that the closure code shake a lot of foundation and that it
> will take some cycles to get a stable system.
> Now self is indeed not a message so was a period missing in your code?
>
> Setf
>
> On Oct 23, 2009, at 10:27 PM, John Toohey wrote:
>
> > I have a 4 day old image that just froze. After restarting, I tried
> > to recover the code changes since I saved my image yesterday, but
> > the list of changes in the tool are an unordered list going back to
> > February of this year. Even old code of mine from that time was in
> > the list. After about an hour I managed to manually select the
> > changes I've made since yesterday, and file them out. When I try to
> > file them back in, I get an error from the debugger, and cannot
> > continue. Anyone know what I can do to recover my source, or point
> > me in the right direction to recover from this.
> >
> > This is the stacktrace from the debugger :-
> >
> > From: jt(a)parspro.com
> > To: Pharo-project(a)lists.gforge.inria.fr
> > Subject: [BUG]UndefinedObject(Object)>>doesNotUnderstand: #self
> >
> > here insert explanation of what you were doing, suspect changes
> > you've made and so forth.
> >
> > 23 October 2009 4:19:05 pm
> >
> > VM: Mac OS - intel - 1058 - Squeak3.8.1 of '28 Aug 2006' [latest
> > update: #6747] Squeak VM 4.1.1b2
> > Image: Pharo1.0beta [Latest update: #10477]
> >
> > SecurityManager state:
> > Restricted: false
> > FileAccess: true
> > SocketAccess: true
> > Working Dir /Users/jpt/Dev/repos/Dev-Images/PharoCore-1.0-10477-BETA
> > Trusted Dir /foobar/tooBar/forSqueak/bogus
> > Untrusted Dir /Users/jpt/Library/Preferences/Squeak/Internet/My Squeak
> >
> > UndefinedObject(Object)>>doesNotUnderstand: #self
> > Receiver: nil
> > Arguments and temporary variables:
> > aMessage: self
> > exception: MessageNotUnderstood: receiver of "self" is
> nil
> > resumeValue: nil
> > Receiver's instance variables:
> > nil
> >
> > UndefinedObject>>DoIt
> > Receiver: nil
> > Arguments and temporary variables:
> >
> > Receiver's instance variables:
> > nil
> >
> > Compiler>>evaluate:in:to:notifying:ifFail:logged:
> > Receiver: a Compiler
> > Arguments and temporary variables:
> > textOrStream: 'publish
> > self status: #Opened
> > '
> > aContext: nil
> > receiver: nil
> > aRequestor: nil
> > failBlock: [closure] in Compiler
> > class>>evaluate:for:notifying:logged:
> > logFlag: false
> > methodNode: DoIt
> > ^ publish self status: #Opened
> > method: a CompiledMethod(982:
> UndefinedObject>>DoIt)
> > value: nil
> > toLog: nil
> > itsSelection: nil
> > itsSelectionString: nil
> > Receiver's instance variables:
> > sourceStream: a ReadStream 'publish
> > self status: #Opened
> > '
> > requestor: nil
> > class: UndefinedObject
> > category: nil
> > context: nil
> > parser: a Parser
> >
> > Compiler class>>evaluate:for:notifying:logged:
> > Receiver: Compiler
> > Arguments and temporary variables:
> > textOrString: 'publish
> > self status: #Opened
> > '
> > anObject: nil
> > aController: nil
> > logFlag: false
> > Receiver's instance variables:
> > superclass: Object
> > methodDict: a MethodDictionary
> > (#compile:in:classified:notifying:ifFail:->a Comp...etc...
> > format: 142
> > instanceVariables: #('sourceStream' 'requestor'
> 'class'
> > 'category' 'context' 'p...etc...
> > organization: ('deprecated'
> format:in:notifying:contentsSymbol:)
> > ('error handli...etc...
> > subclasses: nil
> > name: #Compiler
> > classPool: a Dictionary()
> > sharedPools: nil
> > environment: Smalltalk
> > category: #'Compiler-Kernel'
> > traitComposition: nil
> > localSelectors: nil
> >
> > Compiler class>>evaluate:for:logged:
> > Receiver: Compiler
> > Arguments and temporary variables:
> > textOrString: 'publish
> > self status: #Opened
> > '
> > anObject: nil
> > logFlag: false
> > Receiver's instance variables:
> > superclass: Object
> > methodDict: a MethodDictionary
> > (#compile:in:classified:notifying:ifFail:->a Comp...etc...
> > format: 142
> > instanceVariables: #('sourceStream' 'requestor'
> 'class'
> > 'category' 'context' 'p...etc...
> > organization: ('deprecated'
> format:in:notifying:contentsSymbol:)
> > ('error handli...etc...
> > subclasses: nil
> > name: #Compiler
> > classPool: a Dictionary()
> > sharedPools: nil
> > environment: Smalltalk
> > category: #'Compiler-Kernel'
> > traitComposition: nil
> > localSelectors: nil
> >
> > Compiler class>>evaluate:
> > Receiver: Compiler
> > Arguments and temporary variables:
> > textOrString: 'publish
> > self status: #Opened
> > '
> > Receiver's instance variables:
> > superclass: Object
> > methodDict: a MethodDictionary
> > (#compile:in:classified:notifying:ifFail:->a Comp...etc...
> > format: 142
> > instanceVariables: #('sourceStream' 'requestor'
> 'class'
> > 'category' 'context' 'p...etc...
> > organization: ('deprecated'
> format:in:notifying:contentsSymbol:)
> > ('error handli...etc...
> > subclasses: nil
> > name: #Compiler
> > classPool: a Dictionary()
> > sharedPools: nil
> > environment: Smalltalk
> > category: #'Compiler-Kernel'
> > traitComposition: nil
> > localSelectors: nil
> >
> > [] in ChangeRecord>>fileIn
> > Receiver: a ChangeRecord
> > Arguments and temporary variables:
> > <<error during printing>
> > Receiver's instance variables:
> > file: MultiByteFileStream:
> '/Users/jpt/Dev/repos/Dev-Images/
> > PharoCore-1.0-10477...etc...
> > position: 29712
> > type: #doIt
> > class: nil
> > category: nil
> > meta: nil
> > stamp: nil
> >
> > BlockClosure>>ensure:
> > Receiver: [closure] in ChangeRecord>>fileIn
> > Arguments and temporary variables:
> > aBlock: [closure] in
> CursorWithMask(Cursor)>>showWhile:
> > returnValue: nil
> > b: nil
> > Receiver's instance variables:
> > outerContext: ChangeRecord>>fileIn
> > startpc: 107
> > numArgs: 0
> >
> > CursorWithMask(Cursor)>>showWhile:
> > Receiver: ((CursorWithMask
> > extent: 16@16
> > depth: 1
> > fromArray: #(
> > 2r0
> > 2r0
> > 2r0
> > 2r10000000010...etc...
> > Arguments and temporary variables:
> > aBlock: [closure] in ChangeRecord>>fileIn
> > oldcursor: ((CursorWithMask
> > extent: 16@16
> > depth: 1
> > fromArray: #(
> > 2r0
> > 2r1...etc...
> > Receiver's instance variables:
> > bits: a Bitmap of length 16
> > width: 16
> > height: 16
> > depth: 1
> > offset: -1@-1
> > maskForm: Form(16x16x1)
> >
> > ChangeRecord>>fileIn
> > Receiver: a ChangeRecord
> > Arguments and temporary variables:
> > <<error during printing>
> > Receiver's instance variables:
> > file: MultiByteFileStream:
> '/Users/jpt/Dev/repos/Dev-Images/
> > PharoCore-1.0-10477...etc...
> > position: 29712
> > type: #doIt
> > class: nil
> > category: nil
> > meta: nil
> > stamp: nil
> >
> > [] in ChangeList>>fileInSelections
> > Receiver: a ChangeList
> > Arguments and temporary variables:
> > any: true
> > selected: a ChangeRecord
> > item: #(true)
> > Receiver's instance variables:
> > dependents: a DependentsArray(a SystemWindow(252) a
> > PluggableListMorphOfMany(33...etc...
> > contents: ''
> > currentCompiledMethod: nil
> > contentsSymbol: #showDiffs
> > changeList: an OrderedCollection(a ChangeRecord a
> ChangeRecord a
> > ChangeRecord a...etc...
> > list: an OrderedCollection('do it: ''From Pharo1.0beta of
> > 16...ber 2009 at 3:57...etc...
> > listIndex: 0
> > listSelections: #(true true true true true true
> true true true
> > true true true t...etc...
> > file: MultiByteFileStream:
> '/Users/jpt/Dev/repos/Dev-Images/
> > PharoCore-1.0-10477...etc...
> > lostMethodPointer: nil
> > showsVersions: nil
> >
> > Array(SequenceableCollection)>>with:do:
> > Receiver: #(true true true true true true true true true true true
> > true true true true true true tru...etc...
> > Arguments and temporary variables:
> > otherCollection: an OrderedCollection(a ChangeRecord
> a
> > ChangeRecord a ChangeRec...etc...
> > twoArgBlock: [closure] in ChangeList>>fileInSelections
> > index: 171
> > indexLimiT: 274
> > Receiver's instance variables:
> > #(true true true true true true true true true true true true true
> > true true true true tru...etc...
> >
> > ChangeList>>fileInSelections
> > Receiver: a ChangeList
> > Arguments and temporary variables:
> > any: #(true)
> > Receiver's instance variables:
> > dependents: a DependentsArray(a SystemWindow(252) a
> > PluggableListMorphOfMany(33...etc...
> > contents: ''
> > currentCompiledMethod: nil
> > contentsSymbol: #showDiffs
> > changeList: an OrderedCollection(a ChangeRecord a
> ChangeRecord a
> > ChangeRecord a...etc...
> > list: an OrderedCollection('do it: ''From Pharo1.0beta of
> > 16...ber 2009 at 3:57...etc...
> > listIndex: 0
> > listSelections: #(true true true true true true
> true true true
> > true true true t...etc...
> > file: MultiByteFileStream:
> '/Users/jpt/Dev/repos/Dev-Images/
> > PharoCore-1.0-10477...etc...
> > lostMethodPointer: nil
> > showsVersions: nil
> >
> > PluggableButtonMorph>>performAction
> > Receiver: a PluggableButtonMorph(824)
> > Arguments and temporary variables:
> >
> > Receiver's instance variables:
> > bounds: 1408@359 corner: 1749@383
> > owner: an AlignmentMorph(3699)
> > submorphs: an Array(an AlignmentMorph(921))
> > fullBounds: 1408@359 corner: 1749@383
> > color: (Color r: 0.827 g: 0.827 b: 0.827)
> > extension: a MorphExtension (1404) [balloonText]
> [other:
> > (layoutPolicy -> a T...etc...
> > borderWidth: 0
> > borderColor: Color transparent
> > model: a ChangeList
> > label: 'file in selections'
> > getStateSelector: nil
> > actionSelector: #fileInSelections
> > getLabelSelector: nil
> > getMenuSelector: nil
> > shortcutCharacter: nil
> > askBeforeChanging: true
> > triggerOnMouseDown: false
> > offColor: Color white
> > onColor: Color white
> > feedbackColor: nil
> > showSelectionFeedback: false
> > allButtons: nil
> > arguments: #()
> > argumentsProvider: nil
> > argumentsSelector: nil
> >
> > [] in PluggableButtonMorph>>mouseUp:
> > Receiver: a PluggableButtonMorph(824)
> > Arguments and temporary variables:
> > <<error during printing>
> > Receiver's instance variables:
> > bounds: 1408@359 corner: 1749@383
> > owner: an AlignmentMorph(3699)
> > submorphs: an Array(an AlignmentMorph(921))
> > fullBounds: 1408@359 corner: 1749@383
> > color: (Color r: 0.827 g: 0.827 b: 0.827)
> > extension: a MorphExtension (1404) [balloonText]
> [other:
> > (layoutPolicy -> a T...etc...
> > borderWidth: 0
> > borderColor: Color transparent
> > model: a ChangeList
> > label: 'file in selections'
> > getStateSelector: nil
> > actionSelector: #fileInSelections
> > getLabelSelector: nil
> > getMenuSelector: nil
> > shortcutCharacter: nil
> > askBeforeChanging: true
> > triggerOnMouseDown: false
> > offColor: Color white
> > onColor: Color white
> > feedbackColor: nil
> > showSelectionFeedback: false
> > allButtons: nil
> > arguments: #()
> > argumentsProvider: nil
> > argumentsSelector: nil
> >
> > Array(SequenceableCollection)>>do:
> > Receiver: an Array(a PluggableButtonMorph(786) a
> > PluggableButtonMorph(3485) a PluggableButtonMorph(5...etc...
> > Arguments and temporary variables:
> > aBlock: [closure] in PluggableButtonMorph>>mouseUp:
> > index: 4
> > indexLimiT: 4
> > Receiver's instance variables:
> > an Array(a PluggableButtonMorph(786) a PluggableButtonMorph(3485) a
> > PluggableButtonMorph(5...etc...
> >
> > PluggableButtonMorph>>mouseUp:
> > Receiver: a PluggableButtonMorph(824)
> > Arguments and temporary variables:
> > evt: [1518@375 mouseUp 3690378 nil]
> > all: an Array(a PluggableButtonMorph(786) a
> PluggableButtonMorph
> > (3485) a Plugga...etc...
> > Receiver's instance variables:
> > bounds: 1408@359 corner: 1749@383
> > owner: an AlignmentMorph(3699)
> > submorphs: an Array(an AlignmentMorph(921))
> > fullBounds: 1408@359 corner: 1749@383
> > color: (Color r: 0.827 g: 0.827 b: 0.827)
> > extension: a MorphExtension (1404) [balloonText]
> [other:
> > (layoutPolicy -> a T...etc...
> > borderWidth: 0
> > borderColor: Color transparent
> > model: a ChangeList
> > label: 'file in selections'
> > getStateSelector: nil
> > actionSelector: #fileInSelections
> > getLabelSelector: nil
> > getMenuSelector: nil
> > shortcutCharacter: nil
> > askBeforeChanging: true
> > triggerOnMouseDown: false
> > offColor: Color white
> > onColor: Color white
> > feedbackColor: nil
> > showSelectionFeedback: false
> > allButtons: nil
> > arguments: #()
> > argumentsProvider: nil
> > argumentsSelector: nil
> >
> > PluggableButtonMorph(Morph)>>handleMouseUp:
> > Receiver: a PluggableButtonMorph(824)
> > Arguments and temporary variables:
> > anEvent: [1518@375 mouseUp 3690378 nil]
> > Receiver's instance variables:
> > bounds: 1408@359 corner: 1749@383
> > owner: an AlignmentMorph(3699)
> > submorphs: an Array(an AlignmentMorph(921))
> > fullBounds: 1408@359 corner: 1749@383
> > color: (Color r: 0.827 g: 0.827 b: 0.827)
> > extension: a MorphExtension (1404) [balloonText]
> [other:
> > (layoutPolicy -> a T...etc...
> > borderWidth: 0
> > borderColor: Color transparent
> > model: a ChangeList
> > label: 'file in selections'
> > getStateSelector: nil
> > actionSelector: #fileInSelections
> > getLabelSelector: nil
> > getMenuSelector: nil
> > shortcutCharacter: nil
> > askBeforeChanging: true
> > triggerOnMouseDown: false
> > offColor: Color white
> > onColor: Color white
> > feedbackColor: nil
> > showSelectionFeedback: false
> > allButtons: nil
> > arguments: #()
> > argumentsProvider: nil
> > argumentsSelector: nil
> >
> > MouseButtonEvent>>sentTo:
> > Receiver: [1518@375 mouseUp 3690378 nil]
> > Arguments and temporary variables:
> > anObject: a PluggableButtonMorph(824)
> > Receiver's instance variables:
> > timeStamp: 3690378
> > source: a HandMorph(3216)
> > windowIndex: nil
> > type: #mouseUp
> > buttons: 0
> > position: 1518@375
> > handler: nil
> > wasHandled: true
> > whichButton: 4
> >
> > PluggableButtonMorph(Morph)>>handleEvent:
> > Receiver: a PluggableButtonMorph(824)
> > Arguments and temporary variables:
> > anEvent: [1518@375 mouseUp 3690378 nil]
> > Receiver's instance variables:
> > bounds: 1408@359 corner: 1749@383
> > owner: an AlignmentMorph(3699)
> > submorphs: an Array(an AlignmentMorph(921))
> > fullBounds: 1408@359 corner: 1749@383
> > color: (Color r: 0.827 g: 0.827 b: 0.827)
> > extension: a MorphExtension (1404) [balloonText]
> [other:
> > (layoutPolicy -> a T...etc...
> > borderWidth: 0
> > borderColor: Color transparent
> > model: a ChangeList
> > label: 'file in selections'
> > getStateSelector: nil
> > actionSelector: #fileInSelections
> > getLabelSelector: nil
> > getMenuSelector: nil
> > shortcutCharacter: nil
> > askBeforeChanging: true
> > triggerOnMouseDown: false
> > offColor: Color white
> > onColor: Color white
> > feedbackColor: nil
> > showSelectionFeedback: false
> > allButtons: nil
> > arguments: #()
> > argumentsProvider: nil
> > argumentsSelector: nil
> >
> > PluggableButtonMorph(Morph)>>handleFocusEvent:
> > Receiver: a PluggableButtonMorph(824)
> > Arguments and temporary variables:
> > anEvent: [1518@375 mouseUp 3690378 nil]
> > Receiver's instance variables:
> > bounds: 1408@359 corner: 1749@383
> > owner: an AlignmentMorph(3699)
> > submorphs: an Array(an AlignmentMorph(921))
> > fullBounds: 1408@359 corner: 1749@383
> > color: (Color r: 0.827 g: 0.827 b: 0.827)
> > extension: a MorphExtension (1404) [balloonText]
> [other:
> > (layoutPolicy -> a T...etc...
> > borderWidth: 0
> > borderColor: Color transparent
> > model: a ChangeList
> > label: 'file in selections'
> > getStateSelector: nil
> > actionSelector: #fileInSelections
> > getLabelSelector: nil
> > getMenuSelector: nil
> > shortcutCharacter: nil
> > askBeforeChanging: true
> > triggerOnMouseDown: false
> > offColor: Color white
> > onColor: Color white
> > feedbackColor: nil
> > showSelectionFeedback: false
> > allButtons: nil
> > arguments: #()
> > argumentsProvider: nil
> > argumentsSelector: nil
> >
> > [] in HandMorph>>sendFocusEvent:to:clear:
> > Receiver: a HandMorph(3216)
> > Arguments and temporary variables:
> > <<error during printing>
> > Receiver's instance variables:
> > bounds: 1661@782 corner: 1677@798
> > owner: a PasteUpMorph(1622) [world]
> > submorphs: #()
> > fullBounds: 1661@782 corner: 1677@798
> > color: Color blue
> > extension: a MorphExtension (539) [eventHandler = an
> EventHandler]
> > mouseFocus: nil
> > keyboardFocus: nil
> > eventListeners: nil
> > mouseListeners: nil
> > keyboardListeners: nil
> > mouseClickState: nil
> > mouseOverHandler: a MouseOverHandler
> > lastMouseEvent: [1661@782 mouseUp 3788444 nil]
> > targetOffset: 99@6
> > damageRecorder: a DamageRecorder
> > cacheCanvas: nil
> > cachedCanvasHasHoles: true
> > temporaryCursor: nil
> > temporaryCursorOffset: nil
> > hardwareCursor: nil
> > hasChanged: true
> > savedPatch: nil
> > userInitials: ''
> > lastEventBuffer: #(1 3788444 1661 782 0 0 0 1)
> > lastKeyScanCode: 126
> > combinedChar: nil
> >
> > [] in PasteUpMorph>>becomeActiveDuring:
> > Receiver: a PasteUpMorph(1622) [world]
> > Arguments and temporary variables:
> > <<error during printing>
> > Receiver's instance variables:
> > bounds: 0@0 corner: 1920@1178
> > owner: nil
> > submorphs: an Array(a TaskbarMorph(3095) a
> SystemWindow(3356) a
> > SystemWindow(25...etc...
> > fullBounds: nil
> > color: Color gray
> > extension: a MorphExtension (2543) [eventHandler = an
> > EventHandler] [other: (...etc...
> > borderWidth: 0
> > borderColor: (Color r: 0.5 g: 0.5 b: 0.5)
> > presenter: a Presenter (1246)
> > model: a MorphicModel(1926)
> > cursor: 1
> > padding: 3
> > backgroundMorph: nil
> > isPartsBin: nil
> > autoLineLayout: false
> > indicateCursor: nil
> > resizeToFit: nil
> > wantsMouseOverHalos: nil
> > worldState: a WorldState
> > griddingOn: nil
> >
> > BlockClosure>>on:do:
> > Receiver: [closure] in PasteUpMorph>>becomeActiveDuring:
> > Arguments and temporary variables:
> > exception: Error
> > handlerAction: [closure] in
> PasteUpMorph>>becomeActiveDuring:
> > handlerActive: false
> > Receiver's instance variables:
> > outerContext: PasteUpMorph>>becomeActiveDuring:
> > startpc: 67
> > numArgs: 0
> >
> > PasteUpMorph>>becomeActiveDuring:
> > Receiver: a PasteUpMorph(1622) [world]
> > Arguments and temporary variables:
> > aBlock: [closure] in
> HandMorph>>sendFocusEvent:to:clear:
> > priorWorld: a PasteUpMorph(1622) [world]
> > priorHand: a HandMorph(3216)
> > priorEvent: [1518@375 mouseOver red nil nil]
> > Receiver's instance variables:
> > bounds: 0@0 corner: 1920@1178
> > owner: nil
> > submorphs: an Array(a TaskbarMorph(3095) a
> SystemWindow(3356) a
> > SystemWindow(25...etc...
> > fullBounds: nil
> > color: Color gray
> > extension: a MorphExtension (2543) [eventHandler = an
> > EventHandler] [other: (...etc...
> > borderWidth: 0
> > borderColor: (Color r: 0.5 g: 0.5 b: 0.5)
> > presenter: a Presenter (1246)
> > model: a MorphicModel(1926)
> > cursor: 1
> > padding: 3
> > backgroundMorph: nil
> > isPartsBin: nil
> > autoLineLayout: false
> > indicateCursor: nil
> > resizeToFit: nil
> > wantsMouseOverHalos: nil
> > worldState: a WorldState
> > griddingOn: nil
> >
> > HandMorph>>sendFocusEvent:to:clear:
> > Receiver: a HandMorph(3216)
> > Arguments and temporary variables:
> > anEvent: [1518@375 mouseUp 3690378 nil]
> > focusHolder: a PluggableButtonMorph(824)
> > aBlock: [closure] in HandMorph>>sendMouseEvent:
> > w: a PasteUpMorph(1622) [world]
> > result: #(nil)
> > Receiver's instance variables:
> > bounds: 1661@782 corner: 1677@798
> > owner: a PasteUpMorph(1622) [world]
> > submorphs: #()
> > fullBounds: 1661@782 corner: 1677@798
> > color: Color blue
> > extension: a MorphExtension (539) [eventHandler = an
> EventHandler]
> > mouseFocus: nil
> > keyboardFocus: nil
> > eventListeners: nil
> > mouseListeners: nil
> > keyboardListeners: nil
> > mouseClickState: nil
> > mouseOverHandler: a MouseOverHandler
> > lastMouseEvent: [1661@782 mouseUp 3788444 nil]
> > targetOffset: 99@6
> > damageRecorder: a DamageRecorder
> > cacheCanvas: nil
> > cachedCanvasHasHoles: true
> > temporaryCursor: nil
> > temporaryCursorOffset: nil
> > hardwareCursor: nil
> > hasChanged: true
> > savedPatch: nil
> > userInitials: ''
> > lastEventBuffer: #(1 3788444 1661 782 0 0 0 1)
> > lastKeyScanCode: 126
> > combinedChar: nil
> >
> > HandMorph>>sendEvent:focus:clear:
> > Receiver: a HandMorph(3216)
> > Arguments and temporary variables:
> > anEvent: [1518@375 mouseUp 3690378 nil]
> > focusHolder: a PluggableButtonMorph(824)
> > aBlock: [closure] in HandMorph>>sendMouseEvent:
> > result: nil
> > Receiver's instance variables:
> > bounds: 1661@782 corner: 1677@798
> > owner: a PasteUpMorph(1622) [world]
> > submorphs: #()
> > fullBounds: 1661@782 corner: 1677@798
> > color: Color blue
> > extension: a MorphExtension (539) [eventHandler = an
> EventHandler]
> > mouseFocus: nil
> > keyboardFocus: nil
> > eventListeners: nil
> > mouseListeners: nil
> > keyboardListeners: nil
> > mouseClickState: nil
> > mouseOverHandler: a MouseOverHandler
> > lastMouseEvent: [1661@782 mouseUp 3788444 nil]
> > targetOffset: 99@6
> > damageRecorder: a DamageRecorder
> > cacheCanvas: nil
> > cachedCanvasHasHoles: true
> > temporaryCursor: nil
> > temporaryCursorOffset: nil
> > hardwareCursor: nil
> > hasChanged: true
> > savedPatch: nil
> > userInitials: ''
> > lastEventBuffer: #(1 3788444 1661 782 0 0 0 1)
> > lastKeyScanCode: 126
> > combinedChar: nil
> >
> > HandMorph>>sendMouseEvent:
> > Receiver: a HandMorph(3216)
> > Arguments and temporary variables:
> > anEvent: [1518@375 mouseUp 3690378 nil]
> > Receiver's instance variables:
> > bounds: 1661@782 corner: 1677@798
> > owner: a PasteUpMorph(1622) [world]
> > submorphs: #()
> > fullBounds: 1661@782 corner: 1677@798
> > color: Color blue
> > extension: a MorphExtension (539) [eventHandler = an
> EventHandler]
> > mouseFocus: nil
> > keyboardFocus: nil
> > eventListeners: nil
> > mouseListeners: nil
> > keyboardListeners: nil
> > mouseClickState: nil
> > mouseOverHandler: a MouseOverHandler
> > lastMouseEvent: [1661@782 mouseUp 3788444 nil]
> > targetOffset: 99@6
> > damageRecorder: a DamageRecorder
> > cacheCanvas: nil
> > cachedCanvasHasHoles: true
> > temporaryCursor: nil
> > temporaryCursorOffset: nil
> > hardwareCursor: nil
> > hasChanged: true
> > savedPatch: nil
> > userInitials: ''
> > lastEventBuffer: #(1 3788444 1661 782 0 0 0 1)
> > lastKeyScanCode: 126
> > combinedChar: nil
> >
> > HandMorph>>handleEvent:
> > Receiver: a HandMorph(3216)
> > Arguments and temporary variables:
> > anEvent: [1518@375 mouseUp 3690378 nil]
> > evt: [1518@375 mouseUp 3690378 nil]
> > ofs: nil
> > Receiver's instance variables:
> > bounds: 1661@782 corner: 1677@798
> > owner: a PasteUpMorph(1622) [world]
> > submorphs: #()
> > fullBounds: 1661@782 corner: 1677@798
> > color: Color blue
> > extension: a MorphExtension (539) [eventHandler = an
> EventHandler]
> > mouseFocus: nil
> > keyboardFocus: nil
> > eventListeners: nil
> > mouseListeners: nil
> > keyboardListeners: nil
> > mouseClickState: nil
> > mouseOverHandler: a MouseOverHandler
> > lastMouseEvent: [1661@782 mouseUp 3788444 nil]
> > targetOffset: 99@6
> > damageRecorder: a DamageRecorder
> > cacheCanvas: nil
> > cachedCanvasHasHoles: true
> > temporaryCursor: nil
> > temporaryCursorOffset: nil
> > hardwareCursor: nil
> > hasChanged: true
> > savedPatch: nil
> > userInitials: ''
> > lastEventBuffer: #(1 3788444 1661 782 0 0 0 1)
> > lastKeyScanCode: 126
> > combinedChar: nil
> >
> > HandMorph>>processEvents
> > Receiver: a HandMorph(3216)
> > Arguments and temporary variables:
> > evt: [1518@375 mouseUp 3690378 nil]
> > evtBuf: #(1 3690378 1518 375 0 0 0 1)
> > type: 1
> > hadAny: false
> > Receiver's instance variables:
> > bounds: 1661@782 corner: 1677@798
> > owner: a PasteUpMorph(1622) [world]
> > submorphs: #()
> > fullBounds: 1661@782 corner: 1677@798
> > color: Color blue
> > extension: a MorphExtension (539) [eventHandler = an
> EventHandler]
> > mouseFocus: nil
> > keyboardFocus: nil
> > eventListeners: nil
> > mouseListeners: nil
> > keyboardListeners: nil
> > mouseClickState: nil
> > mouseOverHandler: a MouseOverHandler
> > lastMouseEvent: [1661@782 mouseUp 3788444 nil]
> > targetOffset: 99@6
> > damageRecorder: a DamageRecorder
> > cacheCanvas: nil
> > cachedCanvasHasHoles: true
> > temporaryCursor: nil
> > temporaryCursorOffset: nil
> > hardwareCursor: nil
> > hasChanged: true
> > savedPatch: nil
> > userInitials: ''
> > lastEventBuffer: #(1 3788444 1661 782 0 0 0 1)
> > lastKeyScanCode: 126
> > combinedChar: nil
> >
> > [] in WorldState>>doOneCycleNowFor:
> > Receiver: a WorldState
> > Arguments and temporary variables:
> > <<error during printing>
> > Receiver's instance variables:
> > hands: an Array(a HandMorph(3216))
> > viewBox: 0@0 corner: 1920@1178
> > canvas: a FormCanvas on:
> DisplayScreen(1920x1178x32)
> > damageRecorder: a DamageRecorder
> > stepList: a Heap(StepMessage(#stepAt: -> 3PButton
> > (#togglePrettyDiffing 247))(3P...etc...
> > lastStepTime: 3788426
> > lastStepMessage: nil
> > lastCycleTime: 3788446
> > commandHistory: a CommandHistory
> > alarms: a Heap()
> > lastAlarmTime: 3788426
> >
> > Array(SequenceableCollection)>>do:
> > Receiver: an Array(a HandMorph(3216))
> > Arguments and temporary variables:
> > aBlock: [closure] in WorldState>>doOneCycleNowFor:
> > index: 1
> > indexLimiT: 1
> > Receiver's instance variables:
> > an Array(a HandMorph(3216))
> >
> > WorldState>>handsDo:
> > Receiver: a WorldState
> > Arguments and temporary variables:
> > aBlock: [closure] in WorldState>>doOneCycleNowFor:
> > Receiver's instance variables:
> > hands: an Array(a HandMorph(3216))
> > viewBox: 0@0 corner: 1920@1178
> > canvas: a FormCanvas on:
> DisplayScreen(1920x1178x32)
> > damageRecorder: a DamageRecorder
> > stepList: a Heap(StepMessage(#stepAt: -> 3PButton
> > (#togglePrettyDiffing 247))(3P...etc...
> > lastStepTime: 3788426
> > lastStepMessage: nil
> > lastCycleTime: 3788446
> > commandHistory: a CommandHistory
> > alarms: a Heap()
> > lastAlarmTime: 3788426
> >
> > WorldState>>doOneCycleNowFor:
> > Receiver: a WorldState
> > Arguments and temporary variables:
> > aWorld: a PasteUpMorph(1622) [world]
> > Receiver's instance variables:
> > hands: an Array(a HandMorph(3216))
> > viewBox: 0@0 corner: 1920@1178
> > canvas: a FormCanvas on:
> DisplayScreen(1920x1178x32)
> > damageRecorder: a DamageRecorder
> > stepList: a Heap(StepMessage(#stepAt: -> 3PButton
> > (#togglePrettyDiffing 247))(3P...etc...
> > lastStepTime: 3788426
> > lastStepMessage: nil
> > lastCycleTime: 3788446
> > commandHistory: a CommandHistory
> > alarms: a Heap()
> > lastAlarmTime: 3788426
> >
> > WorldState>>doOneCycleFor:
> > Receiver: a WorldState
> > Arguments and temporary variables:
> > aWorld: a PasteUpMorph(1622) [world]
> > Receiver's instance variables:
> > hands: an Array(a HandMorph(3216))
> > viewBox: 0@0 corner: 1920@1178
> > canvas: a FormCanvas on:
> DisplayScreen(1920x1178x32)
> > damageRecorder: a DamageRecorder
> > stepList: a Heap(StepMessage(#stepAt: -> 3PButton
> > (#togglePrettyDiffing 247))(3P...etc...
> > lastStepTime: 3788426
> > lastStepMessage: nil
> > lastCycleTime: 3788446
> > commandHistory: a CommandHistory
> > alarms: a Heap()
> > lastAlarmTime: 3788426
> >
> > PasteUpMorph>>doOneCycle
> > Receiver: a PasteUpMorph(1622) [world]
> > Arguments and temporary variables:
> >
> > Receiver's instance variables:
> > bounds: 0@0 corner: 1920@1178
> > owner: nil
> > submorphs: an Array(a TaskbarMorph(3095) a
> SystemWindow(3356) a
> > SystemWindow(25...etc...
> > fullBounds: nil
> > color: Color gray
> > extension: a MorphExtension (2543) [eventHandler = an
> > EventHandler] [other: (...etc...
> > borderWidth: 0
> > borderColor: (Color r: 0.5 g: 0.5 b: 0.5)
> > presenter: a Presenter (1246)
> > model: a MorphicModel(1926)
> > cursor: 1
> > padding: 3
> > backgroundMorph: nil
> > isPartsBin: nil
> > autoLineLayout: false
> > indicateCursor: nil
> > resizeToFit: nil
> > wantsMouseOverHalos: nil
> > worldState: a WorldState
> > griddingOn: nil
> >
> > [] in Project class>>spawnNewProcess
> > Receiver: Project
> > Arguments and temporary variables:
> >
> > Receiver's instance variables:
> > superclass: Model
> > methodDict: a MethodDictionary(size 167)
> > format: 172
> > instanceVariables: #('world' 'changeSet' 'transcript'
> > 'parentProject' 'previous...etc...
> > organization: ('*Polymorph-Widgets'
> > assureTaskbarPresenceMatchesPreference crea...etc...
> > subclasses: nil
> > name: #Project
> > classPool: a Dictionary(#AllProjects->an
> OrderedCollection(a
> > Project(Juliet)) #...etc...
> > sharedPools: nil
> > environment: Smalltalk
> > category: #'System-Support'
> > traitComposition: {}
> > localSelectors: nil
> >
> > [] in BlockClosure>>newProcess
> > Receiver: [closure] in Project class>>spawnNewProcess
> > Arguments and temporary variables:
> >
> > Receiver's instance variables:
> > outerContext: Project class>>spawnNewProcess
> > startpc: 53
> > numArgs: 0
> >
> >
> > --- The full stack ---
> > UndefinedObject(Object)>>doesNotUnderstand: #self
> > UndefinedObject>>DoIt
> > Compiler>>evaluate:in:to:notifying:ifFail:logged:
> > Compiler class>>evaluate:for:notifying:logged:
> > Compiler class>>evaluate:for:logged:
> > Compiler class>>evaluate:
> > [] in ChangeRecord>>fileIn
> > BlockClosure>>ensure:
> > CursorWithMask(Cursor)>>showWhile:
> > ChangeRecord>>fileIn
> > [] in ChangeList>>fileInSelections
> > Array(SequenceableCollection)>>with:do:
> > ChangeList>>fileInSelections
> > PluggableButtonMorph>>performAction
> > [] in PluggableButtonMorph>>mouseUp:
> > Array(SequenceableCollection)>>do:
> > PluggableButtonMorph>>mouseUp:
> > PluggableButtonMorph(Morph)>>handleMouseUp:
> > MouseButtonEvent>>sentTo:
> > PluggableButtonMorph(Morph)>>handleEvent:
> > PluggableButtonMorph(Morph)>>handleFocusEvent:
> > [] in HandMorph>>sendFocusEvent:to:clear:
> > [] in PasteUpMorph>>becomeActiveDuring:
> > BlockClosure>>on:do:
> > PasteUpMorph>>becomeActiveDuring:
> > HandMorph>>sendFocusEvent:to:clear:
> > HandMorph>>sendEvent:focus:clear:
> > HandMorph>>sendMouseEvent:
> > HandMorph>>handleEvent:
> > HandMorph>>processEvents
> > [] in WorldState>>doOneCycleNowFor:
> > Array(SequenceableCollection)>>do:
> > WorldState>>handsDo:
> > WorldState>>doOneCycleNowFor:
> > WorldState>>doOneCycleFor:
> > PasteUpMorph>>doOneCycle
> > [] in Project class>>spawnNewProcess
> > [] in BlockClosure>>newProcess
> >
> >
> > --
> > -JT
> >
> >
> > _______________________________________________
> > Pharo-project mailing list
> > Pharo-project(a)lists.gforge.inria.fr
> > http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
>
>
> _______________________________________________
> Pharo-project mailing list
> Pharo-project(a)lists.gforge.inria.fr
> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
>
--
-JT
Oct. 24, 2009
Re: [Pharo-project] about selectorsDo: versus selectors do:
by Nicolas Cellier
Yes !
Just beware of a few loops that could modify the methodDictionary.
2009/10/24 Stéphane Ducasse <stephane.ducasse(a)inria.fr>:
> nicolas
>
> following the includesSelectors: fix I imagine that replacing all the
> selectors do: by selectorsDo:
> will avoid creating unnecessary intermediate collection.
> I checked and there are some places where we could fix that.
>
> Stef
>
> _______________________________________________
> Pharo-project mailing list
> Pharo-project(a)lists.gforge.inria.fr
> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
>
Oct. 24, 2009
Re: [Pharo-project] question about results of MessageTally
by Schwab,Wilhelm K
Jannik,
A good starting point is
wiki.squeak.org/squeak/4210
I am not an expert on this, but the profiler works by sampling from a high priority process that looks at what the "slow ones" happen to be doing at the time - it's random, but done enough times, a picture will emerge from it.
In this case, you have not profiled creating a dictionary, you have profiled adding elements to a dictionary. If you want to see creating the dictionary, something like
MessageTally spyOn:[
1000 timesRepeat:[
Dictionary new.
].
].
would be a better choice. If you want to see the effects of adding the elements, you might create the dictionary outside the block to remove it from the profile.
Bill
-----Original Message-----
From: pharo-project-bounces(a)lists.gforge.inria.fr [mailto:pharo-project-bounces@lists.gforge.inria.fr] On Behalf Of Laval Jannik
Sent: Saturday, October 24, 2009 12:21 AM
To: Pharo-project(a)lists.gforge.inria.fr
Subject: [Pharo-project] question about results of MessageTally
Hi,
when I use MassageTally>>spyOn: on the creation of a Dictionary, results have not the same details according to the size of Dictionary.
For example:
===
|n|
MessageTally spyOn:[
n := Dictionary new.
1 to: 400000 do:[:each | n at: each put:each].
]
===
returns this results:
====
- 1745 tallies, 1751 msec.
**Tree**
--------------------------------
Process: (40s) 1964: nil
--------------------------------
45.8% {802ms} Dictionary(Set)>>atNewIndex:put:
|43.6% {763ms} Dictionary(Set)>>fullCheck
| |39.4% {690ms} Dictionary(Set)>>grow
| | |27.2% {476ms} Dictionary>>noCheckAdd:
| | | |25.2% {441ms} Dictionary(Set)>>findElementOrNil:
| | | | |23.6% {413ms} Dictionary>>scanFor:
| | | | |1.6% {28ms} primitives
| | | |2.0% {35ms} primitives
| | |9.2% {161ms} primitives
| | |3.0% {53ms} Array(SequenceableCollection)>>do:
| |2.4% {42ms} primitives
| |1.8% {32ms} SmallInteger(Magnitude)>>max:
|2.2% {39ms} primitives
22.4% {392ms} Association class>>key:value:
|18.9% {331ms} Association class(LookupKey class)>>key:
| |16.3% {285ms} Association(LookupKey)>>key:
| |2.6% {46ms} primitives
|1.9% {33ms} Association>>value:
|1.6% {28ms} primitives
4.4% {77ms} Dictionary(Set)>>findElementOrNil:
|2.3% {40ms} primitives
|2.1% {37ms} Dictionary>>scanFor:
1.9% {33ms} primitives
====
But, if I do:
===
|n|
MessageTally spyOn:[
n := Dictionary new.
1 to: 4000000 do:[:each | n at: each put:each].
]
===
results are:
====
- 179772 tallies, 180312 msec.
**Tree**
--------------------------------
Process: (40s) 1964: nil
--------------------------------
3.1% {5590ms} Dictionary(Set)>>atNewIndex:put:
|2.8% {5049ms} Dictionary(Set)>>fullCheck
| 2.3% {4147ms} Dictionary(Set)>>grow
| 1.3% {2344ms} Dictionary>>noCheckAdd:
1.0% {1803ms} Association class>>key:value:
====
Where are the rest of the process ?
Does anybody understand this behavior ? can you explain ?
Cheers,
Jannik
_______________________________________________
Pharo-project mailing list
Pharo-project(a)lists.gforge.inria.fr
http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
Oct. 24, 2009
Re: [Pharo-project] (a = b) => (a hash = b hash)
by Nicolas Cellier
http://bugs.squeak.org/view.php?id=3380
http://bugs.squeak.org/view.php?id=3488
2009/10/24 Andrew P. Black <black(a)cs.pdx.edu>:
> The golden rule of hashing is (a = b) => (a hash = b hash). Â Right?
>
> Look at this:
>
> (1 to: 10) species  --->  Array
> #(1 2 3 4 5 6 7 8 9 10) species  --->  Array
>
> (1 to: 10) = Â #(1 2 3 4 5 6 7 8 9 10) Â ---> Â true
>
> However,
>
> (1 to: 10) hash = #(1 2 3 4 5 6 7 8 9 10) hash  --->  false.
>
> I believe that the last is a bug.
>
> Â Â Â Â Andrew
>
>
> _______________________________________________
> Pharo-project mailing list
> Pharo-project(a)lists.gforge.inria.fr
> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
>
Oct. 24, 2009
Re: [Pharo-project] Thread-safe collections
by Schwab,Wilhelm K
John,
No examples, just a growing surprise at the things that have been allowed to stand for many years, combined with respect for Object Arts. When in doubt, I assume they knew what they were doing, and making weaklings thread-safe seems reasonable, if not just plain necessary. My current concern is not over finalization specificially, but other weak collections.
You mention #forMutualExcusion. My understanding is that a semaphore so configured will allow a process to deadlock itself. We have Mutex, and it is probably a better choice??
Bill
-----Original Message-----
From: pharo-project-bounces(a)lists.gforge.inria.fr [mailto:pharo-project-bounces@lists.gforge.inria.fr] On Behalf Of John M McIntosh
Sent: Friday, October 23, 2009 8:25 PM
To: Pharo-project(a)lists.gforge.inria.fr
Subject: Re: [Pharo-project] Thread-safe collections
Not sure what you are looking for a couple of years back I chased down a bug or two in the finalization logic See WeakArray>>FinalizationSemaphore and WeakRegistry accessLock := Semaphore forMutualExclusion.
Both attempt to ensure finalization occurs in thread safe manners, this doesn't mean someone introduced something bad in the last 5 years or so.
An example?
On 2009-10-23, at 5:44 PM, Schwab,Wilhelm K wrote:
> Stef,
>
> Dolphin's weak collections are typically (I suspect allways) thread
> safe, which I have attributed to the constant struggle with
> finalization - it seems natural (to me at least) for them to be
> protected. Some quick browsing leads me to think that this is not
> true in Pharo. Am I missing something, or do we also need some
> thread-safe weaklings?
>
> Bill
>
>
>
> -----Original Message-----
> From: pharo-project-bounces(a)lists.gforge.inria.fr [mailto:pharo-
> project-bounces(a)lists.gforge.inria.fr] On Behalf Of Stéphane Ducasse
> Sent: Friday, October 23, 2009 2:46 AM
> To: Pharo-project(a)lists.gforge.inria.fr
> Subject: Re: [Pharo-project] Thread-safe collections
>
> I would really like to see some packages getting implementing around
> the idea of a couple of robust and well tested thread safe
> collections.
>
> Stef
>
> On Oct 23, 2009, at 2:16 AM, Schwab,Wilhelm K wrote:
>
>> Sig,
>>
>> One can always construct examples in which protecting the entire loop
>> is the better option. That's not the scenario of interest.
>> Just as shared queues are useful, shared sets and dictionaries have
>> value for sporadic access scenarios. Doing it your way, everyone
>> writes their own incompletely protected (read buggy/dangerous) ad-
>> hoc implementations of these common collections.
>>
>> I favor having solid implementations that are complete and as correct
>> as we can get them, leaving people to optimize as you suggest when it
>> makes sense to do so.
>>
>> Bill
>>
>>
>> -----Original Message-----
>> From: pharo-project-bounces(a)lists.gforge.inria.fr [mailto:pharo-
>> project-bounces(a)lists.gforge.inria.fr] On Behalf Of Igor Stasenko
>> Sent: Thursday, October 22, 2009 5:23 PM
>> To: Pharo-project(a)lists.gforge.inria.fr
>> Subject: Re: [Pharo-project] Thread-safe collections
>>
>> 2009/10/23 Schwab,Wilhelm K <bschwab(a)anest.ufl.edu>:
>>> Hello all,
>>>
>>> I just looked around for thread-safe collections, and found nothing
>>> that looks like a shared dictionary. The squeak-dev archives
>>> contain the obligatory newbie posts (wanting all collections to be
>>> thread
>>> safe) and the expected replies, some of which are overly dismissive
>>> of the idea. Something that protects things like
>>> #at:ifAbsentPut: and friends is _really_ useful. Am I missing an
>>> existing implementation?
>>>
>>
>> Imo, there's only one shared collection which is useful - shared
>> queue. :) If you need more kinds of thread-safe collections, it
>> probably indicating that the concurrent code (or model) which you
>> designed is in pretty bad shape.
>>
>> Just compare two following snippets:
>>
>> 1 to: 100 do: [:i | collection threadSafeAt: i put: something].
>>
>> and:
>>
>> semaphore critical: [ 1 to: 100 do: [:i | collection at: i put:
>> something] ].
>>
>> What you think, which one is better?
>>
>>
>>> Bill
>>>
>>>
>>> _______________________________________________
>>> Pharo-project mailing list
>>> Pharo-project(a)lists.gforge.inria.fr
>>> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
>>>
>>
>>
>>
>> --
>> Best regards,
>> Igor Stasenko AKA sig.
>>
>> _______________________________________________
>> Pharo-project mailing list
>> Pharo-project(a)lists.gforge.inria.fr
>> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
>> _______________________________________________
>> Pharo-project mailing list
>> Pharo-project(a)lists.gforge.inria.fr
>> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
>
>
> _______________________________________________
> Pharo-project mailing list
> Pharo-project(a)lists.gforge.inria.fr
> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
>
> _______________________________________________
> Pharo-project mailing list
> Pharo-project(a)lists.gforge.inria.fr
> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
--
=
=
=
========================================================================
John M. McIntosh <johnmci(a)smalltalkconsulting.com> Twitter:
squeaker68882
Corporate Smalltalk Consulting Ltd. http://www.smalltalkconsulting.com
=
=
=
========================================================================
_______________________________________________
Pharo-project mailing list
Pharo-project(a)lists.gforge.inria.fr
http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
Oct. 24, 2009