]> Cypherpunks repositories - gostls13.git/commitdiff
static initialization
authorKen Thompson <ken@golang.org>
Sat, 16 May 2009 20:29:08 +0000 (13:29 -0700)
committerKen Thompson <ken@golang.org>
Sat, 16 May 2009 20:29:08 +0000 (13:29 -0700)
structure set up - no change yet

R=r
OCL=28966
CL=28966

src/cmd/6g/cgen.c
src/cmd/6g/gen.c
src/cmd/6g/gg.h
src/cmd/6g/obj.c
src/cmd/gc/dcl.c
src/cmd/gc/go.h

index 0e7db2c060bfd5f6095ee8ac944fc475403887a4..148ee6b217e76dde407f96c5a54be4eed3476b17 100644 (file)
@@ -23,11 +23,15 @@ cgen(Node *n, Node *res)
                dump("cgen-res", res);
        }
        if(n == N || n->type == T)
-               return;
+               goto ret;
 
        if(res == N || res->type == T)
                fatal("cgen: res nil");
 
+       // static initializations
+       if(gen_as_init(n, res))
+               goto ret;
+
        if(n->ullman >= UINF) {
                if(n->op == OINDREG)
                        fatal("cgen: this is going to misscompile");
index 8f083ad299a632c0deaba46fe2ede2f44e7572ba..9246bc96b12dea97adfef9453f2514654efdf736 100644 (file)
@@ -697,3 +697,9 @@ clearfat(Node *nl)
                c--;
        }
 }
+
+int
+gen_as_init(Node *nr, Node *nl)
+{
+       return 0;
+}
index 0cebfba469ee3e0db47904bde8f354991f9c6312..266a11ddc635c30d6b8ed90c60153af68ddce4dc 100644 (file)
@@ -77,6 +77,7 @@ void  genconv(Type*, Type*);
 void   allocparams(void);
 void   checklabels();
 void   ginscall(Node*, int);
+int    gen_as_init(Node*, Node*);
 
 /*
  * cgen
index 25416a936e4ff912d24ac015e2f0088eb6c6254d..e990d661dfe7a002cbc3e1916d8d9ebf24ee225b 100644 (file)
@@ -185,7 +185,8 @@ dumpfuncs(void)
        for(pl=plist; pl!=nil; pl=pl->link) {
                for(p=pl->firstpc; p!=P; p=p->link) {
                        p->loc = pcloc;
-                       pcloc++;
+                       if(p->as != ADATA && p->as != AGLOBL)
+                               pcloc++;
                }
        }
 
index 3e6f76092273e824a43c99f2cbece217822fcf00..ef49ee0ff93e6a3fea10fabe0c592ef95cece2b4 100644 (file)
@@ -1411,7 +1411,9 @@ fninit(Node *n)
 //dump("r", fn->nbody);
 
        popdcl();
+       initflag = 1;   // flag for loader static initialization
        compile(fn);
+       initflag = 0;
 }
 
 
index 270f246c10401c22d5cbba87440f1173f05def1f..cf597644d2499d0819b7d81f2c8f47d9493a816b 100644 (file)
@@ -228,7 +228,6 @@ struct      Node
        int32   vargen;         // unique name for OTYPE/ONAME
        int32   lineno;
        vlong   xoffset;
-       int32   ostk;
 };
 #define        N       ((Node*)0)
 
@@ -569,6 +568,7 @@ EXTERN      Dcl*    typelist;
 EXTERN int     dclcontext;     // PEXTERN/PAUTO
 EXTERN int     importflag;
 EXTERN int     inimportsys;
+EXTERN int     initflag;               // compiling the init fn
 
 EXTERN uint32  iota;
 EXTERN Node*   lastconst;