Pharo-dev
By thread
pharo-dev@lists.pharo.org
By month
Messages by month
- ----- 2026 -----
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- 7 participants
- 144631 messages
Re: [Pharo-project] Wow... we've closed a lot of issues
by Nicolas Cellier
You must also ask how many issues you have created since 1.4, because
I doubt there are 1500 issues applying to 1.4.
It's not a critic.
It simply reflect the fact that it is necessary to temporarily break
things in order to change underlying system (events, text, browser
etc...)
Especially when the system has evolved up to a point where it is
fragile and hardly maintainable.
Nicolas
2013/2/14 Sean P. DeNigris <sean(a)clipperadams.com>:
> I was just doing some housecleaning, deleting some old bug fix images and I
> was struck by how many important things we've accomplished. I'm still
> dumbfounded that a community of our size has resolved 1548 issues since 1.4.
>
> Cheers,
> Sean
>
>
>
> --
> View this message in context: http://forum.world.st/Wow-we-ve-closed-a-lot-of-issues-tp4669901.html
> Sent from the Pharo Smalltalk mailing list archive at Nabble.com.
>
Feb. 14, 2013
Re: [Pharo-project] Rectangle>>intersects: change Rationale
by stephane ducasse
On Feb 14, 2013, at 10:28 AM, Nicolas Cellier <nicolas.cellier.aka.nice(a)gmail.com> wrote:
> Hi Stephane,
> I added the exception just to instrument code and trace the usage of
> degenerated Rectangles.
>
> You must execute the MessageTally snippet in a workspace and then do
> some normal Pharo activity (since I presume you have some developer
> activity, open a MC browser or system browser, select a method, browse
> implementors, etcâ¦)
Ok I was nicely waiting :)
>
> The snippet does emulate the World activity, but is catching the
> DegeneratedRectangle notification and tallying the call stack each
> time this notification is raised.
>
> You then get a nice report of each and every call stack that raised a
> DegeneratedRectangle...
>
> Inserting a halt in place of the notification in the hope to debug it
> is impossible (try it)
> Otherwise you can try and use haltOnce, but IMO it's too limited.
>
> Nicolas
>
> 2013/2/14 stephane ducasse <stephane.ducasse(a)free.fr>:
>> Nicolas
>>
>> I did what you suggest
>>
>>> Notification subclass: #DegeneratedRectangle
>>> instanceVariableNames: ''
>>> classVariableNames: ''
>>> poolDictionaries: ''
>>> category: 'Kernel-BasicObjects'
>>>
>>> Rectangle>>setOrigin: topLeft corner: bottomRight
>>> origin := topLeft.
>>> corner := bottomRight.
>>> (self width < 0 or: [ self height < 0 ]) ifTrue: [
>>> DegeneratedRectangle signal ]
>>>
>>> Then in a workspace:
>>>
>>> tally := MessageTally new.
>>> tally spyEvery: 100 on: ['em ezilaitini ot si siht' reverse].
>>> tally class: World class method: World class>>#doOneCycle.
>>> "middle lines begin"
>>> tallyEnd := false.
>>> [(Delay forSeconds: 300) wait. tallyEnd := true] fork.
>>> [[World doOneCycle. Processor yield.tallyEnd] whileFalse]
>>> on: DegeneratedRectangle
>>> do: [:exc | tally tally: exc signalerContext by: 1.
>>> exc resume].
>>> (StringHolder new contents:
>>> (String streamContents: [:s | tally report: s]))
>>> openLabel: 'DegeneratedRectangle Spy Results'.
>>> "middle lines end"
>>> tally close.
>>>
>>
>> But I get nothing 20531
>> Then I do not understand the trace you sent where is the information about the wrong rectangle in it.
>>
>>
>>
>>
>>> and here we go:
>>>
>>> - 371 tallies, 2 msec.
>>>
>>> **Tree**
>>> --------------------------------
>>> Process: other processes
>>> --------------------------------
>>> 38.3% {1ms} NautilusUI(AbstractNautilusUI)>>browseMessages
>>> 38.3% {1ms} NautilusUI(AbstractTool)>>browseMessagesFrom:
>>> 38.3% {1ms}
>>> NautilusUI(AbstractTool)>>getSelectorAndSendQuery:to:with:selector:
>>> 38.3% {1ms} SystemNavigation>>browseAllImplementorsOf:
>>> 38.3% {1ms} SystemNavigation>>browseImplementorsOf:name:autoSelect:
>>> 38.3% {1ms} SystemNavigation>>browseMessageList:name:autoSelect:
>>> 38.3% {1ms} MessageBrowser class>>openMessageList:name:autoSelect:
>>> 38.3% {1ms} MessageBrowser>>openWithSpec
>>> 38.3% {1ms} MessageBrowser(ComposableModel)>>openWithSpec
>>> 38.3% {1ms} MessageBrowser(ComposableModel)>>openWithSpec:
>>> 38.3% {1ms} WindowModel>>openWithSpec:
>>> 32.1% {1ms} WindowModel>>buildWithSpec:
>>> |24.8% {0ms} WindowModel>>addModelIn:withSpec:
>>> | |22.9% {0ms}
>>> MessageBrowser(ComposableModel)>>buildWithSpec:
>>> | | |19.4% {0ms} SpecInterpreter
>>> class>>buildWidgetFor:withSpec:
>>> | | | |19.4% {0ms} SpecInterpreter
>>> class>>interpretASpec:model:
>>> | | | | 19.4% {0ms} SpecInterpreter
>>> class>>interpretASpec:model:superSpec:
>>> | | | | 19.4% {0ms} SpecInterpreter
>>> class>>private_interpretASpec:model:superSpec:
>>> | | | | 19.4% {0ms}
>>> SpecInterpreter>>interpretASpec:model:superSpec:
>>> | | | | 19.4% {0ms}
>>> SpecInterpreter>>interpretASpec:
>>> | | | | 19.4% {0ms}
>>> SpecInterpreter class>>private_interpretASpec:model:superSpec:
>>> | | | | 19.4% {0ms}
>>> SpecInterpreter>>interpretASpec:model:superSpec:
>>> | | | | 19.4% {0ms}
>>> SpecInterpreter>>interpretASpec:
>>> | | | | 19.4% {0ms}
>>> SpecInterpreter>>retreiveSpecFrom:
>>> | | | | 9.7% {0ms}
>>> SpecInterpreter class>>private_interpretASpec:model:superSpec:
>>> | | | | |9.7% {0ms}
>>> SpecInterpreter>>interpretASpec:model:superSpec:
>>> | | | | | 9.7% {0ms}
>>> SpecInterpreter>>interpretASpec:
>>> | | | | | 9.7% {0ms}
>>> SpecInterpreter class>>private_interpretASpec:model:superSpec:
>>> | | | | | 9.7%
>>> {0ms} SpecInterpreter>>interpretASpec:model:superSpec:
>>> | | | | | 9.7%
>>> {0ms} SpecInterpreter>>interpretASpec:
>>> | | | | | 9.7%
>>> {0ms} SpecInterpreter>>retreiveSpecFrom:
>>> | | | | |
>>> 4.9% {0ms} SpecInterpreter
>>> class>>private_interpretASpec:model:superSpec:
>>> | | | | |
>>> |4.9% {0ms} SpecInterpreter>>interpretASpec:model:superSpec:
>>> | | | | | |
>>> 4.9% {0ms} SpecInterpreter>>interpretASpec:
>>> | | | | | |
>>> 4.9% {0ms} MultiColumnListModel(ComposableModel)>>private_buildWithSpec
>>> | | | | | |
>>> 4.9% {0ms}
>>> MultiColumnListModel(ComposableModel)>>private_buildWithSpec:
>>> | | | | | |
>>> 4.9% {0ms} SpecInterpreter
>>> class>>private_buildWidgetFor:withSpec:
>>> | | | | | |
>>> 4.9% {0ms} SpecInterpreter
>>> class>>private_interpretASpec:model:
>>> | | | | | |
>>> 4.9% {0ms} SpecInterpreter>>interpretASpec:model:
>>> | | | | | |
>>> 4.9% {0ms}
>>> SpecInterpreter>>interpretASpec:model:superSpec:
>>> | | | | | |
>>> 4.9% {0ms} SpecInterpreter>>interpretASpec:
>>> | | | | | |
>>> 2.7% {0ms} SpecInterpreter
>>> class>>private_interpretASpec:model:superSpec:
>>> | | | | | |
>>> |2.7% {0ms}
>>> SpecInterpreter>>interpretASpec:model:superSpec:
>>> | | | | | |
>>> | 2.7% {0ms} SpecInterpreter>>interpretASpec:
>>> | | | | | |
>>> | 2.7% {0ms}
>>> DropListModel(ComposableModel)>>private_buildWithSpec
>>> | | | | | |
>>> | 2.7% {0ms}
>>> DropListModel(ComposableModel)>>private_buildWithSpec:
>>> | | | | | |
>>> | 2.7% {0ms} SpecInterpreter
>>> class>>private_buildWidgetFor:withSpec:
>>> | | | | | |
>>> | 2.7% {0ms} SpecInterpreter
>>> class>>private_interpretASpec:model:
>>> | | | | | |
>>> | 2.7% {0ms}
>>> SpecInterpreter>>interpretASpec:model:
>>> | | | | | |
>>> | 2.7% {0ms}
>>> SpecInterpreter>>interpretASpec:model:superSpec:
>>> | | | | | |
>>> | 2.7% {0ms}
>>> SpecInterpreter>>interpretASpec:
>>> | | | | | |
>>> | 2.7% {0ms}
>>> SpecInterpreter>>actionToPerformWithSelector:arguments:
>>> | | | | | |
>>> | 2.7% {0ms}
>>> DropListSpec(AbstractSpec)>>instance
>>> | | | | | |
>>> | 2.7% {0ms}
>>> DropListSpec(AbstractSpec)>>initializeInstance
>>> | | | | | |
>>> | 2.7% {0ms} SpecInterpreter
>>> class>>private_interpretASpec:model:
>>> | | | | | |
>>> | 2.7% {0ms}
>>> SpecInterpreter>>interpretASpec:model:
>>> | | | | | |
>>> | 2.7% {0ms}
>>> SpecInterpreter>>interpretASpec:model:superSpec:
>>> | | | | | |
>>> | 2.7% {0ms}
>>> SpecInterpreter>>interpretASpec:
>>> | | | | | |
>>> | 2.7% {0ms}
>>> SpecInterpreter>>retreiveSpecFrom:
>>> | | | | | |
>>> | 1.3% {0ms}
>>> SpecInterpreter class>>private_interpretASpec:model:superSpec:
>>> | | | | | |
>>> | |1.3% {0ms}
>>> SpecInterpreter>>interpretASpec:model:superSpec:
>>> | | | | | |
>>> | | 1.3% {0ms}
>>> SpecInterpreter>>interpretASpec:
>>> | | | | | |
>>> | | 1.3%
>>> {0ms} SpecInterpreter>>convertSymbolOfClassToInstance:
>>> | | | | | |
>>> | | 1.3%
>>> {0ms} DropListMorph class(Behavior)>>new
>>> | | | | | |
>>> | | 1.3%
>>> {0ms} DropListMorph>>initialize
>>> | | | | | |
>>> | 1.3% {0ms}
>>> RawSpec>>defaultReceiver:model:
>>> | | | | | |
>>> | 1.3% {0ms}
>>> SpecInterpreter class>>private_interpretASpec:model:
>>> | | | | | |
>>> | 1.3% {0ms}
>>> SpecInterpreter>>interpretASpec:model:
>>> | | | | | |
>>> | 1.3% {0ms}
>>> SpecInterpreter>>interpretASpec:model:superSpec:
>>> | | | | | |
>>> | 1.3%
>>> {0ms} SpecInterpreter>>interpretASpec:
>>> | | | | | |
>>> | 1.3%
>>> {0ms} SpecInterpreter>>convertSymbolOfClassToInstance:
>>> | | | | | |
>>> | 1.3%
>>> {0ms} DropListMorph class(Behavior)>>new
>>> | | | | | |
>>> |
>>> 1.3% {0ms} DropListMorph>>initialize
>>> | | | | | |
>>> 2.2% {0ms}
>>> SpecInterpreter>>actionToPerformWithSelector:arguments:
>>> | | | | | |
>>> 2.2% {0ms}
>>> MultiColumnListSpec(AbstractSpec)>>instance
>>> | | | | | |
>>> 2.2% {0ms}
>>> MultiColumnListSpec(AbstractSpec)>>initializeInstance
>>> | | | | | |
>>> 2.2% {0ms} SpecInterpreter
>>> class>>private_interpretASpec:model:
>>> | | | | | |
>>> 2.2% {0ms}
>>> SpecInterpreter>>interpretASpec:model:
>>> | | | | | |
>>> 2.2% {0ms}
>>> SpecInterpreter>>interpretASpec:model:superSpec:
>>> | | | | | |
>>> 2.2% {0ms}
>>> SpecInterpreter>>interpretASpec:
>>> | | | | | |
>>> 2.2% {0ms}
>>> SpecInterpreter>>retreiveSpecFrom:
>>> | | | | |
>>> 4.9% {0ms} RawSpec>>defaultReceiver:model:
>>> | | | | |
>>> 4.9% {0ms} SpecInterpreter class>>private_interpretASpec:model:
>>> | | | | |
>>> 4.9% {0ms} SpecInterpreter>>interpretASpec:model:
>>> | | | | |
>>> 4.9% {0ms} SpecInterpreter>>interpretASpec:model:superSpec:
>>> | | | | |
>>> 4.9% {0ms} SpecInterpreter>>interpretASpec:
>>> | | | | |
>>> 4.9% {0ms}
>>> MultiColumnListModel(ComposableModel)>>private_buildWithSpec
>>> | | | | |
>>> 4.9% {0ms}
>>> MultiColumnListModel(ComposableModel)>>private_buildWithSpec:
>>> | | | | |
>>> 4.9% {0ms} SpecInterpreter
>>> class>>private_buildWidgetFor:withSpec:
>>> | | | | |
>>> 4.9% {0ms} SpecInterpreter
>>> class>>private_interpretASpec:model:
>>> | | | | |
>>> 4.9% {0ms} SpecInterpreter>>interpretASpec:model:
>>> | | | | |
>>> 4.9% {0ms}
>>> SpecInterpreter>>interpretASpec:model:superSpec:
>>> | | | | |
>>> 4.9% {0ms} SpecInterpreter>>interpretASpec:
>>> | | | | |
>>> 2.7% {0ms} SpecInterpreter
>>> class>>private_interpretASpec:model:superSpec:
>>> | | | | |
>>> |2.7% {0ms}
>>> SpecInterpreter>>interpretASpec:model:superSpec:
>>> | | | | |
>>> | 2.7% {0ms} SpecInterpreter>>interpretASpec:
>>> | | | | |
>>> | 2.7% {0ms}
>>> DropListModel(ComposableModel)>>private_buildWithSpec
>>> | | | | |
>>> | 2.7% {0ms}
>>> DropListModel(ComposableModel)>>private_buildWithSpec:
>>> | | | | |
>>> | 2.7% {0ms} SpecInterpreter
>>> class>>private_buildWidgetFor:withSpec:
>>> | | | | |
>>> | 2.7% {0ms} SpecInterpreter
>>> class>>private_interpretASpec:model:
>>> | | | | |
>>> | 2.7% {0ms}
>>> SpecInterpreter>>interpretASpec:model:
>>> | | | | |
>>> | 2.7% {0ms}
>>> SpecInterpreter>>interpretASpec:model:superSpec:
>>> | | | | |
>>> | 2.7% {0ms}
>>> SpecInterpreter>>interpretASpec:
>>> | | | | |
>>> | 2.7% {0ms}
>>> SpecInterpreter>>actionToPerformWithSelector:arguments:
>>> | | | | |
>>> | 2.7% {0ms}
>>> DropListSpec(AbstractSpec)>>instance
>>> | | | | |
>>> | 2.7% {0ms}
>>> DropListSpec(AbstractSpec)>>initializeInstance
>>> | | | | |
>>> | 2.7% {0ms}
>>> SpecInterpreter class>>private_interpretASpec:model:
>>> | | | | |
>>> | 2.7% {0ms}
>>> SpecInterpreter>>interpretASpec:model:
>>> | | | | |
>>> | 2.7% {0ms}
>>> SpecInterpreter>>interpretASpec:model:superSpec:
>>> | | | | |
>>> | 2.7% {0ms}
>>> SpecInterpreter>>interpretASpec:
>>> | | | | |
>>> | 2.7% {0ms}
>>> SpecInterpreter>>retreiveSpecFrom:
>>> | | | | |
>>> | 1.3% {0ms}
>>> SpecInterpreter class>>private_interpretASpec:model:superSpec:
>>> | | | | |
>>> | |1.3% {0ms}
>>> SpecInterpreter>>interpretASpec:model:superSpec:
>>> | | | | |
>>> | | 1.3%
>>> {0ms} SpecInterpreter>>interpretASpec:
>>> | | | | |
>>> | | 1.3%
>>> {0ms} SpecInterpreter>>convertSymbolOfClassToInstance:
>>> | | | | |
>>> | | 1.3%
>>> {0ms} DropListMorph class(Behavior)>>new
>>> | | | | |
>>> | |
>>> 1.3% {0ms} DropListMorph>>initialize
>>> | | | | |
>>> | 1.3% {0ms}
>>> RawSpec>>defaultReceiver:model:
>>> | | | | |
>>> | 1.3% {0ms}
>>> SpecInterpreter class>>private_interpretASpec:model:
>>> | | | | |
>>> | 1.3%
>>> {0ms} SpecInterpreter>>interpretASpec:model:
>>> | | | | |
>>> | 1.3%
>>> {0ms} SpecInterpreter>>interpretASpec:model:superSpec:
>>> | | | | |
>>> | 1.3%
>>> {0ms} SpecInterpreter>>interpretASpec:
>>> | | | | |
>>> |
>>> 1.3% {0ms} SpecInterpreter>>convertSymbolOfClassToInstance:
>>> | | | | |
>>> |
>>> 1.3% {0ms} DropListMorph class(Behavior)>>new
>>> | | | | |
>>> |
>>> 1.3% {0ms} DropListMorph>>initialize
>>> | | | | |
>>> 2.2% {0ms}
>>> SpecInterpreter>>actionToPerformWithSelector:arguments:
>>> | | | | |
>>> 2.2% {0ms}
>>> MultiColumnListSpec(AbstractSpec)>>instance
>>> | | | | |
>>> 2.2% {0ms}
>>> MultiColumnListSpec(AbstractSpec)>>initializeInstance
>>> | | | | |
>>> 2.2% {0ms} SpecInterpreter
>>> class>>private_interpretASpec:model:
>>> | | | | |
>>> 2.2% {0ms}
>>> SpecInterpreter>>interpretASpec:model:
>>> | | | | |
>>> 2.2% {0ms}
>>> SpecInterpreter>>interpretASpec:model:superSpec:
>>> | | | | |
>>> 2.2% {0ms}
>>> SpecInterpreter>>interpretASpec:
>>> | | | | |
>>> 2.2% {0ms}
>>> SpecInterpreter>>retreiveSpecFrom:
>>> | | | | 9.7% {0ms}
>>> RawSpec>>defaultReceiver:model:
>>> | | | | 9.7% {0ms}
>>> SpecInterpreter class>>private_interpretASpec:model:
>>> | | | | 9.7% {0ms}
>>> SpecInterpreter>>interpretASpec:model:
>>> | | | | 9.7% {0ms}
>>> SpecInterpreter>>interpretASpec:model:superSpec:
>>> | | | | 9.7% {0ms}
>>> SpecInterpreter>>interpretASpec:
>>> | | | | 9.7%
>>> {0ms} SpecInterpreter class>>private_interpretASpec:model:superSpec:
>>> | | | | 9.7%
>>> {0ms} SpecInterpreter>>interpretASpec:model:superSpec:
>>> | | | | 9.7%
>>> {0ms} SpecInterpreter>>interpretASpec:
>>> | | | |
>>> 9.7% {0ms} SpecInterpreter>>retreiveSpecFrom:
>>> | | | |
>>> 4.9% {0ms} SpecInterpreter
>>> class>>private_interpretASpec:model:superSpec:
>>> | | | |
>>> |4.9% {0ms} SpecInterpreter>>interpretASpec:model:superSpec:
>>> | | | |
>>> | 4.9% {0ms} SpecInterpreter>>interpretASpec:
>>> | | | |
>>> | 4.9% {0ms}
>>> MultiColumnListModel(ComposableModel)>>private_buildWithSpec
>>> | | | |
>>> | 4.9% {0ms}
>>> MultiColumnListModel(ComposableModel)>>private_buildWithSpec:
>>> | | | |
>>> | 4.9% {0ms} SpecInterpreter
>>> class>>private_buildWidgetFor:withSpec:
>>> | | | |
>>> | 4.9% {0ms} SpecInterpreter
>>> class>>private_interpretASpec:model:
>>> | | | |
>>> | 4.9% {0ms} SpecInterpreter>>interpretASpec:model:
>>> | | | |
>>> | 4.9% {0ms}
>>> SpecInterpreter>>interpretASpec:model:superSpec:
>>> | | | |
>>> | 4.9% {0ms} SpecInterpreter>>interpretASpec:
>>> | | | |
>>> | 2.7% {0ms} SpecInterpreter
>>> class>>private_interpretASpec:model:superSpec:
>>> | | | |
>>> | |2.7% {0ms}
>>> SpecInterpreter>>interpretASpec:model:superSpec:
>>> | | | |
>>> | | 2.7% {0ms} SpecInterpreter>>interpretASpec:
>>> | | | |
>>> | | 2.7% {0ms}
>>> DropListModel(ComposableModel)>>private_buildWithSpec
>>> | | | |
>>> | | 2.7% {0ms}
>>> DropListModel(ComposableModel)>>private_buildWithSpec:
>>> | | | |
>>> | | 2.7% {0ms} SpecInterpreter
>>> class>>private_buildWidgetFor:withSpec:
>>> | | | |
>>> | | 2.7% {0ms} SpecInterpreter
>>> class>>private_interpretASpec:model:
>>> | | | |
>>> | | 2.7% {0ms}
>>> SpecInterpreter>>interpretASpec:model:
>>> | | | |
>>> | | 2.7% {0ms}
>>> SpecInterpreter>>interpretASpec:model:superSpec:
>>> | | | |
>>> | | 2.7% {0ms}
>>> SpecInterpreter>>interpretASpec:
>>> | | | |
>>> | | 2.7% {0ms}
>>> SpecInterpreter>>actionToPerformWithSelector:arguments:
>>> | | | |
>>> | | 2.7% {0ms}
>>> DropListSpec(AbstractSpec)>>instance
>>> | | | |
>>> | | 2.7% {0ms}
>>> DropListSpec(AbstractSpec)>>initializeInstance
>>> | | | |
>>> | | 2.7% {0ms}
>>> SpecInterpreter class>>private_interpretASpec:model:
>>> | | | |
>>> | | 2.7% {0ms}
>>> SpecInterpreter>>interpretASpec:model:
>>> | | | |
>>> | | 2.7% {0ms}
>>> SpecInterpreter>>interpretASpec:model:superSpec:
>>> | | | |
>>> | | 2.7% {0ms}
>>> SpecInterpreter>>interpretASpec:
>>> | | | |
>>> | | 2.7% {0ms}
>>> SpecInterpreter>>retreiveSpecFrom:
>>> | | | |
>>> | | 1.3% {0ms}
>>> SpecInterpreter class>>private_interpretASpec:model:superSpec:
>>> | | | |
>>> | | |1.3% {0ms}
>>> SpecInterpreter>>interpretASpec:model:superSpec:
>>> | | | |
>>> | | | 1.3%
>>> {0ms} SpecInterpreter>>interpretASpec:
>>> | | | |
>>> | | | 1.3%
>>> {0ms} SpecInterpreter>>convertSymbolOfClassToInstance:
>>> | | | |
>>> | | | 1.3%
>>> {0ms} DropListMorph class(Behavior)>>new
>>> | | | |
>>> | | |
>>> 1.3% {0ms} DropListMorph>>initialize
>>> | | | |
>>> | | 1.3% {0ms}
>>> RawSpec>>defaultReceiver:model:
>>> | | | |
>>> | | 1.3% {0ms}
>>> SpecInterpreter class>>private_interpretASpec:model:
>>> | | | |
>>> | | 1.3%
>>> {0ms} SpecInterpreter>>interpretASpec:model:
>>> | | | |
>>> | | 1.3%
>>> {0ms} SpecInterpreter>>interpretASpec:model:superSpec:
>>> | | | |
>>> | | 1.3%
>>> {0ms} SpecInterpreter>>interpretASpec:
>>> | | | |
>>> | |
>>> 1.3% {0ms} SpecInterpreter>>convertSymbolOfClassToInstance:
>>> | | | |
>>> | |
>>> 1.3% {0ms} DropListMorph class(Behavior)>>new
>>> | | | |
>>> | |
>>> 1.3% {0ms} DropListMorph>>initialize
>>> | | | |
>>> | 2.2% {0ms}
>>> SpecInterpreter>>actionToPerformWithSelector:arguments:
>>> | | | |
>>> | 2.2% {0ms}
>>> MultiColumnListSpec(AbstractSpec)>>instance
>>> | | | |
>>> | 2.2% {0ms}
>>> MultiColumnListSpec(AbstractSpec)>>initializeInstance
>>> | | | |
>>> | 2.2% {0ms} SpecInterpreter
>>> class>>private_interpretASpec:model:
>>> | | | |
>>> | 2.2% {0ms}
>>> SpecInterpreter>>interpretASpec:model:
>>> | | | |
>>> | 2.2% {0ms}
>>> SpecInterpreter>>interpretASpec:model:superSpec:
>>> | | | |
>>> | 2.2% {0ms}
>>> SpecInterpreter>>interpretASpec:
>>> | | | |
>>> | 2.2% {0ms}
>>> SpecInterpreter>>retreiveSpecFrom:
>>> | | | |
>>> 4.9% {0ms} RawSpec>>defaultReceiver:model:
>>> | | | |
>>> 4.9% {0ms} SpecInterpreter class>>private_interpretASpec:model:
>>> | | | |
>>> 4.9% {0ms} SpecInterpreter>>interpretASpec:model:
>>> | | | |
>>> 4.9% {0ms} SpecInterpreter>>interpretASpec:model:superSpec:
>>> | | | |
>>> 4.9% {0ms} SpecInterpreter>>interpretASpec:
>>> | | | |
>>> 4.9% {0ms}
>>> MultiColumnListModel(ComposableModel)>>private_buildWithSpec
>>> | | | |
>>> 4.9% {0ms}
>>> MultiColumnListModel(ComposableModel)>>private_buildWithSpec:
>>> | | | |
>>> 4.9% {0ms} SpecInterpreter
>>> class>>private_buildWidgetFor:withSpec:
>>> | | | |
>>> 4.9% {0ms} SpecInterpreter
>>> class>>private_interpretASpec:model:
>>> | | | |
>>> 4.9% {0ms} SpecInterpreter>>interpretASpec:model:
>>> | | | |
>>> 4.9% {0ms}
>>> SpecInterpreter>>interpretASpec:model:superSpec:
>>> | | | |
>>> 4.9% {0ms} SpecInterpreter>>interpretASpec:
>>> | | | |
>>> 2.7% {0ms} SpecInterpreter
>>> class>>private_interpretASpec:model:superSpec:
>>> | | | |
>>> |2.7% {0ms}
>>> SpecInterpreter>>interpretASpec:model:superSpec:
>>> | | | |
>>> | 2.7% {0ms}
>>> SpecInterpreter>>interpretASpec:
>>> | | | |
>>> | 2.7% {0ms}
>>> DropListModel(ComposableModel)>>private_buildWithSpec
>>> | | | |
>>> | 2.7% {0ms}
>>> DropListModel(ComposableModel)>>private_buildWithSpec:
>>> | | | |
>>> | 2.7% {0ms} SpecInterpreter
>>> class>>private_buildWidgetFor:withSpec:
>>> | | | |
>>> | 2.7% {0ms} SpecInterpreter
>>> class>>private_interpretASpec:model:
>>> | | | |
>>> | 2.7% {0ms}
>>> SpecInterpreter>>interpretASpec:model:
>>> | | | |
>>> | 2.7% {0ms}
>>> SpecInterpreter>>interpretASpec:model:superSpec:
>>> | | | |
>>> | 2.7% {0ms}
>>> SpecInterpreter>>interpretASpec:
>>> | | | |
>>> | 2.7% {0ms}
>>> SpecInterpreter>>actionToPerformWithSelector:arguments:
>>> | | | |
>>> | 2.7% {0ms}
>>> DropListSpec(AbstractSpec)>>instance
>>> | | | |
>>> | 2.7% {0ms}
>>> DropListSpec(AbstractSpec)>>initializeInstance
>>> | | | |
>>> | 2.7% {0ms}
>>> SpecInterpreter class>>private_interpretASpec:model:
>>> | | | |
>>> | 2.7% {0ms}
>>> SpecInterpreter>>interpretASpec:model:
>>> | | | |
>>> | 2.7% {0ms}
>>> SpecInterpreter>>interpretASpec:model:superSpec:
>>> | | | |
>>> | 2.7% {0ms}
>>> SpecInterpreter>>interpretASpec:
>>> | | | |
>>> | 2.7% {0ms}
>>> SpecInterpreter>>retreiveSpecFrom:
>>> | | | |
>>> | 1.3% {0ms}
>>> SpecInterpreter class>>private_interpretASpec:model:superSpec:
>>> | | | |
>>> | |1.3%
>>> {0ms} SpecInterpreter>>interpretASpec:model:superSpec:
>>> | | | |
>>> | | 1.3%
>>> {0ms} SpecInterpreter>>interpretASpec:
>>> | | | |
>>> | |
>>> 1.3% {0ms} SpecInterpreter>>convertSymbolOfClassToInstance:
>>> | | | |
>>> | |
>>> 1.3% {0ms} DropListMorph class(Behavior)>>new
>>> | | | |
>>> | |
>>> 1.3% {0ms} DropListMorph>>initialize
>>> | | | |
>>> | 1.3% {0ms}
>>> RawSpec>>defaultReceiver:model:
>>> | | | |
>>> | 1.3%
>>> {0ms} SpecInterpreter class>>private_interpretASpec:model:
>>> | | | |
>>> | 1.3%
>>> {0ms} SpecInterpreter>>interpretASpec:model:
>>> | | | |
>>> | 1.3%
>>> {0ms} SpecInterpreter>>interpretASpec:model:superSpec:
>>> | | | |
>>> |
>>> 1.3% {0ms} SpecInterpreter>>interpretASpec:
>>> | | | |
>>> |
>>> 1.3% {0ms} SpecInterpreter>>convertSymbolOfClassToInstance:
>>> | | | |
>>> |
>>> 1.3% {0ms} DropListMorph class(Behavior)>>new
>>> | | | |
>>> |
>>> 1.3% {0ms} DropListMorph>>initialize
>>> | | | |
>>> 2.2% {0ms}
>>> SpecInterpreter>>actionToPerformWithSelector:arguments:
>>> | | | |
>>> 2.2% {0ms}
>>> MultiColumnListSpec(AbstractSpec)>>instance
>>> | | | |
>>> 2.2% {0ms}
>>> MultiColumnListSpec(AbstractSpec)>>initializeInstance
>>> | | | |
>>> 2.2% {0ms} SpecInterpreter
>>> class>>private_interpretASpec:model:
>>> | | | |
>>> 2.2% {0ms}
>>> SpecInterpreter>>interpretASpec:model:
>>> | | | |
>>> 2.2% {0ms}
>>> SpecInterpreter>>interpretASpec:model:superSpec:
>>> | | | |
>>> 2.2% {0ms}
>>> SpecInterpreter>>interpretASpec:
>>> | | | |
>>> 2.2% {0ms}
>>> SpecInterpreter>>retreiveSpecFrom:
>>> | | |3.5% {0ms}
>>> MessageBrowser(ComposableModel)>>ensureExtentFor:
>>> | | | 3.5% {0ms} PanelMorph(Morph)>>extent:
>>> | | | 3.5% {0ms} PanelMorph(Morph)>>changed
>>> | | | 3.5% {0ms}
>>> PanelMorph(Morph)>>privateFullBounds
>>> | | | 3.5% {0ms}
>>> PanelMorph(Morph)>>submorphBounds
>>> | | | 3.5% {0ms}
>>> PanelMorph(Morph)>>fullBounds
>>> | | | 3.5% {0ms}
>>> PanelMorph(Morph)>>doLayoutIn:
>>> | | | 3.5% {0ms}
>>> ProportionalLayout>>layout:in:
>>> | | | 3.5% {0ms}
>>> PluggableTextMorph(Morph)>>layoutProportionallyIn:
>>> | | | 3.2% {0ms}
>>> PluggableTextMorph(Morph)>>layoutInBounds:
>>> | | | 2.7% {0ms}
>>> PluggableTextMorph(Morph)>>bounds:
>>> | | | 1.6% {0ms}
>>> PluggableTextMorph>>extent:
>>> | |1.9% {0ms}
>>> StandardWindow(SystemWindow)>>addMorph:frame:
>>> | | 1.9% {0ms}
>>> StandardWindow(SystemWindow)>>addMorph:fullFrame:
>>> | | 1.9% {0ms} PanelMorph>>adoptPaneColor:
>>> | | 1.9% {0ms} PanelMorph(Morph)>>color:
>>> | | 1.9% {0ms} PanelMorph(Morph)>>changed
>>> | | 1.9% {0ms}
>>> PanelMorph(Morph)>>privateFullBounds
>>> | | 1.9% {0ms}
>>> PanelMorph(Morph)>>submorphBounds
>>> | | 1.9% {0ms}
>>> PanelMorph(Morph)>>fullBounds
>>> | | 1.9% {0ms}
>>> PanelMorph(Morph)>>doLayoutIn:
>>> | | 1.9% {0ms}
>>> ProportionalLayout>>layout:in:
>>> | | 1.9% {0ms}
>>> PluggableTextMorph(Morph)>>layoutProportionallyIn:
>>> | | 1.6% {0ms}
>>> PluggableTextMorph(Morph)>>layoutInBounds:
>>> |7.3% {0ms} SpecInterpreter
>>> class>>private_buildWidgetFor:withSpec:
>>> | 7.3% {0ms} SpecInterpreter
>>> class>>private_interpretASpec:model:
>>> | 7.3% {0ms} SpecInterpreter>>interpretASpec:model:
>>> | 7.3% {0ms}
>>> SpecInterpreter>>interpretASpec:model:superSpec:
>>> | 7.3% {0ms} SpecInterpreter>>interpretASpec:
>>> | 7.3% {0ms}
>>> SpecInterpreter>>actionToPerformWithSelector:arguments:
>>> | 7.3% {0ms}
>>> WindowSpec(AbstractSpec)>>instance
>>> | 7.3% {0ms} WindowSpec>>initializeInstance
>>> | 7.3% {0ms} StandardWindow
>>> class(Behavior)>>new
>>> | 7.3% {0ms} StandardWindow>>initialize
>>> | 3.8% {0ms}
>>> StandardWindow(SystemWindow)>>initialize
>>> | |3.5% {0ms}
>>> StandardWindow(SystemWindow)>>extent:
>>> | | 3.5% {0ms}
>>> StandardWindow(Morph)>>extent:
>>> | | 3.5% {0ms}
>>> StandardWindow(Morph)>>changed
>>> | | 3.5% {0ms}
>>> StandardWindow(Morph)>>privateFullBounds
>>> | | 3.5% {0ms}
>>> StandardWindow(Morph)>>submorphBounds
>>> | | 3.5% {0ms}
>>> AlignmentMorph(Morph)>>fullBounds
>>> | | 3.2% {0ms}
>>> AlignmentMorph(Morph)>>doLayoutIn:
>>> | | 3.2%
>>> {0ms} RowLayout>>layout:in:
>>> | | 3.0%
>>> {0ms} Point>>extent:
>>> | | 3.0%
>>> {0ms} Rectangle class>>origin:extent:
>>> | |
>>> 3.0% {0ms} Rectangle>>setOrigin:corner:
>>> | 3.5% {0ms}
>>> StandardWindow(SystemWindow)>>setWindowColor:
>>> | 3.5% {0ms}
>>> StandardWindow(SystemWindow)>>setStripeColorsFrom:
>>> | 3.5% {0ms}
>>> StandardWindow(Morph)>>fillStyle:
>>> | 3.5% {0ms}
>>> StandardWindow(Morph)>>changed
>>> | 3.5% {0ms}
>>> StandardWindow(Morph)>>privateFullBounds
>>> | 3.5% {0ms}
>>> StandardWindow(Morph)>>submorphBounds
>>> | 3.5% {0ms}
>>> AlignmentMorph(Morph)>>fullBounds
>>> | 3.2% {0ms}
>>> AlignmentMorph(Morph)>>doLayoutIn:
>>> | 3.2%
>>> {0ms} RowLayout>>layout:in:
>>> | 3.0%
>>> {0ms} Point>>extent:
>>> | 3.0%
>>> {0ms} Rectangle class>>origin:extent:
>>> |
>>> 3.0% {0ms} Rectangle>>setOrigin:corner:
>>> 6.2% {0ms} StandardWindow(Morph)>>openInWorld
>>> 6.2% {0ms} StandardWindow(SystemWindow)>>openInWorld:
>>> 3.5% {0ms} StandardWindow(Morph)>>bounds:
>>> |3.5% {0ms} StandardWindow(SystemWindow)>>position:
>>> | 3.5% {0ms} StandardWindow(Morph)>>position:
>>> | 3.5% {0ms} StandardWindow(Morph)>>fullBounds
>>> | 3.5% {0ms} StandardWindow(Morph)>>doLayoutIn:
>>> | 3.5% {0ms} ProportionalLayout>>layout:in:
>>> | 3.5% {0ms}
>>> AlignmentMorph(Morph)>>layoutProportionallyIn:
>>> | 3.5% {0ms}
>>> AlignmentMorph(Morph)>>fullBounds
>>> | 3.2% {0ms}
>>> AlignmentMorph(Morph)>>doLayoutIn:
>>> | 3.2% {0ms} RowLayout>>layout:in:
>>> | 3.0% {0ms} Point>>extent:
>>> | 3.0% {0ms} Rectangle
>>> class>>origin:extent:
>>> | 3.0% {0ms}
>>> Rectangle>>setOrigin:corner:
>>> 2.7% {0ms} StandardWindow>>openAsIsIn:
>>> 2.7% {0ms} StandardWindow(SystemWindow)>>openAsIsIn:
>>> 2.7% {0ms} StandardWindow(SystemWindow)>>activate
>>> 2.7% {0ms}
>>> StandardWindow(SystemWindow)>>navigateFocusForward
>>> 2.7% {0ms}
>>> StandardWindow(Morph)>>navigateFocusForward
>>> 2.7% {0ms}
>>> PluggableTextMorph(Morph)>>takeKeyboardFocus
>>> 2.7% {0ms} HandMorph>>newKeyboardFocus:
>>> 2.7% {0ms}
>>> PluggableTextMorph>>keyboardFocusChange:
>>> 2.7% {0ms}
>>> TextMorphForEditView(Morph)>>takeKeyboardFocus
>>> 2.7% {0ms}
>>> HandMorph>>newKeyboardFocus:
>>> 2.7% {0ms}
>>> TextMorphForEditView>>keyboardFocusChange:
>>> 2.7% {0ms}
>>> SmalltalkEditor(TextEditor)>>focused:
>>> 2.7% {0ms}
>>> SmalltalkEditingState>>focused:from:
>>> 2.7% {0ms}
>>> SmalltalkEditingState(EditingState)>>focused:from:
>>> 2.7% {0ms}
>>> EditorFindReplaceDialogWindow class>>on:
>>> 2.7% {0ms}
>>> EditorFindReplaceDialogWindow>>on:
>>> 2.7% {0ms}
>>> EditorFindReplaceDialogWindow(StandardWindow)>>model:
>>> 2.7% {0ms}
>>> EditorFindReplaceDialogWindow(SystemWindow)>>model:
>>> 2.7%
>>> {0ms} EditorFindReplaceDialogWindow(Morph)>>fillStyle:
>>> 2.7%
>>> {0ms} EditorFindReplaceDialogWindow(Morph)>>changed
>>> 2.7%
>>> {0ms} EditorFindReplaceDialogWindow(Morph)>>privateFullBounds
>>>
>>> 2.7% {0ms} EditorFindReplaceDialogWindow(Morph)>>submorphBounds
>>>
>>> 2.7% {0ms} AlignmentMorph(Morph)>>fullBounds
>>>
>>> 2.4% {0ms} AlignmentMorph(Morph)>>doLayoutIn:
>>>
>>> 2.4% {0ms} RowLayout>>layout:in:
>>>
>>> 2.2% {0ms} Point>>extent:
>>>
>>> 2.2% {0ms} Rectangle class>>origin:extent:
>>>
>>> 2.2% {0ms} Rectangle>>setOrigin:corner:
>>> 38.3% {1ms} MethodToolbar>>versionMethod
>>> 38.3% {1ms} AbstractTool>>browseVersionsFrom:
>>> 38.3% {1ms} VersionsBrowser
>>> class>>browseVersionsOf:class:meta:category:selector:
>>> 38.3% {1ms} VersionsBrowser
>>> class>>browseVersionsOf:class:meta:category:selector:lostMethodPointer:
>>> 38.3% {1ms} VersionsBrowser class(ChangeList
>>> class)>>open:name:multiSelect:
>>> 38.3% {1ms} VersionsBrowser class(ChangeList
>>> class)>>openAsMorph:name:multiSelect:
>>> 38.3% {1ms}
>>> VersionsBrowser(ChangeList)>>openAsMorphName:multiSelect:
>>> 28.0% {1ms} SystemWindow(Morph)>>openInWorld
>>> |28.0% {1ms} SystemWindow>>openInWorld:
>>> | 15.1% {0ms} SystemWindow(Morph)>>bounds:
>>> | |15.1% {0ms} SystemWindow>>position:
>>> | | 15.1% {0ms} SystemWindow(Morph)>>position:
>>> | | 15.1% {0ms} SystemWindow(Morph)>>fullBounds
>>> | | 15.1% {0ms} SystemWindow(Morph)>>doLayoutIn:
>>> | | 14.8% {0ms} ProportionalLayout>>layout:in:
>>> | | 14.8% {0ms}
>>> AlignmentMorph(Morph)>>layoutProportionallyIn:
>>> | | 13.2% {0ms} AlignmentMorph(Morph)>>fullBounds
>>> | | |12.9% {0ms}
>>> AlignmentMorph(Morph)>>doLayoutIn:
>>> | | | 12.4% {0ms}
>>> ProportionalLayout>>layout:in:
>>> | | | 12.4% {0ms}
>>> PanelMorph(Morph)>>layoutProportionallyIn:
>>> | | | 11.9% {0ms}
>>> PanelMorph(Morph)>>layoutInBounds:
>>> | | | 10.2% {0ms}
>>> PanelMorph(Morph)>>bounds:
>>> | | | 8.1% {0ms}
>>> PanelMorph(Morph)>>position:
>>> | | | 6.5% {0ms}
>>> PanelMorph(Morph)>>fullBounds
>>> | | | 5.7% {0ms}
>>> PanelMorph(Morph)>>doLayoutIn:
>>> | | | 4.0% {0ms}
>>> TableLayout>>layout:in:
>>> | | | |3.2% {0ms}
>>> TableLayout>>placeCells:in:horizontal:target:
>>> | | | | 3.2% {0ms}
>>> PluggableTextMorph(Morph)>>layoutInBounds:
>>> | | | | 3.2% {0ms}
>>> PluggableTextMorph(Morph)>>bounds:
>>> | | | | 3.2%
>>> {0ms} PluggableTextMorph>>extent:
>>> | | | | 1.6%
>>> {0ms} TextMorphForEditView(TextMorph)>>extent:
>>> | | | | 1.3%
>>> {0ms} PluggableTextMorph(ScrollPane)>>extent:
>>> | | | 1.6% {0ms}
>>> PanelMorph(Morph)>>privateFullBounds
>>> | | 1.6% {0ms}
>>> AlignmentMorph(Morph)>>layoutInBounds:
>>> | | 1.6% {0ms} AlignmentMorph(Morph)>>bounds:
>>> | 12.9% {0ms} SystemWindow>>openAsIsIn:
>>> | 12.7% {0ms} SystemWindow>>activate
>>> | 12.7% {0ms} SystemWindow>>basicActivate
>>> | 7.8% {0ms} SystemWindow(Morph)>>changed
>>> | |7.8% {0ms} SystemWindow(Morph)>>privateFullBounds
>>> | | 7.8% {0ms} SystemWindow(Morph)>>submorphBounds
>>> | | 7.8% {0ms} AlignmentMorph(Morph)>>fullBounds
>>> | | 7.8% {0ms} AlignmentMorph(Morph)>>doLayoutIn:
>>> | | 7.8% {0ms} ProportionalLayout>>layout:in:
>>> | | 7.8% {0ms}
>>> PanelMorph(Morph)>>layoutProportionallyIn:
>>> | | 7.8% {0ms} PanelMorph(Morph)>>fullBounds
>>> | | 7.8% {0ms}
>>> PanelMorph(Morph)>>doLayoutIn:
>>> | | 7.8% {0ms} TableLayout>>layout:in:
>>> | | 6.2% {0ms}
>>> TableLayout>>placeCells:in:horizontal:target:
>>> | | |6.2% {0ms}
>>> DiffMorph(Morph)>>layoutInBounds:
>>> | | | 6.2% {0ms}
>>> DiffMorph(Morph)>>bounds:
>>> | | | 5.7% {0ms}
>>> DiffMorph>>extent:
>>> | | | 5.7% {0ms}
>>> DiffMorph>>calibrateScrollbar
>>> | | | 5.7% {0ms}
>>> DiffMorph(Morph)>>fullBounds
>>> | | | 5.7% {0ms}
>>> DiffMorph(Morph)>>doLayoutIn:
>>> | | | 5.7%
>>> {0ms} ProportionalLayout>>layout:in:
>>> | | | 5.7%
>>> {0ms} PanelMorph(Morph)>>layoutProportionallyIn:
>>> | | | 5.4%
>>> {0ms} PanelMorph(Morph)>>layoutInBounds:
>>> | | |
>>> 4.6% {0ms} PanelMorph(Morph)>>bounds:
>>> | | |
>>> 3.5% {0ms} PanelMorph(Morph)>>position:
>>> | | |
>>> 2.7% {0ms} PanelMorph(Morph)>>fullBounds
>>> | | |
>>> 2.2% {0ms} PanelMorph(Morph)>>doLayoutIn:
>>> | | |
>>> 1.3% {0ms} PanelMorph(Morph)>>privateFullBounds
>>> | | 1.6% {0ms}
>>> TableLayout>>computeCellSizes:in:horizontal:
>>> | | 1.6% {0ms}
>>> DiffMorph(Morph)>>minExtent
>>> | | 1.6% {0ms}
>>> ProportionalLayout>>minExtentOf:in:
>>> | | 1.6% {0ms}
>>> PanelMorph(Morph)>>minExtent
>>> | | 1.6% {0ms}
>>> PanelMorph(Morph)>>layoutBounds
>>> | 4.9% {0ms} VersionsBrowser(CodeHolder)>>modelWakeUpIn:
>>> | 4.9% {0ms} VersionsBrowser>>updateListsAndCodeIn:
>>> | 4.9% {0ms} VersionsBrowser>>reformulateList
>>> | 4.9% {0ms} VersionsBrowser>>contentsChanged
>>> | 4.9% {0ms} VersionsBrowser>>buildDiffCodePane
>>> | 4.9% {0ms}
>>> VersionsBrowser>>buildDiffMorphFromOldString:toNewString:contextClass:
>>> | 4.6% {0ms} DiffMorph class(Behavior)>>new
>>> | 4.6% {0ms} DiffMorph>>initialize
>>> | 4.6% {0ms} DiffMorph>>extent:
>>> | 4.6% {0ms}
>>> DiffMorph>>calibrateScrollbar
>>> | 4.6% {0ms}
>>> DiffMorph(Morph)>>fullBounds
>>> | 4.6% {0ms}
>>> DiffMorph(Morph)>>doLayoutIn:
>>> | 2.7% {0ms}
>>> DiffMorph(Morph)>>privateFullBounds
>>> | |2.7% {0ms}
>>> DiffMorph(Morph)>>submorphBounds
>>> | | 2.7% {0ms}
>>> PanelMorph(Morph)>>fullBounds
>>> | | 2.2% {0ms}
>>> PanelMorph(Morph)>>doLayoutIn:
>>> | | 1.3% {0ms}
>>> PanelMorph(Morph)>>privateFullBounds
>>> | 1.9% {0ms}
>>> ProportionalLayout>>layout:in:
>>> | 1.9% {0ms}
>>> PanelMorph(Morph)>>layoutProportionallyIn:
>>> | 1.6% {0ms}
>>> PanelMorph(Morph)>>layoutInBounds:
>>> 3.8% {0ms} SystemWindow class>>labelled:
>>> |3.8% {0ms} SystemWindow class(Behavior)>>new
>>> | 3.8% {0ms} SystemWindow>>initialize
>>> | 3.5% {0ms} SystemWindow>>extent:
>>> | 3.5% {0ms} SystemWindow(Morph)>>extent:
>>> | 3.5% {0ms} SystemWindow(Morph)>>changed
>>> | 3.5% {0ms} SystemWindow(Morph)>>privateFullBounds
>>> | 3.5% {0ms} SystemWindow(Morph)>>submorphBounds
>>> | 3.5% {0ms} AlignmentMorph(Morph)>>fullBounds
>>> | 3.2% {0ms} AlignmentMorph(Morph)>>doLayoutIn:
>>> | 3.2% {0ms} RowLayout>>layout:in:
>>> | 3.0% {0ms} Point>>extent:
>>> | 3.0% {0ms} Rectangle
>>> class>>origin:extent:
>>> | 3.0% {0ms} Rectangle>>setOrigin:corner:
>>> 3.5% {0ms} SystemWindow>>model:
>>> |3.5% {0ms} SystemWindow(Morph)>>fillStyle:
>>> | 3.5% {0ms} SystemWindow(Morph)>>changed
>>> | 3.5% {0ms} SystemWindow(Morph)>>privateFullBounds
>>> | 3.5% {0ms} SystemWindow(Morph)>>submorphBounds
>>> | 3.5% {0ms} AlignmentMorph(Morph)>>fullBounds
>>> | 3.2% {0ms} AlignmentMorph(Morph)>>doLayoutIn:
>>> | 3.2% {0ms} RowLayout>>layout:in:
>>> | 3.0% {0ms} Point>>extent:
>>> | 3.0% {0ms} Rectangle class>>origin:extent:
>>> | 3.0% {0ms} Rectangle>>setOrigin:corner:
>>> 1.9% {0ms} VersionsBrowser(CodeHolder)>>addLowerPanesTo:at:with:
>>> 1.9% {0ms}
>>> VersionsBrowser(CodeHolder)>>addOptionalButtonsTo:at:plus:
>>> 17.5% {0ms} ToolRegistry>>openClassBrowser
>>> 17.5% {0ms} Nautilus class>>open
>>> 17.5% {0ms} Nautilus class>>openInEnvironment:
>>> 17.5% {0ms} Nautilus>>open
>>> 17.5% {0ms} NautilusUI>>open
>>> 17.5% {0ms} NautilusUI(AbstractNautilusUI)>>open
>>> 7.3% {0ms} NautilusWindow class(Behavior)>>new
>>> |7.3% {0ms} NautilusWindow(StandardWindow)>>initialize
>>> | 3.8% {0ms} NautilusWindow(SystemWindow)>>initialize
>>> | |3.5% {0ms} NautilusWindow(SystemWindow)>>extent:
>>> | | 3.5% {0ms} NautilusWindow(Morph)>>extent:
>>> | | 3.5% {0ms} NautilusWindow(Morph)>>changed
>>> | | 3.5% {0ms} NautilusWindow(Morph)>>privateFullBounds
>>> | | 3.5% {0ms} NautilusWindow(Morph)>>submorphBounds
>>> | | 3.5% {0ms} AlignmentMorph(Morph)>>fullBounds
>>> | | 3.2% {0ms} AlignmentMorph(Morph)>>doLayoutIn:
>>> | | 3.2% {0ms} RowLayout>>layout:in:
>>> | | 3.0% {0ms} Point>>extent:
>>> | | 3.0% {0ms} Rectangle class>>origin:extent:
>>> | | 3.0% {0ms} Rectangle>>setOrigin:corner:
>>> | 3.5% {0ms} NautilusWindow(SystemWindow)>>setWindowColor:
>>> | 3.5% {0ms} NautilusWindow(SystemWindow)>>setStripeColorsFrom:
>>> | 3.5% {0ms} NautilusWindow(Morph)>>fillStyle:
>>> | 3.5% {0ms} NautilusWindow(Morph)>>changed
>>> | 3.5% {0ms} NautilusWindow(Morph)>>privateFullBounds
>>> | 3.5% {0ms} NautilusWindow(Morph)>>submorphBounds
>>> | 3.5% {0ms} AlignmentMorph(Morph)>>fullBounds
>>> | 3.2% {0ms} AlignmentMorph(Morph)>>doLayoutIn:
>>> | 3.2% {0ms} RowLayout>>layout:in:
>>> | 3.0% {0ms} Point>>extent:
>>> | 3.0% {0ms} Rectangle class>>origin:extent:
>>> | 3.0% {0ms} Rectangle>>setOrigin:corner:
>>> 6.7% {0ms} NautilusUI>>addAll:
>>> |5.7% {0ms} NautilusUI>>buildColumns:height:
>>> | 1.3% {0ms} NautilusUI>>buildNavigationList
>>> | 1.3% {0ms} DropListMorph
>>> class>>on:list:selected:changeSelected:
>>> | 1.3% {0ms} DropListMorph class(Behavior)>>new
>>> | 1.3% {0ms} DropListMorph>>initialize
>>> 3.5% {0ms} NautilusWindow(Morph)>>openInWorld
>>> 3.5% {0ms} NautilusWindow(SystemWindow)>>openInWorld:
>>> 3.5% {0ms} NautilusWindow(Morph)>>bounds:
>>> 3.5% {0ms} NautilusWindow(SystemWindow)>>position:
>>> 3.5% {0ms} NautilusWindow(Morph)>>position:
>>> 3.5% {0ms} NautilusWindow(Morph)>>fullBounds
>>> 3.5% {0ms} NautilusWindow(Morph)>>doLayoutIn:
>>> 3.5% {0ms} ProportionalLayout>>layout:in:
>>> 3.5% {0ms}
>>> AlignmentMorph(Morph)>>layoutProportionallyIn:
>>> 3.5% {0ms} AlignmentMorph(Morph)>>fullBounds
>>> 3.2% {0ms} AlignmentMorph(Morph)>>doLayoutIn:
>>> 3.2% {0ms} RowLayout>>layout:in:
>>> 3.0% {0ms} Point>>extent:
>>> 3.0% {0ms} Rectangle class>>origin:extent:
>>> 3.0% {0ms} Rectangle>>setOrigin:corner:
>>> 3.2% {0ms} WorldState>>doOneCycleNowFor:
>>> 3.2% {0ms} HandMorph>>processEvents
>>> 3.2% {0ms} HandMorph>>handleEvent:
>>> 3.2% {0ms} HandMorph>>sendMouseEvent:
>>> 3.2% {0ms} HandMorph>>sendEvent:focus:clear:
>>> 3.2% {0ms} PasteUpMorph(Morph)>>processEvent:
>>> 3.2% {0ms} PasteUpMorph>>processEvent:using:
>>> 3.2% {0ms} PasteUpMorph(Morph)>>processEvent:using:
>>> 3.2% {0ms} MorphicEventDispatcher>>dispatchEvent:with:
>>> 3.2% {0ms} MorphicEventDispatcher>>dispatchMouseDown:with:
>>> 3.2% {0ms} PasteUpMorph(Morph)>>handleEvent:
>>> 3.2% {0ms} MouseButtonEvent>>sentTo:
>>> 3.2% {0ms} PasteUpMorph(Morph)>>handleMouseDown:
>>> 3.2% {0ms} PasteUpMorph>>mouseDown:
>>> 3.2% {0ms} PasteUpMorph>>invokeWorldMenu:
>>> 3.2% {0ms} MenuMorph>>popUpEvent:in:
>>> 3.2% {0ms} MenuMorph>>popUpAt:forHand:in:
>>> 3.2% {0ms}
>>> MenuMorph>>popUpAt:forHand:in:allowKeyboard:
>>> 3.2% {0ms}
>>> MenuMorph>>positionAt:relativeTo:inWorld:
>>> 3.2% {0ms} MenuMorph(Morph)>>fullBounds
>>> 3.2% {0ms} MenuMorph(Morph)>>doLayoutIn:
>>> 3.2% {0ms} TableLayout>>layout:in:
>>> 3.2% {0ms}
>>> TableLayout>>layoutTopToBottom:in:
>>> 2.4% {0ms}
>>> AlignmentMorph(Morph)>>layoutInBounds:
>>> 1.6% {0ms}
>>> AlignmentMorph(Morph)>>bounds:
>>> 1.6% {0ms}
>>> AlignmentMorph(Morph)>>position:
>>> 1.6% {0ms}
>>> AlignmentMorph(Morph)>>fullBounds
>>> 1.3% {0ms}
>>> AlignmentMorph(Morph)>>doLayoutIn:
>>> 2.7% {0ms} NautilusWindow(SystemWindow)>>closeBoxHit
>>> 2.7% {0ms} NautilusWindow>>delete
>>> 2.7% {0ms} NautilusWindow(StandardWindow)>>delete
>>> 2.7% {0ms} NautilusWindow(SystemWindow)>>delete
>>> 2.7% {0ms} SystemWindow class>>noteTopWindowIn:
>>> 2.7% {0ms} SystemWindow>>activate
>>> 2.7% {0ms} SystemWindow>>navigateFocusForward
>>> 2.7% {0ms} SystemWindow(Morph)>>navigateFocusForward
>>> 2.7% {0ms} PluggableTextMorph(Morph)>>takeKeyboardFocus
>>> 2.7% {0ms} HandMorph>>newKeyboardFocus:
>>> 2.7% {0ms} PluggableTextMorph>>keyboardFocusChange:
>>> 2.7% {0ms} TextMorphForEditView(Morph)>>takeKeyboardFocus
>>> 2.7% {0ms} HandMorph>>newKeyboardFocus:
>>> 2.7% {0ms} TextMorphForEditView>>keyboardFocusChange:
>>> 2.7% {0ms} SmalltalkEditor(TextEditor)>>focused:
>>> 2.7% {0ms} SmalltalkEditingState>>focused:from:
>>> 2.7% {0ms}
>>> SmalltalkEditingState(EditingState)>>focused:from:
>>> 2.7% {0ms}
>>> EditorFindReplaceDialogWindow class>>on:
>>> 2.7% {0ms}
>>> EditorFindReplaceDialogWindow>>on:
>>> 2.7% {0ms}
>>> EditorFindReplaceDialogWindow(StandardWindow)>>model:
>>> 2.7% {0ms}
>>> EditorFindReplaceDialogWindow(SystemWindow)>>model:
>>> 2.7% {0ms}
>>> EditorFindReplaceDialogWindow(Morph)>>fillStyle:
>>> 2.7% {0ms}
>>> EditorFindReplaceDialogWindow(Morph)>>changed
>>> 2.7% {0ms}
>>> EditorFindReplaceDialogWindow(Morph)>>privateFullBounds
>>> 2.7% {0ms}
>>> EditorFindReplaceDialogWindow(Morph)>>submorphBounds
>>> 2.7% {0ms}
>>> AlignmentMorph(Morph)>>fullBounds
>>> 2.4% {0ms}
>>> AlignmentMorph(Morph)>>doLayoutIn:
>>> 2.4% {0ms}
>>> RowLayout>>layout:in:
>>> 2.2% {0ms}
>>> Point>>extent:
>>> 2.2% {0ms}
>>> Rectangle class>>origin:extent:
>>> 2.2% {0ms}
>>> Rectangle>>setOrigin:corner:
>>>
>>> **Leaves**
>>> 100.0% {2ms} Rectangle>>setOrigin:corner:
>>>
>>> **Memory**
>>> old +0 bytes
>>> young +4,588 bytes
>>> used +4,588 bytes
>>> free -4,588 bytes
>>>
>>> **GCs**
>>> full 0 totalling 0ms (0.0% uptime)
>>> incr 0 totalling 0ms (0.0% uptime)
>>> tenures 0
>>> root table 0 overflows
>>>
>>> My feeling is that you are not thru with degenerated rectangles :)
>>> You'd better enforce the invariant in
>>> http://code.google.com/p/pharo/issues/detail?id=2601
>>> rathert than remove it as requested in
>>> http://code.google.com/p/pharo/issues/detail?id=2441
>>>
>>> Nicolas
>>>
>>> 2013/2/13 Nicolas Cellier <nicolas.cellier.aka.nice(a)gmail.com>:
>>>> I tried to put a halt in Rectangle>>setOrigin: topLeft corner: bottomRight
>>>> in latest Pharo (20543) if width < 0 or height < 0 and of course the
>>>> image hung...
>>>> which means that degenerated Rectangles are pretty much in use
>>>>
>>>> I think I will juts raise a Notification, and catch it with a
>>>> MessageTally hack to track the senders
>>>> (as documented at
>>>> http://bugs.squeak.org/bug_view_advanced_page.php?bug_id=6755 )
>>>>
>>>> Nicolas
>>>>
>>>> 2013/2/13 Igor Stasenko <siguctua(a)gmail.com>:
>>>>> yes.. and i'd like to add that in some places i replaced senders of
>>>>>
>>>>> rect1 intersect: rect2
>>>>>
>>>>> with:
>>>>>
>>>>> rect1 intersect: rect2 ifNone: [ self error: 'should not happen'].
>>>>>
>>>>> as it appears, it happens in some places... because of the above inconsistency.
>>>>>
>>>>>
>>>>> --
>>>>> Best regards,
>>>>> Igor Stasenko.
>>>>>
>>>
>>
>>
>
Feb. 14, 2013
[Pharo-project] Wow... we've closed a lot of issues
by Sean P. DeNigris
I was just doing some housecleaning, deleting some old bug fix images and I
was struck by how many important things we've accomplished. I'm still
dumbfounded that a community of our size has resolved 1548 issues since 1.4.
Cheers,
Sean
--
View this message in context: http://forum.world.st/Wow-we-ve-closed-a-lot-of-issues-tp4669901.html
Sent from the Pharo Smalltalk mailing list archive at Nabble.com.
Feb. 14, 2013
[Pharo-project] [update 2.0] #20546
by Marcus Denker
20546
-----
Issue 7505: do #cleanUpForRelease for every build
http://code.google.com/p/pharo/issues/detail?id=7505
Diff information:
http://ss3.gemstone.com/ss/Pharo20/UpdateStreamer-Core-MarcusDenker.10.diff
Feb. 14, 2013
Re: [Pharo-project] Regex with $? not working?
by Sean P. DeNigris
Mariano Martinez Peck wrote
> Am I doing something wrong?
You have to put what you're trying to match zero or one times first.
For example:
'.?' asRegex.
'a' matchesRegex: '.?'. "true"
Browse implementor of c:syntax: for more info
HTH,
Sean
--
View this message in context: http://forum.world.st/Regex-with-not-working-tp4669856p4669875.html
Sent from the Pharo Smalltalk mailing list archive at Nabble.com.
Feb. 14, 2013
[Pharo-project] [update 2.0] #20545
by Marcus Denker
20545
-----
Issue 7467: SystemReporter should not include SUnit Results
http://code.google.com/p/pharo/issues/detail?id=7467
Issue 7495: Failing test: FLCreateTraitSerializationTest>>#testCreateWithInstance
http://code.google.com/p/pharo/issues/detail?id=7495
Issue 7498: RPackage>>extensionMethodsForClass forget methods
http://code.google.com/p/pharo/issues/detail?id=7498
Issue 7507: location is undefined for a SmalltalkHub repository in MCHttpRepository>>password
http://code.google.com/p/pharo/issues/detail?id=7507
Diff information:
http://ss3.gemstone.com/ss/Pharo20/Tools-MarcusDenker.1040.diff
http://ss3.gemstone.com/ss/Pharo20/RPackage-Core-MarcusDenker.212.diff
http://ss3.gemstone.com/ss/Pharo20/Monticello-MarcusDenker.769.diff
http://ss3.gemstone.com/ss/Pharo20/FuelMetalevelTests-MarcusDenker.56.diff
Feb. 14, 2013
Re: [Pharo-project] Rectangle>>intersects: change Rationale
by Nicolas Cellier
2013/2/14 Igor Stasenko <siguctua(a)gmail.com>:
> On 14 February 2013 07:35, Nicolas Cellier
> <nicolas.cellier.aka.nice(a)gmail.com> wrote:
>> 2013/2/13 Igor Stasenko <siguctua(a)gmail.com>:
>>> On 14 February 2013 00:15, Nicolas Cellier
>>> <nicolas.cellier.aka.nice(a)gmail.com> wrote:
>>>> Please use my MessageTally trick above and you'll unfortunately see
>>>> that intersect: is just one producer of empty Rectangle among many...
>>>>
>>>> So I think that the ifNone: protection is quite vain given the flow of
>>>> empty rectangles, user is not in control at all, it's an illusion, and
>>>> that a reasonnable decision is to enforce the invariant.
>>>>
>>>
>>> but the way to enforce it is to make rect to have consistent answers
>>> to #width and #height,
>>> regardless in what order of origin:corner coordinates given.
>>> First , you make rectangle to be consistent.. then the users of it..
>>> i do not see other way to deal with it..
>>>
>>>
>>> I repeat, the final intent was to change #setOrigin:corner: to:
>>>
>>> Rectangle>>setOrigin: topLeft corner: bottomRight
>>> origin := (topLeft x min: bottomRight x) @ (topLeft y min:
>>> bottomRight y).
>>> corner := (topLeft x max: bottomRight x) @ (topLeft y max:
>>> bottomRight y).
>>>
>>> like that, there is no way a #width or #height can answer negative values.
>>>
>>
>> What I just want to remind you is that the base system is not at all
>> ready for such a change and that you have a lot of work to clean it of
>> degenerated Rectangle, it's not just cleaning intersect: and
>> intersects:
>>
>> Are you sure you aint' gonna need an abstraction to represent an empty
>> Rectangle?
>> What if I try to inset a rectangle by more than half extent?
>> What if I explicitely create a Rectangle with negative extent?
>> (0@0 extent: -10@10) extent = (10@10) does not necessarily better meet
>> my expectations...
>>
> negative extent? That should raise an error imo.
>
>> So what is your plan?
>> - don't provide empty rectangle abstraction but equip each and every
>> Rectangle producer with an ifEmpty: parameter?
>> - create a class EmptyRectangle class with more explicit semantic than
>> hasPositiveExtent not?
>>
> no. I do not see why we need such thing. We could have "isEmpty" or
> "isDegenerate" tests,
> to let users check this if necessary.. but then consider our code base:
> - where you will put these tests?
> I will give you a clue: in places where code doing wrong things with rects..
> That means, you are gonna to fix that code anyways.
>
>> Of course, if you can come with a cleaner model (less obscure
>> features, and avoiding spreading guards everywhere in client code)
>> then it is better to change the model rather than patch it.
>>
>> But it's not clear at all to me what your strategy is and where I can
>> read about it?
>> The bug reports I read are not informative and rather scary because
>> they just completely ignore the old invariants. It's not a recipe for
>> providing smooth transition.
>>
>> Also, when you change the invariants in the base system you have to
>> provide a transition period to support the migration of client code.
>>
>> IMO, in the transition period, the code should better raise an Error
>> rather than fixing things to what you THINK that is right in total
>> contradiction with what users KNEW was right in the previous version.
>>
> wait, what was right? that intersection of two non-intersecting
> rectangles gives you some rectangle?
>
> or that insetting 2-pixels wide rectangle by 5 pixels should produce
> some useful shape?
>
> btw, do you know that after i replaced intersect: with #intersect:ifNone:,
> i got a small, yet noticeable world redraw speedup.
>
>> What are your plans concerning transition?
>
> The "strategy" is pretty simple ;) :
> - change the behavior
> - see where it breaks
> - fix broken stuff
>
Good luck
>>
>> Nicolas
>>
>
> --
> Best regards,
> Igor Stasenko.
>
Feb. 14, 2013
Re: [Pharo-project] Rectangle>>intersects: change Rationale
by Igor Stasenko
On 14 February 2013 14:37, Igor Stasenko <siguctua(a)gmail.com> wrote:
> On 14 February 2013 07:35, Nicolas Cellier
> <nicolas.cellier.aka.nice(a)gmail.com> wrote:
>> 2013/2/13 Igor Stasenko <siguctua(a)gmail.com>:
>>> On 14 February 2013 00:15, Nicolas Cellier
>>> <nicolas.cellier.aka.nice(a)gmail.com> wrote:
>>>> Please use my MessageTally trick above and you'll unfortunately see
>>>> that intersect: is just one producer of empty Rectangle among many...
>>>>
>>>> So I think that the ifNone: protection is quite vain given the flow of
>>>> empty rectangles, user is not in control at all, it's an illusion, and
>>>> that a reasonnable decision is to enforce the invariant.
>>>>
>>>
>>> but the way to enforce it is to make rect to have consistent answers
>>> to #width and #height,
>>> regardless in what order of origin:corner coordinates given.
>>> First , you make rectangle to be consistent.. then the users of it..
>>> i do not see other way to deal with it..
>>>
>>>
>>> I repeat, the final intent was to change #setOrigin:corner: to:
>>>
>>> Rectangle>>setOrigin: topLeft corner: bottomRight
>>> origin := (topLeft x min: bottomRight x) @ (topLeft y min:
>>> bottomRight y).
>>> corner := (topLeft x max: bottomRight x) @ (topLeft y max:
>>> bottomRight y).
>>>
>>> like that, there is no way a #width or #height can answer negative values.
>>>
>>
>> What I just want to remind you is that the base system is not at all
>> ready for such a change and that you have a lot of work to clean it of
>> degenerated Rectangle, it's not just cleaning intersect: and
>> intersects:
>>
>> Are you sure you aint' gonna need an abstraction to represent an empty
>> Rectangle?
>> What if I try to inset a rectangle by more than half extent?
>> What if I explicitely create a Rectangle with negative extent?
>> (0@0 extent: -10@10) extent = (10@10) does not necessarily better meet
>> my expectations...
>>
> negative extent? That should raise an error imo.
>
>> So what is your plan?
>> - don't provide empty rectangle abstraction but equip each and every
>> Rectangle producer with an ifEmpty: parameter?
>> - create a class EmptyRectangle class with more explicit semantic than
>> hasPositiveExtent not?
>>
> no. I do not see why we need such thing. We could have "isEmpty" or
> "isDegenerate" tests,
> to let users check this if necessary.. but then consider our code base:
> - where you will put these tests?
> I will give you a clue: in places where code doing wrong things with rects..
> That means, you are gonna to fix that code anyways.
>
>> Of course, if you can come with a cleaner model (less obscure
>> features, and avoiding spreading guards everywhere in client code)
>> then it is better to change the model rather than patch it.
>>
>> But it's not clear at all to me what your strategy is and where I can
>> read about it?
>> The bug reports I read are not informative and rather scary because
>> they just completely ignore the old invariants. It's not a recipe for
>> providing smooth transition.
>>
>> Also, when you change the invariants in the base system you have to
>> provide a transition period to support the migration of client code.
>>
>> IMO, in the transition period, the code should better raise an Error
>> rather than fixing things to what you THINK that is right in total
>> contradiction with what users KNEW was right in the previous version.
>>
and yes, about raising an Error..
this is exactly what i did by replacing:
rect1 intersect: rect2
with:
rect1 intersect: rect2 ifNone: [ self error: '..... do something about it' ].
so where we have a disagreement about it?
yes.. the thing is not finished.. still the changes we did going
towards right direction.
just need more work.
> wait, what was right? that intersection of two non-intersecting
> rectangles gives you some rectangle?
>
> or that insetting 2-pixels wide rectangle by 5 pixels should produce
> some useful shape?
>
> btw, do you know that after i replaced intersect: with #intersect:ifNone:,
> i got a small, yet noticeable world redraw speedup.
>
>> What are your plans concerning transition?
>
> The "strategy" is pretty simple ;) :
> - change the behavior
> - see where it breaks
> - fix broken stuff
>
>>
>> Nicolas
>>
>
> --
> Best regards,
> Igor Stasenko.
--
Best regards,
Igor Stasenko.
Feb. 14, 2013
Re: [Pharo-project] Rectangle>>intersects: change Rationale
by Igor Stasenko
On 14 February 2013 07:35, Nicolas Cellier
<nicolas.cellier.aka.nice(a)gmail.com> wrote:
> 2013/2/13 Igor Stasenko <siguctua(a)gmail.com>:
>> On 14 February 2013 00:15, Nicolas Cellier
>> <nicolas.cellier.aka.nice(a)gmail.com> wrote:
>>> Please use my MessageTally trick above and you'll unfortunately see
>>> that intersect: is just one producer of empty Rectangle among many...
>>>
>>> So I think that the ifNone: protection is quite vain given the flow of
>>> empty rectangles, user is not in control at all, it's an illusion, and
>>> that a reasonnable decision is to enforce the invariant.
>>>
>>
>> but the way to enforce it is to make rect to have consistent answers
>> to #width and #height,
>> regardless in what order of origin:corner coordinates given.
>> First , you make rectangle to be consistent.. then the users of it..
>> i do not see other way to deal with it..
>>
>>
>> I repeat, the final intent was to change #setOrigin:corner: to:
>>
>> Rectangle>>setOrigin: topLeft corner: bottomRight
>> origin := (topLeft x min: bottomRight x) @ (topLeft y min:
>> bottomRight y).
>> corner := (topLeft x max: bottomRight x) @ (topLeft y max:
>> bottomRight y).
>>
>> like that, there is no way a #width or #height can answer negative values.
>>
>
> What I just want to remind you is that the base system is not at all
> ready for such a change and that you have a lot of work to clean it of
> degenerated Rectangle, it's not just cleaning intersect: and
> intersects:
>
> Are you sure you aint' gonna need an abstraction to represent an empty
> Rectangle?
> What if I try to inset a rectangle by more than half extent?
> What if I explicitely create a Rectangle with negative extent?
> (0@0 extent: -10@10) extent = (10@10) does not necessarily better meet
> my expectations...
>
negative extent? That should raise an error imo.
> So what is your plan?
> - don't provide empty rectangle abstraction but equip each and every
> Rectangle producer with an ifEmpty: parameter?
> - create a class EmptyRectangle class with more explicit semantic than
> hasPositiveExtent not?
>
no. I do not see why we need such thing. We could have "isEmpty" or
"isDegenerate" tests,
to let users check this if necessary.. but then consider our code base:
- where you will put these tests?
I will give you a clue: in places where code doing wrong things with rects..
That means, you are gonna to fix that code anyways.
> Of course, if you can come with a cleaner model (less obscure
> features, and avoiding spreading guards everywhere in client code)
> then it is better to change the model rather than patch it.
>
> But it's not clear at all to me what your strategy is and where I can
> read about it?
> The bug reports I read are not informative and rather scary because
> they just completely ignore the old invariants. It's not a recipe for
> providing smooth transition.
>
> Also, when you change the invariants in the base system you have to
> provide a transition period to support the migration of client code.
>
> IMO, in the transition period, the code should better raise an Error
> rather than fixing things to what you THINK that is right in total
> contradiction with what users KNEW was right in the previous version.
>
wait, what was right? that intersection of two non-intersecting
rectangles gives you some rectangle?
or that insetting 2-pixels wide rectangle by 5 pixels should produce
some useful shape?
btw, do you know that after i replaced intersect: with #intersect:ifNone:,
i got a small, yet noticeable world redraw speedup.
> What are your plans concerning transition?
The "strategy" is pretty simple ;) :
- change the behavior
- see where it breaks
- fix broken stuff
>
> Nicolas
>
--
Best regards,
Igor Stasenko.
Feb. 14, 2013
[Pharo-project] Regex with $? not working?
by Mariano Martinez Peck
Hi guys. I am trying some regex expressions that involve '?' and they do
not work.
Try for example: '/<(\w+?)>([^<]+)/m' asRegex
or
'<([^/>]+)>([^<]*?)<\1>' asRegex
and they all throw an error with the ? saying: 'RegexSyntaxError: nullable
closure'
Am I doing something wrong?
Thanks,
--
Mariano
http://marianopeck.wordpress.com
Feb. 14, 2013