goprotobuf: Fix Marshal crash on typed nil.

Also a bunch of other trivial updates.

R=r
CC=golang-dev
http://codereview.appspot.com/6501064
diff --git a/proto/all_test.go b/proto/all_test.go
index 5b4c93c..90f7a63 100644
--- a/proto/all_test.go
+++ b/proto/all_test.go
@@ -1221,6 +1221,14 @@
 	}
 }
 
+func TestTypedNilMarshal(t *testing.T) {
+	// A typed nil should return ErrNil and not crash.
+	_, err := Marshal((*GoEnum)(nil))
+	if err != ErrNil {
+		t.Errorf("Marshal: got err %v, want ErrNil", err)
+	}
+}
+
 // A type that implements the Marshaler interface, but is not nillable.
 type nonNillableInt uint64
 
diff --git a/proto/clone_test.go b/proto/clone_test.go
index d111b47..e6edcf3 100644
--- a/proto/clone_test.go
+++ b/proto/clone_test.go
@@ -32,7 +32,6 @@
 package proto_test
 
 import (
-	"log"
 	"testing"
 
 	"code.google.com/p/goprotobuf/proto"
@@ -62,7 +61,7 @@
 		Data: proto.String("extension"),
 	}
 	if err := proto.SetExtension(cloneTestMessage, pb.E_Ext_More, ext); err != nil {
-		log.Fatalf("SetExtension: %v", err)
+		panic("SetExtension: " + err.Error())
 	}
 }
 
diff --git a/proto/encode.go b/proto/encode.go
index 2eec125..4e55816 100644
--- a/proto/encode.go
+++ b/proto/encode.go
@@ -196,6 +196,9 @@
 	}
 
 	t, b, err := getbase(pb)
+	if b == 0 {
+		return ErrNil
+	}
 	if err == nil {
 		err = p.enc_struct(t.Elem(), GetProperties(t.Elem()), b)
 	}
diff --git a/proto/equal_test.go b/proto/equal_test.go
index f747d9e..0096aa9 100644
--- a/proto/equal_test.go
+++ b/proto/equal_test.go
@@ -32,7 +32,6 @@
 package proto_test
 
 import (
-	"log"
 	"testing"
 
 	pb "./testdata"
@@ -56,32 +55,32 @@
 
 	// messageWithExtension1a has ext1, but never marshals it.
 	if err := SetExtension(messageWithExtension1a, pb.E_Ext_More, ext1); err != nil {
-		log.Panicf("SetExtension on 1a failed: %v", err)
+		panic("SetExtension on 1a failed: " + err.Error())
 	}
 
 	// messageWithExtension1b is the unmarshaled form of messageWithExtension1a.
 	if err := SetExtension(messageWithExtension1b, pb.E_Ext_More, ext1); err != nil {
-		log.Panicf("SetExtension on 1b failed: %v", err)
+		panic("SetExtension on 1b failed: " + err.Error())
 	}
 	buf, err := Marshal(messageWithExtension1b)
 	if err != nil {
-		log.Panicf("Marshal of 1b failed: %v", err)
+		panic("Marshal of 1b failed: " + err.Error())
 	}
 	messageWithExtension1b.Reset()
 	if err := Unmarshal(buf, messageWithExtension1b); err != nil {
-		log.Panicf("Unmarshal of 1b failed: %v", err)
+		panic("Unmarshal of 1b failed: " + err.Error())
 	}
 
 	// messageWithExtension2 has ext2.
 	if err := SetExtension(messageWithExtension2, pb.E_Ext_More, ext2); err != nil {
-		log.Panicf("SetExtension on 2 failed: %v", err)
+		panic("SetExtension on 2 failed: " + err.Error())
 	}
 
 	if err := SetExtension(messageWithInt32Extension1, pb.E_Ext_Number, Int32(23)); err != nil {
-		log.Panicf("SetExtension on Int32-1 failed: %v", err)
+		panic("SetExtension on Int32-1 failed: " + err.Error())
 	}
 	if err := SetExtension(messageWithInt32Extension1, pb.E_Ext_Number, Int32(24)); err != nil {
-		log.Panicf("SetExtension on Int32-2 failed: %v", err)
+		panic("SetExtension on Int32-2 failed: " + err.Error())
 	}
 }
 
diff --git a/proto/text.go b/proto/text.go
index c31f3ff..18fb493 100644
--- a/proto/text.go
+++ b/proto/text.go
@@ -91,7 +91,7 @@
 
 func (w *textWriter) unindent() {
 	if w.ind == 0 {
-		log.Printf("proto: textWriter unindented too far!")
+		log.Printf("proto: textWriter unindented too far")
 		return
 	}
 	w.ind--
@@ -456,7 +456,7 @@
 	return buf.String()
 }
 
-// CompactText writes a given protocl buffer in compact text format (one line).
+// CompactText writes a given protocol buffer in compact text format (one line).
 func CompactText(w io.Writer, pb Message) { marshalText(w, pb, true) }
 
 // CompactTextString is the same as CompactText, but returns the string directly.
