Fixed with 1a743f9d756a314143
> On 25 Jun 2015, at 14:23, Elizabeth Mattijsen (via RT)
> <perl6-bugs-follo...@perl.org> wrote:
>
> # New Ticket Created by Elizabeth Mattijsen
> # Please include the string: [perl #125486]
> # in the subject line of all future correspondence about this issue.
> # <URL: https://rt.perl.org/Ticket/Display.html?id=125486 >
>
>
> [13:42:39] <lizmat> There is a subtle difference in the signature of "sub a
> { @_ }" and sub a(*@_) { }" that was so far unseen:
> [13:42:41] <lizmat> $ 6 '(sub a { @_
> }).signature.params[0].multi-invocant.say'
> [13:42:41] <lizmat> False
> [13:42:50] <lizmat> $ 6 '(sub a(*@_) { @_
> }).signature.params[0].multi-invocant.say'
> [13:42:50] <lizmat> True
> [13:44:00] <lizmat> jnthn masak: should @_ have the multi-invocant bit set
> or not (in either case?)
> [13:46:19] <lizmat> alternately: should slurpies ever have the
> multi-invocant bit set ?
> [13:47:11] <masak> I don't really see why it should.
> [13:47:22] <masak> but I don't know exactly what multi-invocant is.
> [13:47:58] <+dalek> rakudo/nom: f43725a | lizmat++ | src/core/Signature.pm:
> [13:47:58] <+dalek> rakudo/nom: Show ';;' in signatures if they need to be
> [13:47:58] <+dalek> rakudo/nom:
> [13:47:58] <+dalek> rakudo/nom: Fixes #125482
> [13:47:58] <+dalek> rakudo/nom: review:
> https://github.com/rakudo/rakudo/commit/f43725a038
> [13:48:14] atroxaper (~atroxa...@mail.aurus5.ru) left IRC. (Remote host
> closed the connection)
> [13:48:28] <lizmat> jnthn just said that params with that bit set, are
> included in MMD?
> [13:48:37] <masak> m: say (sub a(*@_) { @_ }).signature.params[0].WHAT
> [13:48:37] <+camelia> rakudo-moar 2bafa9: OUTPUT«(Parameter)»
> [13:49:14] salva (~sa...@213.37.131.197.static.user.ono.com) joined the
> channel.
> [13:49:20] <lizmat> hmmm... musty have inferred that
> [13:49:35] atroxaper (~atroxa...@mail.aurus5.ru) joined the channel.
> [13:49:37] atroxaper (~atroxa...@mail.aurus5.ru) left IRC. (Remote host
> closed the connection)
> [13:50:11] <lizmat> anyway, the fix causes 3 spectest failures because of
> difference in handling auto-generated sigs
> [13:50:17] <masak> it's odd. I don't see `multi-invocant` defined or
> referred to anywhere.
> [13:50:32] <lizmat> it's probably an implementation detail
> [13:50:50] <lizmat> I just added the multi-invocant method
> [13:51:01] <lizmat> (if you're looking at the source)
> [13:51:31] <lizmat> t/spec/S06-signature/unspecified.rakudo.moar (Wstat:
> 768 Tests: 17 Failed: 3)
> [13:51:31] <lizmat> Failed tests: 5, 9, 13
> [13:52:02] <lizmat> feels to me either the test is wrong (now), or having
> the flag set on auto-generated sigs is wrong
> [13:52:36] <lizmat> masak: should there be a difference between the sig of
> "sub a { @_ }" and "sub a(*@_) { }" ?
> [13:53:39] <jnthn> lizmat: I suspect it should probably be set on anything
> that isn't after a ;;
> [13:54:14] <lizmat> ?? I thought you just said it should be set on
> anything *before* ;; ?
> [13:54:27] <lizmat> ah, uh. duh :-)
> [13:54:46] <jnthn> I...yeah, negations are not unbad. :)
> [13:55:12] <lizmat> so the autogenned sig is wrong ?
> [13:55:18] masak .oO( but what about the excluded middle? what about
> parameters that are exactly on top of the ;; ? ) :P
> [13:56:00] <jnthn> lizmat: Yeah, that's probably just an oversight
> [13:56:27] <lizmat> should I create a ticket for that and todo the failing
> tests?
> [13:56:51] <lizmat> or can you give me a pointer as to where to look to fix
> this oversight ?
> [13:56:51] <jnthn> Yeah, please. I think there'll be a good way to fix it
> generally
> [13:57:08] <jnthn> Well, probably in World.nqp's create_parameter method
> [13:57:16] <lizmat> ah, ok, lemme check
> [13:57:34] <jnthn> I think if the param info hash doesn't have the
> multi_invocant key we should default it to setting the bit, whereas today we
> probably default to not doing so
> [13:57:46] <jnthn> You may be able to eliminate places that actions.nqp
> sets it as a result of this...
> [13:57:59] <jnthn> (expect the place that sets it to 0)
> [14:03:04] <timotimo> do we now get a ;; before every *%_?
> [14:03:15] <jnthn> shouldn't
> [14:03:27] <timotimo> it would be kind of nice to have that hint for
> people who tend to forget about nameds only being used for tie-breaking
> [14:03:32] <jnthn> Well, we will if the bug isn't fixed...
> [14:03:36] <timotimo> you know, the thing where the order of subs
> decides
> [14:04:55] <lizmat> $ 6 '(sub a(:$n) {
> }).signature.params[0].multi-invocant.perl.say'
> [14:04:55] <lizmat> Bool::True
> [14:05:22] <jnthn> The language in the spec suggests that maybe, post-6.0,
> we will have nameds play into the candidate sort
> [14:05:29] <timotimo> oh
> [14:05:31] <timotimo> i see
> [14:05:38] <lizmat> so any named param seem to have the multi-invocant bit
> set atm
> [14:05:48] <jnthn> I'm not sure how viable that is, but I'd rather keep
> .multi-invocant only ever show up after a ;;
> [14:05:57] <jnthn> That is, keep it aligned with what the programmer wrote
> [14:06:28] <masak> +1
> [14:06:50] <masak> simple rule: "was there a ;; before this parameter?"
> [14:07:06] <jnthn> aye
> [14:07:13] <timotimo> fair enough
> [14:07:17] <jnthn> I like simple rules
> [14:07:20] <lizmat> $ 6 '(sub a($a;;:$n;) { }).signature.perl.say'
> [14:07:20] <lizmat> :(Any $a;; Any :n($n))
> [14:07:20] <jnthn> ...and I can not lie
> [14:07:51] <masak> jnthn: doesn't preserve the meter. you have to like big
> rules or something :P
> [14:08:28] <lizmat> so: the current rule is: all params have multi-invocant
> bit set unless there was a ';;' seen, in which case only the params before
> the ;; have it
> [14:08:30] masak .oO( I like excessively bending the meter of original
> works and I cannot lie )
> [14:09:03] <masak> lizmat: or, shorter, all params not after a ;; have it