Export changes from Google-internal version:
	          - faster text parsing
                  - use numbers instead of repeated Xs for package import name conflict resolution

R=r
CC=golang-dev
http://codereview.appspot.com/2540041
diff --git a/proto/text_parser.go b/proto/text_parser.go
index 4076ebb..61513f8 100644
--- a/proto/text_parser.go
+++ b/proto/text_parser.go
@@ -254,11 +254,9 @@
 // Returns the index in the struct for the named field, as well as the parsed tag properties.
 func structFieldByName(st *reflect.StructType, name string) (int, *Properties, bool) {
 	sprops := GetProperties(st)
-	for i := 0; i < st.NumField(); i++ {
-		props := sprops.Prop[i]
-		if props.OrigName == name {
-			return i, props, true
-		}
+	i, ok := sprops.origNames[name]
+	if ok {
+		return i, sprops.Prop[i], true
 	}
 	return -1, nil, false
 }
@@ -370,15 +368,17 @@
 			return nil
 		}
 		// Repeated field. May already exist.
-		cnt := fv.Len()
-		nav := reflect.MakeSlice(at, cnt, cnt+1)
-		reflect.ArrayCopy(nav, fv)
-		fv.Set(nav)
-		fv.SetLen(cnt + 1)
+		flen := fv.Len()
+		if flen == fv.Cap() {
+			nav := reflect.MakeSlice(at, flen, 2*flen+1)
+			reflect.ArrayCopy(nav, fv)
+			fv.Set(nav)
+		}
+		fv.SetLen(flen + 1)
 
 		// Read one.
 		p.back()
-		return p.readAny(fv.Elem(cnt), nil) // TODO: pass properties?
+		return p.readAny(fv.Elem(flen), nil) // TODO: pass properties?
 	case *reflect.BoolValue:
 		// Either "true", "false", 1 or 0.
 		switch tok.value {