[Pharo-project] Issue 3741 in pharo: Decompiler hangs

pharo at googlecode.com pharo at googlecode.com
Mon Feb 21 13:02:35 CET 2011

Status: New
Owner: ----

New issue 3741 by hisnamei... at gmail.com: Decompiler hangs

this method can't work, because ParseNode can't understand remoteTemps:

popIntoTemporaryVariable: offset
	| maybeTVTag tempVector start |
	maybeTVTag := stack last.
	((maybeTVTag isMemberOf: Association)
	 and: [maybeTVTag key == #pushNewArray]) ifTrue:
		[blockStartsToTempVars notNil "implies we were intialized with temp  
			ifTrue: "Use the provided temps"
				[[(tempVector := tempVars at: offset + 1 ifAbsent: [ParseNode  
basicNew]) isTemp
							 and: [tempVector isIndirectTempVector
							 and: [tempVector remoteTemps size = maybeTVTag value size]]] assert]
			ifFalse: "Synthesize some remote temps"
				[tempVector := maybeTVTag value.
				 offset + 1 <= tempVars size
						[start := 2.
						 tempVector at: 1 put: (tempVars at: offset + 1)]
						[tempVars := (Array new: offset + 1)
										replaceFrom: 1
										to: tempVars size
										with: tempVars.
						start := 1].
				 start to: tempVector size do:
						at: i
						put: (constructor
								codeTemp: numLocalTemps + offset + i - 1
								named: 't', (tempVarCount + i) printString)].
				tempVars at: offset + 1 put: (constructor codeRemoteTemp: offset + 1  
remoteTemps: tempVector)].
		 tempVarCount := tempVarCount + maybeTVTag value size.
		 stack removeLast.
	self pushTemporaryVariable: offset; doStore: statements

I get the problem in PharoInstantMessenger ver.4 if you wanna test.

It's really annoying to spend a day on that, just because a variable is  
declared in a block.
For a 30yo language, it sucks

More information about the Pharo-project mailing list