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] Traits composition question
by Alexandre Bergel
>> For traits, requirements were programmatically inferred instead of
>> using #explicitRequirement.
>>
> Not sure i understood.
Is it really necessary that you provides 'self shouldBeImplemented' as
method body?
> Is there a way to tell to not override the method automatically, if it
> provided in base class?
No that I know. But this goes against the idea of Traits. A class that
uses a trait is rigorously equivalent to having the class implements
the methods defined in the trait.
As a consequence, if you trait defines a method 'foo self
shouldBeImplemented' and your class C uses the trait, then 'C new foo'
will execute 'self shouldBeImplemented', independently whether #foo
was implemented or not in superclasses of C.
Cheers,
Alexandre
--
_,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:
Alexandre Bergel http://www.bergel.eu
^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.
Oct. 26, 2009
[Pharo-project] update server down?
by Michael Roberts
i'm getting timeouts from the update server. can someone confirm?
thanks,
Mike
Oct. 26, 2009
Re: [Pharo-project] Broken "Recover Lost Changes"
by Adrian Lienhard
Hi John,
Having looked at your image I think the changes recovery works
correctly. The last snapshot was taken at 22nd Oct, 10:06. That is the
point in time from which you have lost changes. The image was later
restarted on Oct 23, 3:15. After this, more changes were done. I guess
at at this point you loaded code or tried to recover code from the
changeset. So I assume that the code you lost is between Oct 22 10:06
and Oct 23 3:15.
The changes that were done in this period can be recovered as follows:
in the Tools menu open "recover lost changes...", then select the top
item in the list (Snapshot 22 Oct). What you get is a pretty long list
of changes, but you only need a few of them. The first bunch of
changes are from the refactoring browser that you had presumably
installed at this time. Skip over these changes. Then your changes
appear. You can select them up to the item "----STARTUP----an Array(23
October 2009 3:15:57 pm...".
Btw, the last thing you did before the image crashed was "someclass
become: onotherclass". Apparently the system didn't like that ;)
One thing that is suboptimal in the current changes system is that
items like
preamble: Trait method
do it: someMethod
...appear in the changes file. These do-its do not need to be applied
when recovering changes. We should probably filter them out from the
changes list.
HTH,
Adrian
On Oct 25, 2009, at 19:34 , John Toohey wrote:
> Hey,
> Actually what I did was to fileout the changes in the Change Sorter,
> edited
> them, and filed them back in. At least I recovered my source, enough
> to save
> it to MC. I then built a new image, and am back working again. I've
> sent you
> an off list email with access to the image and changes file as they
> were
> when my image crashed.
>
> Thanks
>
> On Sun, Oct 25, 2009 at 07:00, Adrian Lienhard <adi(a)netstyle.ch>
> wrote:
>
>> Hi John,
>>
>> Modifying the .changes file is usually not a good idea because
>> methods
>> have pointers into this file to get to their sources. I thought you
>> had produces a .st or .cs file from your changes. Can you upload your
>> zip somewhere?
>>
>> Cheers,
>> Adrian
>>
>> On Oct 25, 2009, at 00:28 , John Toohey wrote:
>>
>>> I loaded the changes file into Emacs, deleted everything except the
>>> changes
>>> since the last save point, and then I got errors on the Traits code.
>>> I then
>>> deleted those line, and managed to filein the code successfully. I
>>> have a
>>> copy of the image and changes file that was made just before I had
>>> the
>>> crash. I've zipped to to ca 16MB, so I can send those if they would
>>> be of
>>> help.
>>>
>>>
>>>
>>> On Sat, Oct 24, 2009 at 15:09, Adrian Lienhard <adi(a)netstyle.ch>
>>> wrote:
>>>
>>>> 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
>>>>
>>>>
>>>> _______________________________________________
>>>> 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
>>
>>
>> _______________________________________________
>> 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. 26, 2009
Re: [Pharo-project] issue 496: Morph>>heading
by Adrian Lienhard
I think a good criterium is whether the functionality is used in Pharo
today. Does anybody use rotating morphs? I don't think so.
Cheers,
Adrian
On Oct 26, 2009, at 16:40 , Laval Jannik wrote:
> Yes, Marcus is right.
>
> But are there some behaviors that we want to keep and integrate in
> Core ?
> For example, the Rotate functionality in the halo.
>
> Cheers,
> Jannik
>
>
> On Oct 26, 2009, at 16:22 , Marcus Denker wrote:
>
>>
>>>
>>>> However, it would be a good idea to put all the interesting eToy
>>>> stuff in an external package so that those who want to load that
>>>> stuff, are able to do it.
>>>
>>>
>>>
>>> Because, make an external package of it needs a big work...
>>>
>>> I don't think so.
>>
>> Etoy is more complex than you think. It would be (nearly) impossible.
>>
>>
>>> You just need to create the package. And then, instead of removing
>>> code, you move it to that package. What can be a lot of work is to
>>> keep that package up to date and working, but that's not Pharo
>>> responsibility.
>>>
>> Nope. Etoy is programed in a way that makes things like this *a
>> lot* of work.
>>
>>
>> Marcus
>>
>>
>>
>>
>>
>> _______________________________________________
>> 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. 26, 2009
Re: [Pharo-project] Feature request: All uses of Trait
by Marcus Denker
On Oct 26, 2009, at 6:36 PM, Stéphane Ducasse wrote:
> add an issue in the bug tracker
>
There is already: http://code.google.com/p/pharo/issues/detail?id=1142
> Stef
>
> On Oct 26, 2009, at 5:04 PM, Igor Stasenko wrote:
>
>> 2009/10/26 Alexandre Bergel <alexandre(a)bergel.eu>:
>>> Just send #users to a trait.
>>>
>> ... and integrate it with browers :)
>>
>>
>>> Cheers,
>>> Alexandre
>>>
>>>
>>> On 25 Oct 2009, at 02:26, Igor Stasenko wrote:
>>>
>>>> It would be cool to have a 'references-to' support for traits.
>>>> Or maybe its there already?
>>>>
>>>> How can i quickly look, what classes using the trait?
>>>>
>>>> --
>>>> 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
>>>>
>>>
>>> --
>>> _,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:
>>> Alexandre Bergel http://www.bergel.eu
>>> ^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.
>>>
>>>
>>>
>>>
>>>
>>>
>>> _______________________________________________
>>> 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
Oct. 26, 2009
Re: [Pharo-project] Feature request: All uses of Trait
by Igor Stasenko
2009/10/26 Stéphane Ducasse <stephane.ducasse(a)inria.fr>:
> add an issue in the bug tracker
>
added # 1368
> Stef
>
> On Oct 26, 2009, at 5:04 PM, Igor Stasenko wrote:
>
>> 2009/10/26 Alexandre Bergel <alexandre(a)bergel.eu>:
>>> Just send #users to a trait.
>>>
>> ... and integrate it with browers :)
>>
>>
>>> Cheers,
>>> Alexandre
>>>
>>>
>>> On 25 Oct 2009, at 02:26, Igor Stasenko wrote:
>>>
>>>> It would be cool to have a 'references-to' support for traits.
>>>> Or maybe its there already?
>>>>
>>>> How can i quickly look, what classes using the trait?
>>>>
>>>> --
>>>> 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
>>>>
>>>
>>> --
>>> _,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:
>>> Alexandre Bergel  http://www.bergel.eu
>>> ^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.
>>>
>>>
>>>
>>>
>>>
>>>
>>> _______________________________________________
>>> 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
>
--
Best regards,
Igor Stasenko AKA sig.
Oct. 26, 2009
Re: [Pharo-project] ClassOrganizer oddities
by Stéphane Ducasse
so what is the fix?
I would really like to get announcement instead of event
systemNotification but I'm sure that this
can be a bit tricky.
Stef
On Oct 26, 2009, at 2:59 AM, Igor Stasenko wrote:
> On top of that, i found annoying, that ClassOrganizer sends
> notifications using SystemNotification.
> While , IMO best place and only place where notifications should be
> sent from - is a class.
>
> A simple consistency check:
>
> | uncategorized |
> uncategorized := IdentityDictionary new.
>
> ClassDescription allSubInstances do: [:behavior | | invalidSels |
> invalidSels := behavior methodDict keys select: [:selector |
> (behavior organization categoryOfElement: selector) isNil ].
> invalidSels ifNotEmpty: [ uncategorized at: behavior put:
> invalidSels]
> ].
> uncategorized
>
>
> shows that , there is no uncategorized selectors for all classes in
> system, i.e. things like:
> Object organization categoryOfElement: #jjj => nil
>
> Then i did a little experiment:
> added the #blabla method to Object class, and then did
>
> Object organization removeElement: #blabla
>
> and now the consistency check above shows me that method is still in
> class,
> while not present in categorizer.
>
> A browser behaves interestingly in this case:
> - it lists this method only if you selecting '-- all --'
> metacategory.
>
>
>
> --
> 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
Oct. 26, 2009
Re: [Pharo-project] issue 496: Morph>>heading
by Stéphane Ducasse
jannik
you ask the right question
And this is ugly. Now we could think about possible usecases.
If we build a image processing system: we need it but in that case we
can copy it.
Stef
> Yes, Marcus is right.
>
> But are there some behaviors that we want to keep and integrate in
> Core ?
> For example, the Rotate functionality in the halo.
>
> Cheers,
> Jannik
>
>
> On Oct 26, 2009, at 16:22 , Marcus Denker wrote:
>
>>
>>>
>>>> However, it would be a good idea to put all the interesting eToy
>>>> stuff in an external package so that those who want to load that
>>>> stuff, are able to do it.
>>>
>>>
>>>
>>> Because, make an external package of it needs a big work...
>>>
>>> I don't think so.
>>
>> Etoy is more complex than you think. It would be (nearly) impossible.
>>
>>
>>> You just need to create the package. And then, instead of removing
>>> code, you move it to that package. What can be a lot of work is to
>>> keep that package up to date and working, but that's not Pharo
>>> responsibility.
>>>
>> Nope. Etoy is programed in a way that makes things like this *a
>> lot* of work.
>>
>>
>> Marcus
>>
>>
>>
>>
>>
>> _______________________________________________
>> 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. 26, 2009
Re: [Pharo-project] Traits composition question
by Andrew P. Black
>>>
>>> For traits, requirements were programmatically inferred instead of
>>> using #explicitRequirement.
>>
In the original traits implementation, inference of requirements was
necessarily incomplete. For example, if a method says
self add: x
or
self class new: n
we would infer a requirement of add: n the instance side and new: on
the class side. However, if the method said
self copyEmpty add: x
we would not infer a requirement of add:
In these cases we included a method definition
add: anObject
self explicitRequirement
to tell the tools that add: was a required method. We used this very
rarely, since most of the time the inference of required methods
worked very well.
Andrew
Oct. 26, 2009
Re: [Pharo-project] (a = b) => (a hash = b hash)
by Stéphane Ducasse
On Oct 26, 2009, at 3:02 AM, Andrew P. Black wrote:
> I agree with Nicolas, but I think that it's really important that we
> have this discussion, reach a consensus, and them implement it!
yes yes yes.
Communicating is the best way to increase the level of knowledge in
the community.
>
> That's why I posted the message here rather than just posting a bug
> report.
>
> There used to be a method called hasSameElementsAs: (now called,
> inexplicably, sameElements:) that could be pressed into service so
> that two intervals, or an array and and interval, can have the same
> elements but still be unequal. But the role of species was to
> define when things could be equal...
>
> Maybe we need a method "hasSameSequenceOfElementsAs:" which would be
> applicable to any pair of sequenceable collections, as well as
> being faster to implement, than sameElements: (which is currently
> quadratic).
>
> On 25 Oct 2009, at 06:53, Nicolas Cellier wrote:
>
>>
>> IMO, we should not let Array hash ~= Interval hash coexist with
>> Array = Interval
>> Because it's like putting some traps on programmers path.
>> One day or the other an application will exhibit a non repeatable
>> error, just because the size of a Set was different and caused a
>> collision.
>
> _______________________________________________
> Pharo-project mailing list
> Pharo-project(a)lists.gforge.inria.fr
> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
Oct. 26, 2009