# 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.