# New Ticket Created by Leopold Toetsch # Please include the string: [perl #17026] # in the subject line of all future correspondence about this issue. # <URL: http://rt.perl.org/rt2/Ticket/Display.html?id=17026 >
core.ops has currently: - obvious errors e.g. -inline op mul (out PMC, out PMC, out PMC) { - wrong docu and minor typos e.g. -=item B<loadlib>(in PMC, in STR) - and finally (as discussed in perl6-internals, "core ops ARGDIR"), wrong ARGDIRs for PMCs: This patch changes almost all PMCs to inout, actually these, where a vtable is called, because the underlying PMC has to exist at this moment. This patch is crucial[1] for the waiting big imcc update. [1] imcc does now a full life analysis of all symbols. The register allocator depends on this life info for register reusing, so getting this right is *really* important. This patch is tested with imcc/perl6 from CVS as well as with my imcc version, and has currently no impacts on other parts of parrot, though the JIT people might have a closer look at it. $ perl6 --test -Rj # run all perl6 tests jitted brings the same result as w/o the patch (i386-linux) (i.e. 2 additional failures, which might hide somewhere in JIT code). Please apply, leo -- attachment 1 ------------------------------------------------------ url: http://rt.perl.org/rt2/attach/36596/29540/29af40/core.ops.diff
--- core.ops Thu Sep 5 06:43:27 2002 +++ /home/lt/src/parrot-leo/core.ops Thu Sep 5 09:26:20 2002 @@ -485,13 +485,13 @@ =item B<set>(out NUM, in STR) -=item B<set>(out PMC, in INT) +=item B<set>(inout PMC, in INT) -=item B<set>(out PMC, in NUM) +=item B<set>(inout PMC, in NUM) =item B<set>(out PMC, in PMC) -=item B<set>(out PMC, in STR) +=item B<set>(inout PMC, in STR) =item B<set>(out STR, in INT) @@ -570,17 +570,17 @@ goto NEXT(); } -inline op set(out PMC, in INT) { +inline op set(inout PMC, in INT) { $1->vtable->set_integer_native(interpreter, $1, $2); goto NEXT(); } -inline op set(out PMC, in NUM) { +inline op set(inout PMC, in NUM) { $1->vtable->set_number_native(interpreter, $1, $2); goto NEXT(); } -inline op set(out PMC, in STR) { +inline op set(inout PMC, in STR) { $1->vtable->set_string_native(interpreter, $1, $2); goto NEXT(); } @@ -594,32 +594,32 @@ =head2 PMC assignment operations: Px = x -=item B<assign>(out PMC, in INT) +=item B<assign>(inout PMC, in INT) -=item B<assign>(out PMC, in NUM) +=item B<assign>(inout PMC, in NUM) -=item B<assign>(out PMC, in PMC) +=item B<assign>(inout PMC, in PMC) -=item B<assign>(out PMC, in STR) +=item B<assign>(inout PMC, in STR) =cut -inline op assign(out PMC, in PMC) { +inline op assign(inout PMC, in PMC) { $1->vtable->set_pmc(interpreter, $1, $2); goto NEXT(); } -inline op assign(out PMC, in INT) { +inline op assign(inout PMC, in INT) { $1->vtable->set_integer_native(interpreter, $1, $2); goto NEXT(); } -inline op assign(out PMC, in NUM) { +inline op assign(inout PMC, in NUM) { $1->vtable->set_number_native(interpreter, $1, $2); goto NEXT(); } -inline op assign(out PMC, in STR) { +inline op assign(inout PMC, in STR) { $1->vtable->set_string_native(interpreter, $1, $2); goto NEXT(); } @@ -628,41 +628,41 @@ =head2 Keyed set operations: Px[ INTKEY ] = Bx -=item B<set>(out PMC, in INTKEY, in INT) +=item B<set>(inout PMC, in INTKEY, in INT) -=item B<set>(out PMC, in INTKEY, in NUM) +=item B<set>(inout PMC, in INTKEY, in NUM) -=item B<set>(out PMC, in INTKEY, in STR) +=item B<set>(inout PMC, in INTKEY, in STR) -=item B<set>(out PMC, in INTKEY, in PMC) +=item B<set>(inout PMC, in INTKEY, in PMC) =cut -inline op set (out PMC, in INTKEY, in INT) { +inline op set (inout PMC, in INTKEY, in INT) { INTVAL key = $2; $1->vtable->set_integer_keyed_int(interpreter, $1, &key, $3); goto NEXT(); } -inline op set (out PMC, in INTKEY, in NUM) { +inline op set (inout PMC, in INTKEY, in NUM) { INTVAL key = $2; $1->vtable->set_number_keyed_int(interpreter, $1, &key, $3); goto NEXT(); } -inline op set (out PMC, in INTKEY, in STR) { +inline op set (inout PMC, in INTKEY, in STR) { INTVAL key = $2; $1->vtable->set_string_keyed_int(interpreter, $1, &key, $3); goto NEXT(); } -inline op set (out PMC, in INTKEY, in PMC) { +inline op set (inout PMC, in INTKEY, in PMC) { INTVAL key = $2; $1->vtable->set_pmc_keyed_int(interpreter, $1, &key, $3, NULL); goto NEXT(); } -=head2 Keyed set operations: Ax = Px[ INTKEY ] +=head2 Keyed get operations: Ax = Px[ INTKEY ] =cut @@ -672,7 +672,7 @@ =item B<set>(out STR, in PMC, in INTKEY) -=item B<set>(out PMC, in PMC, in INTKEY) +=item B<set>(inout PMC, in PMC, in INTKEY) =cut @@ -694,7 +694,7 @@ goto NEXT(); } -inline op set (out PMC, in PMC, in INTKEY) { +inline op set (inout PMC, in PMC, in INTKEY) { INTVAL key = $3; $1 = $2->vtable->get_pmc_keyed_int(interpreter, $2, &key); goto NEXT(); @@ -703,37 +703,37 @@ =head2 Keyed set operations: Px[ KEY ] = Bx -=item B<set>(out PMC, in KEY, in INT) +=item B<set>(inout PMC, in KEY, in INT) -=item B<set>(out PMC, in KEY, in NUM) +=item B<set>(inout PMC, in KEY, in NUM) -=item B<set>(out PMC, in KEY, in STR) +=item B<set>(inout PMC, in KEY, in STR) -=item B<set>(out PMC, in KEY, in PMC) +=item B<set>(inout PMC, in KEY, in PMC) =cut -inline op set (out PMC, in KEY, in INT) { +inline op set (inout PMC, in KEY, in INT) { $1->vtable->set_integer_keyed(interpreter, $1, $2, $3); goto NEXT(); } -inline op set (out PMC, in KEY, in NUM) { +inline op set (inout PMC, in KEY, in NUM) { $1->vtable->set_number_keyed(interpreter, $1, $2, $3); goto NEXT(); } -inline op set (out PMC, in KEY, in STR) { +inline op set (inout PMC, in KEY, in STR) { $1->vtable->set_string_keyed(interpreter, $1, $2, $3); goto NEXT(); } -inline op set (out PMC, in KEY, in PMC) { +inline op set (inout PMC, in KEY, in PMC) { $1->vtable->set_pmc_keyed(interpreter, $1, $2, $3, NULL); goto NEXT(); } -=head2 Keyed set operations: Ax = Px[ KEY ] +=head2 Keyed get operations: Ax = Px[ KEY ] =item B<set>(out INT, in PMC, in KEY) @@ -741,7 +741,7 @@ =item B<set>(out STR, in PMC, in KEY) -=item B<set>(out PMC, in PMC, in KEY) +=item B<set>(inout PMC, in PMC, in KEY) =cut @@ -760,18 +760,18 @@ goto NEXT(); } -inline op set (out PMC, in PMC, in KEY) { +inline op set (inout PMC, in PMC, in KEY) { $1 = $2->vtable->get_pmc_keyed(interpreter, $2, $3); goto NEXT(); } =head2 Keyed set operations: Px[ KEY ] = Px[ KEY ] -=item B<set>(out PMC, in KEY, in PMC, in KEY) +=item B<set>(inout PMC, in KEY, in PMC, in KEY) =cut -inline op set (out PMC, in KEY, in PMC, in KEY) { +inline op set (inout PMC, in KEY, in PMC, in KEY) { $1->vtable->set_pmc_keyed(interpreter, $1, $2, $3, $4); goto NEXT(); } @@ -1306,9 +1306,9 @@ =item B<add>(out NUM, in NUM, in NUM) -=item B<add>(out PMC, in PMC, in INT) +=item B<add>(inout PMC, in PMC, in INT) -=item B<add>(out PMC, in PMC, in PMC) +=item B<add>(inout PMC, in PMC, in PMC) Set $1 to the sum of $2 and $3. @@ -1349,12 +1349,12 @@ goto NEXT(); } -inline op add(out PMC, in PMC, in INT) { +inline op add(inout PMC, in PMC, in INT) { $2->vtable->add_int(interpreter, $2, $3, $1); goto NEXT(); } -inline op add (out PMC, in PMC, in PMC) { +inline op add (inout PMC, in PMC, in PMC) { $2->vtable->add(interpreter, $2, $3, $1); goto NEXT(); } @@ -1473,7 +1473,7 @@ =item B<div>(out NUM, in NUM, in NUM) -=item B<div>(out PMC, in PMC, in PMC) +=item B<div>(inout PMC, in PMC, in PMC) =item B<div>(inout PMC, in INT) @@ -1492,7 +1492,7 @@ goto NEXT(); } -inline op div (out PMC, out PMC, out PMC) { +inline op div (inout PMC, in PMC, in PMC) { $2->vtable->divide(interpreter, $2, $3, $1); goto NEXT(); } @@ -1554,7 +1554,7 @@ [2] Ronald L. Graham, Donald E. Knuth and Oren Patashnik, *Concrete Mathematics*, Second Edition. Addison-Wesley, 1994. -=item B<mod>(out PMC, in PMC, in PMC) +=item B<mod>(inout PMC, in PMC, in PMC) Sets $1 to the modulus of $2 and $3. @@ -1591,7 +1591,7 @@ goto NEXT(); } -inline op mod (out PMC, out PMC, out PMC) { +inline op mod (inout PMC, in PMC, in PMC) { $2->vtable->modulus(interpreter, $2, $3, $1); goto NEXT(); } @@ -1644,7 +1644,7 @@ =item B<mul>(out NUM, in NUM, in NUM) -=item B<mul>(out PMC, in PMC, in PMC) +=item B<mul>(inout PMC, in PMC, in PMC) Set $1 to the product of $2 and $3. @@ -1665,7 +1665,7 @@ goto NEXT(); } -inline op mul (inout PMC, out PMC) { +inline op mul (inout PMC, in PMC) { $1->vtable->multiply(interpreter, $1, $2, $1); goto NEXT(); } @@ -1680,7 +1680,7 @@ goto NEXT(); } -inline op mul (out PMC, out PMC, out PMC) { +inline op mul (inout PMC, in PMC, in PMC) { $2->vtable->multiply(interpreter, $2, $3, $1); goto NEXT(); } @@ -1697,7 +1697,7 @@ =item B<neg>(out NUM, in NUM) -=item B<neg>(out PMC, in PMC) +=item B<neg>(inout PMC, in PMC) Set $1 to the negative of $2. @@ -1723,7 +1723,7 @@ goto NEXT(); } -inline op neg(out PMC, in PMC) { +inline op neg(inout PMC, in PMC) { $2->vtable->neg(interpreter, $2, $1); goto NEXT(); } @@ -1781,9 +1781,9 @@ =item B<sub>(out NUM, in NUM, in NUM) -=item B<sub>(out PMC, in PMC, in INT) +=item B<sub>(inout PMC, in PMC, in INT) -=item B<sub>(out PMC, in PMC, in PMC) +=item B<sub>(inout PMC, in PMC, in PMC) Set $1 to $2 minus $3. @@ -1824,12 +1824,12 @@ goto NEXT(); } -inline op sub(out PMC, in PMC, in INT) { +inline op sub(inout PMC, in PMC, in INT) { $2->vtable->subtract_int(interpreter, $2, $3, $1); goto NEXT(); } -inline op sub (out PMC, out PMC, out PMC) { +inline op sub (inout PMC, in PMC, in PMC) { $2->vtable->subtract(interpreter, $2, $3, $1); goto NEXT(); } @@ -1879,7 +1879,7 @@ =item B<concat>(out STR, in STR, in STR) -=item B<concat>(out PMC, in PMC, in PMC) +=item B<concat>(inout PMC, in PMC, in PMC) Append the string in $2 to the string in $1. @@ -1898,7 +1898,7 @@ goto NEXT(); } -inline op concat (out PMC, out PMC, out PMC) { +inline op concat (inout PMC, in PMC, in PMC) { $2->vtable->concatenate(interpreter, $2, $3, $1); goto NEXT(); } @@ -1907,7 +1907,7 @@ =item B<repeat>(out STR, in STR, in INT) -=item B<repeat>(out PMC, in PMC, in PMC) +=item B<repeat>(inout PMC, in PMC, in PMC) Repeats string $2 $3 times and stores result in $1. @@ -1921,7 +1921,7 @@ goto NEXT(); } -inline op repeat (out PMC, in PMC, in PMC) { +inline op repeat (inout PMC, in PMC, in PMC) { $2->vtable->repeat(interpreter, $2, $3, $1); goto NEXT(); } @@ -2553,9 +2553,9 @@ =item B<band>(out INT, in INT, in INT) -=item B<band>(out PMC, in PMC, in INT) +=item B<band>(inout PMC, in PMC, in INT) -=item B<band>(out PMC, in PMC, in PMC) +=item B<band>(inout PMC, in PMC, in PMC) Set the bits of $1 according to the B<and> of the corresponding bits from $2 and $3. @@ -2581,12 +2581,12 @@ goto NEXT(); } -inline op band(out PMC, in PMC, in INT) { +inline op band(inout PMC, in PMC, in INT) { $2->vtable->bitwise_and_int(interpreter, $2, $3, $1); goto NEXT(); } -inline op band(out PMC, in PMC, in PMC) { +inline op band(inout PMC, in PMC, in PMC) { $2->vtable->bitwise_and(interpreter, $2, $3, $1); goto NEXT(); } @@ -2595,7 +2595,7 @@ =item B<bnot>(out INT, in INT) -=item B<bnot>(out PMC, in PMC) +=item B<bnot>(inout PMC, in PMC) Set the bits of $1 to the B<not> of the corresponding bits from $2. @@ -2606,7 +2606,7 @@ goto NEXT(); } -inline op bnot(out PMC, in PMC) { +inline op bnot(inout PMC, in PMC) { $2->vtable->bitwise_not(interpreter, $2, $1); goto NEXT(); } @@ -2623,9 +2623,9 @@ =item B<bor>(out INT, in INT, in INT) -=item B<bor>(out PMC, in PMC, in INT) +=item B<bor>(inout PMC, in PMC, in INT) -=item B<bor>(out PMC, in PMC, in PMC) +=item B<bor>(inout PMC, in PMC, in PMC) Set the bits of $1 according to the B<or> of the corresponding bits from $2 and $3. @@ -2651,12 +2651,12 @@ goto NEXT(); } -inline op bor(out PMC, in PMC, in INT) { +inline op bor(inout PMC, in PMC, in INT) { $2->vtable->bitwise_or_int(interpreter, $2, $3, $1); goto NEXT(); } -inline op bor(out PMC, in PMC, in PMC) { +inline op bor(inout PMC, in PMC, in PMC) { $2->vtable->bitwise_or(interpreter, $2, $3, $1); goto NEXT(); } @@ -2665,7 +2665,7 @@ =item B<shl>(out INT, in INT, in INT) -=item B<shl>(out PMC, in PMC, in PMC) +=item B<shl>(inout PMC, in PMC, in PMC) Set $1 to the value of $2 shifted left by $3 bits. @@ -2676,7 +2676,7 @@ goto NEXT(); } -inline op shl(out PMC, in PMC, in PMC) { +inline op shl(inout PMC, in PMC, in PMC) { $2->vtable->bitwise_shl(interpreter, $2, $3, $1); goto NEXT(); } @@ -2685,7 +2685,7 @@ =item B<shr>(out INT, in INT, in INT) -=item B<shr>(out PMC, in PMC, in PMC) +=item B<shr>(inout PMC, in PMC, in PMC) Set $1 to the value of $2 shifted right by $3 bits. @@ -2696,7 +2696,7 @@ goto NEXT(); } -inline op shr(out PMC, in PMC, in PMC) { +inline op shr(inout PMC, in PMC, in PMC) { $2->vtable->bitwise_shr(interpreter, $2, $3, $1); goto NEXT(); } @@ -2726,9 +2726,9 @@ =item B<bxor>(out INT, in INT, in INT) -=item B<bxor>(out PMC, in PMC, in INT) +=item B<bxor>(inout PMC, in PMC, in INT) -=item B<bxor>(out PMC, in PMC, in PMC) +=item B<bxor>(inout PMC, in PMC, in PMC) Set the bits of $1 according to the B<xor> of the corresponding bits from $2 and $3. @@ -2754,12 +2754,12 @@ goto NEXT(); } -inline op bxor(out PMC, in PMC, in INT) { +inline op bxor(inout PMC, in PMC, in INT) { $2->vtable->bitwise_xor_int(interpreter, $2, $3, $1); goto NEXT(); } -inline op bxor(out PMC, in PMC, in PMC) { +inline op bxor(inout PMC, in PMC, in PMC) { $2->vtable->bitwise_xor(interpreter, $2, $3, $1); goto NEXT(); } @@ -2784,7 +2784,7 @@ =item B<and>(out INT, in INT, in INT) -=item B<and>(out PMC, in PMC, in PMC) +=item B<and>(inout PMC, in PMC, in PMC) Short-circuiting logical and. Returns $2 if it's false, else returns $3. @@ -2795,7 +2795,7 @@ goto NEXT(); } -inline op and(out PMC, in PMC, in PMC) { +inline op and(inout PMC, in PMC, in PMC) { $2->vtable->logical_and(interpreter, $2, $3, $1); goto NEXT(); } @@ -2804,7 +2804,7 @@ =item B<not>(out INT, in INT) -=item B<not>(out PMC, in PMC) +=item B<not>(inout PMC, in PMC) Set the boolean state of $1 to the opposite of the boolean state from $2. @@ -2815,7 +2815,7 @@ goto NEXT(); } -inline op not(out PMC, in PMC) { +inline op not(inout PMC, in PMC) { $2->vtable->logical_not(interpreter, $2, $1); goto NEXT(); } @@ -2824,7 +2824,7 @@ =item B<or>(out INT, in INT, in INT) -=item B<or>(out PMC, in PMC, in PMC) +=item B<or>(inout PMC, in PMC, in PMC) Short-circuiting logical or. Returns $2 if it's true, else returns $3. @@ -2835,7 +2835,7 @@ goto NEXT(); } -inline op or(out PMC, in PMC, in PMC) { +inline op or(inout PMC, in PMC, in PMC) { $2->vtable->logical_or(interpreter, $2, $3, $1); goto NEXT(); } @@ -2844,7 +2844,7 @@ =item B<xor>(out INT, in INT, in INT) -=item B<xor>(out PMC, in PMC, in PMC) +=item B<xor>(inout PMC, in PMC, in PMC) Logical xor. Returns $2 if it's true and $3 isn't, returns $3 if it's true and $2 isn't, else returns false. @@ -2856,7 +2856,7 @@ goto NEXT(); } -inline op xor(out PMC, in PMC, in PMC) { +inline op xor(inout PMC, in PMC, in PMC) { $2->vtable->logical_xor(interpreter, $2, $3, $1); goto NEXT(); } @@ -4000,7 +4000,7 @@ Load in an extension. $1 is the name of the extension library, $2 is the initialization routine for it. -=item B<loadlib>(in PMC, in STR) +=item B<loadlib>(out PMC, in STR) Load a dynamic link library named $2 and store it in $1.