[BUG] Package Pane Browser subscript out of bounds

Brian Brown rbb at techgame.net
Tue Jan 6 20:06:50 UTC 2004


Ok, I've done some digging to try to figure out what is happening....

When changing a Class definition, Browser>>setClass:selector: sets the 
ivar systemCategoryListIndex (via an accessor method). This is set from 
systemCatIndex, and it reflects the system category that is selected, 
i.e., the index of the item in SystemOrganization>>categories. However, 
PackagePaneBrowser (PPB) is using the value os systemCategoryListIndex 
to select items in the second pane of the browser, which is what 
appears after the first dash in a category name.

For example, The 'Tools-Browser' category is index 33 (in my image), 
from:
SystemOrganization categories indexOf: #'Tools-Browser'.

There are 10 categories that start with Tools-, Browser is number 2. 
What would then happen if edited the class definition for Browser is 
that the change would be made, systemCategoryListIndex would be set to 
33 and the Browser is then unusable, because it is trying to select 
index 33 in a list of 10 items.

 From what I can tell, the PPB is using the ivars package, 
packageListIndex, and packageList to keep track of the prefix of the 
System category, but on an accept of a Class edit, none of those 
related messages are ever sent.

Can anyone else verify this is happening in 3.7?

I have no idea how to fix this though... :-)

Brian

On Dec 31, 2003, at 4:27 PM, Brian Brown wrote:

> In 3.7alpha-5623 (vanilla image)
>
>
> when using the Package Pane Browser to add a new class definition or
> especially when modifying one, the change gets made, but then a
> subscript out of bounds error is thrown.
>
>
> 31 December 2003 4:25:22 pm
>
> VM: Win32 - a SmalltalkImage
> Image: Squeak3.7alpha [latest update: #5623]
>
> Array(Object)>>error:
> 	Receiver: #('Preload' 'UI')
> 	Arguments and temporary variables:
> 		aString: 	'subscript is out of bounds: 162'
> 	Receiver's instance variables:
> #('Preload' 'UI')
>
> Array(Object)>>errorSubscriptBounds:
> 	Receiver: #('Preload' 'UI')
> 	Arguments and temporary variables:
> 		index: 	162
> 	Receiver's instance variables:
> #('Preload' 'UI')
>
> Array(Object)>>at:
> 	Receiver: #('Preload' 'UI')
> 	Arguments and temporary variables:
> 		index: 	162
> 	Receiver's instance variables:
> #('Preload' 'UI')
>
> PackagePaneBrowser>>selectedSystemCategoryName
> 	Receiver: a PackagePaneBrowser
> 	Arguments and temporary variables:
>
> 	Receiver's instance variables:
> 		dependents: 	#(a SystemWindow(2192) a PluggableListMorph(1792) a
> PluggableListMo...etc...
> 		contents: 	nil
> 		currentCompiledMethod: 	nil
> 		contentsSymbol: 	#source
> 		systemOrganizer: 	('Kernel-Objects' Boolean DependentsArray False 
> MessageSend
> Mo...etc...
> 		classOrganizer: 	nil
> 		metaClassOrganizer: 	nil
> 		systemCategoryListIndex: 	162
> 		classListIndex: 	0
> 		messageCategoryListIndex: 	0
> 		messageListIndex: 	0
> 		editSelection: 	#newClass
> 		metaClassIndicated: 	false
> 		package: 	'SUnit'
> 		packageListIndex: 	25
> 		packageList: 	nil
>
>
> --- The full stack ---
> Array(Object)>>error:
> Array(Object)>>errorSubscriptBounds:
> Array(Object)>>at:
> PackagePaneBrowser>>selectedSystemCategoryName
>  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
> PackagePaneBrowser>>classList
> PluggableListMorph>>getList
> PluggableListMorph>>verifyContents
> [] in PackagePaneBrowser(Object)>>updateListsAndCodeIn: {[:aPane | 
> aPane
> verifyContents]}
> Array(SequenceableCollection)>>do:
> PackagePaneBrowser(Object)>>updateListsAndCodeIn:
> PackagePaneBrowser(CodeHolder)>>updateListsAndCodeIn:
> PackagePaneBrowser(CodeHolder)>>stepIn:
> PackagePaneBrowser(Object)>>stepAt:in:
> SystemWindow>>stepAt:
> StepMessage(MorphicAlarm)>>value:
> WorldState>>runLocalStepMethodsIn:
> WorldState>>runStepMethodsIn:
> PasteUpMorph>>runStepMethods
> WorldState>>doOneCycleNowFor:
> WorldState>>doOneCycleFor:
> PasteUpMorph>>doOneCycle
> [] in Project class>>spawnNewProcess {[[World doOneCycle.  Processor 
> yield.
> false] whileFalse.  nil]}
> [] in BlockContext>>newProcess {[self value.  Processor 
> terminateActive]}
>
>




More information about the Squeak-dev mailing list