On Tue, 04 Apr 2017 11:05:05 -0700, c...@zoffix.com wrote:
> On prefix and postfix ops, using `is assoc('list')` causes an LTA
> error without any location.
> 
> I've no idea if it makes sense for them to be assoc list; originally,
> I came across this while trying to make a postfix op `is
> equiv(&[orelse])`:
> 
> $ perl6 -e 'sub prefix:<♥> ($) is prec({:assoc("list")}) { }; ♥42'
> ===SORRY!===
> MVMArray: Can't pop from an empty array
> 
> $ perl6 -e 'sub postfix:<♥> ($) is prec({:assoc("list")}) { }; 42♥'
> ===SORRY!===
> MVMArray: Can't pop from an empty array
> 
> $ perl6 -e 'sub postfix:<♥> ($) is equiv(&[orelse]) { }; 42♥'
> ===SORRY!===
> MVMArray: Can't pop from an empty array
> 
> $ perl6 -v
> This is Rakudo version 2017.03-20-g027aa54 built on MoarVM version
> 2017.03-7-g029d121
> implementing Perl 6.c.
> 
> The error points to at gen/moar/stage2/NQPHLL.nqp:1099
> (/home/zoffix/.rakudobrew/moar-
> nom/install/share/nqp/lib/NQPHLL.moarvm:EXPR_reduce)
> 
> However, I don't know if this should be fixed by throwing when
> attempting to is assoc list these types of ops or what...


This is partially fixed now for `is equiv` with 
https://github.com/rakudo/rakudo/commit/f9f0883c6c and 
https://github.com/perl6/roast/commit/75f42755ec

Per TimToady[^1], we should throw on attempts to use list assoc with non-infix 
ops. It's a trivial thing to do with normal code, but because a lot of the 
setting isn't available in traits, it kept giving me compilation issues.

There's one way that works, but in that method the check is done AFTER altering 
the prec (with .prec('assoc') eq... check), which IMO is LTA.

I ended up hacking an nqp way with nqp::atkey(%spec) working, but then crashing 
with `:prec(:assoc<list>)` usage. So,
I ended up with this NQP monstrocity: 
https://gist.github.com/zoffixznet/a68ba013efd5b424ae60734f1da5daaf
along with fixing is equiv, is tighter, and is looser to just pass the <prec> 
key and not all the rest.

It gave me a compilation error the 100th time today, so I stashed it and will 
give it another try another day; unless someone else beats me to it.

[1] https://irclog.perlgeek.de/perl6-dev/2017-04-04#i_14375115

Reply via email to