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] Broken "Recover Lost Changes"
by John Toohey
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
Oct. 25, 2009
Re: [Pharo-project] Improve pharo modularity: a first step
by Bernhard Pieber
Hi Stéphane,
Am 23.10.2009 um 12:50 schrieb Stéphane Ducasse:
> Jannik
> may be we should have
>
> PackageCore
> PackageTest
> PackageSetting
> PackageExamples
A convention we follow here is - for VA Smalltalk code, though:
- Package (includes all code needed at runtime)
- PackageDev (includes all code needed only at Development: tests,
scripts, tools)
This allows for nicely separating runtime packages from those only
needed for development while keeping the numbers of packages smaller.
Just my 2 cents.
Cheers,
Bernhard
Oct. 25, 2009
[Pharo-project] [update 1.1] #11019
by Stéphane Ducasse
11019
-----
- Issue 1343: System-Pragmas
- new system category which includes Pragma class and Pragma related
stuffs
from System-Settings
- Reorganized Kernel package by moving Pragma class from Kernel-
Methods to
Kernel-Pragmas system category
- Moved PragmaCollector and related stuff from System-Settings to
Kernel-Pragmas.
Oct. 25, 2009
Re: [Pharo-project] Some bugs I ran into while working on hashing
by Nicolas Cellier
2009/10/25 Nicolas Cellier <nicolas.cellier.aka.nice(a)gmail.com>:
> 2009/10/25 Andres Valloud <avalloud(a)smalltalk.comcastbiz.net>:
>>
>> isPrime
>>
>> Â Â | guess guessSquared delta selfSqrtFloor |
>> Â Â self <= 1 ifTrue: [^self error: 'operation undefined'].
>> Â Â self even ifTrue: [^self = 2].
>> Â Â guess := 1 bitShift: self highBit + 1 // 2.
>> Â Â [
>> Â Â Â Â guessSquared := guess * guess.
>> Â Â Â Â delta := guessSquared - self // (guess bitShift: 1).
>> Â Â Â Â delta = 0
>> Â Â ] whileFalse: [guess := guess - delta].
>> Â Â guessSquared = self ifFalse: [guess := guess - 1].
>> Â Â selfSqrtFloor := guess.
>> Â Â 3 to: selfSqrtFloor by: 2 do: [:each | self \\ each = 0 ifTrue:
>> [^false]].
>> Â Â ^true
>>
>>
>> Also, the above code can be used to implement sqrtFloor and sqrtRounded
>> in Integer. Â I am sure Nicolas Cellier remembers this :).
>
> If http://bugs.squeak.org were not down, I would even provide a link
> with these enhancements
>
google says it should be http://www.google.fr/bugs.squeak.org/view.php?id=7099.
Or go to the source
http://blogten.blogspot.com/2008/06/drove-to-reno-today.html
http://blogten.blogspot.com/2008/06/update-on-sqrtrounded.html
>>
>> Andres.
>>
>> _______________________________________________
>> Pharo-project mailing list
>> Pharo-project(a)lists.gforge.inria.fr
>> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
>>
>
Oct. 25, 2009
Re: [Pharo-project] Thread-safe collections
by Philippe Marschall
Igor Stasenko wrote:
> 2009/10/23 Schwab,Wilhelm K <bschwab(a)anest.ufl.edu>:
>> Hello all,
>>
>> I just looked around for thread-safe collections, and found nothing that looks like a shared dictionary. The squeak-dev archives contain the obligatory newbie posts (wanting all collections to be thread safe) and the expected replies, some of which are overly dismissive of the idea. Something that protects things like #at:ifAbsentPut: and friends is _really_ useful. Am I missing an existing implementation?
>>
>
> Imo, there's only one shared collection which is useful - shared queue. :)
Yeah, sure. Where again do I store my Seaside sessions? Oh, it's no
problem, because we use only one worker thread and process requests on
after another. Geez, problem solved.
Cheers
Philippe
Oct. 25, 2009
Re: [Pharo-project] ClassOrganizer oddities
by Stéphane Ducasse
knowing that this is roel that probably wrote that I would pay really
attention
because it is certainly something tricky.
On Oct 25, 2009, at 1:36 PM, Igor Stasenko wrote:
> I discovered a puzzling behavior:
>
> removeElement: element
> | oldCat |
> oldCat := self categoryOfElement: element.
> SystemChangeNotifier uniqueInstance doSilently: [
> super removeElement: element].
> self notifyOfChangedSelector: element from: oldCat to: (self
> categoryOfElement: element).
>
>
> I staring at it and i wonder, what the author meant by doing:
>
> super removeElement: element
>
> which effectively wipes out given element, but then next line uses:
>
> self categoryOfElement: element
>
> huh???
>
>
>
> --
> 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. 25, 2009
Re: [Pharo-project] (a = b) => (a hash = b hash)
by Nicolas Cellier
2009/10/24 Andres Valloud <avalloud(a)smalltalk.comcastbiz.net>:
> 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.
>
Good point.
Where is the balance between expensive hash and expensive collisions ?
The cost of collisions is
- perform hash and = on each successive keys untill hash is different
or = is true
Omitting a single byte in a ByteString leads to 256 possible collisions...
So with this POV, it is better to spend time in hash to reduce the
cost of worst-case distribution of keys with default hash algorithm.
My POV was to reduce cost for some distribution of keys, without
caring too much about worst case... One then has to provide its own
hash function for optimizing its problem... But maybe that was not a
good tradeoff...
In any case, restricting hash to leading characters is the worst
choice because it leads to late detection of string1 ~= string2 for
strings of equal hash...
>> 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.
>
Either changing Interval>>#= or Interval>>#hash is NECESSARY.
I note that Interval is used for Text selection, and in this context
(3 to: 2) is different from (4 to: 3), though they both equal #().
But this usage is related to another oddity (empty Interval have a
first and a last element !).
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.
A general purpose library has to be robust, reliable and provide
repeatable behavior.
If behavior changes just because of allocated size of a container,
then it is a bad library.
I feel OK with the solution of having Array ~= Interval, if we have to
trade this feature against spoiling hashedCollection efficiency.
Of course, this could impact some code...
Nicolas
> _______________________________________________
> Pharo-project mailing list
> Pharo-project(a)lists.gforge.inria.fr
> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
>
Oct. 25, 2009
Re: [Pharo-project] Some bugs I ran into while working on hashing
by Nicolas Cellier
2009/10/25 Andres Valloud <avalloud(a)smalltalk.comcastbiz.net>:
>
> isPrime
>
> Â Â | guess guessSquared delta selfSqrtFloor |
> Â Â self <= 1 ifTrue: [^self error: 'operation undefined'].
> Â Â self even ifTrue: [^self = 2].
> Â Â guess := 1 bitShift: self highBit + 1 // 2.
> Â Â [
> Â Â Â Â guessSquared := guess * guess.
> Â Â Â Â delta := guessSquared - self // (guess bitShift: 1).
> Â Â Â Â delta = 0
> Â Â ] whileFalse: [guess := guess - delta].
> Â Â guessSquared = self ifFalse: [guess := guess - 1].
> Â Â selfSqrtFloor := guess.
> Â Â 3 to: selfSqrtFloor by: 2 do: [:each | self \\ each = 0 ifTrue:
> [^false]].
> Â Â ^true
>
>
> Also, the above code can be used to implement sqrtFloor and sqrtRounded
> in Integer. Â I am sure Nicolas Cellier remembers this :).
If http://bugs.squeak.org were not down, I would even provide a link
with these enhancements
>
> Andres.
>
> _______________________________________________
> Pharo-project mailing list
> Pharo-project(a)lists.gforge.inria.fr
> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
>
Oct. 25, 2009
[Pharo-project] ClassOrganizer oddities
by Igor Stasenko
I discovered a puzzling behavior:
removeElement: element
| oldCat |
oldCat := self categoryOfElement: element.
SystemChangeNotifier uniqueInstance doSilently: [
super removeElement: element].
self notifyOfChangedSelector: element from: oldCat to: (self
categoryOfElement: element).
I staring at it and i wonder, what the author meant by doing:
super removeElement: element
which effectively wipes out given element, but then next line uses:
self categoryOfElement: element
huh???
--
Best regards,
Igor Stasenko AKA sig.
Oct. 25, 2009
Re: [Pharo-project] Some bugs I ran into while working on hashing
by Stéphane Ducasse
thanks andres
can you open bug entries?
> Hello, are these problems known? I am using the latest RC build.
>
> * Create changeset X. Touch method Foo>>bar. Create changeset Y.
> Touch method Foo>>bar again. Fileout changeset X. The fileout has
> the
> code for changeset Y.
It has always been like that in squeak since years. in Squeak cs do
not record actual change
but just that something changed.
> * Delete the first ! in a changeset with a preamble. Try to load it
> from the file tool. You get a syntax error. However, the progress
> bar
> does not go away. Is the file handle released?
>
> * Integer>>isPrime should not be probabilistic. Suggestion: rename it
> to Integer>>isMostLikelyPrime or something similar. Implement a
> deterministic prime check for isPrime (even if it is slow --- users
> then
> can decide whether they want a deterministic or probabilistic answer).
> Here's a rough sketch of Integer>>isPrime:
>
> isPrime
>
> | guess guessSquared delta selfSqrtFloor |
> self <= 1 ifTrue: [^self error: 'operation undefined'].
> self even ifTrue: [^self = 2].
> guess := 1 bitShift: self highBit + 1 // 2.
> [
> guessSquared := guess * guess.
> delta := guessSquared - self // (guess bitShift: 1).
> delta = 0
> ] whileFalse: [guess := guess - delta].
> guessSquared = self ifFalse: [guess := guess - 1].
> selfSqrtFloor := guess.
> 3 to: selfSqrtFloor by: 2 do: [:each | self \\ each = 0 ifTrue:
> [^false]].
> ^true
>
>
> Also, the above code can be used to implement sqrtFloor and
> sqrtRounded
> in Integer. I am sure Nicolas Cellier remembers this :). Finally,
> I'm
> not sure that isPrime should fail with "undefined operation" if the
> receiver is <= 1. 1 is certainly not prime. Primes must be positive,
> so zero and the negatives could just answer false. ???...
>
> * Open an inspector on e.g.: Smalltalk. In the code pane, type:
>
> self keys inject: Set new into: [:t :x | t add: x class; yourself]
>
> Using the mouse, select the expression, and inspect the result using
> the
> right button menu item. The result comes up. However, the
> inspector on
> Smalltalk experiences a failure in one of its panes because lines is
> nil
> in MultiNewParagraph(NewParagraph)>>fastFindFirstLineSuchThat:
>
> Andres.
>
> _______________________________________________
> Pharo-project mailing list
> Pharo-project(a)lists.gforge.inria.fr
> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
Oct. 25, 2009