[squeak-dev] The Trunk: Compiler-nice.192.mcz
Levente Uzonyi
leves at elte.hu
Sun Feb 20 23:55:37 UTC 2011
On Sun, 20 Feb 2011, Nicolas Cellier wrote:
> 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.
Is it safe to 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.
This feature is really useful and pretty reliable.
Levente
>
> 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
|