cvsuser 03/12/10 04:25:21
Modified: imcc parser_util.c
imcc/t/syn clash.t
Log:
convert _str and _num branch ops to generic
Revision Changes Path
1.50 +50 -5 parrot/imcc/parser_util.c
Index: parser_util.c
===================================================================
RCS file: /cvs/public/parrot/imcc/parser_util.c,v
retrieving revision 1.49
retrieving revision 1.50
diff -u -w -r1.49 -r1.50
--- parser_util.c 19 Nov 2003 07:30:59 -0000 1.49
+++ parser_util.c 10 Dec 2003 12:25:18 -0000 1.50
@@ -567,6 +567,51 @@
char fullname[64];
SymReg *s;
int changed = 0;
+ /*
+ * eq_str, eq_num => eq
+ * ...
+ */
+ if (n == 3 && r[2]->type == VTADDRESS) {
+ if (!strcmp(name, "eq_str") ||
+ !strcmp(name, "eq_num")) {
+ name = "eq";
+ changed = 1;
+ }
+ else if (!strcmp(name, "ne_str") ||
+ !strcmp(name, "ne_num")) {
+ name = "ne";
+ changed = 1;
+ }
+ else if (!strcmp(name, "le_str") ||
+ !strcmp(name, "le_num")) {
+ name = "le";
+ changed = 1;
+ }
+ else if (!strcmp(name, "lt_str") ||
+ !strcmp(name, "lt_num")) {
+ name = "lt";
+ changed = 1;
+ }
+ else if (!strcmp(name, "ge_str") ||
+ !strcmp(name, "ge_num")) {
+ name = "ge";
+ changed = 1;
+ }
+ else if (!strcmp(name, "gt_str") ||
+ !strcmp(name, "gt_num")) {
+ name = "gt";
+ changed = 1;
+ }
+ }
+ else if (n == 3 &&
+ !strcmp(name, "cmp_str") ||
+ !strcmp(name, "cmp_num")) {
+ name = "cmp";
+ changed = 1;
+ }
+ /*
+ * TODO handle eq_i_n_ic too
+ */
if (n == 3 && r[0]->set == 'N') {
if (r[1]->set == 'I' && (r[2]->set == 'N' ||
(r[2]->type == VTADDRESS))) {
1.11 +32 -1 parrot/imcc/t/syn/clash.t
Index: clash.t
===================================================================
RCS file: /cvs/public/parrot/imcc/t/syn/clash.t,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -w -r1.10 -r1.11
--- clash.t 3 Dec 2003 14:03:19 -0000 1.10
+++ clash.t 10 Dec 2003 12:25:21 -0000 1.11
@@ -1,6 +1,6 @@
#!perl
use strict;
-use TestCompiler tests => 11;
+use TestCompiler tests => 13;
##############################
output_is(<<'CODE', <<'OUT', "if/unless");
@@ -195,4 +195,35 @@
ok
OUTPUT
+output_is(<<'CODE', <<'OUTPUT', "eq_num => eq");
+.sub _main
+ .local int i
+ .local int j
+ i = 1
+ j = 1
+ eq_num i, j, ok1
+ print "not "
+ok1:
+ print "ok 1\n"
+ end
+.end
+CODE
+ok 1
+OUTPUT
+
+output_is(<<'CODE', <<'OUTPUT', "eq_num => eq mixed => eq_n_n");
+.sub _main
+ .local int i
+ .local float j
+ i = 1
+ j = 1.0
+ eq_num j, i, ok1
+ print "not "
+ok1:
+ print "ok 1\n"
+ end
+.end
+CODE
+ok 1
+OUTPUT
1;