Hi, I am getting an error while doing this. a := XMLOrderedList new. a add:'1'. a , XMLOrderedList new. Thanks, Thushar
Thushar G R wrote:
Hi,
I am getting an error while doing this.
a := XMLOrderedList new. a add:'1'. a , XMLOrderedList new.
Thanks,
Thushar I could give you "an answer" ;) - but it would be what you wanted. It would help if you told what the error was, where it occurs (which of the three lines), and what you expect each line is doing (especially the third line).
Also I don't see XMLOrderedList in the default Pharo image, so it would help if you describe where you got that from and how you installed it. cheers -ben
XMLOrderedList belongs to package XML-Parser-Nodes. a := XMLOrderedList new. a add:'1'. a , XMLOrderedList new. Here select all and Do it. On line 3 (a , XMLOrderedList new.) i am expected to get a copy of 'a' , but instead it throws an error SubscriptOutOfBounds. OrderedCollection(Object)>>errorSubscriptBounds: OrderedCollection>>ensureBoundsFrom:to: OrderedCollection>>at:put: OrderedCollection(SequenceableCollection)>>replaceFrom:to:with:startingAt: XMLOrderedList>>replaceFrom:to:with:startingAt: XMLOrderedList(SequenceableCollection)>>copyReplaceFrom:to:with: XMLOrderedList(SequenceableCollection)>>, UndefinedObject>>DoIt OpalCompiler>>evaluate SmalltalkEditor>>evaluateSelectionAndDo: PluggableTextMorph>>inspectIt in Block: [ textMorph editor evaluateSelectionAndDo: [ :resu...etc... PluggableTextMorph>>handleEdit: in Block: [ result := editBlock value ] TextMorphForEditView(TextMorph)>>handleEdit: PluggableTextMorph>>handleEdit: PluggableTextMorph>>inspectIt SmalltalkEditor class>>buildSmalltalkEditorKeymappingsOn: in Block: [ :morph | morph inspectIt ] BlockClosure>>cull: BlockClosure>>cull:cull: BlockClosure>>cull:cull:cull: KMCategoryBinding>>completeMatch:buffer: KMKeymap>>notifyCompleteMatchTo:buffer: in Block: [ :l | l completeMatch: self buffer: aBuffer ] Array(SequenceableCollection)>>do: KMKeymap>>notifyCompleteMatchTo:buffer: KMKeymap>>onMatchWith:notify:andDo: KMCategory>>onMatchWith:notify:andDo: in Block: [ :entry | entry onMatchWith: anEventBuffer notify...etc... Set>>do: KMCategory>>onMatchWith:notify:andDo: KMCategoryBinding>>verifyMatchWith:notifying:thenDoing: KMDispatcher>>dispatch: in Block: [ :aTarget | ... OrderedCollection>>do: Plese refer to the above stack. Thanks in advance. thushar *G R Thushar* *Team Leader(Technology),* *Signos Software Solutions Pvt. Ltd.* *Ground Floor **A.R Plaza, TC 11/43 (2),* *P.M.G Junction,* *Thiruvananthapuram, 695004. Kerala, India.* *Web: www.signossolutions.com <http://www.signossolutions.com>* Email: thushar.gr@signossolutions.com, thushar.gr@gmail.com Phone: +919846577772 On Mon, May 5, 2014 at 6:28 PM, Ben Coman <btc@openinworld.com> wrote:
Thushar G R wrote:
Hi,
I am getting an error while doing this.
a := XMLOrderedList new. a add:'1'. a , XMLOrderedList new.
Thanks,
Thushar
I could give you "an answer" ;) - but it would be what you wanted. It would help if you told what the error was, where it occurs (which of the three lines), and what you expect each line is doing (especially the third line).
Also I don't see XMLOrderedList in the default Pharo image, so it would help if you describe where you got that from and how you installed it.
cheers -ben
2014-05-05 19:13 GMT+02:00 Ben Coman <btc@openinworld.com>:
Thanks. That info made it much easier to try. Sorry I didn't end up with an answer for you, but I confirm there is some issue here, or something new I can learn when other chip in.
Here is what I tried.
* Installed XMLParser (monty.58) from Configuration Browser in Pharo 3.
* Ran your code. Got the same error.
* From the call stack I observed that XMLOrderedCollection(SequenceableCollection)>>copyReplaceFrom:to:with: has the line "newSequenceableCollection := self species new: newSize." such that it seems your error might be reduced to the question of why the following two snippets fail: d := OrderedCollection new: 1. d at: 1 put: 1.
e := OrderedCollection new: 3. e at: 2 put: 1.
However I'm sorry that is beyond my knowledge, and I'm hoping someone else can chip in so I can learn something.
Pushing on, I noticed that XMLOrderedList has an instance variable /collection/ which holds the OrderedCollection.
Now I wonder (without great experience and hoping to learn something) if it smells funny that XMLOrderedList inherits all of SequencableCollection methods that can not operate on /collection/.
I noticed that XMLOrderedList was using an inherited SequenceableCollection>>copyReplaceFrom:to:with while OrderedCollection overrode that method with its own. So taking inspiration XMLOrderedList>>copyFrom:to: to override SequencableCollection>>copyReplaceFrom:to:with: to work with /collection/ seems to solve your problem: XMLOrderedList>>copyReplaceFrom: start to: stop with: replacementCollection ^ self newWithCollection: (collection copyReplaceFrom: start to: stop with: replacementCollection )
Along the way I noticed a few (possible) bugs that seems not related to your problem:
* When stepping through XMLOrderedList>>setCollection: there is a red-box-of-death for the instance variables, which can be solved by defining the following. XMLOrderedList>>size ^ collection ifNil: [ 0 ] ifNotNil: [ collection size]
* In the debugger the /collection/ instance variable is not shown! (e.g. line XMLOrderedList>>at:put:). Can someone confirm this should show?
I think this is the default Collection inspector (EyeCollectionInspector). Debugging a OrderedCollection behaves the same, the debugger does not show the array and index instvars. nicolai
HTH cheers -ben
Thushar G R wrote:
XMLOrderedList belongs to package XML-Parser-Nodes.
a := XMLOrderedList new. a add:'1'. a , XMLOrderedList new.
Here select all and Do it. On line 3 (a , XMLOrderedList new.) i am expected to get a copy of 'a' , but instead it throws an error SubscriptOutOfBounds.
OrderedCollection(Object)>>errorSubscriptBounds: OrderedCollection>>ensureBoundsFrom:to: OrderedCollection>>at:put: OrderedCollection(SequenceableCollection)>>replaceFrom:to:with:startingAt: XMLOrderedList>>replaceFrom:to:with:startingAt: XMLOrderedList(SequenceableCollection)>>copyReplaceFrom:to:with: XMLOrderedList(SequenceableCollection)>>, UndefinedObject>>DoIt OpalCompiler>>evaluate SmalltalkEditor>>evaluateSelectionAndDo: PluggableTextMorph>>inspectIt in Block: [ textMorph editor evaluateSelectionAndDo: [ :resu...etc... PluggableTextMorph>>handleEdit: in Block: [ result := editBlock value ] TextMorphForEditView(TextMorph)>>handleEdit: PluggableTextMorph>>handleEdit: PluggableTextMorph>>inspectIt SmalltalkEditor class>>buildSmalltalkEditorKeymappingsOn: in Block: [ :morph | morph inspectIt ] BlockClosure>>cull: BlockClosure>>cull:cull: BlockClosure>>cull:cull:cull: KMCategoryBinding>>completeMatch:buffer: KMKeymap>>notifyCompleteMatchTo:buffer: in Block: [ :l | l completeMatch: self buffer: aBuffer ] Array(SequenceableCollection)>>do: KMKeymap>>notifyCompleteMatchTo:buffer: KMKeymap>>onMatchWith:notify:andDo: KMCategory>>onMatchWith:notify:andDo: in Block: [ :entry | entry onMatchWith: anEventBuffer notify...etc... Set>>do: KMCategory>>onMatchWith:notify:andDo: KMCategoryBinding>>verifyMatchWith:notifying:thenDoing: KMDispatcher>>dispatch: in Block: [ :aTarget | ... OrderedCollection>>do:
Plese refer to the above stack.
Thanks in advance.
thushar
On Mon, May 5, 2014 at 6:28 PM, Ben Coman <btc@openinworld.com> wrote:
Thushar G R wrote:
Hi,
I am getting an error while doing this.
a := XMLOrderedList new. a add:'1'. a , XMLOrderedList new.
Thanks,
Thushar
I could give you "an answer" ;) - but it would be what you wanted. It would help if you told what the error was, where it occurs (which of the three lines), and what you expect each line is doing (especially the third line).
Also I don't see XMLOrderedList in the default Pharo image, so it would help if you describe where you got that from and how you installed it.
cheers -ben
The EyeCollectionInspector show the 'collection view' (what enumeration does), the EyeBasicInspector shows the actual instance variables as well as the variable part (and thus allows a look inside). That is why there are multiple views. On 05 May 2014, at 23:50, Nicolai Hess <nicolaihess@web.de> wrote:
2014-05-05 19:13 GMT+02:00 Ben Coman <btc@openinworld.com>:
Thanks. That info made it much easier to try. Sorry I didn't end up with an answer for you, but I confirm there is some issue here, or something new I can learn when other chip in.
Here is what I tried.
* Installed XMLParser (monty.58) from Configuration Browser in Pharo 3.
* Ran your code. Got the same error.
* From the call stack I observed that XMLOrderedCollection(SequenceableCollection)>>copyReplaceFrom:to:with: has the line "newSequenceableCollection := self species new: newSize." such that it seems your error might be reduced to the question of why the following two snippets fail: d := OrderedCollection new: 1. d at: 1 put: 1.
e := OrderedCollection new: 3. e at: 2 put: 1.
However I'm sorry that is beyond my knowledge, and I'm hoping someone else can chip in so I can learn something.
Pushing on, I noticed that XMLOrderedList has an instance variable /collection/ which holds the OrderedCollection.
Now I wonder (without great experience and hoping to learn something) if it smells funny that XMLOrderedList inherits all of SequencableCollection methods that can not operate on /collection/.
I noticed that XMLOrderedList was using an inherited SequenceableCollection>>copyReplaceFrom:to:with while OrderedCollection overrode that method with its own. So taking inspiration XMLOrderedList>>copyFrom:to: to override SequencableCollection>>copyReplaceFrom:to:with: to work with /collection/ seems to solve your problem: XMLOrderedList>>copyReplaceFrom: start to: stop with: replacementCollection ^ self newWithCollection: (collection copyReplaceFrom: start to: stop with: replacementCollection )
Along the way I noticed a few (possible) bugs that seems not related to your problem:
* When stepping through XMLOrderedList>>setCollection: there is a red-box-of-death for the instance variables, which can be solved by defining the following. XMLOrderedList>>size ^ collection ifNil: [ 0 ] ifNotNil: [ collection size]
* In the debugger the /collection/ instance variable is not shown! (e.g. line XMLOrderedList>>at:put:). Can someone confirm this should show?
I think this is the default Collection inspector (EyeCollectionInspector). Debugging a OrderedCollection behaves the same, the debugger does not show the array and index instvars.
nicolai
HTH cheers -ben
Thushar G R wrote:
XMLOrderedList belongs to package XML-Parser-Nodes.
a := XMLOrderedList new. a add:'1'. a , XMLOrderedList new.
Here select all and Do it. On line 3 (a , XMLOrderedList new.) i am expected to get a copy of 'a' , but instead it throws an error SubscriptOutOfBounds.
OrderedCollection(Object)>>errorSubscriptBounds: OrderedCollection>>ensureBoundsFrom:to: OrderedCollection>>at:put: OrderedCollection(SequenceableCollection)>>replaceFrom:to:with:startingAt: XMLOrderedList>>replaceFrom:to:with:startingAt: XMLOrderedList(SequenceableCollection)>>copyReplaceFrom:to:with: XMLOrderedList(SequenceableCollection)>>, UndefinedObject>>DoIt OpalCompiler>>evaluate SmalltalkEditor>>evaluateSelectionAndDo: PluggableTextMorph>>inspectIt in Block: [ textMorph editor evaluateSelectionAndDo: [ :resu...etc... PluggableTextMorph>>handleEdit: in Block: [ result := editBlock value ] TextMorphForEditView(TextMorph)>>handleEdit: PluggableTextMorph>>handleEdit: PluggableTextMorph>>inspectIt SmalltalkEditor class>>buildSmalltalkEditorKeymappingsOn: in Block: [ :morph | morph inspectIt ] BlockClosure>>cull: BlockClosure>>cull:cull: BlockClosure>>cull:cull:cull: KMCategoryBinding>>completeMatch:buffer: KMKeymap>>notifyCompleteMatchTo:buffer: in Block: [ :l | l completeMatch: self buffer: aBuffer ] Array(SequenceableCollection)>>do: KMKeymap>>notifyCompleteMatchTo:buffer: KMKeymap>>onMatchWith:notify:andDo: KMCategory>>onMatchWith:notify:andDo: in Block: [ :entry | entry onMatchWith: anEventBuffer notify...etc... Set>>do: KMCategory>>onMatchWith:notify:andDo: KMCategoryBinding>>verifyMatchWith:notifying:thenDoing: KMDispatcher>>dispatch: in Block: [ :aTarget | ... OrderedCollection>>do:
Plese refer to the above stack.
Thanks in advance.
thushar
On Mon, May 5, 2014 at 6:28 PM, Ben Coman <btc@openinworld.com> wrote: Thushar G R wrote: Hi,
I am getting an error while doing this.
a := XMLOrderedList new. a add:'1'. a , XMLOrderedList new.
Thanks,
Thushar I could give you "an answer" ;) - but it would be what you wanted. It would help if you told what the error was, where it occurs (which of the three lines), and what you expect each line is doing (especially the third line).
Also I don't see XMLOrderedList in the default Pharo image, so it would help if you describe where you got that from and how you installed it.
cheers -ben
Hi The problem seems to be due to the use of an internal collection class of OrderedCollection which has restrictions on use of #at:put:. This means that certain methods will have to delegate to the internal collection class to be âsafeâ; in this scenario it is the XMLOrderedList >>copyReplaceFrom:to:with: I donât have write access to the http://www.smalltalkhub.com/#!/~PharoExtras/XMLParser/ project but here is a unit test and code change that seems to work. Cheers Carlo XMLOrderedListTest>>testConcatenation | anXmlOrderedList expectedConcatenationResult | expectedConcatenationResult := XMLOrderedList new add: '1'; yourself. self shouldnt: [ anXmlOrderedList := expectedConcatenationResult , XMLOrderedList new ] raise: SubscriptOutOfBounds description: 'Expect that concatenation does not fail even though internal collection class of XMLOrderedList is an OrderedCollection. See comment for XMLOrderedList>>copyReplaceFrom:to:with:'. self assert: anXmlOrderedList equals: expectedConcatenationResult. XMLOrderedList >>copyReplaceFrom: start to: stop with: replacementCollection "Delegate to my internal collection class as it may restrict copying and replacing. See comment for OrderedCollection>>copyReplaceFrom:to:with: and OrderedCollection>>at:put:" ^ self collection copyReplaceFrom: start to: stop with: replacementCollection On 05 May 2014, at 7:13 PM, Ben Coman <btc@openInWorld.com> wrote: Thanks. That info made it much easier to try. Sorry I didn't end up with an answer for you, but I confirm there is some issue here, or something new I can learn when other chip in. Here is what I tried. * Installed XMLParser (monty.58) from Configuration Browser in Pharo 3. * Ran your code. Got the same error. * From the call stack I observed that XMLOrderedCollection(SequenceableCollection)>>copyReplaceFrom:to:with: has the line "newSequenceableCollection := self species new: newSize." such that it seems your error might be reduced to the question of why the following two snippets fail: d := OrderedCollection new: 1. d at: 1 put: 1. e := OrderedCollection new: 3. e at: 2 put: 1. However I'm sorry that is beyond my knowledge, and I'm hoping someone else can chip in so I can learn something. Pushing on, I noticed that XMLOrderedList has an instance variable /collection/ which holds the OrderedCollection. Now I wonder (without great experience and hoping to learn something) if it smells funny that XMLOrderedList inherits all of SequencableCollection methods that can not operate on /collection/. I noticed that XMLOrderedList was using an inherited SequenceableCollection>>copyReplaceFrom:to:with while OrderedCollection overrode that method with its own. So taking inspiration XMLOrderedList>>copyFrom:to: to override SequencableCollection>>copyReplaceFrom:to:with: to work with /collection/ seems to solve your problem: XMLOrderedList>>copyReplaceFrom: start to: stop with: replacementCollection ^ self newWithCollection: (collection copyReplaceFrom: start to: stop with: replacementCollection ) Along the way I noticed a few (possible) bugs that seems not related to your problem: * When stepping through XMLOrderedList>>setCollection: there is a red-box-of-death for the instance variables, which can be solved by defining the following. XMLOrderedList>>size ^ collection ifNil: [ 0 ] ifNotNil: [ collection size] * In the debugger the /collection/ instance variable is not shown! (e.g. line XMLOrderedList>>at:put:). Can someone confirm this should show? HTH cheers -ben Thushar G R wrote:
XMLOrderedList belongs to package XML-Parser-Nodes.
a := XMLOrderedList new. a add:'1'. a , XMLOrderedList new.
Here select all and Do it. On line 3 (a , XMLOrderedList new.) i am expected to get a copy of 'a' , but instead it throws an error SubscriptOutOfBounds.
OrderedCollection(Object)>>errorSubscriptBounds: OrderedCollection>>ensureBoundsFrom:to: OrderedCollection>>at:put: OrderedCollection(SequenceableCollection)>>replaceFrom:to:with:startingAt: XMLOrderedList>>replaceFrom:to:with:startingAt: XMLOrderedList(SequenceableCollection)>>copyReplaceFrom:to:with: XMLOrderedList(SequenceableCollection)>>, UndefinedObject>>DoIt OpalCompiler>>evaluate SmalltalkEditor>>evaluateSelectionAndDo: PluggableTextMorph>>inspectIt in Block: [ textMorph editor evaluateSelectionAndDo: [ :resu...etc... PluggableTextMorph>>handleEdit: in Block: [ result := editBlock value ] TextMorphForEditView(TextMorph)>>handleEdit: PluggableTextMorph>>handleEdit: PluggableTextMorph>>inspectIt SmalltalkEditor class>>buildSmalltalkEditorKeymappingsOn: in Block: [ :morph | morph inspectIt ] BlockClosure>>cull: BlockClosure>>cull:cull: BlockClosure>>cull:cull:cull: KMCategoryBinding>>completeMatch:buffer: KMKeymap>>notifyCompleteMatchTo:buffer: in Block: [ :l | l completeMatch: self buffer: aBuffer ] Array(SequenceableCollection)>>do: KMKeymap>>notifyCompleteMatchTo:buffer: KMKeymap>>onMatchWith:notify:andDo: KMCategory>>onMatchWith:notify:andDo: in Block: [ :entry | entry onMatchWith: anEventBuffer notify...etc... Set>>do: KMCategory>>onMatchWith:notify:andDo: KMCategoryBinding>>verifyMatchWith:notifying:thenDoing: KMDispatcher>>dispatch: in Block: [ :aTarget | ... OrderedCollection>>do:
Plese refer to the above stack.
Thanks in advance.
thushar
On Mon, May 5, 2014 at 6:28 PM, Ben Coman <btc@openinworld.com> wrote: Thushar G R wrote: Hi,
I am getting an error while doing this.
a := XMLOrderedList new. a add:'1'. a , XMLOrderedList new.
Thanks,
Thushar I could give you "an answer" ;) - but it would be what you wanted. It would help if you told what the error was, where it occurs (which of the three lines), and what you expect each line is doing (especially the third line).
Also I don't see XMLOrderedList in the default Pharo image, so it would help if you describe where you got that from and how you installed it.
cheers -ben
2014-05-06 1:17 GMT+02:00 Carlo <snoobabk@gmail.com>:
Hi
The problem seems to be due to the use of an internal collection class of OrderedCollection which has restrictions on use of #at:put:. This means that certain methods will have to delegate to the internal collection class to be âsafeâ; in this scenario it is the XMLOrderedList
copyReplaceFrom:to:with:
I donât have write access to the http://www.smalltalkhub.com/#!/~PharoExtras/XMLParser/ project but here is a unit test and code change that seems to work.
Cheers Carlo
XMLOrderedListTest>>testConcatenation | anXmlOrderedList expectedConcatenationResult | expectedConcatenationResult := XMLOrderedList new add: '1'; yourself. self shouldnt: [ anXmlOrderedList := expectedConcatenationResult , XMLOrderedList new ] raise: SubscriptOutOfBounds description: 'Expect that concatenation does not fail even though internal collection class of XMLOrderedList is an OrderedCollection. See comment for XMLOrderedList>>copyReplaceFrom:to:with:'. self assert: anXmlOrderedList equals: expectedConcatenationResult.
XMLOrderedList >>copyReplaceFrom: start to: stop with: replacementCollection "Delegate to my internal collection class as it may restrict copying and replacing. See comment for OrderedCollection>>copyReplaceFrom:to:with: and OrderedCollection>>at:put:"
^ self collection copyReplaceFrom: start to: stop with: replacementCollection
But the test fails :) XMLOrderedList >>copyReplaceFrom: start to: stop with: replacementCollection should return self, not the collection. XMLOrderedList >>copyReplaceFrom: start to: stop with: replacementCollection "Delegate to my internal collection class as it may restrict copying and replacing. See comment for OrderedCollection>>copyReplaceFrom:to:with: and OrderedCollection>>at:put:" self collection copyReplaceFrom: start to: stop with: replacementCollection.
On 05 May 2014, at 7:13 PM, Ben Coman <btc@openInWorld.com> wrote:
Thanks. That info made it much easier to try. Sorry I didn't end up with an answer for you, but I confirm there is some issue here, or something new I can learn when other chip in.
Here is what I tried.
* Installed XMLParser (monty.58) from Configuration Browser in Pharo 3.
* Ran your code. Got the same error.
* From the call stack I observed that XMLOrderedCollection(SequenceableCollection)>>copyReplaceFrom:to:with: has the line "newSequenceableCollection := self species new: newSize." such that it seems your error might be reduced to the question of why the following two snippets fail: d := OrderedCollection new: 1. d at: 1 put: 1.
e := OrderedCollection new: 3. e at: 2 put: 1.
However I'm sorry that is beyond my knowledge, and I'm hoping someone else can chip in so I can learn something.
Pushing on, I noticed that XMLOrderedList has an instance variable /collection/ which holds the OrderedCollection.
Now I wonder (without great experience and hoping to learn something) if it smells funny that XMLOrderedList inherits all of SequencableCollection methods that can not operate on /collection/.
I noticed that XMLOrderedList was using an inherited SequenceableCollection>>copyReplaceFrom:to:with while OrderedCollection overrode that method with its own. So taking inspiration XMLOrderedList>>copyFrom:to: to override SequencableCollection>>copyReplaceFrom:to:with: to work with /collection/ seems to solve your problem: XMLOrderedList>>copyReplaceFrom: start to: stop with: replacementCollection ^ self newWithCollection: (collection copyReplaceFrom: start to: stop with: replacementCollection )
Along the way I noticed a few (possible) bugs that seems not related to your problem:
* When stepping through XMLOrderedList>>setCollection: there is a red-box-of-death for the instance variables, which can be solved by defining the following. XMLOrderedList>>size ^ collection ifNil: [ 0 ] ifNotNil: [ collection size]
* In the debugger the /collection/ instance variable is not shown! (e.g. line XMLOrderedList>>at:put:). Can someone confirm this should show?
HTH cheers -ben
Thushar G R wrote:
XMLOrderedList belongs to package XML-Parser-Nodes.
a := XMLOrderedList new. a add:'1'. a , XMLOrderedList new.
Here select all and Do it. On line 3 (a , XMLOrderedList new.) i am expected to get a copy of 'a' , but instead it throws an error SubscriptOutOfBounds.
OrderedCollection(Object)>>errorSubscriptBounds: OrderedCollection>>ensureBoundsFrom:to: OrderedCollection>>at:put: OrderedCollection(SequenceableCollection)>>replaceFrom:to:with:startingAt: XMLOrderedList>>replaceFrom:to:with:startingAt: XMLOrderedList(SequenceableCollection)>>copyReplaceFrom:to:with: XMLOrderedList(SequenceableCollection)>>, UndefinedObject>>DoIt OpalCompiler>>evaluate SmalltalkEditor>>evaluateSelectionAndDo: PluggableTextMorph>>inspectIt in Block: [ textMorph editor evaluateSelectionAndDo: [ :resu...etc... PluggableTextMorph>>handleEdit: in Block: [ result := editBlock value ] TextMorphForEditView(TextMorph)>>handleEdit: PluggableTextMorph>>handleEdit: PluggableTextMorph>>inspectIt SmalltalkEditor class>>buildSmalltalkEditorKeymappingsOn: in Block: [ :morph | morph inspectIt ] BlockClosure>>cull: BlockClosure>>cull:cull: BlockClosure>>cull:cull:cull: KMCategoryBinding>>completeMatch:buffer: KMKeymap>>notifyCompleteMatchTo:buffer: in Block: [ :l | l completeMatch: self buffer: aBuffer ] Array(SequenceableCollection)>>do: KMKeymap>>notifyCompleteMatchTo:buffer: KMKeymap>>onMatchWith:notify:andDo: KMCategory>>onMatchWith:notify:andDo: in Block: [ :entry | entry onMatchWith: anEventBuffer notify...etc... Set>>do: KMCategory>>onMatchWith:notify:andDo: KMCategoryBinding>>verifyMatchWith:notifying:thenDoing: KMDispatcher>>dispatch: in Block: [ :aTarget | ... OrderedCollection>>do:
Plese refer to the above stack.
Thanks in advance.
thushar
On Mon, May 5, 2014 at 6:28 PM, Ben Coman <btc@openinworld.com> wrote:
Thushar G R wrote:
Hi,
I am getting an error while doing this.
a := XMLOrderedList new. a add:'1'. a , XMLOrderedList new.
Thanks,
Thushar
I could give you "an answer" ;) - but it would be what you wanted. It would help if you told what the error was, where it occurs (which of the three lines), and what you expect each line is doing (especially the third line).
Also I don't see XMLOrderedList in the default Pharo image, so it would help if you describe where you got that from and how you installed it.
cheers -ben
Hi Sorry about that, I think itâs meant to be: copyReplaceFrom: start to: stop with: replacementCollection "Delegate to my internal collection class as it may restrict copying and replacing. See comment for OrderedCollection>>copyReplaceFrom:to:with: and OrderedCollection>>at:put:" ^ self newWithCollection: (self collection copyReplaceFrom: start to: stop with: replacementCollection) Cheers Carlo On 06 May 2014, at 9:43 AM, Nicolai Hess <nicolaihess@web.de> wrote: 2014-05-06 1:17 GMT+02:00 Carlo <snoobabk@gmail.com>: Hi The problem seems to be due to the use of an internal collection class of OrderedCollection which has restrictions on use of #at:put:. This means that certain methods will have to delegate to the internal collection class to be âsafeâ; in this scenario it is the XMLOrderedList >>copyReplaceFrom:to:with: I donât have write access to the http://www.smalltalkhub.com/#!/~PharoExtras/XMLParser/ project but here is a unit test and code change that seems to work. Cheers Carlo XMLOrderedListTest>>testConcatenation | anXmlOrderedList expectedConcatenationResult | expectedConcatenationResult := XMLOrderedList new add: '1'; yourself. self shouldnt: [ anXmlOrderedList := expectedConcatenationResult , XMLOrderedList new ] raise: SubscriptOutOfBounds description: 'Expect that concatenation does not fail even though internal collection class of XMLOrderedList is an OrderedCollection. See comment for XMLOrderedList>>copyReplaceFrom:to:with:'. self assert: anXmlOrderedList equals: expectedConcatenationResult. XMLOrderedList >>copyReplaceFrom: start to: stop with: replacementCollection "Delegate to my internal collection class as it may restrict copying and replacing. See comment for OrderedCollection>>copyReplaceFrom:to:with: and OrderedCollection>>at:put:" ^ self collection copyReplaceFrom: start to: stop with: replacementCollection But the test fails :) XMLOrderedList >>copyReplaceFrom: start to: stop with: replacementCollection should return self, not the collection. XMLOrderedList >>copyReplaceFrom: start to: stop with: replacementCollection "Delegate to my internal collection class as it may restrict copying and replacing. See comment for OrderedCollection>>copyReplaceFrom:to:with: and OrderedCollection>>at:put:" self collection copyReplaceFrom: start to: stop with: replacementCollection. On 05 May 2014, at 7:13 PM, Ben Coman <btc@openInWorld.com> wrote: Thanks. That info made it much easier to try. Sorry I didn't end up with an answer for you, but I confirm there is some issue here, or something new I can learn when other chip in. Here is what I tried. * Installed XMLParser (monty.58) from Configuration Browser in Pharo 3. * Ran your code. Got the same error. * From the call stack I observed that XMLOrderedCollection(SequenceableCollection)>>copyReplaceFrom:to:with: has the line "newSequenceableCollection := self species new: newSize." such that it seems your error might be reduced to the question of why the following two snippets fail: d := OrderedCollection new: 1. d at: 1 put: 1. e := OrderedCollection new: 3. e at: 2 put: 1. However I'm sorry that is beyond my knowledge, and I'm hoping someone else can chip in so I can learn something. Pushing on, I noticed that XMLOrderedList has an instance variable /collection/ which holds the OrderedCollection. Now I wonder (without great experience and hoping to learn something) if it smells funny that XMLOrderedList inherits all of SequencableCollection methods that can not operate on /collection/. I noticed that XMLOrderedList was using an inherited SequenceableCollection>>copyReplaceFrom:to:with while OrderedCollection overrode that method with its own. So taking inspiration XMLOrderedList>>copyFrom:to: to override SequencableCollection>>copyReplaceFrom:to:with: to work with /collection/ seems to solve your problem: XMLOrderedList>>copyReplaceFrom: start to: stop with: replacementCollection ^ self newWithCollection: (collection copyReplaceFrom: start to: stop with: replacementCollection ) Along the way I noticed a few (possible) bugs that seems not related to your problem: * When stepping through XMLOrderedList>>setCollection: there is a red-box-of-death for the instance variables, which can be solved by defining the following. XMLOrderedList>>size ^ collection ifNil: [ 0 ] ifNotNil: [ collection size] * In the debugger the /collection/ instance variable is not shown! (e.g. line XMLOrderedList>>at:put:). Can someone confirm this should show? HTH cheers -ben Thushar G R wrote:
XMLOrderedList belongs to package XML-Parser-Nodes.
a := XMLOrderedList new. a add:'1'. a , XMLOrderedList new.
Here select all and Do it. On line 3 (a , XMLOrderedList new.) i am expected to get a copy of 'a' , but instead it throws an error SubscriptOutOfBounds.
OrderedCollection(Object)>>errorSubscriptBounds: OrderedCollection>>ensureBoundsFrom:to: OrderedCollection>>at:put: OrderedCollection(SequenceableCollection)>>replaceFrom:to:with:startingAt: XMLOrderedList>>replaceFrom:to:with:startingAt: XMLOrderedList(SequenceableCollection)>>copyReplaceFrom:to:with: XMLOrderedList(SequenceableCollection)>>, UndefinedObject>>DoIt OpalCompiler>>evaluate SmalltalkEditor>>evaluateSelectionAndDo: PluggableTextMorph>>inspectIt in Block: [ textMorph editor evaluateSelectionAndDo: [ :resu...etc... PluggableTextMorph>>handleEdit: in Block: [ result := editBlock value ] TextMorphForEditView(TextMorph)>>handleEdit: PluggableTextMorph>>handleEdit: PluggableTextMorph>>inspectIt SmalltalkEditor class>>buildSmalltalkEditorKeymappingsOn: in Block: [ :morph | morph inspectIt ] BlockClosure>>cull: BlockClosure>>cull:cull: BlockClosure>>cull:cull:cull: KMCategoryBinding>>completeMatch:buffer: KMKeymap>>notifyCompleteMatchTo:buffer: in Block: [ :l | l completeMatch: self buffer: aBuffer ] Array(SequenceableCollection)>>do: KMKeymap>>notifyCompleteMatchTo:buffer: KMKeymap>>onMatchWith:notify:andDo: KMCategory>>onMatchWith:notify:andDo: in Block: [ :entry | entry onMatchWith: anEventBuffer notify...etc... Set>>do: KMCategory>>onMatchWith:notify:andDo: KMCategoryBinding>>verifyMatchWith:notifying:thenDoing: KMDispatcher>>dispatch: in Block: [ :aTarget | ... OrderedCollection>>do:
Plese refer to the above stack.
Thanks in advance.
thushar
On Mon, May 5, 2014 at 6:28 PM, Ben Coman <btc@openinworld.com> wrote: Thushar G R wrote: Hi,
I am getting an error while doing this.
a := XMLOrderedList new. a add:'1'. a , XMLOrderedList new.
Thanks,
Thushar I could give you "an answer" ;) - but it would be what you wanted. It would help if you told what the error was, where it occurs (which of the three lines), and what you expect each line is doing (especially the third line).
Also I don't see XMLOrderedList in the default Pharo image, so it would help if you describe where you got that from and how you installed it.
cheers -ben
2014-05-06 17:49 GMT+02:00 <btc@openinworld.com>:
Nicolai Hess wrote:
2014-05-06 1:17 GMT+02:00 Carlo <snoobabk@gmail.com>:
Hi
The problem seems to be due to the use of an internal collection class of OrderedCollection which has restrictions on use of #at:put:. This means that certain methods will have to delegate to the internal collection class to be âsafeâ; in this scenario it is the XMLOrderedList
copyReplaceFrom:to:with:
I donât have write access to the http://www.smalltalkhub.com/#!/~PharoExtras/XMLParser/ project but here is a unit test and code change that seems to work.
Cheers Carlo
XMLOrderedListTest>>testConcatenation | anXmlOrderedList expectedConcatenationResult | expectedConcatenationResult := XMLOrderedList new add: '1'; yourself. self shouldnt: [ anXmlOrderedList := expectedConcatenationResult , XMLOrderedList new ] raise: SubscriptOutOfBounds description: 'Expect that concatenation does not fail even though internal collection class of XMLOrderedList is an OrderedCollection. See comment for XMLOrderedList>>copyReplaceFrom:to:with:'. self assert: anXmlOrderedList equals: expectedConcatenationResult.
XMLOrderedList >>copyReplaceFrom: start to: stop with: replacementCollection "Delegate to my internal collection class as it may restrict copying and replacing. See comment for OrderedCollection>>copyReplaceFrom:to:with: and OrderedCollection>>at:put:"
^ self collection copyReplaceFrom: start to: stop with: replacementCollection
But the test fails :)
XMLOrderedList >>copyReplaceFrom: start to: stop with: replacementCollection should return self, not the collection.
hi Nicolas, What you say seems inconsistent with... OrderedCollection>>copyReplaceFrom:to:with: which ends with ^newOrderedCollection
The test fails because... ^ self collection copyReplaceFrom: start to: stop with: replacementCollection returns anOrderedCollection because /collection/ is an OrderedCollection
What is needed is... ^ self newWithCollection: (collection copyReplaceFrom: start to: stop with: replacementCollection). which returns anXMLOrderedList.
cheers -ben
XMLOrderedList >>copyReplaceFrom: start to: stop with: replacementCollection "Delegate to my internal collection class as it may restrict copying and replacing. See comment for OrderedCollection>>copyReplaceFrom:to:with: and OrderedCollection>>at:put:"
self collection copyReplaceFrom: start to: stop with: replacementCollection.
On 05 May 2014, at 7:13 PM, Ben Coman <btc@openInWorld.com> wrote:
Thanks. That info made it much easier to try. Sorry I didn't end up with an answer for you, but I confirm there is some issue here, or something new I can learn when other chip in.
Here is what I tried.
* Installed XMLParser (monty.58) from Configuration Browser in Pharo 3.
* Ran your code. Got the same error.
* From the call stack I observed that XMLOrderedCollection(SequenceableCollection)>>copyReplaceFrom:to:with: has the line "newSequenceableCollection := self species new: newSize." such that it seems your error might be reduced to the question of why the following two snippets fail: d := OrderedCollection new: 1. d at: 1 put: 1.
e := OrderedCollection new: 3. e at: 2 put: 1.
However I'm sorry that is beyond my knowledge, and I'm hoping someone else can chip in so I can learn something.
Pushing on, I noticed that XMLOrderedList has an instance variable /collection/ which holds the OrderedCollection.
Now I wonder (without great experience and hoping to learn something) if it smells funny that XMLOrderedList inherits all of SequencableCollection methods that can not operate on /collection/.
I noticed that XMLOrderedList was using an inherited SequenceableCollection>>copyReplaceFrom:to:with while OrderedCollection overrode that method with its own. So taking inspiration XMLOrderedList>>copyFrom:to: to override SequencableCollection>>copyReplaceFrom:to:with: to work with /collection/ seems to solve your problem: XMLOrderedList>>copyReplaceFrom: start to: stop with: replacementCollection ^ self newWithCollection: (collection copyReplaceFrom: start to: stop with: replacementCollection )
Along the way I noticed a few (possible) bugs that seems not related to your problem:
* When stepping through XMLOrderedList>>setCollection: there is a red-box-of-death for the instance variables, which can be solved by defining the following. XMLOrderedList>>size ^ collection ifNil: [ 0 ] ifNotNil: [ collection size]
* In the debugger the /collection/ instance variable is not shown! (e.g. line XMLOrderedList>>at:put:). Can someone confirm this should show?
HTH cheers -ben
Thushar G R wrote:
XMLOrderedList belongs to package XML-Parser-Nodes.
a := XMLOrderedList new. a add:'1'. a , XMLOrderedList new.
Here select all and Do it. On line 3 (a , XMLOrderedList new.) i am expected to get a copy of 'a' , but instead it throws an error SubscriptOutOfBounds.
OrderedCollection(Object)>>errorSubscriptBounds: OrderedCollection>>ensureBoundsFrom:to: OrderedCollection>>at:put: OrderedCollection(SequenceableCollection)>>replaceFrom:to:with:startingAt: XMLOrderedList>>replaceFrom:to:with:startingAt: XMLOrderedList(SequenceableCollection)>>copyReplaceFrom:to:with: XMLOrderedList(SequenceableCollection)>>, UndefinedObject>>DoIt OpalCompiler>>evaluate SmalltalkEditor>>evaluateSelectionAndDo: PluggableTextMorph>>inspectIt in Block: [ textMorph editor evaluateSelectionAndDo: [ :resu...etc... PluggableTextMorph>>handleEdit: in Block: [ result := editBlock value ] TextMorphForEditView(TextMorph)>>handleEdit: PluggableTextMorph>>handleEdit: PluggableTextMorph>>inspectIt SmalltalkEditor class>>buildSmalltalkEditorKeymappingsOn: in Block: [ :morph | morph inspectIt ] BlockClosure>>cull: BlockClosure>>cull:cull: BlockClosure>>cull:cull:cull: KMCategoryBinding>>completeMatch:buffer: KMKeymap>>notifyCompleteMatchTo:buffer: in Block: [ :l | l completeMatch: self buffer: aBuffer ] Array(SequenceableCollection)>>do: KMKeymap>>notifyCompleteMatchTo:buffer: KMKeymap>>onMatchWith:notify:andDo: KMCategory>>onMatchWith:notify:andDo: in Block: [ :entry | entry onMatchWith: anEventBuffer notify...etc... Set>>do: KMCategory>>onMatchWith:notify:andDo: KMCategoryBinding>>verifyMatchWith:notifying:thenDoing: KMDispatcher>>dispatch: in Block: [ :aTarget | ... OrderedCollection>>do:
Plese refer to the above stack.
Thanks in advance.
thushar
On Mon, May 5, 2014 at 6:28 PM, Ben Coman <btc@openinworld.com> wrote:
Thushar G R wrote:
Hi,
I am getting an error while doing this.
a := XMLOrderedList new. a add:'1'. a , XMLOrderedList new.
Thanks,
Thushar
I could give you "an answer" ;) - but it would be what you wanted. It would help if you told what the error was, where it occurs (which of the three lines), and what you expect each line is doing (especially the third line).
Also I don't see XMLOrderedList in the default Pharo image, so it would help if you describe where you got that from and how you installed it.
cheers -ben
Yes, you are right. I just stumbled on the wrong return type and assumed it should return "self". But you are right if other collections return a copy of self.
Hi, Thanks for all the responses.Ben and Carlos solutions works. What workaround i did was i overrided the concatenation method in XMLOrderedList for the time being , until someone authorised has has a solution and commits it.I hope it happens soon so i dont have to maintain a patch. Thanks to all, thushar *G R Thushar* *Team Leader(Technology),* *Signos Software Solutions Pvt. Ltd.* *Ground Floor **A.R Plaza, TC 11/43 (2),* *P.M.G Junction,* *Thiruvananthapuram, 695004. Kerala, India.* *Web: www.signossolutions.com <http://www.signossolutions.com>* Email: thushar.gr@signossolutions.com, thushar.gr@gmail.com Phone: +919846577772 On Mon, May 5, 2014 at 4:47 PM, Thushar G R <thushar.gr@gmail.com> wrote:
Hi,
I am getting an error while doing this.
a := XMLOrderedList new. a add:'1'. a , XMLOrderedList new.
Thanks,
Thushar
participants (6)
-
Ben Coman -
btc@openinworld.com -
Carlo -
Nicolai Hess -
Sven Van Caekenberghe -
Thushar G R