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


Reply via email to