Add E_ prefixes to *all* extension descriptors to avoid namespace collisions.

R=r
http://codereview.appspot.com/879046
diff --git a/compiler/main.go b/compiler/main.go
index 5864cde..c8aaa45 100644
--- a/compiler/main.go
+++ b/compiler/main.go
@@ -200,8 +200,8 @@
 func (e *ExtensionDescriptor) typeName() (s []string) {
 	name := proto.GetString(e.Name)
 	if e.parent == nil {
-		s = make([]string, 2)
-		s[0] = "E"  // top-level extension namespace
+		// top-level extension
+		s = make([]string, 1)
 	} else {
 		pname := e.parent.typeName()
 		s = make([]string, len(pname)+1)
@@ -908,11 +908,11 @@
 func (g *Generator) GenerateExtension(ext *ExtensionDescriptor) {
 	// The full type name
 	typeName := ext.typeName()
-	// Each scope of the extension is individually CamelCased, and all are joined with "_".
+	// Each scope of the extension is individually CamelCased, and all are joined with "_" with a "E_" prefix.
 	for i, s := range typeName {
 		typeName[i] = CamelCase(s)
 	}
-	ccTypeName := strings.Join(typeName, "_")
+	ccTypeName := "E_" + strings.Join(typeName, "_")
 
 	extendedType := "*" + g.TypeName(g.objectNamed(*ext.Extendee))
 	field := ext.FieldDescriptorProto
diff --git a/compiler/testdata/extension_test.go b/compiler/testdata/extension_test.go
index 1ddb229..6ff10ca 100644
--- a/compiler/testdata/extension_test.go
+++ b/compiler/testdata/extension_test.go
@@ -47,8 +47,7 @@
 
 	// Use extension within scope of another type.
 	vol := proto.Uint32(11)
-	t.Logf("bm: %T, user.LoudMessage_Volume: %T", bm, user.LoudMessage_Volume)
-	err := proto.SetExtension(bm, user.LoudMessage_Volume, vol)
+	err := proto.SetExtension(bm, user.E_LoudMessage_Volume, vol)
 	if err != nil {
 		t.Fatal("Failed setting extension:", err)
 	}
@@ -60,18 +59,18 @@
 	if err := proto.Unmarshal(buf, bm_new); err != nil {
 		t.Fatal("Failed decoding message with extension:", err)
 	}
-	if !proto.HasExtension(bm_new, user.LoudMessage_Volume) {
+	if !proto.HasExtension(bm_new, user.E_LoudMessage_Volume) {
 		t.Fatal("Decoded message didn't contain extension.")
 	}
-	vol_out, err := proto.GetExtension(bm_new, user.LoudMessage_Volume)
+	vol_out, err := proto.GetExtension(bm_new, user.E_LoudMessage_Volume)
 	if err != nil {
 		t.Fatal("Failed getting extension:", err)
 	}
 	if v := vol_out.(*uint32); *v != *vol {
 		t.Errorf("vol_out = %v, expected %v", *v, *vol)
 	}
-	proto.ClearExtension(bm_new, user.LoudMessage_Volume)
-	if proto.HasExtension(bm_new, user.LoudMessage_Volume) {
+	proto.ClearExtension(bm_new, user.E_LoudMessage_Volume)
+	if proto.HasExtension(bm_new, user.E_LoudMessage_Volume) {
 		t.Fatal("Failed clearing extension.")
 	}
 }
@@ -85,7 +84,7 @@
 		Name: proto.String("Dave"),
 		Rank: proto.String("Major"),
 	}
-	err := proto.SetExtension(bm, user.LoginMessage_UserMessage, um)
+	err := proto.SetExtension(bm, user.E_LoginMessage_UserMessage, um)
 	if err != nil {
 		t.Fatal("Failed setting extension:", err)
 	}
@@ -97,10 +96,10 @@
 	if err := proto.Unmarshal(buf, bm_new); err != nil {
 		t.Fatal("Failed decoding message with extension:", err)
 	}
-	if !proto.HasExtension(bm_new, user.LoginMessage_UserMessage) {
+	if !proto.HasExtension(bm_new, user.E_LoginMessage_UserMessage) {
 		t.Fatal("Decoded message didn't contain extension.")
 	}
-	um_out, err := proto.GetExtension(bm_new, user.LoginMessage_UserMessage)
+	um_out, err := proto.GetExtension(bm_new, user.E_LoginMessage_UserMessage)
 	if err != nil {
 		t.Fatal("Failed getting extension:", err)
 	}
@@ -110,8 +109,8 @@
 	if r := um_out.(*user.UserMessage).Rank; *r != *um.Rank {
 		t.Errorf("um_out.Rank = %q, expected %q", *r, *um.Rank)
 	}
-	proto.ClearExtension(bm_new, user.LoginMessage_UserMessage)
-	if proto.HasExtension(bm_new, user.LoginMessage_UserMessage) {
+	proto.ClearExtension(bm_new, user.E_LoginMessage_UserMessage)
+	if proto.HasExtension(bm_new, user.E_LoginMessage_UserMessage) {
 		t.Fatal("Failed clearing extension.")
 	}
 }
diff --git a/compiler/testdata/test.pb.go.golden b/compiler/testdata/test.pb.go.golden
index 6807d20..d801efa 100644
--- a/compiler/testdata/test.pb.go.golden
+++ b/compiler/testdata/test.pb.go.golden
@@ -131,7 +131,7 @@
 	return new(ReplyExtensions)
 }
 
-var ReplyExtensions_Time = &proto.ExtensionDesc{
+var E_ReplyExtensions_Time = &proto.ExtensionDesc{
 	ExtendedType: (*Reply)(nil),
 	ExtensionType: (*float64)(nil),
 	Field: 101,