[squeak-dev] The Inbox: Kernel-fm.867.mcz

commits at source.squeak.org commits at source.squeak.org
Sat Aug 9 06:18:25 UTC 2014


A new version of Kernel was added to project The Inbox:
http://source.squeak.org/inbox/Kernel-fm.867.mcz

==================== Summary ====================

Name: Kernel-fm.867
Author: fm
Time: 9 August 2014, 2:17:44.186 am
UUID: 87deb8dd-221f-d84d-acfe-17f9fb6ed689
Ancestors: Kernel-eem.866

various fixes and cleanups in RelativeInstructionPrinter

pushConstant: , by being inherited, indirectly called InstructionPrinter instead of its Relative relative

temp indexes are meaningless, they cause spurious differences (thus making abstractSymbolic less than abstract and symbolic), use the labelling pass to replace  them with their ordinals

make clear that the labelling pass does not (need to) write anything

=============== Diff against Kernel-eem.866 ===============

Item was changed:
  InstructionPrinter subclass: #RelativeInstructionPrinter
+ 	instanceVariableNames: 'printCode labels labelling temps vectors'
- 	instanceVariableNames: 'printCode labels labelling'
  	classVariableNames: ''
  	poolDictionaries: ''
  	category: 'Kernel-Methods'!

Item was changed:
  ----- Method: RelativeInstructionPrinter>>jump: (in category 'instruction decoding') -----
  jump: offset
  	"Print the Unconditional Jump bytecode."
  
  	labelling
  		ifTrue:
+ 			[labels at: scanner pc + offset + 1 put: true]
- 			[labels at: scanner pc + offset + 1 put: true.
- 			 self print: 'jumpBy: ', offset printString,
- 				' to: ', (scanner pc + offset - method initialPC) printString]
  		ifFalse:
  			[self print: 'jumpTo: ', (labels at: scanner pc + offset + 1)]!

Item was changed:
  ----- Method: RelativeInstructionPrinter>>jump:if: (in category 'instruction decoding') -----
  jump: offset if: condition 
  	"Print the Conditional Jump bytecode."
  
  	labelling
  		ifTrue:
+ 			[labels at: scanner pc + offset + 1 put: true]
- 			[labels at: scanner pc + offset + 1 put: true.
- 			 self print: 
- 				(condition ifTrue: ['jumpTrueBy: '] ifFalse: ['jumpFalseBy: ']), offset printString,
- 				' to: ', (labelling
- 							ifTrue: [(scanner pc + offset - method initialPC) printString]
- 							ifFalse: [labels at: scanner pc + offset])]
  		ifFalse:
  			[self print: 
  				(condition ifTrue: ['jumpTrueTo: '] ifFalse: ['jumpFalseTo: ']), (labels at: scanner pc + offset + 1)]!

Item was added:
+ ----- Method: RelativeInstructionPrinter>>popIntoRemoteTemp:inVectorAt: (in category 'instruction decoding') -----
+ popIntoRemoteTemp: remoteTempIndex inVectorAt: tempVectorIndex
+ 
+ 	| remoteTemps |
+ 
+ 	labelling
+ 		ifTrue:
+ 			[remoteTemps := vectors at: tempVectorIndex ifAbsentPut: ['v', vectors size printString -> Dictionary new].
+ 			remoteTemps value at: remoteTempIndex ifAbsentPut: ['rt', remoteTemps value size printString]]
+ 		ifFalse:
+ 			[remoteTemps := vectors at: tempVectorIndex.
+ 			self print: 'popIntoTemp: ', (remoteTemps value at: remoteTempIndex), ' inVector: ', remoteTemps key]!

Item was added:
+ ----- Method: RelativeInstructionPrinter>>popIntoTemporaryVariable: (in category 'instruction decoding') -----
+ popIntoTemporaryVariable: offset 
+ 	"Print the Remove Top Of Stack And Store Into Temporary Variable 
+ 	bytecode."
+ 
+ 	labelling
+ 		ifTrue:
+ 			[temps at: offset ifAbsentPut: ['t', temps size printString]]
+ 		ifFalse:
+ 			[self print: 'popIntoTemp: ' , (temps at: offset)]
+ !

Item was changed:
  ----- Method: RelativeInstructionPrinter>>print: (in category 'printing') -----
  print: instruction 
  	"Append to the receiver a description of the bytecode, instruction." 
  
+ 	labelling ifTrue: 
+ 		[^self].
  	stream tab: self indent.
+ 	(labels at: scanner pc) ~~ false ifTrue:
+ 		[stream nextPutAll: (labels at: scanner pc); nextPut: $:; cr].
+ 	stream tab.
- 	labelling
- 		ifTrue: [stream print: oldPC - method initialPC; space]
- 		ifFalse: [stream tab].
  	stream tab: (innerIndents at: oldPC).
  	self printCode ifTrue:
  		[stream nextPut: $<.
  		 oldPC to: scanner pc - 1 do: 
  			[:i | | code |
  			code := (method at: i) radix: 16.
  			stream
  				nextPut: (code size < 2 ifTrue: [$0] ifFalse: [code at: 1]);
  				nextPut: code last;
  				space].
  		 stream skip: -1; nextPut: $>; space].
  	stream nextPutAll: instruction.
  	stream cr.
- 	labelling ifFalse:
- 		[(labels at: scanner pc + 1) ~~ false ifTrue:
- 			[stream nextPutAll: (labels at: scanner pc + 1); nextPut: $:; cr]].
  	oldPC := scanner pc!

