[squeak-dev] The Trunk: Compiler-ul.191.mcz
nicolas.cellier.aka.nice at gmail.com
Sun Feb 20 15:37:21 UTC 2011
Most probably my mistake because I played with simplifying handling of
#caseOf:, allowing arbitrary arguments. Apologizes.
Current Compiler only accepts a BraceNode and a VariableNode but not a
MessageNode, an AssignmentNode or any other ValueNode.
IMO, this limitation is arbitrary. Compiler shall accept any form,
send the message without inlining if not a Block and let execution
raise an Error in caseOf: invalid argument
Anyway, testing for code < LdNil is somehow deficient (try 'false
caseOf: true'), the comment is a bit misleading.
Would #caseOf: be simplified that canBeSpecialArgument could be
eliminated and replaced by isBlockNode + numArg check.
I guess that complexifying the Compiler was intended to help the user
guessing correct usage of #caseOf:...
Then one probably did need to pass a VariableNode one day and put a
Maybe another guru needing to pass the result of concatenating two
arrays, will put another one
^selector == #','
Unless the next best thing to do would be to remove some intentions
from Compiler and just let it compile dumbly.
I think I'll finish the work.
2011/2/19 <commits at source.squeak.org>:
> Levente Uzonyi uploaded a new version of Compiler to project The Trunk:
> ==================== Summary ====================
> Name: Compiler-ul.191
> Author: ul
> Time: 19 February 2011, 10:02:37.736 pm
> UUID: a7628e80-ae41-e348-b9b0-6b5f475cd90b
> Ancestors: Compiler-ul.190
> Restored VariableNode >> #canBeSpecialArgument, which got lost with Compiler-nice.188 for some unknown reason. It is required to compile #caseOf: with non-brace array arguments.
> =============== Diff against Compiler-ul.190 ===============
> Item was added:
> + ----- Method: VariableNode>>canBeSpecialArgument (in category 'testing') -----
> + canBeSpecialArgument
> + "Can I be an argument of (e.g.) ifTrue:?"
> + ^code < LdNil!
More information about the Squeak-dev