From: Bob Rogers <[EMAIL PROTECTED]>
   Date: Sat, 4 Oct 2008 22:08:10 -0400

      From: "Patrick R. Michaud" <[EMAIL PROTECTED]>
      Date: Sat, 4 Oct 2008 18:15:57 -0500

      . . .

      All of the mechanisms I've been able to find in Parrot for 
      converting an arbitrary PMC to a number seem to result in 
      the code for infix:<*> that we have now.  I'm open for 
      suggestions to improve this, though.

      Pm

   Hmm.  My instinct would be to rely on MMD . . .

   This exposes an MMD bug (it runs forever) . . .

Wrong; Parrot was replacing my Integer with the FixedPMCArray.  (Grr.)
Here is an improvement:

        .sub 'infix:*' :multi(Perl6Array,_)
            .param pmc a
            .param pmc b
            $I0 = a
            $P0 = new 'Integer'
            $P0 = $I0
            .return 'infix:*'($P0, b)
        .end

        .sub 'infix:*' :multi(_,Perl6Array)
            .param pmc a
            .param pmc b
            $I0 = b
            $P0 = new 'Integer'
            $P0 = $I0
            .return 'infix:*'(a, $P0)
        .end

It works for some cases:

        [EMAIL PROTECTED]> ../../perl6 -e 'my @a = <abc def ghi>; say @a * 
483648;'
        1450944
        [EMAIL PROTECTED]> ../../perl6 -e 'my @a = <abc def ghi>; say 483648 * 
@a;'
        1450944
        [EMAIL PROTECTED]> ../../perl6 -e 'my @a = <abc def ghi>; say 483648 * 
483648 * @a;'
        701746163712
        [EMAIL PROTECTED]> ../../perl6 -e 'my @a = <abc def ghi>; say 483648 * 
483648 * 483648 * @a;'
        339398128586981376
        [EMAIL PROTECTED]>

But not others:

        [EMAIL PROTECTED]> ../../perl6 -e 'my @a = <abc def ghi>; say @a * 
2147483648;'
        -6442450944
        [EMAIL PROTECTED]> ../../perl6 -e 'my @a = <abc def ghi>; say 
2147483648 * @a;'
        get_bignum() not implemented in class 'Float'
        current instr.: 'infix:*' pc 16030 (src/gen_builtins.pir:10014)
        . . .

                                        -- Bob

Reply via email to