Hmph. I thought I already sent that message correcting that error in
the cmp ops.
Anyway, here's the corrected one with a couple tests (which I should
have written in the first place).
Index: core.ops
===================================================================
RCS file: /cvs/public/parrot/core.ops,v
retrieving revision 1.274
diff -u -r1.274 core.ops
--- core.ops 30 May 2003 01:06:23 -0000 1.274
+++ core.ops 8 Jun 2003 05:45:43 -0000
@@ -688,6 +688,43 @@
=cut
+########################################
+
+=item B<cmp>(out INT, in INT, in INT)
+
+=item B<cmp>(out INT, in NUM, in NUM)
+
+=item B<cmp>(out INT, in STR, in STR)
+
+=item B<cmp>(out INT, in PMC, in PMC)
+
+Sets $1 to -1 if $2 < $3, +1 if $2 > $3, and 0 otherwise.
+
+=cut
+
+inline op cmp(out INT, in INT, in INT) {
+ $1 = $2 < $3 ? -1 :
+ $2 > $3 ? +1 :
+ 0;
+ goto NEXT();
+}
+
+inline op cmp(out INT, in NUM, in NUM) {
+ $1 = $2 < $3 ? -1 :
+ $2 > $3 ? +1 :
+ 0;
+ goto NEXT();
+}
+
+inline op cmp(out INT, in STR, in STR) {
+ $1 = string_compare(interpreter, $2, $3);
+ goto NEXT();
+}
+
+inline op cmp(out INT, in PMC, in PMC) {
+ $1 = VTABLE_cmp(interpreter, $2, $3);
+ goto NEXT();
+}
########################################
Index: t/op/comp.t
===================================================================
RCS file: /cvs/public/parrot/t/op/comp.t,v
retrieving revision 1.1
diff -u -r1.1 comp.t
--- t/op/comp.t 9 Nov 2002 12:42:55 -0000 1.1
+++ t/op/comp.t 8 Jun 2003 05:45:43 -0000
@@ -1,6 +1,6 @@
#! perl -w
-use Parrot::Test tests => 6;
+use Parrot::Test tests => 7;
# some of these were failing with JIT/i386
@@ -135,6 +135,34 @@
ok 1
ok 2
ok 3
+OUTPUT
+
+output_is(<<'CODE', <<OUTPUT, "cmp");
+ set I0, 10
+ cmp I1, I0, 9
+ set N0, -2.4
+ cmp I2, -2.4, N0
+ set S0, "Bruhaha"
+ cmp I3, S0, "Crumbum"
+ new P0, .PerlInt
+ new P1, .PerlInt
+ set P0, 452
+ set P1, -15
+ cmp I4, P0, P1
+
+ print I1
+ print "\n"
+ print I2
+ print "\n"
+ print I3
+ print "\n"
+ print I4
+ print "\n"
+CODE
+1
+0
+-1
+1
OUTPUT
1;