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
August 2014
- 931 messages
[pharo-project/pharo-core]
by GitHub
Branch: refs/tags/40176
Home: https://github.com/pharo-project/pharo-core
Aug. 21, 2014
[pharo-project/pharo-core] d6efea: 40176
by GitHub
Branch: refs/heads/4.0
Home: https://github.com/pharo-project/pharo-core
Commit: d6efeabce412e43114544e81a4a97ce95b888aaa
https://github.com/pharo-project/pharo-core/commit/d6efeabce412e43114544e81…
Author: Jenkins Build Server <board(a)pharo-project.org>
Date: 2014-08-21 (Thu, 21 Aug 2014)
Changed paths:
M Kernel.package/Date.class/class/importing/fromString_.st
A KernelTests.package/DateTest.class/instance/tests/testFromString.st
A NECompletion.package/NOCCompletionTable.class/README.md
A NECompletion.package/NOCCompletionTable.class/class/accessing/classes.st
A NECompletion.package/NOCCompletionTable.class/class/class initialization/initialize.st
A NECompletion.package/NOCCompletionTable.class/class/cleanup/cleanUp.st
A NECompletion.package/NOCCompletionTable.class/class/events/methodChanged_.st
A NECompletion.package/NOCCompletionTable.class/class/instance creation/default.st
A NECompletion.package/NOCCompletionTable.class/class/instance creation/reset.st
A NECompletion.package/NOCCompletionTable.class/class/system startup/shutDown.st
A NECompletion.package/NOCCompletionTable.class/definition.st
A NECompletion.package/NOCCompletionTable.class/instance/accessing/entriesMatching_.st
A NECompletion.package/NOCCompletionTable.class/instance/accessing/entriesPerPrefix_.st
A NECompletion.package/NOCCompletionTable.class/instance/accessing/fillRate.st
A NECompletion.package/NOCCompletionTable.class/instance/accessing/listForPrefix_.st
A NECompletion.package/NOCCompletionTable.class/instance/accessing/listsForPrefix_.st
A NECompletion.package/NOCCompletionTable.class/instance/accessing/maxNumberOfEntries.st
A NECompletion.package/NOCCompletionTable.class/instance/accessing/numberOfEntries.st
A NECompletion.package/NOCCompletionTable.class/instance/accessing/reset.st
A NECompletion.package/NOCCompletionTable.class/instance/accessing/totalNumberOfEntries.st
A NECompletion.package/NOCCompletionTable.class/instance/initialization/initialize.st
A NECompletion.package/NOCCompletionTable.class/instance/protocol/addEntry_.st
A NECompletion.package/NOCCompletionTable.class/instance/protocol/addEntry_date_.st
A NECompletion.package/NOCCompletionTable.class/instance/protocol/compiled_in_date_.st
A NECompletion.package/NOCCompletionTable.class/instance/protocol/justCompiled_in_.st
A NECompletion.package/NOCCompletionTable.class/instance/protocol/quickFillWithCategoriesMatching_.st
A NECompletion.package/NOCCompletionTable.class/instance/protocol/quickFillWithCategoryOf_.st
A NECompletion.package/NOCCompletionTable.class/instance/protocol/quickFillWithClass_.st
A NECompletion.package/NOCContext.class/README.md
A NECompletion.package/NOCContext.class/definition.st
A NECompletion.package/NOCContext.class/instance/model creation/createModel.st
A NECompletion.package/NOCContext.class/instance/model creation/nextModel.st
A NECompletion.package/NOCController.class/README.md
A NECompletion.package/NOCController.class/definition.st
A NECompletion.package/NOCController.class/instance/private/contextClass.st
A NECompletion.package/NOCController.class/instance/private/menuMorphClass.st
A NECompletion.package/NOCDatedEntry.class/README.md
A NECompletion.package/NOCDatedEntry.class/definition.st
A NECompletion.package/NOCDatedEntry.class/instance/accessing/date.st
A NECompletion.package/NOCDatedEntry.class/instance/accessing/date_.st
A NECompletion.package/NOCDatedEntry.class/instance/accessing/link_.st
A NECompletion.package/NOCDatedEntry.class/instance/accessing/matches_.st
A NECompletion.package/NOCDatedEntry.class/instance/accessing/next.st
A NECompletion.package/NOCDatedEntry.class/instance/accessing/next_.st
A NECompletion.package/NOCDatedEntry.class/instance/accessing/now.st
A NECompletion.package/NOCDatedEntry.class/instance/accessing/previous.st
A NECompletion.package/NOCDatedEntry.class/instance/accessing/previous_.st
A NECompletion.package/NOCDatedEntry.class/instance/accessing/unlink.st
A NECompletion.package/NOCDatedEntry.class/instance/operations/%3C=.st
A NECompletion.package/NOCEmptyModel.class/README.md
A NECompletion.package/NOCEmptyModel.class/definition.st
A NECompletion.package/NOCEmptyModel.class/instance/accessing/entries.st
A NECompletion.package/NOCEmptyModel.class/instance/accessing/entryCount.st
A NECompletion.package/NOCEmptyModel.class/instance/accessing/narrowString_.st
A NECompletion.package/NOCEmptyModel.class/instance/accessing/narrowWith_.st
A NECompletion.package/NOCEntryList.class/README.md
A NECompletion.package/NOCEntryList.class/class/instance creation/ofSize_.st
A NECompletion.package/NOCEntryList.class/definition.st
A NECompletion.package/NOCEntryList.class/instance/accessing/entriesMatching_.st
A NECompletion.package/NOCEntryList.class/instance/accessing/first.st
A NECompletion.package/NOCEntryList.class/instance/accessing/firstEntry.st
A NECompletion.package/NOCEntryList.class/instance/accessing/last.st
A NECompletion.package/NOCEntryList.class/instance/accessing/lastEntry.st
A NECompletion.package/NOCEntryList.class/instance/accessing/numEntries.st
A NECompletion.package/NOCEntryList.class/instance/accessing/setSize_.st
A NECompletion.package/NOCEntryList.class/instance/adding/addEntry_.st
A NECompletion.package/NOCEntryList.class/instance/adding/addEntry_date_.st
A NECompletion.package/NOCMenuMorph.class/README.md
A NECompletion.package/NOCMenuMorph.class/definition.st
A NECompletion.package/NOCMenuMorph.class/instance/accessing/height.st
A NECompletion.package/NOCMenuMorph.class/instance/actions/narrowCompletion.st
A NECompletion.package/NOCModel.class/README.md
A NECompletion.package/NOCModel.class/definition.st
A NECompletion.package/NOCModel.class/instance/accessing/addEntry_.st
A NECompletion.package/NOCModel.class/instance/accessing/addSelectors.st
A NECompletion.package/NOCModel.class/instance/accessing/at_.st
A NECompletion.package/NOCModel.class/instance/accessing/completionAt_.st
A NECompletion.package/NOCModel.class/instance/accessing/context_.st
A NECompletion.package/NOCModel.class/instance/accessing/contract.st
A NECompletion.package/NOCModel.class/instance/accessing/entries.st
A NECompletion.package/NOCModel.class/instance/accessing/entryCount.st
A NECompletion.package/NOCModel.class/instance/accessing/expand.st
A NECompletion.package/NOCModel.class/instance/accessing/narrowWith_.st
A NECompletion.package/NOCModel.class/instance/accessing/nextModel.st
A NECompletion.package/NOCModel.class/instance/accessing/noNextModel.st
A NECompletion.package/NOCModel.class/instance/accessing/table.st
A NECompletion.package/NOCModel.class/instance/accessing/tableForEntry_.st
A NECompletion.package/NOCModel.class/instance/accessing/title.st
A NECompletion.package/NOCModel.class/instance/accessing/useUniqueTable.st
A NECompletion.package/NOCModel.class/instance/initialization/initialize.st
A NECompletion.package/NOCModel.class/instance/initialize-release/initializeSelectors.st
A NECompletion.package/NOCModel.class/instance/private/loadEntries.st
A NECompletion.package/NOCModel.class/instance/private/loadFavoredEntries.st
A NECompletion.package/NOCModel.class/instance/private/loadNextModelEntries.st
A NECompletion.package/NOCModel.class/instance/private/sortByLastRecentlyUsed_.st
R NOCompletion.package/NOCCompletionTable.class/README.md
R NOCompletion.package/NOCCompletionTable.class/class/accessing/classes.st
R NOCompletion.package/NOCCompletionTable.class/class/class initialization/initialize.st
R NOCompletion.package/NOCCompletionTable.class/class/cleanup/cleanUp.st
R NOCompletion.package/NOCCompletionTable.class/class/events/methodChanged_.st
R NOCompletion.package/NOCCompletionTable.class/class/instance creation/default.st
R NOCompletion.package/NOCCompletionTable.class/class/instance creation/reset.st
R NOCompletion.package/NOCCompletionTable.class/class/system startup/shutDown.st
R NOCompletion.package/NOCCompletionTable.class/definition.st
R NOCompletion.package/NOCCompletionTable.class/instance/accessing/entriesMatching_.st
R NOCompletion.package/NOCCompletionTable.class/instance/accessing/entriesPerPrefix_.st
R NOCompletion.package/NOCCompletionTable.class/instance/accessing/fillRate.st
R NOCompletion.package/NOCCompletionTable.class/instance/accessing/listForPrefix_.st
R NOCompletion.package/NOCCompletionTable.class/instance/accessing/listsForPrefix_.st
R NOCompletion.package/NOCCompletionTable.class/instance/accessing/maxNumberOfEntries.st
R NOCompletion.package/NOCCompletionTable.class/instance/accessing/numberOfEntries.st
R NOCompletion.package/NOCCompletionTable.class/instance/accessing/reset.st
R NOCompletion.package/NOCCompletionTable.class/instance/accessing/totalNumberOfEntries.st
R NOCompletion.package/NOCCompletionTable.class/instance/initialization/initialize.st
R NOCompletion.package/NOCCompletionTable.class/instance/protocol/addEntry_.st
R NOCompletion.package/NOCCompletionTable.class/instance/protocol/addEntry_date_.st
R NOCompletion.package/NOCCompletionTable.class/instance/protocol/compiled_in_date_.st
R NOCompletion.package/NOCCompletionTable.class/instance/protocol/justCompiled_in_.st
R NOCompletion.package/NOCCompletionTable.class/instance/protocol/quickFillWithCategoriesMatching_.st
R NOCompletion.package/NOCCompletionTable.class/instance/protocol/quickFillWithCategoryOf_.st
R NOCompletion.package/NOCCompletionTable.class/instance/protocol/quickFillWithClass_.st
R NOCompletion.package/NOCContext.class/README.md
R NOCompletion.package/NOCContext.class/definition.st
R NOCompletion.package/NOCContext.class/instance/model creation/createModel.st
R NOCompletion.package/NOCContext.class/instance/model creation/nextModel.st
R NOCompletion.package/NOCController.class/README.md
R NOCompletion.package/NOCController.class/definition.st
R NOCompletion.package/NOCController.class/instance/private/contextClass.st
R NOCompletion.package/NOCController.class/instance/private/menuMorphClass.st
R NOCompletion.package/NOCDatedEntry.class/README.md
R NOCompletion.package/NOCDatedEntry.class/definition.st
R NOCompletion.package/NOCDatedEntry.class/instance/accessing/date.st
R NOCompletion.package/NOCDatedEntry.class/instance/accessing/date_.st
R NOCompletion.package/NOCDatedEntry.class/instance/accessing/link_.st
R NOCompletion.package/NOCDatedEntry.class/instance/accessing/matches_.st
R NOCompletion.package/NOCDatedEntry.class/instance/accessing/next.st
R NOCompletion.package/NOCDatedEntry.class/instance/accessing/next_.st
R NOCompletion.package/NOCDatedEntry.class/instance/accessing/now.st
R NOCompletion.package/NOCDatedEntry.class/instance/accessing/previous.st
R NOCompletion.package/NOCDatedEntry.class/instance/accessing/previous_.st
R NOCompletion.package/NOCDatedEntry.class/instance/accessing/unlink.st
R NOCompletion.package/NOCDatedEntry.class/instance/operations/%3C=.st
R NOCompletion.package/NOCEmptyModel.class/README.md
R NOCompletion.package/NOCEmptyModel.class/definition.st
R NOCompletion.package/NOCEmptyModel.class/instance/accessing/entries.st
R NOCompletion.package/NOCEmptyModel.class/instance/accessing/entryCount.st
R NOCompletion.package/NOCEmptyModel.class/instance/accessing/narrowString_.st
R NOCompletion.package/NOCEmptyModel.class/instance/accessing/narrowWith_.st
R NOCompletion.package/NOCEntryList.class/README.md
R NOCompletion.package/NOCEntryList.class/class/instance creation/ofSize_.st
R NOCompletion.package/NOCEntryList.class/definition.st
R NOCompletion.package/NOCEntryList.class/instance/accessing/entriesMatching_.st
R NOCompletion.package/NOCEntryList.class/instance/accessing/first.st
R NOCompletion.package/NOCEntryList.class/instance/accessing/firstEntry.st
R NOCompletion.package/NOCEntryList.class/instance/accessing/last.st
R NOCompletion.package/NOCEntryList.class/instance/accessing/lastEntry.st
R NOCompletion.package/NOCEntryList.class/instance/accessing/numEntries.st
R NOCompletion.package/NOCEntryList.class/instance/accessing/setSize_.st
R NOCompletion.package/NOCEntryList.class/instance/adding/addEntry_.st
R NOCompletion.package/NOCEntryList.class/instance/adding/addEntry_date_.st
R NOCompletion.package/NOCMenuMorph.class/README.md
R NOCompletion.package/NOCMenuMorph.class/definition.st
R NOCompletion.package/NOCMenuMorph.class/instance/accessing/height.st
R NOCompletion.package/NOCMenuMorph.class/instance/actions/narrowCompletion.st
R NOCompletion.package/NOCModel.class/README.md
R NOCompletion.package/NOCModel.class/definition.st
R NOCompletion.package/NOCModel.class/instance/accessing/addEntry_.st
R NOCompletion.package/NOCModel.class/instance/accessing/addSelectors.st
R NOCompletion.package/NOCModel.class/instance/accessing/at_.st
R NOCompletion.package/NOCModel.class/instance/accessing/completionAt_.st
R NOCompletion.package/NOCModel.class/instance/accessing/context_.st
R NOCompletion.package/NOCModel.class/instance/accessing/contract.st
R NOCompletion.package/NOCModel.class/instance/accessing/entries.st
R NOCompletion.package/NOCModel.class/instance/accessing/entryCount.st
R NOCompletion.package/NOCModel.class/instance/accessing/expand.st
R NOCompletion.package/NOCModel.class/instance/accessing/narrowWith_.st
R NOCompletion.package/NOCModel.class/instance/accessing/nextModel.st
R NOCompletion.package/NOCModel.class/instance/accessing/noNextModel.st
R NOCompletion.package/NOCModel.class/instance/accessing/table.st
R NOCompletion.package/NOCModel.class/instance/accessing/tableForEntry_.st
R NOCompletion.package/NOCModel.class/instance/accessing/title.st
R NOCompletion.package/NOCModel.class/instance/accessing/useUniqueTable.st
R NOCompletion.package/NOCModel.class/instance/initialization/initialize.st
R NOCompletion.package/NOCModel.class/instance/initialize-release/initializeSelectors.st
R NOCompletion.package/NOCModel.class/instance/private/loadEntries.st
R NOCompletion.package/NOCModel.class/instance/private/loadFavoredEntries.st
R NOCompletion.package/NOCModel.class/instance/private/loadNextModelEntries.st
R NOCompletion.package/NOCModel.class/instance/private/sortByLastRecentlyUsed_.st
A ScriptLoader40.package/ScriptLoader.class/instance/pharo - scripts/script175.st
A ScriptLoader40.package/ScriptLoader.class/instance/pharo - updates/update40175.st
M ScriptLoader40.package/ScriptLoader.class/instance/public/commentForCurrentUpdate.st
A Tool-Spotlight.package/Spotlight.class/instance/private/classbindingForClassVar_.st
M Tool-Spotlight.package/Spotlight.class/instance/private/resolveSymbol_.st
A Tool-Spotlight.package/Spotlight.class/instance/private/symbolIsGlobalValue_.st
M Tool-Spotlight.package/Spotlight.class/instance/private/symbolIsSelector_.st
Log Message:
-----------
40176
http://files.pharo.org/image/40/40176.zip
Aug. 21, 2014
Re: [Pharo-dev] ConfigurationOfNastyJokes
by Torsten Bergmann
Rescued the code in a private repo on STHub, so the original
author can contact us when he still needs it.
Also deleted the package in MetaRepoForPharo30
Â
Bye
T.
Gesendet:Â Donnerstag, 21. August 2014 um 09:34 Uhr
Von:Â "phil(a)highoctane.be" <phil(a)highoctane.be>
An:Â "Pharo Development List" <pharo-dev(a)lists.pharo.org>
Betreff:Â Re: [Pharo-dev] ConfigurationOfNastyJokes
Yes, I noticed that too and wondered what this was all about.
Â
Doesn't look good to me to have that around too.
Â
Phil
Â
 Â
