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 <nicolaih...@web.de> wrote: 2014-05-06 1:17 GMT+02:00 Carlo <snoob...@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 <b...@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 <b...@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