- simplified handling of primary types (types w/ names which must
  be canonicalized upon import)
- missed some exports

R=r
OCL=13733
CL=13733
diff --git a/usr/gri/gosrc/export.go b/usr/gri/gosrc/export.go
index 4662960..e127ad6 100755
--- a/usr/gri/gosrc/export.go
+++ b/usr/gri/gosrc/export.go
@@ -120,37 +120,37 @@
 
 func (E *Exporter) WriteObject(obj *Globals.Object) {
 	if obj == nil {
-		E.WriteObjectTag(Object.EOS);
+		E.WriteObjectTag(Object.END);
 		return;
 	}
 
-	if obj.kind == Object.TYPE && obj.typ.obj == obj {
-		// primary type object - handled entirely by WriteType()
-		E.WriteObjectTag(Object.PTYPE);
-		E.WriteType(obj.typ);
-
-	} else {
-		E.WriteObjectTag(obj.kind);
-		E.WriteString(obj.ident);
-		E.WriteType(obj.typ);
-		E.WritePackage(obj.pnolev);
-
-		switch obj.kind {
-		case Object.CONST:
-			E.WriteInt(0);  // should be the correct value
-
-		case Object.TYPE:
-			// nothing to do
-			
-		case Object.VAR:
-			E.WriteInt(0);  // should be the correct address/offset
-			
-		case Object.FUNC:
-			E.WriteInt(0);  // should be the correct address/offset
-			
-		default:
-			panic "UNREACHABLE";
+	E.WriteObjectTag(obj.kind);
+	if obj.kind == Object.TYPE {
+		// named types are always primary types
+		// and handled entirely by WriteType()
+		if obj.typ.obj != obj {
+			panic "inconsistent primary type"
 		}
+		E.WriteType(obj.typ);
+		return;
+	}
+
+	E.WriteString(obj.ident);
+	E.WriteType(obj.typ);
+	E.WritePackage(obj.pnolev);
+
+	switch obj.kind {
+	case Object.CONST:
+		E.WriteInt(0);  // should be the correct value
+
+	case Object.VAR:
+		E.WriteInt(0);  // should be the correct address/offset
+		
+	case Object.FUNC:
+		E.WriteInt(0);  // should be the correct address/offset
+		
+	default:
+		panic "UNREACHABLE";
 	}
 }
 
diff --git a/usr/gri/gosrc/import.go b/usr/gri/gosrc/import.go
index 5f086fd..334fcef 100755
--- a/usr/gri/gosrc/import.go
+++ b/usr/gri/gosrc/import.go
@@ -136,43 +136,40 @@
 
 func (I *Importer) ReadObject() *Globals.Object {
 	tag := I.ReadObjectTag();
-	if tag == Object.EOS {
+	if tag == Object.END {
 		return nil;
 	}
 	
-	if tag == Object.PTYPE {
-		// primary type object - handled entirely by ReadType()
+	if tag == Object.TYPE {
+		// named types are always primary types
+		// and handled entirely by ReadType()
 		typ := I.ReadType();
 		if typ.obj.typ != typ {
-			panic "incorrect primary type";
+			panic "inconsistent primary type";
 		}
 		return typ.obj;
-
-	} else {
-		ident := I.ReadString();
-		obj := Globals.NewObject(0, tag, ident);
-		obj.typ = I.ReadType();
-		obj.pnolev = I.ReadPackage().obj.pnolev;
-
-		switch (tag) {
-		case Object.CONST:
-			I.ReadInt();  // should set the value field
-
-		case Object.TYPE:
-			// nothing to do
-			
-		case Object.VAR:
-			I.ReadInt();  // should set the address/offset field
-
-		case Object.FUNC:
-			I.ReadInt();  // should set the address/offset field
-			
-		default:
-			panic "UNREACHABLE";
-		}
-
-		return obj;
 	}
+	
+	ident := I.ReadString();
+	obj := Globals.NewObject(0, tag, ident);
+	obj.typ = I.ReadType();
+	obj.pnolev = I.ReadPackage().obj.pnolev;
+
+	switch (tag) {
+	case Object.CONST:
+		I.ReadInt();  // should set the value field
+
+	case Object.VAR:
+		I.ReadInt();  // should set the address/offset field
+
+	case Object.FUNC:
+		I.ReadInt();  // should set the address/offset field
+		
+	default:
+		panic "UNREACHABLE";
+	}
+
+	return obj;
 }
 
 
diff --git a/usr/gri/gosrc/object.go b/usr/gri/gosrc/object.go
index aab80cc..aacbe8d 100755
--- a/usr/gri/gosrc/object.go
+++ b/usr/gri/gosrc/object.go
@@ -7,12 +7,11 @@
 import Globals "globals"
 
 
-export BAD, CONST, TYPE, VAR, FUNC, PACKAGE, LABEL, PTYPE, EOS
+export BAD, CONST, TYPE, VAR, FUNC, PACKAGE, LABEL, END
 const /* kind */ (
 	BAD = iota;  // error handling
 	CONST; TYPE; VAR; FUNC; PACKAGE; LABEL;
-	PTYPE;  // primary type (import/export only)
-	EOS;  // end of scope (import/export only)
+	END;  // end of scope (import/export only)
 )
 
 
@@ -31,8 +30,7 @@
 	case FUNC: return "FUNC";
 	case PACKAGE: return "PACKAGE";
 	case LABEL: return "LABEL";
-	case PTYPE: return "PTYPE";
-	case EOS: return "EOS";
+	case END: return "END";
 	}
 	return "<unknown Object kind>";
 }
diff --git a/usr/gri/gosrc/parser.go b/usr/gri/gosrc/parser.go
index 02081d3..d7e7fa0 100644
--- a/usr/gri/gosrc/parser.go
+++ b/usr/gri/gosrc/parser.go
@@ -1649,15 +1649,21 @@
 	typ := P.TryType();
 	if typ != nil {
 		for p := list.first; p != nil; p = p.next {
-			p.obj.exported = exported;
-			p.obj.typ = typ;  // TODO should use/have set_type()!
+			p.obj.typ = typ;
 		}
 	}
+	
 	if P.tok == Scanner.ASSIGN {
 		P.Next();
 		P.ParseExpressionList();
 	}
 	
+	if exported {
+		for p := list.first; p != nil; p = p.next {
+			p.obj.exported = true;
+		}
+	}
+	
 	P.Ecart();
 }
 
@@ -1725,6 +1731,12 @@
 		}
 	}
 	
+	if exported {
+		for p := list.first; p != nil; p = p.next {
+			p.obj.exported = true;
+		}
+	}
+	
 	P.Ecart();
 }