]> Cypherpunks repositories - gostls13.git/commitdiff
code optmization
authorKen Thompson <ken@golang.org>
Sat, 2 May 2009 01:55:16 +0000 (18:55 -0700)
committerKen Thompson <ken@golang.org>
Sat, 2 May 2009 01:55:16 +0000 (18:55 -0700)
drip init function if it doesnt do anything

R=r
OCL=28180
CL=28180

src/cmd/gc/dcl.c

index 3a3e88b25656029f02a4c00bb31a3c06c2d0b8c2..d39b893a35dc96cd561b9717d500422cc597a266 100644 (file)
@@ -1259,6 +1259,40 @@ mixed:
 //             return                                  (8)
 //     }
 
+int
+anyinit(Node *n)
+{
+       uint32 h;
+       Sym *s;
+
+       // are there any init statements
+       if(n != N)
+               return 1;
+
+       // is this main
+       if(strcmp(package, "main") == 0)
+               return 1;
+
+       // is there an explicit init function
+       snprint(namebuf, sizeof(namebuf), "init·%s", filename);
+       s = lookup(namebuf);
+       if(s->oname != N)
+               return 1;
+
+       // are there any imported init functions
+       for(h=0; h<NHASH; h++)
+       for(s = hash[h]; s != S; s = s->link) {
+               if(s->name[0] != 'I' || strncmp(s->name, "Init·", 6) != 0)
+                       continue;
+               if(s->oname == N)
+                       continue;
+               return 1;
+       }
+
+       // then none
+       return 0;
+}
+
 void
 fninit(Node *n)
 {
@@ -1272,6 +1306,9 @@ fninit(Node *n)
                return;
        }
 
+       if(!anyinit(n))
+               return;
+
        r = N;
 
        // (1)