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;
  
  
  

Reply via email to