Commit 989676d2 authored by Ken Thompson's avatar Ken Thompson

add 'export' adjectives to external

var, const and type declarations.

R=r
DELTA=49  (12 added, 28 deleted, 9 changed)
OCL=13791
CL=13791
parent 9aad9fef
...@@ -31,6 +31,8 @@ loop: ...@@ -31,6 +31,8 @@ loop:
goto loop; goto loop;
} }
if(exportadj)
exportsym(n->sym);
addvar(n, t, dclcontext); addvar(n, t, dclcontext);
} }
...@@ -48,6 +50,8 @@ dodcltype(Type *n, Type *t) ...@@ -48,6 +50,8 @@ dodcltype(Type *n, Type *t)
t = nt; t = nt;
t->sym = S; t->sym = S;
} }
if(exportadj)
exportsym(n->sym);
addtyp(n, t, dclcontext); addtyp(n, t, dclcontext);
} }
...@@ -65,6 +69,8 @@ loop: ...@@ -65,6 +69,8 @@ loop:
n = n->right; n = n->right;
goto loop; goto loop;
} }
if(exportadj)
exportsym(n->sym);
if(n->op != ONAME) if(n->op != ONAME)
fatal("dodclconst: not a name"); fatal("dodclconst: not a name");
...@@ -990,9 +996,7 @@ fninit(Node *n) ...@@ -990,9 +996,7 @@ fninit(Node *n)
r = list(r, a); r = list(r, a);
// (9) // (9)
a = nod(OEXPORT, N, N); exportsym(fn->nname->sym);
a->sym = fn->nname->sym;
markexport(a);
fn->nbody = rev(r); fn->nbody = rev(r);
//dump("b", fn); //dump("b", fn);
......
...@@ -6,28 +6,12 @@ ...@@ -6,28 +6,12 @@
#include "y.tab.h" #include "y.tab.h"
void void
markexport(Node *n) exportsym(Sym *s)
{ {
Sym *s;
Dcl *d, *r; Dcl *d, *r;
loop: if(s == S)
if(n == N)
return; 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) if(s->export != 0)
return; return;
s->export = 1; s->export = 1;
......
...@@ -211,7 +211,7 @@ enum ...@@ -211,7 +211,7 @@ enum
{ {
OXXX, OXXX,
OTYPE, OCONST, OVAR, OEXPORT, OIMPORT, OTYPE, OCONST, OVAR, OIMPORT,
ONAME, ONONAME, ONAME, ONONAME,
ODOT, ODOTPTR, ODOTMETH, ODOTINTER, ODOT, ODOTPTR, ODOTMETH, ODOTINTER,
...@@ -369,6 +369,7 @@ EXTERN Sym* pkgimportname; // package name from imported package ...@@ -369,6 +369,7 @@ EXTERN Sym* pkgimportname; // package name from imported package
EXTERN int tptr; // either TPTR32 or TPTR64 EXTERN int tptr; // either TPTR32 or TPTR64
extern char* sysimport; extern char* sysimport;
EXTERN char* filename; // name to uniqify names EXTERN char* filename; // name to uniqify names
EXTERN int exportadj; // declaration is being exported
EXTERN Type* types[NTYPE]; EXTERN Type* types[NTYPE];
EXTERN uchar isptr[NTYPE]; EXTERN uchar isptr[NTYPE];
...@@ -549,7 +550,7 @@ void fninit(Node*); ...@@ -549,7 +550,7 @@ void fninit(Node*);
* export.c * export.c
*/ */
void renamepkg(Node*); void renamepkg(Node*);
void markexport(Node*); void exportsym(Sym*);
void dumpe(Sym*); void dumpe(Sym*);
void dumpexport(void); void dumpexport(void);
void dumpexporttype(Sym*); void dumpexporttype(Sym*);
......
...@@ -44,7 +44,6 @@ ...@@ -44,7 +44,6 @@
%type <node> vardcl_list_r vardcl Avardcl Bvardcl %type <node> vardcl_list_r vardcl Avardcl Bvardcl
%type <node> interfacedcl_list_r interfacedcl %type <node> interfacedcl_list_r interfacedcl
%type <node> structdcl_list_r structdcl %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_importsym_list_r ohidden_importsym_list hidden_importsym isym
%type <node> hidden_importfield_list_r ohidden_importfield_list hidden_importfield %type <node> hidden_importfield_list_r ohidden_importfield_list hidden_importfield
%type <node> fnres Afnres Bfnres fnliteral xfndcl fndcl fnbody %type <node> fnres Afnres Bfnres fnliteral xfndcl fndcl fnbody
...@@ -136,14 +135,17 @@ import_there: ...@@ -136,14 +135,17 @@ import_there:
*/ */
xdcl: xdcl:
common_dcl common_dcl
| LEXPORT { exportadj = 1; } common_dcl
{
$$ = $3;
exportadj = 0;
}
| LEXPORT export_list_r | LEXPORT export_list_r
{ {
markexport(rev($2));
$$ = N; $$ = N;
} }
| LEXPORT '(' export_list_r ')' | LEXPORT '(' export_list_r ')'
{ {
markexport(rev($3));
$$ = N; $$ = N;
} }
| xfndcl | xfndcl
...@@ -1322,21 +1324,15 @@ new_name_list_r: ...@@ -1322,21 +1324,15 @@ new_name_list_r:
export_list_r: export_list_r:
export export
| export_list_r ocomma export | export_list_r ocomma export
{
$$ = nod(OLIST, $1, $3);
}
export: export:
sym sym
{ {
$$ = nod(OEXPORT, N, N); exportsym($1);
$$->sym = $1;
} }
| sym '.' sym | sym '.' sym
{ {
$$ = nod(OEXPORT, N, N); exportsym(pkglookup($3->name, $1->name));
$$->psym = $1;
$$->sym = $3;
} }
import_stmt_list_r: import_stmt_list_r:
......
...@@ -670,7 +670,6 @@ opnames[] = ...@@ -670,7 +670,6 @@ opnames[] =
[OSWITCH] = "SWITCH", [OSWITCH] = "SWITCH",
[OTYPE] = "TYPE", [OTYPE] = "TYPE",
[OVAR] = "VAR", [OVAR] = "VAR",
[OEXPORT] = "EXPORT",
[OIMPORT] = "IMPORT", [OIMPORT] = "IMPORT",
[OXOR] = "XOR", [OXOR] = "XOR",
[ONEW] = "NEW", [ONEW] = "NEW",
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment