[BUG] Decompiler blows up when decompiling case switches

ned at bike-nomad.com ned at bike-nomad.com
Tue Feb 11 20:09:05 UTC 2003


I had source text like this (yes, I know I can factor out the return):
-------
s0: evt
	evt caseOf: {
		[ #Entry ] -> [ self log: 's0-ENTRY;'. ^nil ].
		[ #Exit ] -> [ self log: 's0-EXIT;'. ^nil ].
		[ #Init ] -> [ self log: 's0-INIT;'. self initProtected: #s1:. ^nil ].
		[ #e ] -> [ self log: 's0-E;'. self tran: #s211:. ^nil ].
	} otherwise:  [ ^#top: ]
---------
and tried to decompile it (shift-click on the method name)
and got a walkback:

11 February 2003 12:06:36 pm

VM: unix - Squeak3.2gamma of 15 January 2002 [latest update: #4917]
Image: Squeak3.5alpha [latest update: #5169]

String(Object)>>doesNotUnderstand:
	Receiver: 'case'
	Arguments and temporary variables: 
		aMessage: 	a Message with selector: #isReturningIf and arguments: #()
	Receiver's instance variables: 
'case'

BlockNode>>returns
	Receiver: <<error during printing>>
	Arguments and temporary variables: 

	Receiver's instance variables: 
		comment: 	nil
		pc: 	nil
		arguments: 	#()
		statements: 	#({self log: 's0-E;'} {self tran: #s211:} {^ nil} 'case')
		returns: 	false
		nArgsNode: 	nil
		size: 	nil
		remoteCopyNode: 	nil
		temporaries: 	#()

BlockNode>>returnLast
	Receiver: <<error during printing>>
	Arguments and temporary variables: 

	Receiver's instance variables: 
		comment: 	nil
		pc: 	nil
		arguments: 	#()
		statements: 	#({self log: 's0-E;'} {self tran: #s211:} {^ nil} 'case')
		returns: 	false
		nArgsNode: 	nil
		size: 	nil
		remoteCopyNode: 	nil
		temporaries: 	#()

BlockNode>>statements:returns:
	Receiver: <<error during printing>>
	Arguments and temporary variables: 
		statementsCollection: 	#({self log: 's0-E;'} {self tran: #s211:} {^
nil} 'case')...etc...
		returnBool: 	true
		returnLast: 	true
	Receiver's instance variables: 
		comment: 	nil
		pc: 	nil
		arguments: 	#()
		statements: 	#({self log: 's0-E;'} {self tran: #s211:} {^ nil} 'case')
		returns: 	false
		nArgsNode: 	nil
		size: 	nil
		remoteCopyNode: 	nil
		temporaries: 	#()


--- The full stack ---
String(Object)>>doesNotUnderstand:
BlockNode>>returns
BlockNode>>returnLast
BlockNode>>statements:returns:
 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
BlockNode class>>statements:returns:
DecompilerConstructor>>codeBlock:returns:
Decompiler>>blockForCaseTo:
Decompiler>>case:
Decompiler>>jump:if:
Decompiler(InstructionStream)>>interpretNextInstructionFor:
Decompiler>>interpretNextInstructionFor:
Decompiler>>statementsTo:
Decompiler>>blockTo:
Decompiler>>decompile:in:method:using:
Decompiler>>decompile:in:method:
RefactoringBrowser(CodeHolder)>>decompiledSourceIntoContents
RefactoringBrowser(Browser)>>selectedMessage
RefactoringBrowser(Browser)>>contents
PluggableTextMorph>>getText
PluggableTextMorph>>update:
[] in RefactoringBrowser(Object)>>changed:
DependentsArray>>do:
RefactoringBrowser(Object)>>changed:
RefactoringBrowser(Object)>>contentsChanged
RefactoringBrowser(CodeHolder)>>contentsChanged
RefactoringBrowser(Browser)>>messageListIndex:
PluggableListMorph>>changeModelSelection:
PluggableListMorph>>setSelectedMorph:
PluggableListMorph>>mouseUp:
PluggableListMorph(Morph)>>handleMouseUp:
MouseButtonEvent>>sentTo:
PluggableListMorph(Morph)>>handleEvent:
PluggableListMorph(Morph)>>handleFocusEvent:
[] in HandMorph>>sendFocusEvent:to:clear:
PasteUpMorph>>becomeActiveDuring:
HandMorph>>sendFocusEvent:to:clear:
HandMorph>>sendEvent:focus:clear:
HandMorph>>sendMouseEvent:
HandMorph>>handleEvent:
HandMorph>>processEvents
[] in WorldState>>doOneCycleNowFor:
Array(SequenceableCollection)>>do:
WorldState>>handsDo:
WorldState>>doOneCycleNowFor:
WorldState>>doOneCycleFor:
PasteUpMorph>>doOneCycle
[] in Project class>>spawnNewProcess
[] in BlockContext>>newProcess



More information about the Squeak-dev mailing list