[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
|