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

Eliot Miranda eliot.miranda at gmail.com
Fri Aug 24 14:23:22 UTC 2018


> On Aug 23, 2018, at 5:06 PM, commits at source.squeak.org wrote:
> 
> 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

Cool! Very nice.

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