Item was changed:
  ----- Method: RelativeInstructionPrinter>>printInstructionsOn: (in category 'printing') -----
  printInstructionsOn: aStream
  	"Append to the stream, aStream, a description of each bytecode in the instruction stream."
  	
  	| label |
  	labelling := true.
  	labels := Array new: method size + 1 withAll: false.
+ 	temps := Dictionary new.
+ 	vectors := Dictionary new.
+ 	super printInstructionsOn: nil.
- 	super printInstructionsOn: (String new: 1024) writeStream.
  	label := 0.
  	labels withIndexDo:
  		[:bool :index|
  		bool ifTrue: [labels at: index put: 'L', (label := label + 1) printString]].
  	labelling := false.
  	super printInstructionsOn: aStream!

Item was changed:
  ----- Method: RelativeInstructionPrinter>>printInstructionsOn:do: (in category 'printing') -----
  printInstructionsOn: aStream do: aBlock
  	"Append to the stream, aStream, a description of each bytecode in the instruction stream.
  	  Evaluate aBlock with the receiver, the scanner and the stream after each instruction."
  	
  	| label |
  	labelling := true.
  	labels := Array new: method size withAll: false.
+ 	temps := Dictionary new.
+ 	vectors := Dictionary new.
+ 	super printInstructionsOn: nil do: [:ig :no :re|].
- 	super printInstructionsOn: (String new: 1024) writeStream do: [:ig :no :re|].
  	label := 0.
  	labels withIndexDo:
  		[:bool :index|
  		bool ifTrue: [labels at: index put: 'L', (label := label + 1) printString]].
  	labelling := false.
  	super printInstructionsOn: aStream do: aBlock!

Item was added:
+ ----- Method: RelativeInstructionPrinter>>pushConstant: (in category 'instruction decoding') -----
+ pushConstant: obj
+ 	"Print the Push Constant, obj, on Top Of Stack bytecode."
+ 
+ 	self print: (String streamContents:
+ 				[:s |
+ 				s nextPutAll: 'pushConstant: '.
+ 				(obj isKindOf: LookupKey)
+ 					ifFalse: [obj printOn: s]
+ 					ifTrue: [obj key
+ 						ifNotNil: [s nextPutAll: '##'; nextPutAll: obj key]
+ 						ifNil: [s nextPutAll: '###'; nextPutAll: obj value soleInstance name]]]).
+ 
+ 	(obj isKindOf: CompiledMethod) ifTrue:
+ 		[obj longPrintRelativeOn: stream indent: self indent + 2.
+ 		^self].!

Item was added:
+ ----- Method: RelativeInstructionPrinter>>pushRemoteTemp:inVectorAt: (in category 'instruction decoding') -----
+ pushRemoteTemp: remoteTempIndex inVectorAt: tempVectorIndex 
+ 	| remoteTemps |
+ 
+ 	labelling
+ 		ifTrue:
+ 			[remoteTemps := vectors at: tempVectorIndex ifAbsentPut: ['v', vectors size printString -> Dictionary new].
+ 			remoteTemps value at: remoteTempIndex ifAbsentPut: ['rt', remoteTemps value size printString]]
+ 		ifFalse:
+ 			[remoteTemps := vectors at: tempVectorIndex.
+ 			self print: 'pushTemp: ', (remoteTemps value at: remoteTempIndex), ' inVector: ', remoteTemps key]
+ !

Item was added:
+ ----- Method: RelativeInstructionPrinter>>pushTemporaryVariable: (in category 'instruction decoding') -----
+ pushTemporaryVariable: offset
+ 	"Print the Push Contents Of Temporary Variable Whose Index Is the 
+ 	argument, offset, On Top Of Stack bytecode."
+ 
+ 	labelling
+ 		ifTrue:
+ 			[temps at: offset ifAbsentPut: ['t', temps size printString]]
+ 		ifFalse:
+ 			[self print: 'pushTemp: ' , (temps at: offset)]
+ !

Item was added:
+ ----- Method: RelativeInstructionPrinter>>storeIntoRemoteTemp:inVectorAt: (in category 'instruction decoding') -----
+ storeIntoRemoteTemp: remoteTempIndex inVectorAt: tempVectorIndex 
+ 	| remoteTemps |
+ 
+ 	labelling
+ 		ifTrue:
+ 			[remoteTemps := vectors at: tempVectorIndex ifAbsentPut: ['v', vectors size printString -> Dictionary new].
+ 			remoteTemps value at: remoteTempIndex ifAbsentPut: ['rt', remoteTemps value size printString]]
+ 		ifFalse:
+ 			[remoteTemps := vectors at: tempVectorIndex.
+ 			self print: 'storeIntoTemp: ', (remoteTemps value at: remoteTempIndex), ' inVector: ', remoteTemps key]
+ !

Item was added:
+ ----- Method: RelativeInstructionPrinter>>storeIntoTemporaryVariable: (in category 'instruction decoding') -----
+ storeIntoTemporaryVariable: offset 
+ 	"Print the Store Top Of Stack Into Temporary Variable Of Method 
+ 	bytecode."
+ 
+ 	labelling
+ 		ifTrue:
+ 			[temps at: offset ifAbsentPut: ['t', temps size printString]]
+ 		ifFalse:
+ 			[self print: 'storeIntoTemp: ' , (temps at: offset)]
+ !



More information about the Squeak-dev mailing list