]> Cypherpunks repositories - gostls13.git/commitdiff
bug 151
authorKen Thompson <ken@golang.org>
Tue, 26 May 2009 23:30:35 +0000 (16:30 -0700)
committerKen Thompson <ken@golang.org>
Tue, 26 May 2009 23:30:35 +0000 (16:30 -0700)
R=r
OCL=29409
CL=29409

src/cmd/gc/walk.c

index 0323624a8d45dd3ff1de12698953d93704298109..0fa5b72f1324dd188bd3d89098dfc43dac86b6df 100644 (file)
@@ -2349,8 +2349,11 @@ stringop(Node *n, int top)
        case OLT:
                // sys_cmpstring(s1, s2) :: 0
                on = syslook("cmpstring", 0);
-               r = list(n->left, n->right);
-               r = nod(OCALL, on, r);
+               r = nod(OCONV, n->left, N);
+               r->type = types[TSTRING];
+               c = nod(OCONV, n->right, N);
+               c->type = types[TSTRING];
+               r = nod(OCALL, on, list(r, c));
                c = nodintconst(0);
                r = nod(n->op, r, c);
                break;
@@ -2358,8 +2361,11 @@ stringop(Node *n, int top)
        case OADD:
                // sys_catstring(s1, s2)
                on = syslook("catstring", 0);
-               r = list(n->left, n->right);
-               r = nod(OCALL, on, r);
+               r = nod(OCONV, n->left, N);
+               r->type = types[TSTRING];
+               c = nod(OCONV, n->right, N);
+               c->type = types[TSTRING];
+               r = nod(OCALL, on, list(r, c));
                break;
 
        case OASOP:
@@ -2372,9 +2378,12 @@ stringop(Node *n, int top)
                        // s1 = sys_catstring(s1, s2)
                        if(n->etype != OADD)
                                fatal("stringop: not cat");
-                       r = list(n->left, n->right);
                        on = syslook("catstring", 0);
-                       r = nod(OCALL, on, r);
+                       r = nod(OCONV, n->left, N);
+                       r->type = types[TSTRING];
+                       c = nod(OCONV, n->right, N);
+                       c->type = types[TSTRING];
+                       r = nod(OCALL, on, list(r, c));
                        r = nod(OAS, n->left, r);
                        break;
                }