On Wed, Aug 20, 2014 at 11:31 PM, Torsten Bergmann <astares(a)gmx.de> wrote:ConfigurationOfNastyJokes in MetaRepoForPharo30 looks like the
first Pharo based virus.
Havent loaded it as advised but from the MC Snapshot browser it looks
like the code is doing some image saving, process removing, ...
While I understand the fun side of it I would:
 - recommend not to load it ;)
 - recommend that we delete this config from MetaRepoForPharo30
Thx
T.
Â
Aug. 21, 2014
Re: [Pharo-dev] Transcript class allInstances does not list all instances
by phil@highoctane.be
I had a look at dependents.
I see code in Object and Model which looks like quite close.
And also the comment in Model says: Provides a superclass for classes that
function as models. The only behavior provided is fast dependents
maintenance, which bypasses the generic DependentsFields mechanism.
1/23/96 sw
Is there a place where I can read more about that and/or can someone
provide a quick explanation?
TIA
Phil
On Thu, Aug 21, 2014 at 9:22 AM, Oscar Nierstrasz <
oscar.nierstrasz(a)gmail.com> wrote:
>
> Right. I should have realized that.
>
> I was looking for a replacement for:
>
> Transcript closeAllViews
>
> which has disappeared in Pharo 3.0. So this seems to work:
>
> (Transcript dependents select: #isSystemWindow) do: #close
>
> Thanks,
> Oscar
>
> On 20 Aug 2014, at 17:59 , Camille Teruel <camille.teruel(a)gmail.com>
> wrote:
>
> > Hi Oscar,
> >
> > It's because Transcript is only one instance of ThreadSafeTranscript.
> > 'Transcript open' doesn't create a new instance but opens a new window
> on that instance.
> >
> > Camille
> >
> > On 20 août 2014, at 17:30, Oscar Nierstrasz (gmail) <
> oscar.nierstrasz(a)gmail.com> wrote:
> >
> >>
> >> In the latest Pharo 3 for Mac:
> >>
> >> Transcript open.
> >> Transcript open.
> >> Transcript class allInstances inspect
> >>
> >> only shows one instance, not two.
> >>
> >> Why?
> >>
> >> Oscar
> >>
> >
> >
>
>
>
Aug. 21, 2014
Re: [Pharo-dev] Smalltalk Hub Slooooowdown
by phil@highoctane.be
Working here (Win8.1 Chrome). Slower than usual.
â
Recent watched events appear to work, yeah! That's neat to have back.
Phil
Aug. 21, 2014
Re: [Pharo-dev] ConfigurationOfNastyJokes
by phil@highoctane.be
Yes, I noticed that too and wondered what this was all about.
Doesn't look good to me to have that around too.
Phil
On Wed, Aug 20, 2014 at 11:31 PM, Torsten Bergmann <astares(a)gmx.de> wrote:
> ConfigurationOfNastyJokes in MetaRepoForPharo30 looks like the
> first Pharo based virus.
>
> Havent loaded it as advised but from the MC Snapshot browser it looks
> like the code is doing some image saving, process removing, ...
>
> While I understand the fun side of it I would:
> - recommend not to load it ;)
> - recommend that we delete this config from MetaRepoForPharo30
>
> Thx
> T.
>
>
Aug. 21, 2014
Re: [Pharo-dev] Transcript class allInstances does not list all instances
by Oscar Nierstrasz
Right. I should have realized that.
I was looking for a replacement for:
Transcript closeAllViews
which has disappeared in Pharo 3.0. So this seems to work:
(Transcript dependents select: #isSystemWindow) do: #close
Thanks,
Oscar
On 20 Aug 2014, at 17:59 , Camille Teruel <camille.teruel(a)gmail.com> wrote:
> Hi Oscar,
>
> It's because Transcript is only one instance of ThreadSafeTranscript.
> 'Transcript open' doesn't create a new instance but opens a new window on that instance.
>
> Camille
>
> On 20 août 2014, at 17:30, Oscar Nierstrasz (gmail) <oscar.nierstrasz(a)gmail.com> wrote:
>
>>
>> In the latest Pharo 3 for Mac:
>>
>> Transcript open.
>> Transcript open.
>> Transcript class allInstances inspect
>>
>> only shows one instance, not two.
>>
>> Why?
>>
>> Oscar
>>
>
>
Aug. 21, 2014
Re: [Pharo-dev] Stack size for compiled methods (issue 13854 Crash/hang on array access)
by Nicolai Hess
2014-08-21 7:14 GMT+02:00 Eliot Miranda <eliot.miranda(a)gmail.com>:
>
>
>
> On Wed, Aug 20, 2014 at 10:15 PM, Nicolai Hess <nicolaihess(a)web.de> wrote:
>
>>
>> 2014-08-19 19:02 GMT+02:00 Eliot Miranda <eliot.miranda(a)gmail.com>:
>>
>> Hi Nicolai,
>>>
>>>
>>> On Aug 19, 2014, at 11:58 AM, Nicolai Hess <nicolaihess(a)web.de> wrote:
>>>
>>> Thank you eliot,
>>>
>>>
>>> 2014-08-19 7:29 GMT+02:00 Eliot Miranda <eliot.miranda(a)gmail.com>:
>>>
>>>> Hi Nicolai,
>>>>
>>>> the stack starts as deep as the method's number of temporaries,
>>>
>>>
>>> ok,
>>>
>>>
>>>> which is the sum of the number of arguments
>>>
>>>
>>> ok,
>>>
>>>
>>>> plus the number of temporary variables that can exist in the stack
>>>
>>>
>>> ok (what does "can exist in the stack" mean? They always do?)
>>>
>>>
>>> Not necessarily. The closure implementation moves temps that need it
>>> into an indirect temp vector. See eg my blog on the closure compiler.
>>>
>>> http://www.mirandabanda.org/cogblog/2008/06/07/closures-part-i/
>>>
>>> plus one if there are any closed-over temporary variables that need to
>>>> be in an indirection vector. Then as execution proceeds the receiver and
>>>> arguments are pushed on the stack, and are replaced by intermediate results
>>>> by sends it by the create array bytecode.
>>>
>>>
>>> So, for a method with no blocks, the stack is just the number of
>>> temporaries plus the number of args for the message send with the maximum
>>> number of args?
>>>
>>>
>>>
>>> No. What about this:
>>>
>>> ^Point x: 1 y: (self a: 1 b: 2 c: 3)
>>>
>>>
>>> Before sending a:b:c: the stack is
>>>
>>> Point
>>> 1
>>> self
>>> 1
>>> 2
>>> 3
>>>
>>>
>>> Any blocks within the method start with the sum of their number of
>>>> arguments, their number of copied values (temp values they access
>>>> read-only) plus their local temporaries.
>>>>
>>>
>>> But this is not just added to the stack size, right?
>>> I have a method with 9 local temporaris and a block in this method with
>>> 8 local temporaries and the frameSize is still 16, (with the old compiler/
>>> 56 with the new compiler).
>>> So, method and block local temporaries not just sum up?
>>> I tried different variations
>>> - numberOfMethod temps smaller/equal/greater numberOfBlockTemp
>>> - no/some/all method temporaries are accessed in the block closure.
>>>
>>> But I can not see a pattern :)
>>>
>>>
>>> May be a bug in the old compiler. The stack size is the max of the
>>> separate sizes in the method and each block.
>>>
>>>
>>>
>>>
>>>>
>>>> In the method and each block scope stack depth is the hence the sum of
>>>> the number of temporaries plus the max execution depth. And the method's
>>>> depth is the max of the method and that of any blocks within it.
>>>
>>>
>>> What is the execution depth of a method ? The number of "nested blocks"?
>>>
>>>
>>> No, it is how many things it pushes in the stack at the deepest point.
>>> See my example above.
>>>
>>>
>>>
>>>> Then if that depth is 17 or greater it gets the LargeFrame flag set
>>>> which means the VM allocates a 56 slot context, the compiler raising an
>>>> error if the depth is greater than 56.
>>>>
>>>> HTH
>>>> Eliot (phone)
>>>>
>>>
>>> Here are two carefully handcrafted methods :)
>>>
>>>
>>> fooSmall
>>> |t1 t2 t3 t4 t5 t6 t7 t8|
>>> t1:=1.
>>> t2:=2.
>>> t3:=3.
>>> t4:=4.
>>> t5:=5.
>>> t6:=6.
>>> t7:=7.
>>> t8:= 8.
>>> t1:=[:i | |b1 b2 b3 b4 c1 c2 c3 c4 x|
>>> b1:=1. b2:=2. b3:=3. b4:=4.
>>> c1:=1. c2:=2. c3:=3. c4:=4.
>>> x:=1.
>>> x+t1 + b1+b2+b3+b4 + c1 + c2 + c3 + c4] value:1.
>>> ^ t1 + t2 + t3 + t4 + t5 + t6 + t7 + t8
>>>
>>>
>>> fooLarge
>>> |t1 t2 t3 t4 t5 t6 t7|
>>> t1:=1.
>>> t2:=2.
>>> t3:=3.
>>> t4:=4.
>>> t5:=5.
>>> t6:=6.
>>> t7:=7.
>>> t1:=[:i | |b1 b2 b3 b4 c1 c2 c3 c4 x|
>>> b1:=1. b2:=2. b3:=3. b4:=4.
>>> c1:=1. c2:=2. c3:=3. c4:=4.
>>> x:=1.
>>> x+t1 +t2 + t3 + t4 + t5+ b1+b2+b3+b4 + c1 + c2 + c3 + c4] value:1.
>>> ^ t1 + t2 + t3 + t4 + t5 + t6 + t7
>>>
>>>
>>>
>>> They differ only in the number of tempraries (t1-t8 / t1-t7) and the
>>> number of copied values for the block closure (1 / 5).
>>>
>>> with the old compiler:
>>> fooSmall frameSize -> 16
>>> fooLarge frameSize -> 56
>>>
>>>
>>>
>>> the opal compiler computes the opposite sizes
>>> fooSmall frameSize -> 56
>>> fooLarge frameSize -> 16
>>>
>>>
>>>
>>> Looks like a bug in the Opal compiler :-). Well found.
>>>
>>>
>>>
>>> I am confused.
>>>
>>>
>>> No you're not. You've found a bug. Now find its cause....
>>>
>>
>>
>> No, I am still confused :)
>>
>> Maybe you can help me with, how the old compiler computes the stack frame
>> in this examples:
>>
>> I changed CompiledMethod>>#needsFrameSize:
>> to write the value for self numTemps and newFrameSize to the Transcript
>> and compiled some simple functions:
>>
>> foo
>> |a b|
>> a:=1.
>> b:=1.
>> ^ a+b
>>
>> numTemps:2
>> frameSize: 2
>>
>> ok, two temps and two pushes on the stack
>>
>>
>> foo
>> ^ [ 1+1 ]
>>
>> numTemps:0
>> frameSize: 2
>>
>> ok, no temps and two pushs (push constant:1/push constant:1) on the stack
>>
>>
>>
>>
>>
>> foo
>> ^ [|a b| a:=1. b:=1. a+b ]
>>
>> numTemps:0
>> frameSize: 4
>>
>> ok, no (method) temps, why is the stackframe 4? Two block local temps and
>> two pushs.
>>
>>
>> |x y|
>> x:=1.
>> y:=1.
>> ^ [|a b| a:=1. b:=1. a+b ]
>>
>> numTemps:2
>> frameSize: 2
>>
>> Now what? Adding method temps enlarges the number of temps, ok. But the
>> stackframe decreases?
>>
>
> Looks like a bug. The stack size needed in
>
> |x y|
> x:=1.
> y:=1.
> ^ [|a b| a:=1. b:=1. a+b ]
>
> is 4, unless the compiler is optimizing away the a+b and is replacing the
> block with [1] ? The stack size of the outer method is 3 (2 temps + 1 for
> the push of either 1 or the block).
>
No optimization, the bytecode is:
13 <76> pushConstant: 1
14 <68> popIntoTemp: 0
15 <76> pushConstant: 1
16 <69> popIntoTemp: 1
17 <8F 00 00 0A> closureNumCopied: 0 numArgs: 0 bytes 21 to 30
21 <73> pushConstant: nil
22 <73> pushConstant: nil
23 <76> pushConstant: 1
24 <68> popIntoTemp: 0
25 <76> pushConstant: 1
26 <69> popIntoTemp: 1
27 <10> pushTemp: 0
28 <11> pushTemp: 1
29 <B0> send: +
30 <7D> blockReturn
31 <7C> returnTop
>
>
>
>> Nicolai
>>
>>
>>
>>>
>>>
>>>
>>>
>>>>
>>>> On Aug 18, 2014, at 11:32 PM, Nicolai Hess <nicolaihess(a)web.de> wrote:
>>>>
>>>> > Hi,
>>>> >
>>>> > on what depends the stack size for a compiled method?
>>>> > I try to figure out, why the old compiler and the opal compile
>>>> generate different
>>>> > compiled method headers.
>>>> > I think this comes from a wrong stack size computed by opal, but I
>>>> can not figure
>>>> > out how the stack size is computed.
>>>> >
>>>> > Old Compiler
>>>> > PolygonMorph>>#lineSegmentsDo:
>>>> > header -> "primitive: 0
>>>> > numArgs: 1
>>>> > numTemps: 3
>>>> > numLiterals: 23
>>>> > frameSize: 56"
>>>> >
>>>> > Opal compiler:
>>>> > PolygonMorph>>#lineSegmentsDo:
>>>> > header -> "primitive: 0
>>>> > numArgs: 1
>>>> > numTemps: 3
>>>> > numLiterals: 23
>>>> > frameSize: 16"
>>>> >
>>>>
>>>
>>>
>>> Eliot (phone)
>>>
>>
>>
>
>
> --
> best,
> Eliot
>
Aug. 21, 2014
Re: [Pharo-dev] Stack size for compiled methods (issue 13854 Crash/hang on array access)
by Eliot Miranda
On Wed, Aug 20, 2014 at 10:15 PM, Nicolai Hess <nicolaihess(a)web.de> wrote:
>
> 2014-08-19 19:02 GMT+02:00 Eliot Miranda <eliot.miranda(a)gmail.com>:
>
> Hi Nicolai,
>>
>>
>> On Aug 19, 2014, at 11:58 AM, Nicolai Hess <nicolaihess(a)web.de> wrote:
>>
>> Thank you eliot,
>>
>>
>> 2014-08-19 7:29 GMT+02:00 Eliot Miranda <eliot.miranda(a)gmail.com>:
>>
>>> Hi Nicolai,
>>>
>>> the stack starts as deep as the method's number of temporaries,
>>
>>
>> ok,
>>
>>
>>> which is the sum of the number of arguments
>>
>>
>> ok,
>>
>>
>>> plus the number of temporary variables that can exist in the stack
>>
>>
>> ok (what does "can exist in the stack" mean? They always do?)
>>
>>
>> Not necessarily. The closure implementation moves temps that need it
>> into an indirect temp vector. See eg my blog on the closure compiler.
>>
>> http://www.mirandabanda.org/cogblog/2008/06/07/closures-part-i/
>>
>> plus one if there are any closed-over temporary variables that need to
>>> be in an indirection vector. Then as execution proceeds the receiver and
>>> arguments are pushed on the stack, and are replaced by intermediate results
>>> by sends it by the create array bytecode.
>>
>>
>> So, for a method with no blocks, the stack is just the number of
>> temporaries plus the number of args for the message send with the maximum
>> number of args?
>>
>>
>>
>> No. What about this:
>>
>> ^Point x: 1 y: (self a: 1 b: 2 c: 3)
>>
>>
>> Before sending a:b:c: the stack is
>>
>> Point
>> 1
>> self
>> 1
>> 2
>> 3
>>
>>
>> Any blocks within the method start with the sum of their number of
>>> arguments, their number of copied values (temp values they access
>>> read-only) plus their local temporaries.
>>>
>>
>> But this is not just added to the stack size, right?
>> I have a method with 9 local temporaris and a block in this method with 8
>> local temporaries and the frameSize is still 16, (with the old compiler/ 56
>> with the new compiler).
>> So, method and block local temporaries not just sum up?
>> I tried different variations
>> - numberOfMethod temps smaller/equal/greater numberOfBlockTemp
>> - no/some/all method temporaries are accessed in the block closure.
>>
>> But I can not see a pattern :)
>>
>>
>> May be a bug in the old compiler. The stack size is the max of the
>> separate sizes in the method and each block.
>>
>>
>>
>>
>>>
>>> In the method and each block scope stack depth is the hence the sum of
>>> the number of temporaries plus the max execution depth. And the method's
>>> depth is the max of the method and that of any blocks within it.
>>
>>
>> What is the execution depth of a method ? The number of "nested blocks"?
>>
>>
>> No, it is how many things it pushes in the stack at the deepest point.
>> See my example above.
>>
>>
>>
>>> Then if that depth is 17 or greater it gets the LargeFrame flag set
>>> which means the VM allocates a 56 slot context, the compiler raising an
>>> error if the depth is greater than 56.
>>>
>>> HTH
>>> Eliot (phone)
>>>
>>
>> Here are two carefully handcrafted methods :)
>>
>>
>> fooSmall
>> |t1 t2 t3 t4 t5 t6 t7 t8|
>> t1:=1.
>> t2:=2.
>> t3:=3.
>> t4:=4.
>> t5:=5.
>> t6:=6.
>> t7:=7.
>> t8:= 8.
>> t1:=[:i | |b1 b2 b3 b4 c1 c2 c3 c4 x|
>> b1:=1. b2:=2. b3:=3. b4:=4.
>> c1:=1. c2:=2. c3:=3. c4:=4.
>> x:=1.
>> x+t1 + b1+b2+b3+b4 + c1 + c2 + c3 + c4] value:1.
>> ^ t1 + t2 + t3 + t4 + t5 + t6 + t7 + t8
>>
>>
>> fooLarge
>> |t1 t2 t3 t4 t5 t6 t7|
>> t1:=1.
>> t2:=2.
>> t3:=3.
>> t4:=4.
>> t5:=5.
>> t6:=6.
>> t7:=7.
>> t1:=[:i | |b1 b2 b3 b4 c1 c2 c3 c4 x|
>> b1:=1. b2:=2. b3:=3. b4:=4.
>> c1:=1. c2:=2. c3:=3. c4:=4.
>> x:=1.
>> x+t1 +t2 + t3 + t4 + t5+ b1+b2+b3+b4 + c1 + c2 + c3 + c4] value:1.
>> ^ t1 + t2 + t3 + t4 + t5 + t6 + t7
>>
>>
>>
>> They differ only in the number of tempraries (t1-t8 / t1-t7) and the
>> number of copied values for the block closure (1 / 5).
>>
>> with the old compiler:
>> fooSmall frameSize -> 16
>> fooLarge frameSize -> 56
>>
>>
>>
>> the opal compiler computes the opposite sizes
>> fooSmall frameSize -> 56
>> fooLarge frameSize -> 16
>>
>>
>>
>> Looks like a bug in the Opal compiler :-). Well found.
>>
>>
>>
>> I am confused.
>>
>>
>> No you're not. You've found a bug. Now find its cause....
>>
>
>
> No, I am still confused :)
>
> Maybe you can help me with, how the old compiler computes the stack frame
> in this examples:
>
> I changed CompiledMethod>>#needsFrameSize:
> to write the value for self numTemps and newFrameSize to the Transcript
> and compiled some simple functions:
>
> foo
> |a b|
> a:=1.
> b:=1.
> ^ a+b
>
> numTemps:2
> frameSize: 2
>
> ok, two temps and two pushes on the stack
>
>
> foo
> ^ [ 1+1 ]
>
> numTemps:0
> frameSize: 2
>
> ok, no temps and two pushs (push constant:1/push constant:1) on the stack
>
>
>
>
>
> foo
> ^ [|a b| a:=1. b:=1. a+b ]
>
> numTemps:0
> frameSize: 4
>
> ok, no (method) temps, why is the stackframe 4? Two block local temps and
> two pushs.
>
>
> |x y|
> x:=1.
> y:=1.
> ^ [|a b| a:=1. b:=1. a+b ]
>
> numTemps:2
> frameSize: 2
>
> Now what? Adding method temps enlarges the number of temps, ok. But the
> stackframe decreases?
>
Looks like a bug. The stack size needed in
|x y|
x:=1.
y:=1.
^ [|a b| a:=1. b:=1. a+b ]
is 4, unless the compiler is optimizing away the a+b and is replacing the
block with [1] ? The stack size of the outer method is 3 (2 temps + 1 for
the push of either 1 or the block).
> Nicolai
>
>
>
>>
>>
>>
>>
>>>
>>> On Aug 18, 2014, at 11:32 PM, Nicolai Hess <nicolaihess(a)web.de> wrote:
>>>
>>> > Hi,
>>> >
>>> > on what depends the stack size for a compiled method?
>>> > I try to figure out, why the old compiler and the opal compile
>>> generate different
>>> > compiled method headers.
>>> > I think this comes from a wrong stack size computed by opal, but I can
>>> not figure
>>> > out how the stack size is computed.
>>> >
>>> > Old Compiler
>>> > PolygonMorph>>#lineSegmentsDo:
>>> > header -> "primitive: 0
>>> > numArgs: 1
>>> > numTemps: 3
>>> > numLiterals: 23
>>> > frameSize: 56"
>>> >
>>> > Opal compiler:
>>> > PolygonMorph>>#lineSegmentsDo:
>>> > header -> "primitive: 0
>>> > numArgs: 1
>>> > numTemps: 3
>>> > numLiterals: 23
>>> > frameSize: 16"
>>> >
>>>
>>
>>
>> Eliot (phone)
>>
>
>
--
best,
Eliot
Aug. 21, 2014
Re: [Pharo-dev] Stack size for compiled methods (issue 13854 Crash/hang on array access)
by Eliot Miranda
Hi Craig,
On Tue, Aug 19, 2014 at 12:32 PM, Craig Latta <craig(a)netjam.org> wrote:
>
> Hoi Eliot--
>
> > [great explanation of method/block stack depth]
>
> Cool, is this viewable from an in-system tool somewhere (even if
> only a "documentation" method in a class browser)?
>
I don't know about in the pal compiler, but in the Squeak bytecode compiler
look at users of the l=class ParseStack, i.e. MethodNode>>#generate:using:.
cheers!
thanks,
>
> -C
>
> --
> Craig Latta
> netjam.org
> +31 6 2757 7177 (SMS ok)
> + 1 415 287 3547 (no SMS)
>
>
>
--
best,
Eliot
Aug. 21, 2014