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