diff --git a/protoc-gen-go/descriptor/descriptor.pb.golden b/protoc-gen-go/descriptor/descriptor.pb.golden
index 01a3063..19175bc 100644
--- a/protoc-gen-go/descriptor/descriptor.pb.golden
+++ b/protoc-gen-go/descriptor/descriptor.pb.golden
@@ -1,4 +1,5 @@
-// Code generated by protoc-gen-go from "google/protobuf/descriptor.proto"
+// Code generated by protoc-gen-go.
+// source: google/protobuf/descriptor.proto
 // DO NOT EDIT!
 
 package google_protobuf
diff --git a/protoc-gen-go/generator/generator.go b/protoc-gen-go/generator/generator.go
index cdd9888..f19f87a 100644
--- a/protoc-gen-go/generator/generator.go
+++ b/protoc-gen-go/generator/generator.go
@@ -322,7 +322,7 @@
 func uniquePackageOf(fd *descriptor.FileDescriptorProto) string {
 	s, ok := uniquePackageName[fd]
 	if !ok {
-		log.Fatal("internal error: no package name defined for", fd.GetName())
+		log.Fatal("internal error: no package name defined for " + fd.GetName())
 	}
 	return s
 }
@@ -362,16 +362,14 @@
 // Error reports a problem, including an error, and exits the program.
 func (g *Generator) Error(err error, msgs ...string) {
 	s := strings.Join(msgs, " ") + ":" + err.Error()
-	log.Println("protoc-gen-go: error:", s)
-	g.Response.Error = proto.String(s)
+	log.Print("protoc-gen-go: error:", s)
 	os.Exit(1)
 }
 
 // Fail reports a problem and exits the program.
 func (g *Generator) Fail(msgs ...string) {
 	s := strings.Join(msgs, " ")
-	log.Println("protoc-gen-go: error:", s)
-	g.Response.Error = proto.String(s)
+	log.Print("protoc-gen-go: error:", s)
 	os.Exit(1)
 }
 
@@ -891,7 +889,8 @@
 
 // Generate the header, including package definition
 func (g *Generator) generateHeader() {
-	g.P("// Code generated by protoc-gen-go from ", Quote(*g.file.Name))
+	g.P("// Code generated by protoc-gen-go.")
+	g.P("// source: ", *g.file.Name)
 	g.P("// DO NOT EDIT!")
 	g.P()
 	g.P("package ", g.file.PackageName())
@@ -1388,7 +1387,7 @@
 			obj := g.ObjectNamed(field.GetTypeName())
 			enum, ok := obj.(*EnumDescriptor)
 			if !ok {
-				log.Println("don't know how to generate constant for", fieldname)
+				log.Print("don't know how to generate constant for", fieldname)
 				continue
 			}
 			def = g.DefaultPackageName(enum) + enum.prefix() + def
diff --git a/protoc-gen-go/plugin/plugin.pb.golden b/protoc-gen-go/plugin/plugin.pb.golden
index 1fa4681..d6bea92 100644
--- a/protoc-gen-go/plugin/plugin.pb.golden
+++ b/protoc-gen-go/plugin/plugin.pb.golden
@@ -1,4 +1,5 @@
-// Code generated by protoc-gen-go from "google/protobuf/compiler/plugin.proto"
+// Code generated by protoc-gen-go.
+// source: google/protobuf/compiler/plugin.proto
 // DO NOT EDIT!
 
 package google_protobuf_compiler
diff --git a/protoc-gen-go/testdata/imp.pb.go.golden b/protoc-gen-go/testdata/imp.pb.go.golden
index 26bf6c6..d97b3c7 100644
--- a/protoc-gen-go/testdata/imp.pb.go.golden
+++ b/protoc-gen-go/testdata/imp.pb.go.golden
@@ -1,4 +1,5 @@
-// Code generated by protoc-gen-go from "imp.proto"
+// Code generated by protoc-gen-go.
+// source: imp.proto
 // DO NOT EDIT!
 
 package imp
diff --git a/protoc-gen-go/testdata/my_test/test.pb.go b/protoc-gen-go/testdata/my_test/test.pb.go
index 03edfbf..b6a93da 100644
--- a/protoc-gen-go/testdata/my_test/test.pb.go
+++ b/protoc-gen-go/testdata/my_test/test.pb.go
@@ -1,4 +1,5 @@
-// Code generated by protoc-gen-go from "my_test/test.proto"
+// Code generated by protoc-gen-go.
+// source: my_test/test.proto
 // DO NOT EDIT!
 
 package my_test
diff --git a/protoc-gen-go/testdata/my_test/test.pb.go.golden b/protoc-gen-go/testdata/my_test/test.pb.go.golden
index 03edfbf..b6a93da 100644
--- a/protoc-gen-go/testdata/my_test/test.pb.go.golden
+++ b/protoc-gen-go/testdata/my_test/test.pb.go.golden
@@ -1,4 +1,5 @@
-// Code generated by protoc-gen-go from "my_test/test.proto"
+// Code generated by protoc-gen-go.
+// source: my_test/test.proto
 // DO NOT EDIT!
 
 package my_test