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