On Tue, Oct 21, 2008 at 12:21:24AM -0700, Ovid wrote:
> --- On Tue, 21/10/08, James Keenan via RT <[EMAIL PROTECTED]> 
> Thanks.  Hopefully this time there will be some traction because there 
> does appear to be a bug in Perl 6, as evidenced by this one-liner:
> 
>   perl6 $ ../../parrot perl6.pbc -e 'my $x = 3; $x **= 2; say $x'
>   3
> 
> Unless, of course, this isn't supposed to be implemented yet, but 
> that seems strange since it's in the basic tests.

The infix:<**=> code broke as part of the mmd branch merge, because
the meaning of Parrot's 'pow' opcode has changed.  The infix:<**=>
function used the Parrot opcode (src/builtins/assign.pir:80)

    a = a ** b          #  pow a, a, b

Before the MMD merge, this opcode meant "raise a to the power
of b and store the result back in a".  However, after the mmd
branch merge this opcode now means "create a new PMC containing
the value of a raised to the b power and set register a to point
to that new PMC, leaving the value of its original PMC alone".
So, the pow opcode is no longer able to act as an inplace modifier.

I've corrected this in r32071, by explicitly assigning the new
result back to the PMC referenced by 'a'.

I've also applied Ovid's patch (with some fixes) in r32072, so
that the test correctly reports failures instead of simply
saying there are misnumbered tests.

Lastly, we've now reorganized the 'make test' target to make it more
obvious when there is a failure in the t/00-parrot/ or t/01-sanity/
tests, and removed the coding standards tests from 'make test'.

Thanks, closing ticket!

Pm

Reply via email to