[squeak-dev] The Trunk: Compiler-nice.192.mcz

Nicolas Cellier nicolas.cellier.aka.nice at gmail.com
Sun Feb 20 19:46:01 UTC 2011


2011/2/20 Levente Uzonyi <leves at elte.hu>:
> On Sun, 20 Feb 2011, commits at source.squeak.org wrote:
>
>> Nicolas Cellier uploaded a new version of Compiler to project The Trunk:
>> http://source.squeak.org/trunk/Compiler-nice.192.mcz
>>
>> ==================== Summary ====================
>>
>> Name: Compiler-nice.192
>> Author: nice
>> Time: 20 February 2011, 5:12:00.371 pm
>> UUID: 3be37582-d3a2-4825-8210-073dd0af3f61
>> Ancestors: Compiler-ul.191
>>
>> Let #caseOf: accept any ParseNode argument, not just BraceNode and
>> VariableNode.
>> Remove usage of canBeSpecialArgument which is now unsent.
>
> You were a bit faster again, so I pushed my version to the Inbox. Should we
> deprecate #canBeSpecialArgument implementations?
>

I would rather remove them.
Usually, removals are loaded after additions in MC, so a mcm shouldn't
be necessary...
...but I never feel comfortable with these tricks.

Nicolas

>
> Levente
>
>>
>> =============== Diff against Compiler-ul.191 ===============
>>
>> Item was changed:
>>  ----- Method: MessageNode>>checkBlock:as:from:maxArgs: (in category
>> 'private') -----
>>  checkBlock: node as: nodeName from: encoder maxArgs: maxArgs
>> +       "Answer true if node is a BlockNode with at most maxArgs
>> arguments.
>> +       This check is required in order to inline some special messages.
>> +       Notify some undue usage of these special messages."
>> -       "vb: #canBeSpecialArgument for blocks hardcodes 0 arguments as the
>> requirement for special blocks. We work around that here by further checking
>> the number of arguments for blocks.."
>>
>> +       node isBlockNode
>> -       node canBeSpecialArgument ifTrue:
>> -               [^node isBlockNode].
>> -       ^node isBlockNode
>>                ifTrue:
>>                        [node numberOfArguments <= maxArgs
>> +                               ifTrue: [^true]
>> -                               ifTrue: [true]
>>                                ifFalse: [encoder notify: '<- ', nodeName ,
>> ' of ' ,
>> +                                       (MacroSelectors at: special) , '
>> has too many arguments']].
>> +       ^false!
>> -                                       (MacroSelectors at: special) , '
>> has too many arguments']]
>> -               ifFalse:
>> -                       [false]!
>>
>> Item was changed:
>>  ----- Method: MessageNode>>transformCase: (in category 'macro
>> transformations') -----
>>  transformCase: encoder
>>
>>        | caseNode |
>>        caseNode := arguments first.
>>        (caseNode isMemberOf: BraceNode) ifTrue:
>>                [((caseNode blockAssociationCheck: encoder)
>>                  and: [arguments size = 1
>>                            or: [self checkBlock: arguments last as:
>> 'otherwise arg' from: encoder]]) ifFalse:
>>                        [^false].
>>                 caseNode elements do:
>>                        [:messageNode|
>>                        messageNode receiver noteOptimizedIn: self.
>>                        messageNode arguments first noteOptimizedIn: self].
>>                 arguments size = 2 ifTrue:
>>                        [arguments last noteOptimizedIn: self].
>>                 ^true].
>> +       ^false!
>> -       (caseNode canBeSpecialArgument and: [(caseNode isMemberOf:
>> BlockNode) not]) ifTrue:
>> -               [^false]. "caseOf: variable"
>> -       ^encoder notify: 'caseOf: argument must be a brace construct or a
>> variable'!
>>
>>
>>
>
>



More information about the Squeak-dev mailing list