Pharo-dev
By thread
pharo-dev@lists.pharo.org
By month
Messages by month
- ----- 2026 -----
- 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
October 2009
- 86 participants
- 1118 messages
Re: [Pharo-project] (a = b) => (a hash = b hash)
by Andres Valloud
Nicolas,
> Yes, large Array hash has severe performance penalty anyway.
> Maybe we shall not hash each and every element.
>
I disagree. The issue is that if hashing a very large array (or string)
becomes a performance problem, then we should engineer applications so
that we hash the metadata as opposed to the data.
In other words, assume you're hashing arbitrary 1kb strings. You can't
have more than ~1 million of those in memory at any given time, and
there are only so many you can store in a database. Chances are those
1kb strings represent chunks of data that can be uniquely identified
with no more than e.g.: 64 bits. Then, just hash those 64 bits and be
done with it. In the absence of assumptions on the hashed data, though,
you have no option other than to hash everything.
> And, even forgetting about equality with Array, Inteval>>#= and
> Interval>>#hash do not agree in Squeak and Pharo:
>
> (1 to: 10 by: 5) = (1 to: 9 by: 5). -> true
> (1 to: 10 by: 5) hash = (1 to: 9 by: 5) hash. -> false
>
>
Sometimes the end points of intervals are important... maybe it's better
to have equality fail than "fixing" hash in this case.
Andres.
Oct. 24, 2009
Re: [Pharo-project] (a = b) => (a hash = b hash)
by Nicolas Cellier
2009/10/24 Andres Valloud <avalloud(a)smalltalk.comcastbiz.net>:
> (furthermore, changing Interval>>hash to match that of Array in cases
> like (1 to: SmallInteger minVal) is bound to cause unacceptable
> performance penalties)
>
Yes, large Array hash has severe performance penalty anyway.
Maybe we shall not hash each and every element.
And, even forgetting about equality with Array, Inteval>>#= and
Interval>>#hash do not agree in Squeak and Pharo:
(1 to: 10 by: 5) = (1 to: 9 by: 5). -> true
(1 to: 10 by: 5) hash = (1 to: 9 by: 5) hash. -> false
Nicolas
> 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
>>
>>
>
> _______________________________________________
> 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] 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