Canged CodedInputStream.ReadTag to use boolean result with out params to
support reading a field name rather than a field tag.
diff --git a/src/ProtocolBuffers/DescriptorProtos/CSharpOptions.cs b/src/ProtocolBuffers/DescriptorProtos/CSharpOptions.cs
index d1ae767..ccb118d 100644
--- a/src/ProtocolBuffers/DescriptorProtos/CSharpOptions.cs
+++ b/src/ProtocolBuffers/DescriptorProtos/CSharpOptions.cs
@@ -514,14 +514,12 @@
       

       public override Builder MergeFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

         pb::UnknownFieldSet.Builder unknownFields = null;

-        while (true) {

-          uint tag = input.ReadTag();

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

           switch (tag) {

             case 0: {

-              if (unknownFields != null) {

-                this.UnknownFields = unknownFields.Build();

-              }

-              return this;

+              throw InvalidProtocolBufferException.InvalidTag();

             }

             default: {

               if (pb::WireFormat.IsEndGroupTag(tag)) {

@@ -598,6 +596,11 @@
             }

           }

         }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

       }

       

       

@@ -1012,14 +1015,12 @@
       

       public override Builder MergeFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

         pb::UnknownFieldSet.Builder unknownFields = null;

-        while (true) {

-          uint tag = input.ReadTag();

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

           switch (tag) {

             case 0: {

-              if (unknownFields != null) {

-                this.UnknownFields = unknownFields.Build();

-              }

-              return this;

+              throw InvalidProtocolBufferException.InvalidTag();

             }

             default: {

               if (pb::WireFormat.IsEndGroupTag(tag)) {

@@ -1040,6 +1041,11 @@
             }

           }

         }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

       }

       

       

@@ -1234,14 +1240,12 @@
       

       public override Builder MergeFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

         pb::UnknownFieldSet.Builder unknownFields = null;

-        while (true) {

-          uint tag = input.ReadTag();

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

           switch (tag) {

             case 0: {

-              if (unknownFields != null) {

-                this.UnknownFields = unknownFields.Build();

-              }

-              return this;

+              throw InvalidProtocolBufferException.InvalidTag();

             }

             default: {

               if (pb::WireFormat.IsEndGroupTag(tag)) {

@@ -1262,6 +1266,11 @@
             }

           }

         }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

       }

       

       

@@ -1456,14 +1465,12 @@
       

       public override Builder MergeFrom(pb::CodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

         pb::UnknownFieldSet.Builder unknownFields = null;

-        while (true) {

-          uint tag = input.ReadTag();

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

           switch (tag) {

             case 0: {

-              if (unknownFields != null) {

-                this.UnknownFields = unknownFields.Build();

-              }

-              return this;

+              throw InvalidProtocolBufferException.InvalidTag();

             }

             default: {

               if (pb::WireFormat.IsEndGroupTag(tag)) {

@@ -1484,6 +1491,11 @@
             }

           }

         }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

       }