remove export name-list statement.
make package local the default.
warn about name case not matching export keyword.
R=ken
OCL=22881
CL=22886
diff --git a/src/cmd/gc/dcl.c b/src/cmd/gc/dcl.c
index 162495e..aab47b6 100644
--- a/src/cmd/gc/dcl.c
+++ b/src/cmd/gc/dcl.c
@@ -35,8 +35,7 @@
t = typ(TFORW);
addvar(n, t, dclcontext);
- if(dcladj)
- dcladj(n->sym);
+ autoexport(n->sym);
}
void
@@ -49,8 +48,7 @@
dodclconst(n, e);
addconst(n, e, dclcontext);
- if(dcladj)
- dcladj(n->sym);
+ autoexport(n->sym);
}
/*
@@ -79,8 +77,7 @@
found:
n->local = 1;
- if(dcladj)
- dcladj(n->sym);
+ autoexport(n->sym);
return n;
}
diff --git a/src/cmd/gc/export.c b/src/cmd/gc/export.c
index 7b9fce6..e46276b 100644
--- a/src/cmd/gc/export.c
+++ b/src/cmd/gc/export.c
@@ -53,6 +53,32 @@
addexportsym(s);
}
+int
+exportname(char *s)
+{
+ Rune r;
+
+ if((uchar)s[0] < Runeself)
+ return 'A' <= s[0] && s[0] <= 'Z';
+ chartorune(&r, s);
+ return isupperrune(r);
+}
+
+void
+autoexport(Sym *s)
+{
+ if(s == S)
+ return;
+ if(dclcontext != PEXTERN)
+ return;
+ if(exportname(s->name)) {
+ if(dcladj != exportsym)
+ warn("uppercase missing export");
+ exportsym(s);
+ } else
+ packagesym(s);
+}
+
void
dumpprereq(Type *t)
{
@@ -330,6 +356,7 @@
Node *n;
Sym *s;
+ export = exportname(ss->sym->name);
if(export == 2 && !mypackage(ss))
return;
@@ -337,14 +364,18 @@
n->val = *v;
n->type = t;
- s = importsym(export, ss, LNAME);
+ s = importsym(export, ss, LACONST);
if(s->oconst != N) {
// TODO: check if already the same.
return;
}
+// fake out export vs upper checks until transition is over
+if(export == 1) dcladj = exportsym;
+
dodclconst(newname(s), n);
+dcladj = nil;
if(debug['e'])
print("import const %S\n", s);
}
diff --git a/src/cmd/gc/go.h b/src/cmd/gc/go.h
index 19b44f9..ff699059 100644
--- a/src/cmd/gc/go.h
+++ b/src/cmd/gc/go.h
@@ -180,7 +180,7 @@
uchar addable; // type of addressability - 0 is not addressable
uchar trecur; // to detect loops
uchar etype; // op for OASOP, etype for OTYPE, exclam for export
- uchar class; // PPARAM, PAUTO, PEXTERN, PSTATIC
+ uchar class; // PPARAM, PAUTO, PEXTERN
uchar method; // OCALLMETH name
uchar iota; // OLITERAL made from iota
uchar embedded; // ODCLFIELD embedded type
@@ -404,7 +404,6 @@
PEXTERN, // declaration context
PAUTO,
PPARAM,
- PSTATIC,
};
enum
@@ -741,6 +740,7 @@
* export.c
*/
void renamepkg(Node*);
+void autoexport(Sym*);
void exportsym(Sym*);
void packagesym(Sym*);
void dumpe(Sym*);
diff --git a/src/cmd/gc/go.y b/src/cmd/gc/go.y
index db12ee0..1dd5552 100644
--- a/src/cmd/gc/go.y
+++ b/src/cmd/gc/go.y
@@ -188,20 +188,15 @@
{
$$ = N;
}
-| LEXPORT export_list_r
- {
- $$ = N;
- }
| LEXPORT { dcladj = exportsym; stksize = initstksize; } common_dcl
{
$$ = $3;
dcladj = 0;
initstksize = stksize;
}
-| LPACKAGE { dcladj = packagesym; stksize = initstksize; } common_dcl
+| LPACKAGE { warn("package is gone"); stksize = initstksize; } common_dcl
{
$$ = $3;
- dcladj = 0;
initstksize = stksize;
}
| LEXPORT '(' export_list_r ')'
@@ -214,10 +209,10 @@
exportsym($2->nname->sym);
$$ = N;
}
-| LPACKAGE xfndcl
+| LPACKAGE { warn("package is gone"); } xfndcl
{
- if($2 != N && $2->nname != N)
- packagesym($2->nname->sym);
+ if($3 != N && $3->nname != N)
+ packagesym($3->nname->sym);
$$ = N;
}
| ';'