[squeak-dev] The Trunk: Compiler-bf.392.mcz

commits at source.squeak.org commits at source.squeak.org
Fri Aug 24 01:06:52 UTC 2018


Bert Freudenberg uploaded a new version of Compiler to project The Trunk:
http://source.squeak.org/trunk/Compiler-bf.392.mcz

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

Name: Compiler-bf.392
Author: bf
Time: 23 August 2018, 6:06:38.314464 pm
UUID: 039d1b50-5fe6-4c03-b82f-8015a2bac469
Ancestors: Compiler-eem.391

Mark macro senders for browsing

=============== Diff against Compiler-eem.391 ===============

Item was added:
+ ----- Method: MessageNode class>>isMacroEmitter: (in category 'browsing support') -----
+ isMacroEmitter: aLiteral
+ 	"Let our macro methods be found when browsing senders"
+ 	^aLiteral isSymbol
+ 		 and: [MacroEmitters includes: aLiteral]!

Item was added:
+ ----- Method: MessageNode class>>isMacroPrinter: (in category 'browsing support') -----
+ isMacroPrinter: aLiteral
+ 	"Let our macro methods be found when browsing senders"
+ 	^aLiteral isSymbol
+ 		 and: [MacroPrinters includes: aLiteral]
+ !

Item was added:
+ ----- Method: MessageNode class>>isMacroSizer: (in category 'browsing support') -----
+ isMacroSizer: aLiteral
+ 	"Let our macro methods be found when browsing senders"
+ 	^aLiteral isSymbol
+ 		 and: [MacroSizers includes: aLiteral]
+ !

Item was added:
+ ----- Method: MessageNode class>>isMacroTransformer: (in category 'browsing support') -----
+ isMacroTransformer: aLiteral
+ 	"Let our macro methods be found when browsing senders"
+ 	^aLiteral isSymbol
+ 		 and: [MacroTransformers includes: aLiteral]!

Item was changed:
  ----- Method: MessageNode>>emitCodeForEffect:encoder: (in category 'code generation') -----
  emitCodeForEffect: stack encoder: encoder
  	"For #ifTrue:ifFalse: and #whileTrue: / #whileFalse: style messages, the pc is set to the jump instruction, so that mustBeBoolean exceptions can be shown correctly."
+ 	<hasLiteralTest: #isMacroEmitter:>
  	special > 0
  		ifTrue: 
  			[pc := 0.
  			self perform: (MacroEmitters at: special) with: stack with: encoder with: false]
  		ifFalse: 
  			[super emitCodeForEffect: stack encoder: encoder]!

Item was changed:
  ----- Method: MessageNode>>emitCodeForValue:encoder: (in category 'code generation') -----
  emitCodeForValue: stack encoder: encoder
  	"For #ifTrue:ifFalse: and #whileTrue: / #whileFalse: style messages, the pc is set to the jump instruction, so that mustBeBoolean exceptions can be shown correctly."
+ 	<hasLiteralTest: #isMacroEmitter:>
  	special > 0
  		ifTrue: 
  			[pc := 0.
  			self perform: (MacroEmitters at: special) with: stack with: encoder with: true]
  		ifFalse: 
  			[receiver ~~ nil ifTrue: [receiver emitCodeForValue: stack encoder: encoder].
  			arguments do: [:argument | argument emitCodeForValue: stack encoder: encoder].
  			pc := encoder nextPC. "debug pc is first byte of the send, i.e. the next byte".
  			selector
  				emitCode: stack
  				args: arguments size
  				encoder: encoder
  				super: receiver == NodeSuper]!

Item was changed:
  ----- Method: MessageNode>>printOn:indent: (in category 'printing') -----
  printOn: aStream indent: level
  	"may not need this check anymore - may be fixed by the #receiver: change"
+ 	<hasLiteralTest: #isMacroPrinter:>
+ 	
  	special ifNil: [^aStream nextPutAll: '** MessageNode with nil special **'].
  
  	special > 0 ifTrue:
  		[^self perform: self macroPrinter with: aStream with: level].
  
  	self printReceiver: receiver on: aStream indent: level.
  	selector isForFFICall
  		ifTrue:
  			[aStream space.
  			 selector
  				printAsFFICallWithArguments: arguments
  				on: aStream
  				indent: 0]
  		ifFalse:
  			[self printKeywords: selector key
  				 arguments: arguments
  				 on: aStream
  				 indent: level]!

Item was changed:
  ----- Method: MessageNode>>printWithClosureAnalysisOn:indent: (in category 'printing') -----
  printWithClosureAnalysisOn: aStream indent: level
  	"may not need this check anymore - may be fixed by the #receiver: change"
+ 	<hasLiteralTest: #isMacroPrinter:>
+ 
  	special ifNil: [^aStream nextPutAll: '** MessageNode with nil special **'].
  
  	special > 0 ifTrue:
  		[^self perform: self macroPrinter with: aStream with: level].
  
  	self printWithClosureAnalysisReceiver: receiver on: aStream indent: level.
  	self printWithClosureAnalysisKeywords: selector key
  		 arguments: arguments
  		 on: aStream
  		 indent: level!

Item was changed:
  ----- Method: MessageNode>>sizeCodeForEffect: (in category 'code generation') -----
  sizeCodeForEffect: encoder
+ 	<hasLiteralTest: #isMacroSizer:>
  
  	special > 0 
  		ifTrue:
  			[encoder noteOptimizedSelector: originalSelector.
  			^self perform: (MacroSizers at: special) with: encoder with: false].
  	^super sizeCodeForEffect: encoder!

Item was changed:
  ----- Method: MessageNode>>sizeCodeForValue: (in category 'code generation') -----
  sizeCodeForValue: encoder
+ 	<hasLiteralTest: #isMacroSizer:>
  	| total |
  	special > 0 ifTrue: 
  		[encoder noteOptimizedSelector: originalSelector.
  		^self perform: (MacroSizers at: special) with: encoder with: true].
  	receiver == NodeSuper ifTrue:
  		[selector := selector forSuperSend "only necessary for special selectors"].
  	total := selector sizeCode: encoder args: arguments size super: receiver == NodeSuper.
  	receiver ifNotNil:
  		[total := total + (receiver sizeCodeForValue: encoder)].
  	sizes := arguments collect: 
  					[:arg | | argSize | 
  					argSize := arg sizeCodeForValue: encoder.
  					total := total + argSize.
  					argSize].
  	^total!

Item was changed:
  ----- Method: MessageNode>>transform: (in category 'macro transformations') -----
  transform: encoder
+ 	<hasLiteralTest: #isMacroTransformer:>
+ 
  	special = 0 ifTrue: [^false].
  	(self perform: (MacroTransformers at: special) with: encoder)
  		ifTrue: 
  			[^true]
  		ifFalse: 
  			[special := 0. ^false]!



More information about the Squeak-dev mailing list