]> Cypherpunks repositories - gostls13.git/commitdiff
reorder1 - function first instead of last
authorKen Thompson <ken@golang.org>
Wed, 11 Jun 2008 19:25:44 +0000 (12:25 -0700)
committerKen Thompson <ken@golang.org>
Wed, 11 Jun 2008 19:25:44 +0000 (12:25 -0700)
SVN=122160

src/cmd/gc/walk.c

index 948b0a89738321f3228f7c672461ca2f408333be..49c1ef4bc13b1728fc21b0edf5bd2ffadef082c0 100644 (file)
@@ -1224,6 +1224,7 @@ convas(Node *n)
        if(n->op != OAS)
                fatal("convas: not as %O", n->op);
 
+       ullmancalc(n);
        l = n->left;
        r = n->right;
        if(l == N || r == N)
@@ -1321,7 +1322,7 @@ loop1:
                if(c == 0 || t == 1)
                        return n;
                if(c > 1) {
-                       yyerror("reorder1: too many funcation calls evaluating parameters");
+                       yyerror("reorder1: too many function calls evaluating parameters");
                        return n;
                }
                goto pass2;
@@ -1337,21 +1338,18 @@ loop1:
 
 pass2:
        l = listfirst(&save, &n);
-       f = N;  // isolated function call
-       r = N;  // rest of them
+       r = N;  // rest
+       f = N;  // fncall
 
 loop2:
        if(l == N) {
-               if(r == N || f == N)
-                       fatal("reorder1 not nil 1");
                r = nod(OLIST, f, r);
-               return rev(r);
+               r = rev(r);
+               return r;
        }
-       if(l->ullman >= UINF) {
-               if(f != N)
-                       fatal("reorder1 not nil 2");
+       if(l->ullman >= UINF)
                f = l;
-       else
+       else
        if(r == N)
                r = l;
        else