[squeak-dev] The Trunk: Kernel-eem.1486.mcz

commits at source.squeak.org commits at source.squeak.org
Tue Jul 5 23:08:08 UTC 2022


Eliot Miranda uploaded a new version of Kernel to project The Trunk:
http://source.squeak.org/trunk/Kernel-eem.1486.mcz

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

Name: Kernel-eem.1486
Author: eem
Time: 5 July 2022, 4:08:05.255241 pm
UUID: a9406e26-5f92-40fe-a876-a151252043e1
Ancestors: Kernel-eem.1485

Slightly faster implementations of CompiledMethod>>reads/writesField:.
SImilarly neater CompiledCode>>sendsToSuper.
Corrected CompiledCode>>hasMethodReturn; needs Compiler-eem.479

=============== Diff against Kernel-eem.1485 ===============

Item was changed:
  ----- Method: CompiledCode>>hasMethodReturn (in category 'testing') -----
  hasMethodReturn
  	"Answer whether the receiver has a method-return ('^') in its code."
  
+ 	self codeLiteralsDo: [:compiledCode | | scanner |
- 	| scanner |
- 	self codeLiteralsDo: [:compiledCode | 
  		scanner := InstructionStream on: compiledCode.
+ 		(scanner scanFor:
+ 				[:x |
+ 				scanner willReturn
+ 				and: [scanner willBlockReturn not
+ 				"ignore any final ^self in the home method"
+ 				and: [compiledCode isCompiledBlock
+ 					or: [(compiledCode encoderClass isReturnSelfFromMethodAt: scanner pc in: compiledCode)
+ 							ifTrue: [scanner pc < compiledCode endPC]
+ 							ifFalse: [true]]]]])
- 		(scanner scanFor: [:x | (scanner willReturn
- 				and: [scanner willBlockReturn not])
- 				"and: [scanner willReturnTopFromMethod not]" "-> Not supported in EncoderForSistaV1"])
  			ifTrue: [^ true]].
  	^ false!

Item was changed:
  ----- Method: CompiledCode>>sendsToSuper (in category 'testing') -----
  sendsToSuper
  	"Answer whether the receiver sends any message to super."
  
+ 	self codeLiteralsDo:
+ 		[:compiledCode | | scanner |
- 	| scanner |
- 	self codeLiteralsDo: [:compiledCode | 
  		scanner := InstructionStream on: compiledCode.
+ 		(scanner scanFor: (self encoderClass superSendScanBlockUsing: scanner)) ifTrue:
+ 			[^ true]].
- 		(scanner scanFor: (self encoderClass superSendScanBlockUsing: scanner))
- 			ifTrue: [^ true]].
  	^ false!

Item was changed:
  ----- Method: CompiledMethod>>readsField: (in category 'scanning') -----
  readsField: varIndex 
+ 	"Answer whether the receiver loads the instance variable whose index is the argument."
- 	"Answer whether the receiver loads the instance variable indexed by the argument."
  
+ 	| scanBlock scanner |
+ 	self isQuick ifTrue:
+ 		[^ self isReturnField and: [varIndex - 1 = self returnField]].
- 	| varIndexCode scanner |
- 	varIndexCode := varIndex - 1.
- 	self isQuick ifTrue: [^ self isReturnField and: [self returnField = varIndexCode]].
- 	
- 	self codeLiteralsDo: [:compiledCode | 
- 		scanner := InstructionStream on: compiledCode.
- 		(scanner scanFor: (self encoderClass instVarReadScanBlockFor: varIndexCode using: scanner))
- 			ifTrue: [^ true]].
  
+ 	scanner := InstructionStream new.
+ 	scanBlock := self encoderClass instVarReadScanBlockFor: varIndex - 1 using: scanner.
+ 	self codeLiteralsDo: [:compiledCode |
+ 		scanner method: compiledCode pc: compiledCode initialPC.
+ 		(scanner scanFor: scanBlock) ifTrue:
+ 			[^ true]].
+ 
  	^ false!

Item was changed:
  ----- Method: CompiledMethod>>writesField: (in category 'scanning') -----
  writesField: varIndex
  	"Answer whether the receiver stores into the instance variable indexed by the argument."
  
+ 	self isQuick ifFalse:
+ 		[| scanner scanBlock |
+ 		 scanner := InstructionStream new.
+ 		 scanBlock := self encoderClass instVarWriteScanBlockFor: varIndex - 1 using: scanner.
+ 		 self codeLiteralsDo:
+ 			[:compiledCode |
+ 			scanner method: compiledCode pc: compiledCode initialPC.
+ 			(scanner scanFor: scanBlock) ifTrue:
+ 				[^ true]]].
- 	| varIndexCode scanner |
- 	self isQuick ifTrue: [^ false].
- 	varIndexCode := varIndex - 1.
  	
- 	self codeLiteralsDo: [:compiledCode | 
- 		scanner := InstructionStream on: compiledCode.
- 		(scanner scanFor: (self encoderClass instVarWriteScanBlockFor: varIndex - 1 using: scanner))
- 			ifTrue: [^ true]].
- 	
  	^ false!



More information about the Squeak-dev mailing list