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;
 	}
 |	';'