Pharo-dev
By thread
pharo-dev@lists.pharo.org
By month
Messages by month
- ----- 2026 -----
- July
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
October 2009
- 86 participants
- 1118 messages
Re: [Pharo-project] Fwd: [squeak-dev] The Trunk: Compiler-jcg.87.mcz
by Michael Roberts
looks like it's using the new scheme. we should test it at least.
Mike
On Monday, October 5, 2009, Stéphane Ducasse <stephane.ducasse(a)inria.fr> wrote:
>
>
> Begin forwarded message:
>
>> From: commits(a)source.squeak.org
>> Date: October 1, 2009 8:21:58 AM GMT+02:00
>> To: squeak-dev(a)lists.squeakfoundation.org
>> Subject: [squeak-dev] The Trunk: Compiler-jcg.87.mcz
>> Reply-To: squeak-dev(a)lists.squeakfoundation.org
>>
>> Joshua Gargus uploaded a new version of Compiler to project The Trunk:
>> http://source.squeak.org/trunk/Compiler-jcg.87.mcz
>>
>> ==================== Summary ====================
>>
>> Name: Compiler-jcg.87
>> Author: jcg
>> Time: 30 September 2009, 11:21:53 am
>> UUID: 71bf4e8d-f9f3-4371-a218-ad31a985cfd8
>> Ancestors: Compiler-ul.86
>>
>> Revert to lazy-initialization of method properties, which is used by
>> the externally-maintained Prolog package (which loads cleanly into
>> 3.10.2, but not trunk).
>>
>> Part 2 of 2... need to load -jcg.85 first (this is taken care of by
>> the Monticello Configuration update-jcg.32.mcm)
>>
>> =============== Diff against Compiler-ul.86 ===============
>>
>> Item was changed:
>> Â ----- Method: Parser>>addPragma: (in category 'pragmas') -----
>> Â addPragma: aPragma
>> + Â Â properties := self properties copyWith: aPragma!
>> - Â Â properties := properties copyWith: aPragma!
>>
>> Item was changed:
>> Â ----- Method: Parser>>method:context:encoder: (in category
>> 'expression types') -----
>> Â method: doit context: ctxt encoder: encoderToUse
>> Â Â Â " pattern [ | temporaries ] block => MethodNode."
>>
>> Â Â Â | sap blk prim temps messageComment methodNode |
>> - Â Â properties := AdditionalMethodState new.
>> Â Â Â encoder := encoderToUse.
>> Â Â Â sap := self pattern: doit inContext: ctxt.
>> Â Â Â "sap={selector, arguments, precedence}"
>> + Â Â self properties selector: (sap at: 1).
>> - Â Â properties selector: (sap at: 1).
>> Â Â Â encoder selector: (sap at: 1).
>> Â Â Â (sap at: 2) do: [:argNode | argNode beMethodArg].
>> Â Â Â doit ifFalse: [self pragmaSequence].
>> Â Â Â temps := self temporaries.
>> Â Â Â messageComment := currentComment.
>> Â Â Â currentComment := nil.
>> Â Â Â doit ifFalse: [self pragmaSequence].
>> Â Â Â prim := self pragmaPrimitives.
>> Â Â Â self statements: #() innerBlock: doit.
>> Â Â Â blk := parseNode.
>> Â Â Â doit ifTrue: [blk returnLast]
>> Â Â Â Â Â Â Â ifFalse: [blk returnSelfIfNoOther: encoder].
>> Â Â Â hereType == #doIt ifFalse: [^self expected: 'Nothing more'].
>> Â Â Â self interactive ifTrue: [self removeUnusedTemps].
>> Â Â Â methodNode := self newMethodNode comment: messageComment.
>> Â Â Â ^methodNode
>> Â Â Â Â Â Â Â selector: (sap at: 1)
>> Â Â Â Â Â Â Â arguments: (sap at: 2)
>> Â Â Â Â Â Â Â precedence: (sap at: 3)
>> Â Â Â Â Â Â Â temporaries: temps
>> Â Â Â Â Â Â Â block: blk
>> Â Â Â Â Â Â Â encoder: encoder
>> Â Â Â Â Â Â Â primitive: prim
>> Â Â Â Â Â Â Â properties: properties!
>>
>> Item was changed:
>> Â ----- Method:
>> MethodNode
>> >>selector:arguments:precedence:temporaries:block:encoder:primitive:
>> (in category 'initialize-release') -----
>> Â selector: selOrFalse arguments: args precedence: p temporaries:
>> temps block: blk encoder: anEncoder primitive: prim
>> +
>> + Â Â self
>> + Â Â Â Â Â Â selector: selOrFalse
>> + Â Â Â Â Â Â arguments: args
>> + Â Â Â Â Â Â precedence: p
>> + Â Â Â Â Â Â temporaries: temps
>> + Â Â Â Â Â Â block: blk encoder:
>> + Â Â Â Â Â Â anEncoder
>> + Â Â Â Â Â Â primitive: prim
>> + Â Â Â Â Â Â properties: AdditionalMethodState new.!
>> - Â Â "Initialize the receiver with respect to the arguments given."
>> -
>> - Â Â encoder := anEncoder.
>> - Â Â selectorOrFalse := selOrFalse.
>> - Â Â precedence := p.
>> - Â Â arguments := args.
>> - Â Â temporaries := temps.
>> - Â Â block := blk.
>> - Â Â primitive := prim!
>>
>> Item was changed:
>> Â ----- Method: Parser>>pragmaPrimitives (in category 'pragmas') -----
>> Â pragmaPrimitives
>> Â Â Â | primitives |
>> + Â Â self properties isEmpty ifTrue:
>> - Â Â properties isEmpty ifTrue:
>> Â Â Â Â Â Â Â [^0].
>> Â Â Â primitives := properties pragmas select:
>> Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â [:pragma|
>> Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â self class primitivePragmaSelectors includes: pragma keyword].
>> Â Â Â primitives isEmpty ifTrue:
>> Â Â Â Â Â Â Â [^0].
>> Â Â Â primitives size > 1 ifTrue:
>> Â Â Â Â Â Â Â [^self notify: 'Ambigous primitives'].
>> Â Â Â ^self perform: primitives first keyword withArguments: primitives
>> first arguments!
>>
>>
>
>
> _______________________________________________
> Pharo-project mailing list
> Pharo-project(a)lists.gforge.inria.fr
> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
>
Oct. 5, 2009
Re: [Pharo-project] Fwd: [squeak-dev] The Trunk: Compiler-jcg.85.mcz
by Michael Roberts
Not sure we want this without due consideration. Eliot deprecated
them. Is there a conversation going on about why the new scheme could
not be used? I'm not subscribed.
Cheers
Mike
On Monday, October 5, 2009, Stéphane Ducasse <stephane.ducasse(a)inria.fr> wrote:
>
>
> Begin forwarded message:
>
>> From: commits(a)source.squeak.org
>> Date: September 30, 2009 10:14:22 AM GMT+02:00
>> To: squeak-dev(a)lists.squeakfoundation.org
>> Subject: [squeak-dev] The Trunk: Compiler-jcg.85.mcz
>> Reply-To: squeak-dev(a)lists.squeakfoundation.org
>>
>> Joshua Gargus uploaded a new version of Compiler to project The Trunk:
>> http://source.squeak.org/trunk/Compiler-jcg.85.mcz
>>
>> ==================== Summary ====================
>>
>> Name: Compiler-jcg.85
>> Author: jcg
>> Time: 30 September 2009, 1:14:16 am
>> UUID: 21a5f88d-4107-48c3-b41c-d5ea735319a7
>> Ancestors: Compiler-tfel.84
>>
>> Revert to lazy-initialization of method properties, which is used by
>> the externally-maintained Prolog package (which loads cleanly into
>> 3.10.2, but not trunk).
>>
>> Part 1 of 2... need to first re-add the #properties method to Parser
>> before changing methods to send it.
>>
>> =============== Diff against Compiler-tfel.84 ===============
>>
>> Item was added:
>> + ----- Method: Parser>>properties (in category 'pragmas') -----
>> + properties
>> + Â Â ^ properties ifNil: [ properties := AdditionalMethodState new ]!
>>
>>
>
>
> _______________________________________________
> Pharo-project mailing list
> Pharo-project(a)lists.gforge.inria.fr
> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
>
Oct. 5, 2009
Re: [Pharo-project] Copy for SequenceableCollection subclasses? (Was: Fix for 987)
by Nicolas Cellier
2009/10/5 Henrik Johansen <henrik.s.johansen(a)veloxit.no>:
>
> On Oct 5, 2009, at 3:19 53PM, Nicolas Cellier wrote:
>
>> 2009/10/5 Henrik Johansen <henrik.s.johansen(a)veloxit.no>:
>>> Good to know I'm not the only one who found it strange :)
>>>
>>> BTW, I thought the default for Collections was to do a shallowCopy
>>> with a copy operation?
>>>
>>
>> I removed this default behaviour SequenceableCollection>>shallowCopy
>> which used to use (self copyFrom: 1 to: self size).
>> This beautifull hack was using self species, leading to this mess...
>> And it forced me defining a #basicShallowCopy to work the hack around
>> (which was the shortest but uggliest solution).
>>
>> The copy was deep enough so that modifying the copy would not modify
>> the original, and this is what postCopy now does.
>>
>>> ll := LinkedList new.
>>> ll add: Link new.
>>> ll2 := ll copy.
>>> ll add: Link new.
>>>
>>> inspecting ll2, it's firstLink does not have a nextLink, which
>>> implies
>>> to me a deepCopy has occured.
>>>
>>
| list link1 link2 link3 copy |
link1 := StackLink with: 1.0.
link2 := StackLink with: 2.0.
link3 := StackLink with: 3.0.
link4 := StackLink with: 4.0.
(list := LinkedList new) add: link1; add: link2; add: link3.
copy := list copy.
self assert: list size = 3.
self assert: copy size = 3.
self assert: copy first element == list first element.
list remove: link2.
self assert: list size = 2.
self assert: copy size = 3.
copy add: link4 before: copy third.
self assert: list size = 2.
self assert: copy size = 4.
^copy
As you can see, this is not a deepCopy, the element identity are preserved.
Of course not the link objects themselves, that can't be !
Otherwise modifying the copy would modify the original.
Like Associations in Dictionary, they should be copied (but the value
identity should not change).
>> I did not take time to write all tests yet, I will give it a try in
>> trunk.
>>
>>> Of course, it's arguable that that's better behaviour for
>>> LinkedLists,
>>> seeing as otherwise ll2's lastLink would be invalid when you added to
>>> ll.
>>> At a glance, SparseLargeTable, Stack (Through LinkedList
>>> implementation) and WideCharacterSet in your changeset all seem to do
>>> a deep copy.
>>>
>>
>> just deep enough, not more, not less.
>
> To my understanding, that's too deep.
> You're copying elements in the collection as well, not just creating a
> copy of the collection with the same elements.
> That's what I'd define as a deepCopy, after a copy, I'd expect the
> elements in them to be the same.
> Maybe it's just what I've gotten used to in VW, and Squeak does
> something else historically, but mixing and matching which to do based
> on what feels best at any given time can lead to some nasty bugs :)
>
I don't think so, at least not in trunk image.
The best thing would be to provide tests.
>>
>>> Also, how does part in SharedQueue2
>>> monitor critical: [
>>> monitor := Monitor new.
>>> items := items copy
>>> ] Â work? Seems a bit fishy to me to have a critical section on a
>>> monitor, then replacing it as part of it...
>>>
>>
>> He he, it should just work, because we are talking to a Monitor object
>> (the Smalltalk way), not to a pointer *monitor somewhere in memory
>> (the C/C++ view).
>
> Oh, absolutely, it will not crash due to deallocated pointers or such.
>
> What I meant was a concurrency issue, when some other object requests
> something that requires a monitor lock, after Monitor has been
> replaced, but before the items have been copied.
> i.e.
> while the intent of the critical section in that piece of code as far
> as I can tell, is that the two operations should happen without items
> being accessible before they have been copied.
> so you'd actually have to write something like:
> monitor critical: [
> Â Â Â Â monitor := Monitor new.
> Â Â Â Â monitor critical:
> Â Â Â Â [items := items copy]]
> to ensure that does not happen.
>
IMO, this is currently unnecessary because no one yet knows about this
copy. The sole use is
^self shallowCopy postCopy,
so there is no pointer on me yet but the active process stack.
We only have to protect against a modification of original in between
But in case of exotic use of #postCopy, you are right.
Just reversing the order would do.
monitor critical: [
items := items copy
monitor := Monitor new].
Nicolas
> Cheers,
> Henry
>
> _______________________________________________
> Pharo-project mailing list
> Pharo-project(a)lists.gforge.inria.fr
> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
>
Oct. 5, 2009
Re: [Pharo-project] Copy for SequenceableCollection subclasses? (Was: Fix for 987)
by Henrik Johansen
On Oct 5, 2009, at 3:42 59PM, Henrik Johansen wrote:
>
> On Oct 5, 2009, at 3:19 53PM, Nicolas Cellier wrote:
>
>> 2009/10/5 Henrik Johansen <henrik.s.johansen(a)veloxit.no>:
>>
>>> Of course, it's arguable that that's better behaviour for
>>> LinkedLists,
>>> seeing as otherwise ll2's lastLink would be invalid when you added
>>> to
>>> ll.
>>> At a glance, SparseLargeTable, Stack (Through LinkedList
>>> implementation) and WideCharacterSet in your changeset all seem to
>>> do
>>> a deep copy.
>>>
>>
>> just deep enough, not more, not less.
>
> To my understanding, that's too deep.
> You're copying elements in the collection as well, not just creating a
> copy of the collection with the same elements.
> That's what I'd define as a deepCopy, after a copy, I'd expect the
> elements in them to be the same.
> Maybe it's just what I've gotten used to in VW, and Squeak does
> something else historically, but mixing and matching which to do based
> on what feels best at any given time can lead to some nasty bugs :)
Thinking for a bit more than 2 minutes (which I should do more often,
I know), I guess I agree with copying the links the way you do it.
So just disregard what I wrote.
SparseLargeTables works as I'd expect:
assoc := 7 -> 10.
slt := SparseLargeTable new:5 .
slt at: 5 put: assoc.
slt2 := slt copy.
(slt at: 5) value: 11.
(slt2 at: 5) 7->11
And I guess it doesn't make sense anyhow to mutate elements of a
WideCharacterSet :)
Sorry for the noise.
Cheers,
Henry
Oct. 5, 2009
Re: [Pharo-project] Copy for SequenceableCollection subclasses? (Was: Fix for 987)
by Schwab,Wilhelm K
The Dolphin solution to this type of problem is to define #species that answers the collection type to use when copying - then the super class method has a much easier time answering a collection of the expected type.
Bill
-----Original Message-----
From: pharo-project-bounces(a)lists.gforge.inria.fr [mailto:pharo-project-bounces@lists.gforge.inria.fr] On Behalf Of Henrik Johansen
Sent: Monday, October 05, 2009 7:00 AM
To: Pharo-project(a)lists.gforge.inria.fr
Subject: [Pharo-project] Copy for SequenceableCollection subclasses? (Was: Fix for 987)
Somewhat related, at least I noticed it when debugging this:
Sending copy to a LinkedList or a Semaphore will give back an array, since it uses shallowCopy from SequenceableCollection.
Probably applies to more of SequenceableCollection's subclasses too, f.ex. DirectoryEntry for which copy leads to an MNU.
Another side-effect of strange class-hierarchy, I guess :)
Not quite sure how/if you want to implement those differently.
Submitted to tracker as Issue1272.
Cheers,
Henry
On Oct 5, 2009, at 1:12 38PM, Stéphane Ducasse wrote:
> Thanks we will integrate that as soon as we can breath :)
>
> On Oct 5, 2009, at 12:14 PM, Henrik Johansen wrote:
>
>> Updated Issue987 with a SLICE in Inbox, which "fixes" the DNU in the
>> way below.
>> Used printString instead of asString as proposed by Hernán, as it (in
>> principle) should be more robustly implemented and thus more suited
>> for debugger display.
>> (If sig's idea from some time back was adopted, this should be
>> debugString instead of printString, of course).
>>
>> Cheers,
>> Henry
>>
>> On Oct 5, 2009, at 11:51 23AM, Henrik Johansen wrote:
_______________________________________________
Pharo-project mailing list
Pharo-project(a)lists.gforge.inria.fr
http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
Oct. 5, 2009
Re: [Pharo-project] Copy for SequenceableCollection subclasses? (Was: Fix for 987)
by Henrik Johansen
On Oct 5, 2009, at 3:19 53PM, Nicolas Cellier wrote:
> 2009/10/5 Henrik Johansen <henrik.s.johansen(a)veloxit.no>:
>> Good to know I'm not the only one who found it strange :)
>>
>> BTW, I thought the default for Collections was to do a shallowCopy
>> with a copy operation?
>>
>
> I removed this default behaviour SequenceableCollection>>shallowCopy
> which used to use (self copyFrom: 1 to: self size).
> This beautifull hack was using self species, leading to this mess...
> And it forced me defining a #basicShallowCopy to work the hack around
> (which was the shortest but uggliest solution).
>
> The copy was deep enough so that modifying the copy would not modify
> the original, and this is what postCopy now does.
>
>> ll := LinkedList new.
>> ll add: Link new.
>> ll2 := ll copy.
>> ll add: Link new.
>>
>> inspecting ll2, it's firstLink does not have a nextLink, which
>> implies
>> to me a deepCopy has occured.
>>
>
> I did not take time to write all tests yet, I will give it a try in
> trunk.
>
>> Of course, it's arguable that that's better behaviour for
>> LinkedLists,
>> seeing as otherwise ll2's lastLink would be invalid when you added to
>> ll.
>> At a glance, SparseLargeTable, Stack (Through LinkedList
>> implementation) and WideCharacterSet in your changeset all seem to do
>> a deep copy.
>>
>
> just deep enough, not more, not less.
To my understanding, that's too deep.
You're copying elements in the collection as well, not just creating a
copy of the collection with the same elements.
That's what I'd define as a deepCopy, after a copy, I'd expect the
elements in them to be the same.
Maybe it's just what I've gotten used to in VW, and Squeak does
something else historically, but mixing and matching which to do based
on what feels best at any given time can lead to some nasty bugs :)
>
>> Also, how does part in SharedQueue2
>> monitor critical: [
>> monitor := Monitor new.
>> items := items copy
>> ] work? Seems a bit fishy to me to have a critical section on a
>> monitor, then replacing it as part of it...
>>
>
> He he, it should just work, because we are talking to a Monitor object
> (the Smalltalk way), not to a pointer *monitor somewhere in memory
> (the C/C++ view).
Oh, absolutely, it will not crash due to deallocated pointers or such.
What I meant was a concurrency issue, when some other object requests
something that requires a monitor lock, after Monitor has been
replaced, but before the items have been copied.
i.e.
while the intent of the critical section in that piece of code as far
as I can tell, is that the two operations should happen without items
being accessible before they have been copied.
so you'd actually have to write something like:
monitor critical: [
monitor := Monitor new.
monitor critical:
[items := items copy]]
to ensure that does not happen.
Cheers,
Henry
Oct. 5, 2009
Re: [Pharo-project] Copy for SequenceableCollection subclasses? (Was: Fix for 987)
by Nicolas Cellier
2009/10/5 Henrik Johansen <henrik.s.johansen(a)veloxit.no>:
> Good to know I'm not the only one who found it strange :)
>
> BTW, I thought the default for Collections was to do a shallowCopy
> with a copy operation?
>
I removed this default behaviour SequenceableCollection>>shallowCopy
which used to use (self copyFrom: 1 to: self size).
This beautifull hack was using self species, leading to this mess...
And it forced me defining a #basicShallowCopy to work the hack around
(which was the shortest but uggliest solution).
The copy was deep enough so that modifying the copy would not modify
the original, and this is what postCopy now does.
> ll := LinkedList new.
> ll add: Link new.
> ll2 := ll copy.
> ll add: Link new.
>
> inspecting ll2, it's firstLink does not have a nextLink, which implies
> to me a deepCopy has occured.
>
I did not take time to write all tests yet, I will give it a try in trunk.
> Of course, it's arguable that that's better behaviour for LinkedLists,
> seeing as otherwise ll2's lastLink would be invalid when you added to
> ll.
> At a glance, SparseLargeTable, Stack (Through LinkedList
> implementation) and WideCharacterSet in your changeset all seem to do
> a deep copy.
>
just deep enough, not more, not less.
> Also, how does part in SharedQueue2
> monitor critical: [
> monitor := Monitor new.
> items := items copy
> ] Â work? Seems a bit fishy to me to have a critical section on a
> monitor, then replacing it as part of it...
>
He he, it should just work, because we are talking to a Monitor object
(the Smalltalk way), not to a pointer *monitor somewhere in memory
(the C/C++ view).
> Cheers,
> Henry
>
>
> On Oct 5, 2009, at 2:25 12PM, Nicolas Cellier wrote:
>
>> He he, I just noticed this last evening, see
>> http://bugs.squeak.org/view.php?id=7402
>> http://bugs.squeak.org/view.php?id=7403
>> http://bugs.squeak.org/view.php?id=7404
>>
>> I thus provided another solution for
>> http://bugs.squeak.org/view.php?id=6535 (previous solution has been
>> uploaded in pharo).
>>
>> Nicolas
>>
>> 2009/10/5 Henrik Johansen <henrik.s.johansen(a)veloxit.no>:
>>> Somewhat related, at least I noticed it when debugging this:
>>>
>>> Sending copy to a LinkedList or a Semaphore will give back an array,
>>> since it uses shallowCopy from SequenceableCollection.
>>> Probably applies to more of SequenceableCollection's subclasses too,
>>> f.ex. DirectoryEntry for which copy leads to an MNU.
>>>
>>> Another side-effect of strange class-hierarchy, I guess :)
>>>
>>> Not quite sure how/if you want to implement those differently.
>>>
>>> Submitted to tracker as Issue1272.
>>>
>>> Cheers,
>>> Henry
>>>
>>>
>>> On Oct 5, 2009, at 1:12 38PM, Stéphane Ducasse wrote:
>>>
>>>> Thanks we will integrate that as soon as we can breath :)
>>>>
>>>> On Oct 5, 2009, at 12:14 PM, Henrik Johansen wrote:
>>>>
>>>>> Updated Issue987 with a SLICE in Inbox, which "fixes" the DNU in
>>>>> the
>>>>> way below.
>>>>> Used printString instead of asString as proposed by Hernán, as it
>>>>> (in
>>>>> principle) should be more robustly implemented and thus more suited
>>>>> for debugger display.
>>>>> (If sig's idea from some time back was adopted, this should be
>>>>> debugString instead of printString, of course).
>>>>>
>>>>> Cheers,
>>>>> Henry
>>>>>
>>>>> On Oct 5, 2009, at 11:51 23AM, Henrik Johansen wrote:
>>>
>>> _______________________________________________
>>> Pharo-project mailing list
>>> Pharo-project(a)lists.gforge.inria.fr
>>> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
>>>
>>
>> _______________________________________________
>> Pharo-project mailing list
>> Pharo-project(a)lists.gforge.inria.fr
>> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
>>
>
>
> _______________________________________________
> Pharo-project mailing list
> Pharo-project(a)lists.gforge.inria.fr
> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
>
Oct. 5, 2009
[Pharo-project] [BUG]UndefinedObject(Object)>>doesNotUnderstand: #null
by anlarionov@gmail.com
Almost all refactorings ends with this DNU. Is it platform specific? Or
maybe i miss something
5 October 2009 5:17:34 pm
VM: unix - i686 - linux-gnu - Pharo0.1 of 16 May 2008 [latest update:
#10074]
Image: Pharo1.0beta [Latest update: #10466]
SecurityManager state:
Restricted: false
FileAccess: true
SocketAccess: true
Working Dir
/home/mou/development/smalltalk/pharo1.0-10451-BETAweb09.09.3
Trusted Dir
/home/mou/development/smalltalk/pharo1.0-10451-BETAweb09.09.3/secure
Untrusted Dir
/home/mou/development/smalltalk/pharo1.0-10451-BETAweb09.09.3/My Squeak
UndefinedObject(Object)>>doesNotUnderstand: #null
Receiver: nil
Arguments and temporary variables:
aMessage: null
exception: MessageNotUnderstood: receiver of "null" is nil
resumeValue: nil
Receiver's instance variables:
nil
RBMethodNode>>primitiveNode
Receiver: <<error during printing>>
Arguments and temporary variables:
Receiver's instance variables:
parent: nil
properties: a RBSmallIdentityDictionary(#comments->an
OrderedCollection() )
annotations: nil
selector: #protocol
selectorParts: an Array( RBIdentifierToken('protocol'))
body: <<error during printing>>
RBMethodNode>>primitiveText
Receiver: <<error during printing>>
Arguments and temporary variables:
set: nil
Receiver's instance variables:
parent: nil
properties: a RBSmallIdentityDictionary(#comments->an
OrderedCollection() )
annotations: nil
selector: #protocol
selectorParts: an Array( RBIdentifierToken('protocol'))
body: <<error during printing>>
RBMethodNode>>primitiveSources
Receiver: <<error during printing>>
Arguments and temporary variables:
tgs: #()
text: nil
Receiver's instance variables:
parent: nil
properties: a RBSmallIdentityDictionary(#comments->an
OrderedCollection() )
annotations: nil
selector: #protocol
selectorParts: an Array( RBIdentifierToken('protocol'))
body: <<error during printing>>
RBFormatter>>formatTagFor:
Receiver: a RBFormatter
Arguments and temporary variables:
<<error during printing>
Receiver's instance variables:
codeStream: a WriteStream 'protocol
'
lineStart: 10
firstLineLength: 8
tabs: 1
positionDelta: 0
RBFormatter>>acceptSequenceNode:
Receiver: a RBFormatter
Arguments and temporary variables:
<<error during printing>
Receiver's instance variables:
codeStream: a WriteStream 'protocol
'
lineStart: 10
firstLineLength: 8
tabs: 1
positionDelta: 0
RBSequenceNode>>acceptVisitor:
Receiver: <<error during printing>>
Arguments and temporary variables:
aProgramNodeVisitor: a RBFormatter
Receiver's instance variables:
parent: <<error during printing>>
RBFormatter>>visitNode:
Receiver: a RBFormatter
Arguments and temporary variables:
<<error during printing>
Receiver's instance variables:
codeStream: a WriteStream 'protocol
'
lineStart: 10
firstLineLength: 8
tabs: 1
positionDelta: 0
[] in RBFormatter>>acceptMethodNode:
Receiver: a RBFormatter
Arguments and temporary variables:
<<error during printing>
Receiver's instance variables:
codeStream: a WriteStream 'protocol
'
lineStart: 10
firstLineLength: 8
tabs: 1
positionDelta: 0
RBFormatter>>indent:while:
Receiver: a RBFormatter
Arguments and temporary variables:
anInteger: 1
aBlock: [closure] in RBFormatter>>acceptMethodNode:
Receiver's instance variables:
codeStream: a WriteStream 'protocol
'
lineStart: 10
firstLineLength: 8
tabs: 1
positionDelta: 0
RBFormatter>>indentWhile:
Receiver: a RBFormatter
Arguments and temporary variables:
aBlock: [closure] in RBFormatter>>acceptMethodNode:
Receiver's instance variables:
codeStream: a WriteStream 'protocol
'
lineStart: 10
firstLineLength: 8
tabs: 1
positionDelta: 0
RBFormatter>>acceptMethodNode:
Receiver: a RBFormatter
Arguments and temporary variables:
<<error during printing>
Receiver's instance variables:
codeStream: a WriteStream 'protocol
'
lineStart: 10
firstLineLength: 8
tabs: 1
positionDelta: 0
RBMethodNode>>acceptVisitor:
Receiver: <<error during printing>>
Arguments and temporary variables:
aProgramNodeVisitor: a RBFormatter
Receiver's instance variables:
parent: nil
properties: a RBSmallIdentityDictionary(#comments->an
OrderedCollection() )
annotations: nil
selector: #protocol
selectorParts: an Array( RBIdentifierToken('protocol'))
body: <<error during printing>>
RBFormatter>>visitNode:
Receiver: a RBFormatter
Arguments and temporary variables:
<<error during printing>
Receiver's instance variables:
codeStream: a WriteStream 'protocol
'
lineStart: 10
firstLineLength: 8
tabs: 1
positionDelta: 0
RBFormatter>>format:
Receiver: a RBFormatter
Arguments and temporary variables:
<<error during printing>
Receiver's instance variables:
codeStream: a WriteStream 'protocol
'
lineStart: 10
firstLineLength: 8
tabs: 1
positionDelta: 0
RBMethodNode(RBProgramNode)>>formattedCode
Receiver: <<error during printing>>
Arguments and temporary variables:
Receiver's instance variables:
parent: nil
properties: a RBSmallIdentityDictionary(#comments->an
OrderedCollection() )
annotations: nil
selector: #protocol
selectorParts: an Array( RBIdentifierToken('protocol'))
body: <<error during printing>>
RBClass(RBAbstractClass)>>compileTree:classified:
Receiver: FCGIServer
Arguments and temporary variables:
<<error during printing>
Receiver's instance variables:
name: #FCGIServer
newMethods: an IdentityDictionary()
instanceVariableNames: an OrderedCollection('handler' 'port' 'socket'
'profile'...etc...
model: a RBNamespace
superclass: an Object
subclasses: an OrderedCollection()
removedMethods: nil
realClass: FCGIServer
classVariableNames: an OrderedCollection()
poolDictionaryNames: nil
category: nil
comment: an Object
RBClass(RBAbstractClass)>>compileTree:
Receiver: FCGIServer
Arguments and temporary variables:
<<error during printing>
Receiver's instance variables:
name: #FCGIServer
newMethods: an IdentityDictionary()
instanceVariableNames: an OrderedCollection('handler' 'port' 'socket'
'profile'...etc...
model: a RBNamespace
superclass: an Object
subclasses: an OrderedCollection()
removedMethods: nil
realClass: FCGIServer
classVariableNames: an OrderedCollection()
poolDictionaryNames: nil
category: nil
comment: an Object
RenameClassRefactoring(Refactoring)>>convertMethod:for:using:
Receiver: a RenameClassRefactoring
Arguments and temporary variables:
<<error during printing>
Receiver's instance variables:
model: a RBNamespace
options: nil
className: #FCGIProtocolVersion1
newName: #FCGIAdapter
class: FCGIProtocolVersion1
[] in RenameClassRefactoring>>renameReferences
Receiver: a RenameClassRefactoring
Arguments and temporary variables:
replacer: FCGIServer>>protocol
method: a ParseTreeRewriter
Receiver's instance variables:
model: a RBNamespace
options: nil
className: #FCGIProtocolVersion1
newName: #FCGIAdapter
class: FCGIProtocolVersion1
[] in [] in RBNamespace>>allReferencesToClass:do:
Receiver: a RBNamespace
Arguments and temporary variables:
<<error during printing>
Receiver's instance variables:
changes: FCGIProtocolVersion1 rename: #FCGIAdapter!
environment: Smalltalk
newClasses: an IdentityDictionary()
removedClasses: a Set()
changedClasses: an IdentityDictionary(size 494)
rootClasses: nil
implementorsCache: an IdentityDictionary()
sendersCache: an IdentityDictionary()
Set>>do:
Receiver: a Set(#protocol)
Arguments and temporary variables:
aBlock: [closure] in [] in RBNamespace>>allReferencesToClass:do:
index: 3
each: #protocol
indexLimiT: 5
Receiver's instance variables:
tally: 1
array: #(nil nil #protocol nil nil)
[] in RBNamespace>>allReferencesToClass:do:
Receiver: a RBNamespace
Arguments and temporary variables:
aRBClass: FCGIServer
aBlock: FCGIProtocolVersion1
each: [closure] in RenameClassRefactoring>>renameReferences
Receiver's instance variables:
changes: FCGIProtocolVersion1 rename: #FCGIAdapter!
environment: Smalltalk
newClasses: an IdentityDictionary()
removedClasses: a Set()
changedClasses: an IdentityDictionary(size 494)
rootClasses: nil
implementorsCache: an IdentityDictionary()
sendersCache: an IdentityDictionary()
[] in RBNamespace>>allClassesDo:
Receiver: a RBNamespace
Arguments and temporary variables:
aBlock: FCGIServer
seen: [closure] in RBNamespace>>allReferencesToClass:do:
evalBlock: a Set(#FCGIProtocolVersion1)
each: FCGIServer
class: [closure] in RBNamespace>>allReferencesToClass:do:
Receiver's instance variables:
changes: FCGIProtocolVersion1 rename: #FCGIAdapter!
environment: Smalltalk
newClasses: an IdentityDictionary()
removedClasses: a Set()
changedClasses: an IdentityDictionary(size 494)
rootClasses: nil
implementorsCache: an IdentityDictionary()
sendersCache: an IdentityDictionary()
[] in BrowserEnvironment>>classesDo:
Receiver: Smalltalk
Arguments and temporary variables:
aBlock: FCGIServer
each: [closure] in RBNamespace>>allClassesDo:
Receiver's instance variables:
label: nil
searchStrings: nil
[] in BrowserEnvironment>>allClassesDo:
Receiver: Smalltalk
Arguments and temporary variables:
aBlock: FCGIServer
each: [closure] in BrowserEnvironment>>classesDo:
Receiver's instance variables:
label: nil
searchStrings: nil
OrderedCollection>>do:
Receiver: an OrderedCollection(AColorSelectorMorph ADPCMCodec
AIFFFileReader ASTPrettyPrinting ASamp...etc...
Arguments and temporary variables:
aBlock: [closure] in BrowserEnvironment>>allClassesDo:
index: 492
Receiver's instance variables:
array: {AColorSelectorMorph . ADPCMCodec . AIFFFileReader .
ASTPrettyPrinting ....etc...
firstIndex: 1
lastIndex: 4204
SystemDictionary>>allClassesDo:
Receiver: Smalltalk
Arguments and temporary variables:
aBlock: [closure] in BrowserEnvironment>>allClassesDo:
Receiver's instance variables:
tally: 4332
array: {#PRReferenceRenderer->PRReferenceRenderer .
#PRLightBoxView->PRLightBox...etc...
cachedClassNames: a SortedCollection(#AColorSelectorMorph #ADPCMCodec
#AIFFFile...etc...
SystemNavigation>>allClassesDo:
Receiver: a SystemNavigation
Arguments and temporary variables:
aBlock: [closure] in BrowserEnvironment>>allClassesDo:
Receiver's instance variables:
browserClass: nil
hierarchyBrowserClass: nil
BrowserEnvironment>>allClassesDo:
Receiver: Smalltalk
Arguments and temporary variables:
aBlock: [closure] in BrowserEnvironment>>classesDo:
Receiver's instance variables:
label: nil
searchStrings: nil
BrowserEnvironment>>classesDo:
Receiver: Smalltalk
Arguments and temporary variables:
aBlock: [closure] in RBNamespace>>allClassesDo:
Receiver's instance variables:
label: nil
searchStrings: nil
RBNamespace>>allClassesDo:
Receiver: a RBNamespace
Arguments and temporary variables:
aBlock: [closure] in RBNamespace>>allReferencesToClass:do:
seen: a Set(#FCGIProtocolVersion1)
evalBlock: [closure] in RBNamespace>>allClassesDo:
Receiver's instance variables:
changes: FCGIProtocolVersion1 rename: #FCGIAdapter!
environment: Smalltalk
newClasses: an IdentityDictionary()
removedClasses: a Set()
changedClasses: an IdentityDictionary(size 494)
rootClasses: nil
implementorsCache: an IdentityDictionary()
sendersCache: an IdentityDictionary()
RBNamespace>>allReferencesToClass:do:
Receiver: a RBNamespace
Arguments and temporary variables:
aRBClass: FCGIProtocolVersion1
aBlock: [closure] in RenameClassRefactoring>>renameReferences
Receiver's instance variables:
changes: FCGIProtocolVersion1 rename: #FCGIAdapter!
environment: Smalltalk
newClasses: an IdentityDictionary()
removedClasses: a Set()
changedClasses: an IdentityDictionary(size 494)
rootClasses: nil
implementorsCache: an IdentityDictionary()
sendersCache: an IdentityDictionary()
RenameClassRefactoring>>renameReferences
Receiver: a RenameClassRefactoring
Arguments and temporary variables:
replacer: a ParseTreeRewriter
Receiver's instance variables:
model: a RBNamespace
options: nil
className: #FCGIProtocolVersion1
newName: #FCGIAdapter
class: FCGIProtocolVersion1
[] in RenameClassRefactoring>>transform
Receiver: a RenameClassRefactoring
Arguments and temporary variables:
Receiver's instance variables:
model: a RBNamespace
options: nil
className: #FCGIProtocolVersion1
newName: #FCGIAdapter
class: FCGIProtocolVersion1
BlockClosure>>ensure:
Receiver: [closure] in RenameClassRefactoring>>transform
Arguments and temporary variables:
aBlock: [closure] in RBNamespace>>performChange:around:
returnValue: nil
b: nil
Receiver's instance variables:
outerContext: RenameClassRefactoring>>transform
startpc: 33
numArgs: 0
RBNamespace>>performChange:around:
Receiver: a RBNamespace
Arguments and temporary variables:
aCompositeRefactoryChange: FCGIProtocolVersion1 rename: #FCGIAdapter!
aBlock: [closure] in RenameClassRefactoring>>transform
oldChanges: refactor class, rename
Receiver's instance variables:
changes: FCGIProtocolVersion1 rename: #FCGIAdapter!
environment: Smalltalk
newClasses: an IdentityDictionary()
removedClasses: a Set()
changedClasses: an IdentityDictionary(size 494)
rootClasses: nil
implementorsCache: an IdentityDictionary()
sendersCache: an IdentityDictionary()
RBNamespace>>renameClass:to:around:
Receiver: a RBNamespace
Arguments and temporary variables:
aRBClass: FCGIProtocolVersion1
aSymbol: #FCGIAdapter
aBlock: [closure] in RenameClassRefactoring>>transform
change: FCGIProtocolVersion1 rename: #FCGIAdapter!
value: nil
dict: nil
Receiver's instance variables:
changes: FCGIProtocolVersion1 rename: #FCGIAdapter!
environment: Smalltalk
newClasses: an IdentityDictionary()
removedClasses: a Set()
changedClasses: an IdentityDictionary(size 494)
rootClasses: nil
implementorsCache: an IdentityDictionary()
sendersCache: an IdentityDictionary()
RenameClassRefactoring>>transform
Receiver: a RenameClassRefactoring
Arguments and temporary variables:
Receiver's instance variables:
model: a RBNamespace
options: nil
className: #FCGIProtocolVersion1
newName: #FCGIAdapter
class: FCGIProtocolVersion1
--- The full stack ---
UndefinedObject(Object)>>doesNotUnderstand: #null
RBMethodNode>>primitiveNode
RBMethodNode>>primitiveText
RBMethodNode>>primitiveSources
RBFormatter>>formatTagFor:
RBFormatter>>acceptSequenceNode:
RBSequenceNode>>acceptVisitor:
RBFormatter>>visitNode:
[] in RBFormatter>>acceptMethodNode:
RBFormatter>>indent:while:
RBFormatter>>indentWhile:
RBFormatter>>acceptMethodNode:
RBMethodNode>>acceptVisitor:
RBFormatter>>visitNode:
RBFormatter>>format:
RBMethodNode(RBProgramNode)>>formattedCode
RBClass(RBAbstractClass)>>compileTree:classified:
RBClass(RBAbstractClass)>>compileTree:
RenameClassRefactoring(Refactoring)>>convertMethod:for:using:
[] in RenameClassRefactoring>>renameReferences
[] in [] in RBNamespace>>allReferencesToClass:do:
Set>>do:
[] in RBNamespace>>allReferencesToClass:do:
[] in RBNamespace>>allClassesDo:
[] in BrowserEnvironment>>classesDo:
[] in BrowserEnvironment>>allClassesDo:
OrderedCollection>>do:
SystemDictionary>>allClassesDo:
SystemNavigation>>allClassesDo:
BrowserEnvironment>>allClassesDo:
BrowserEnvironment>>classesDo:
RBNamespace>>allClassesDo:
RBNamespace>>allReferencesToClass:do:
RenameClassRefactoring>>renameReferences
[] in RenameClassRefactoring>>transform
BlockClosure>>ensure:
RBNamespace>>performChange:around:
RBNamespace>>renameClass:to:around:
RenameClassRefactoring>>transform
- - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - -
RenameClassRefactoring(Refactoring)>>primitiveExecute
[] in OR2CmdRenameClassRefactoring(OR2Command)>>performRefactoring:
BlockClosure>>ensure:
CursorWithMask(Cursor)>>showWhile:
OBShoutPlatform(OBMorphicPlatform)>>handleWaitRequest:
OBWaitRequest>>handleWith:
OBWaitRequest(OBInteractionRequest)>>defaultAction
UndefinedObject>>handleSignal:
MethodContext(ContextPart)>>handleSignal:
MethodContext(ContextPart)>>handleSignal:
MethodContext(ContextPart)>>handleSignal:
OBWaitRequest(Exception)>>signal
OBWaitRequest class>>block:
OR2CmdRenameClassRefactoring(OR2Command)>>waitWhile:
OR2CmdRenameClassRefactoring(OR2Command)>>performRefactoring:
[] in [] in OR2CmdRenameClassRefactoring(OR2CmdRefactoring)>>execute
BlockClosure>>on:do:
OR2CmdRenameClassRefactoring(OR2Command)>>handleError:
[] in OR2CmdRenameClassRefactoring(OR2CmdRefactoring)>>execute
BlockClosure>>on:do:
OR2CmdRenameClassRefactoring(OR2CmdRefactoring)>>execute
OR2CmdRenameClassRefactoring(O2Command)>>perform:orSendTo:
[] in ToggleMenuItemMorph(MenuItemMorph)>>invokeWithEvent:
BlockClosure>>ensure:
CursorWithMask(Cursor)>>showWhile:
ToggleMenuItemMorph(MenuItemMorph)>>invokeWithEvent:
ToggleMenuItemMorph(MenuItemMorph)>>mouseUp:
ToggleMenuItemMorph(MenuItemMorph)>>handleMouseUp:
MouseButtonEvent>>sentTo:
ToggleMenuItemMorph(Morph)>>handleEvent:
MorphicEventDispatcher>>dispatchDefault:with:
MorphicEventDispatcher>>dispatchEvent:with:
ToggleMenuItemMorph(Morph)>>processEvent:using:
MorphicEventDispatcher>>dispatchDefault:with:
MorphicEventDispatcher>>dispatchEvent:with:
MenuMorph(Morph)>>processEvent:using:
MenuMorph(Morph)>>processEvent:
MenuMorph>>handleFocusEvent:
[] in HandMorph>>sendFocusEvent:to:clear:
[] in PasteUpMorph>>becomeActiveDuring:
BlockClosure>>on:do:
PasteUpMorph>>becomeActiveDuring:
HandMorph>>sendFocusEvent:to:clear:
HandMorph>>sendEvent:focus:clear:
HandMorph>>sendMouseEvent:
HandMorph>>handleEvent:
HandMorph>>processEvents
[] in WorldState>>doOneCycleNowFor:
Array(SequenceableCollection)>>do:
WorldState>>handsDo:
WorldState>>doOneCycleNowFor:
WorldState>>doOneCycleFor:
PasteUpMorph>>doOneCycle
[] in Project class>>spawnNewProcess
[] in BlockClosure>>newProcess
Oct. 5, 2009
Re: [Pharo-project] Copy for SequenceableCollection subclasses? (Was: Fix for 987)
by Henrik Johansen
Good to know I'm not the only one who found it strange :)
BTW, I thought the default for Collections was to do a shallowCopy
with a copy operation?
ll := LinkedList new.
ll add: Link new.
ll2 := ll copy.
ll add: Link new.
inspecting ll2, it's firstLink does not have a nextLink, which implies
to me a deepCopy has occured.
Of course, it's arguable that that's better behaviour for LinkedLists,
seeing as otherwise ll2's lastLink would be invalid when you added to
ll.
At a glance, SparseLargeTable, Stack (Through LinkedList
implementation) and WideCharacterSet in your changeset all seem to do
a deep copy.
Also, how does part in SharedQueue2
monitor critical: [
monitor := Monitor new.
items := items copy
] work? Seems a bit fishy to me to have a critical section on a
monitor, then replacing it as part of it...
Cheers,
Henry
On Oct 5, 2009, at 2:25 12PM, Nicolas Cellier wrote:
> He he, I just noticed this last evening, see
> http://bugs.squeak.org/view.php?id=7402
> http://bugs.squeak.org/view.php?id=7403
> http://bugs.squeak.org/view.php?id=7404
>
> I thus provided another solution for
> http://bugs.squeak.org/view.php?id=6535 (previous solution has been
> uploaded in pharo).
>
> Nicolas
>
> 2009/10/5 Henrik Johansen <henrik.s.johansen(a)veloxit.no>:
>> Somewhat related, at least I noticed it when debugging this:
>>
>> Sending copy to a LinkedList or a Semaphore will give back an array,
>> since it uses shallowCopy from SequenceableCollection.
>> Probably applies to more of SequenceableCollection's subclasses too,
>> f.ex. DirectoryEntry for which copy leads to an MNU.
>>
>> Another side-effect of strange class-hierarchy, I guess :)
>>
>> Not quite sure how/if you want to implement those differently.
>>
>> Submitted to tracker as Issue1272.
>>
>> Cheers,
>> Henry
>>
>>
>> On Oct 5, 2009, at 1:12 38PM, Stéphane Ducasse wrote:
>>
>>> Thanks we will integrate that as soon as we can breath :)
>>>
>>> On Oct 5, 2009, at 12:14 PM, Henrik Johansen wrote:
>>>
>>>> Updated Issue987 with a SLICE in Inbox, which "fixes" the DNU in
>>>> the
>>>> way below.
>>>> Used printString instead of asString as proposed by Hernán, as it
>>>> (in
>>>> principle) should be more robustly implemented and thus more suited
>>>> for debugger display.
>>>> (If sig's idea from some time back was adopted, this should be
>>>> debugString instead of printString, of course).
>>>>
>>>> Cheers,
>>>> Henry
>>>>
>>>> On Oct 5, 2009, at 11:51 23AM, Henrik Johansen wrote:
>>
>> _______________________________________________
>> Pharo-project mailing list
>> Pharo-project(a)lists.gforge.inria.fr
>> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
>>
>
> _______________________________________________
> Pharo-project mailing list
> Pharo-project(a)lists.gforge.inria.fr
> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
>
Oct. 5, 2009
Re: [Pharo-project] Copy for SequenceableCollection subclasses? (Was: Fix for 987)
by Nicolas Cellier
He he, I just noticed this last evening, see
http://bugs.squeak.org/view.php?id=7402
http://bugs.squeak.org/view.php?id=7403
http://bugs.squeak.org/view.php?id=7404
I thus provided another solution for
http://bugs.squeak.org/view.php?id=6535 (previous solution has been
uploaded in pharo).
Nicolas
2009/10/5 Henrik Johansen <henrik.s.johansen(a)veloxit.no>:
> Somewhat related, at least I noticed it when debugging this:
>
> Sending copy to a LinkedList or a Semaphore will give back an array,
> since it uses shallowCopy from SequenceableCollection.
> Probably applies to more of SequenceableCollection's subclasses too,
> f.ex. DirectoryEntry for which copy leads to an MNU.
>
> Another side-effect of strange class-hierarchy, I guess :)
>
> Not quite sure how/if you want to implement those differently.
>
> Submitted to tracker as Issue1272.
>
> Cheers,
> Henry
>
>
> On Oct 5, 2009, at 1:12 38PM, Stéphane Ducasse wrote:
>
>> Thanks we will integrate that as soon as we can breath :)
>>
>> On Oct 5, 2009, at 12:14 PM, Henrik Johansen wrote:
>>
>>> Updated Issue987 with a SLICE in Inbox, which "fixes" the DNU in the
>>> way below.
>>> Used printString instead of asString as proposed by Hernán, as it (in
>>> principle) should be more robustly implemented and thus more suited
>>> for debugger display.
>>> (If sig's idea from some time back was adopted, this should be
>>> debugString instead of printString, of course).
>>>
>>> Cheers,
>>> Henry
>>>
>>> On Oct 5, 2009, at 11:51 23AM, Henrik Johansen wrote:
>
> _______________________________________________
> Pharo-project mailing list
> Pharo-project(a)lists.gforge.inria.fr
> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
>
Oct. 5, 2009