> On 11 Apr 2017, at 14:44, Eigil Skjæveland (via RT) 
> <perl6-bugs-follo...@perl.org> wrote:
> 
> # New Ticket Created by  Eigil Skjæveland 
> # Please include the string:  [perl #131134]
> # in the subject line of all future correspondence about this issue. 
> # <URL: https://rt.perl.org/Ticket/Display.html?id=131134 >
> 
> 
>> my Int @a = 1, 2;
>> my int @b = 1, 2;
>> say so @a[-1 ^ 0];
> True
>> say so @b[-1 ^ 0];
> False
>> say @a[-1 ^ 0];
> Index out of range. Is: -1, should be in 0..^Inf
> in block <unit> at <unknown file> line 1
> 
>> say @b[-1 ^ 0];
> one(2, 1)
> 
> It seems the native int array treats negative indices in a junction as
> relative to the end of the array.

Any expression resulting in a negative value at runtime, exposes this behaviour:

$ 6 'my int @a = ^10; my $a = 0; dd @a[$a-1]’
9

At the moment, this happens because the AT-POS candidate directly uses 
nqp::atposref_i for performance reasons.

Exactly for that reason, I don’t think we should fix this at the Perl 6 level, 
because we would lose a *lot* of performance if we did.

So, *if* we consider this to be a bug (and personally, I think it is), the 
index checking should happen at the VM level, rather than at the Perl 6 level.

Reply via email to