Hi, I already spoke that on IRC, but this issue seems pretty important, so I decided to post here instead.
STD currently doesn't make a difference from foo(1,2,3,a=>1,:b(2),:c<4>) and (1,2,3,a=>1,:b(2),:c<4>) regarding the content inside the parens. But the spec is pretty much clear that both have very different meanings, the second is simply a list with 3 ints and 3 pairs, while the first is a capture with 3 positional arguments and 3 named arguments. It even exemplifies that in the context of a function/method call you need to: foo(1,2,3,(a=>1),(:b(2)),(:c<4>)) to make it 6 positional arguments But in order to implement this with current STD, the compiler will need to hack into the semilist, splice the pairs out to DWIM, which, IMHO, is a dirty hack. I'm not sure how that could be done in the grammar, but it would be much nice if the <capture> token was more detailed than <EXPR> and used in some of the places where <semilist> is used (at first glance, it looks like in the <args> token and <methodop>). Or <semilist> could become aware of named arguments, since the comment before the token is "embedded semis, context-dependent semantics" which looks very much like a capture. Of course this is going to break mildew and others like hell, but it will make things clearer IMHO. daniel