]> Cypherpunks repositories - gostls13.git/commitdiff
add 'export' adjectives to external
authorKen Thompson <ken@golang.org>
Mon, 4 Aug 2008 01:47:02 +0000 (18:47 -0700)
committerKen Thompson <ken@golang.org>
Mon, 4 Aug 2008 01:47:02 +0000 (18:47 -0700)
var, const and type declarations.

R=r
DELTA=49  (12 added, 28 deleted, 9 changed)
OCL=13791
CL=13791

src/cmd/gc/dcl.c
src/cmd/gc/export.c
src/cmd/gc/go.h
src/cmd/gc/go.y
src/cmd/gc/subr.c

index 4b86e8e3c2d6b6818ac58c71c88a034aaf5d92b0..0025f4e65be8824ac34d46484f79e7a856892f02 100644 (file)
@@ -31,6 +31,8 @@ loop:
                goto loop;
        }
 
+       if(exportadj)
+               exportsym(n->sym);
        addvar(n, t, dclcontext);
 }
 
@@ -48,6 +50,8 @@ dodcltype(Type *n, Type *t)
                t = nt;
                t->sym = S;
        }
+       if(exportadj)
+               exportsym(n->sym);
        addtyp(n, t, dclcontext);
 }
 
@@ -65,6 +69,8 @@ loop:
                n = n->right;
                goto loop;
        }
+       if(exportadj)
+               exportsym(n->sym);
 
        if(n->op != ONAME)
                fatal("dodclconst: not a name");
@@ -990,9 +996,7 @@ fninit(Node *n)
        r = list(r, a);
 
        // (9)
-       a = nod(OEXPORT, N, N);
-       a->sym = fn->nname->sym;
-       markexport(a);
+       exportsym(fn->nname->sym);
 
        fn->nbody = rev(r);
 //dump("b", fn);
index 839dc76597ce08bc20aadce9302a8809b6404712..01ce962828d60326dc2a97c99b75fa066ae37b35 100644 (file)
@@ -6,28 +6,12 @@
 #include       "y.tab.h"
 
 void
-markexport(Node *n)
+exportsym(Sym *s)
 {
-       Sym *s;
        Dcl *d, *r;
 
-loop:
-       if(n == N)
+       if(s == S)
                return;
-
-       if(n->op == OLIST) {
-               markexport(n->left);
-               n = n->right;
-               goto loop;
-       }
-
-       if(n->op != OEXPORT)
-               fatal("markexport: op no OEXPORT: %O", n->op);
-
-       s = n->sym;
-       if(n->psym != S)
-               s = pkglookup(n->sym->name, n->psym->name);
-
        if(s->export != 0)
                return;
        s->export = 1;
index ed61378a218444e5aecaf70a6967e5c05d1ef613..b775b32e1803943847f9a02246d74af05ed35795 100644 (file)
@@ -211,7 +211,7 @@ enum
 {
        OXXX,
 
-       OTYPE, OCONST, OVAR, OEXPORT, OIMPORT,
+       OTYPE, OCONST, OVAR, OIMPORT,
 
        ONAME, ONONAME,
        ODOT, ODOTPTR, ODOTMETH, ODOTINTER,
@@ -369,6 +369,7 @@ EXTERN      Sym*    pkgimportname;  // package name from imported package
 EXTERN int     tptr;           // either TPTR32 or TPTR64
 extern char*   sysimport;
 EXTERN char*   filename;       // name to uniqify names
+EXTERN int     exportadj;      // declaration is being exported
 
 EXTERN Type*   types[NTYPE];
 EXTERN uchar   isptr[NTYPE];
@@ -549,7 +550,7 @@ void        fninit(Node*);
  *     export.c
  */
 void   renamepkg(Node*);
-void   markexport(Node*);
+void   exportsym(Sym*);
 void   dumpe(Sym*);
 void   dumpexport(void);
 void   dumpexporttype(Sym*);
index be445d1d936a4ee734935968cf9539aec876fa6c..558d16bcbcdd03bed329d104e9ece38d585b3e1b 100644 (file)
@@ -44,7 +44,6 @@
 %type  <node>          vardcl_list_r vardcl Avardcl Bvardcl
 %type  <node>          interfacedcl_list_r interfacedcl
 %type  <node>          structdcl_list_r structdcl
-%type  <node>          export_list_r export
 %type  <node>          hidden_importsym_list_r ohidden_importsym_list hidden_importsym isym
 %type  <node>          hidden_importfield_list_r ohidden_importfield_list hidden_importfield
 %type  <node>          fnres Afnres Bfnres fnliteral xfndcl fndcl fnbody
@@ -136,14 +135,17 @@ import_there:
  */
 xdcl:
        common_dcl
+|      LEXPORT { exportadj = 1; } common_dcl
+       {
+               $$ = $3;
+               exportadj = 0;
+       }
 |      LEXPORT export_list_r
        {
-               markexport(rev($2));
                $$ = N;
        }
 |      LEXPORT '(' export_list_r ')'
        {
-               markexport(rev($3));
                $$ = N;
        }
 |      xfndcl
@@ -1322,21 +1324,15 @@ new_name_list_r:
 export_list_r:
        export
 |      export_list_r ocomma export
-       {
-               $$ = nod(OLIST, $1, $3);
-       }
 
 export:
        sym
        {
-               $$ = nod(OEXPORT, N, N);
-               $$->sym = $1;
+               exportsym($1);
        }
 |      sym '.' sym
        {
-               $$ = nod(OEXPORT, N, N);
-               $$->psym = $1;
-               $$->sym = $3;
+               exportsym(pkglookup($3->name, $1->name));
        }
 
 import_stmt_list_r:
index f34b2cc5bfb6b5cf2aefe9c9813f40154e834a3e..22e4a4315135b3b73f504440fb68e46b2abe0242 100644 (file)
@@ -670,7 +670,6 @@ opnames[] =
        [OSWITCH]       = "SWITCH",
        [OTYPE]         = "TYPE",
        [OVAR]          = "VAR",
-       [OEXPORT]       = "EXPORT",
        [OIMPORT]       = "IMPORT",
        [OXOR]          = "XOR",
        [ONEW]          = "NEW",