[squeak-dev] [BUG]UndefinedObject(Object)>>doesNotUnderstand: #emphasis:

Greg A. Woods woods at planix.ca
Wed Nov 19 19:49:39 UTC 2008


I'm working with an image which has most of the developer packages
loaded from the Package Universe, including Wisker, but no other local
changes except the beginngings of a few new classes for a new project,
and now when I open a Selector Browser (drag Method Finder from the
Tools flap) and, type a selector in the top left pane and press return,
then try to choose an item in the top right pane I get the following
crash, which seems to be the result of a fairly straight forward
programming bug within Wisker itself.

The problem, as far as I can see, is that the
initWithContents:prior:forList:indentLevel: method immediately does
"self initWithContents: anObject asString font: nil emphasis: nil." but
the initWithContents:font:emphasis: method is not expecting its font:
parameter to be nil.

At this point I'm lost.  I don't know anything about Wisker's internals
and I can't quite believe that a released version is so broken in this
way.

>From the debugger window cmd-v on the
initWithContents:prior:forList:indentLevel: method shows only one
version, "2002-11-06 12:55:00  dew  WhiskerListItemMorph 
{initialization}", but there's no change set, perhaps because I was
forced to do "Smalltalk condenseChanges" while loading the many
packages.

One more thing to check -- the version of the method that's assuming its
font: parameter won't be null
(WhiskerListItemMorph(IndentingListItemMorph)>>initWithContents:font:emp
hasis:).  Ah ha!  It is much newer: "2008-09-15 16:35:00  dr 
IndentingListItemMorph  {*ob-enhancements}".  That's probably the change
which causes this bug, but I'm not sure where it 

Damn that condeseChanges!

ACK!  An then if I accidentally close the debug window, poof, away go
the details from this message too!  Argh!  OK, now we start over,
cut&paste from the old message window, and be careful to send this
message before closing any other windows.

19 November 2008 1:59:58 pm

VM: Mac OS - a SmalltalkImage
Image: Squeak3.10.2 [latest update: #7179]

SecurityManager state:
Restricted: false
FileAccess: true
SocketAccess: true
Working Dir /Users/woods/Squeak/Squeak3.10.2-7179-basic
Trusted Dir /Users/woods/Squeak/Squeak3.10.2-7179-basic
Untrusted Dir /Users/woods/Library/Preferences/Squeak/Internet/My Squeak

UndefinedObject(Object)>>doesNotUnderstand: #emphasis:
	Receiver: nil
	Arguments and temporary variables: 
		aMessage: 	emphasis: 0
	Receiver's instance variables: 
nil

WhiskerListItemMorph(IndentingListItemMorph)>>initWithContents:font:emph
asis:
	Receiver: a WhiskerListItemMorph(2143)nil
	Arguments and temporary variables: 
		aString: 	'Object'
		aFont: 	nil
		emphasisCode: 	nil
	Receiver's instance variables: 
		bounds: 	nil
		owner: 	nil
		submorphs: 	nil
		fullBounds: 	nil
		color: 	nil
		extension: 	nil
		font: 	nil
		emphasis: 	nil
		contents: 	nil
		hasFocus: 	nil
		indentLevel: 	nil
		isExpanded: 	nil
		complexContents: 	a ClassInHierarchyWrapper(2136) on Object
		firstChild: 	nil
		container: 	a MultiSelectHierarchicalListMorph(2378)
		nextSibling: 	nil
		icon: 	nil

WhiskerListItemMorph>>initWithContents:prior:forList:indentLevel:
	Receiver: a WhiskerListItemMorph(2143)nil
	Arguments and temporary variables: 
		anObject: 	a ClassInHierarchyWrapper(2136) on Object
		priorMorph: 	nil
		hostList: 	a MultiSelectHierarchicalListMorph(2378)
		newLevel: 	0
	Receiver's instance variables: 
		bounds: 	nil
		owner: 	nil
		submorphs: 	nil
		fullBounds: 	nil
		color: 	nil
		extension: 	nil
		font: 	nil
		emphasis: 	nil
		contents: 	nil
		hasFocus: 	nil
		indentLevel: 	nil
		isExpanded: 	nil
		complexContents: 	a ClassInHierarchyWrapper(2136) on Object
		firstChild: 	nil
		container: 	a MultiSelectHierarchicalListMorph(2378)
		nextSibling: 	nil
		icon: 	nil

[] in
MultiSelectHierarchicalListMorph(SimpleHierarchicalListMorph)>>addMorphs
To:from:allowSorting:withExpandedItems:atLevel: {[:item |  priorMorph :=
self indentingItemClass basicNew     initWithContent...]}
	Arguments and temporary variables: 
		morphList: 	an OrderedCollection()
		aCollection: 	an Array(a ClassInHierarchyWrapper(2136) on Object)
		sortBoolean: 	false
		expandedItems: 	#()
		newIndent: 	0
		priorMorph: 	nil
		newCollection: 	an Array(a ClassInHierarchyWrapper(2136) on Object)
		firstAddition: 	nil
		a: 	nil
		b: 	nil
		item: 	a ClassInHierarchyWrapper(2136) on Object


--- The full stack ---
UndefinedObject(Object)>>doesNotUnderstand: #emphasis:
WhiskerListItemMorph(IndentingListItemMorph)>>initWithContents:font:emph
asis:
WhiskerListItemMorph>>initWithContents:prior:forList:indentLevel:
[] in
MultiSelectHierarchicalListMorph(SimpleHierarchicalListMorph)>>addMorphs
To:from:allowSorting:withExpandedItems:atLevel: {[:item |  priorMorph :=
self indentingItemClass basicNew     initWithContent...]}
 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Array(SequenceableCollection)>>do:
MultiSelectHierarchicalListMorph(SimpleHierarchicalListMorph)>>addMorphs
To:from:allowSorting:withExpandedItems:atLevel:
MultiSelectHierarchicalListMorph(SimpleHierarchicalListMorph)>>list:
MultiSelectHierarchicalListMorph>>on:list:selected:changeSelected:menu:k
eystroke:
MultiSelectHierarchicalListMorph class(SimpleHierarchicalListMorph
class)>>on:list:selected:changeSelected:menu:
WhiskerWindow>>addClassHierarchyPane
WhiskerWindow>>initializeFromModel:
WhiskerBrowser>>openAsMorphEditing:
WhiskerBrowser class>>open
WhiskerBrowser class>>openExistingBrowserOnClass:selector:
Browser class>>fullOnClass:selector:
SelectorBrowser>>classListIndex:
PluggableListMorph>>changeModelSelection:
PluggableListMorph>>mouseUp:
PluggableListMorph(Morph)>>handleMouseUp:
MouseButtonEvent>>sentTo:
PluggableListMorph(Morph)>>handleEvent:
MorphicEventDispatcher>>dispatchDefault:with:
MorphicEventDispatcher>>dispatchEvent:with:
PluggableListMorph(Morph)>>processEvent:using:
PluggableListMorph(Morph)>>processEvent:
PluggableListMorph>>handleFocusEvent:
[] in HandMorph>>sendFocusEvent:to:clear: {[ActiveHand := self. 
ActiveEvent := anEvent.  e := anEvent     transformedB...]}
[] in PasteUpMorph>>becomeActiveDuring: {[aBlock value]}
BlockContext>>on:do:
PasteUpMorph>>becomeActiveDuring:
HandMorph>>sendFocusEvent:to:clear:
HandMorph>>sendEvent:focus:clear:
HandMorph>>sendMouseEvent:
HandMorph>>handleEvent:
...etc...



More information about the Squeak-dev mailing list