parameters: (message_descriptor, cls)
docstring: Helper for _AddMessageMethods().
docstring_summary: Helper for _AddMessageMethods().
docstring_tokens: Helper for _AddMessageMethods () .
function: def _AddMergeFromStringMethod(message_descriptor, cls):
    """Helper for _AddMessageMethods()."""
    def MergeFromString(self, serialized):
      length = len(serialized)
      try:
        if self._InternalParse(serialized, 0, length) != length:
          # The only reason _InternalParse would return early is if it
          # encountered an end-group tag.
          raise message_mod.DecodeError('Unexpected end-group tag.')
      except (IndexError, TypeError):
        # Now ord(buf[p:p+1]) == ord('') gets TypeError.
        raise message_mod.DecodeError('Truncated message.')
      except struct.error as e:
        raise message_mod.DecodeError(e)
      return length   # Return this for legacy reasons.
    cls.MergeFromString = MergeFromString
  
    local_ReadTag = decoder.ReadTag
    local_SkipField = decoder.SkipField
    decoders_by_tag = cls._decoders_by_tag
    is_proto3 = message_descriptor.syntax == "proto3"
  
    def InternalParse(self, buffer, pos, end):
      self._Modified()
      field_dict = self._fields
      unknown_field_list = self._unknown_fields
      while pos != end:
        (tag_bytes, new_pos) = local_ReadTag(buffer, pos)
        field_decoder, field_desc = decoders_by_tag.get(tag_bytes, (None, None))
        if field_decoder is None:
          value_start_pos = new_pos
          new_pos = local_SkipField(buffer, new_pos, end, tag_bytes)
          if new_pos == -1:
            return pos
          if not is_proto3:
            if not unknown_field_list:
              unknown_field_list = self._unknown_fields = []
            unknown_field_list.append(
                (tag_bytes, buffer[value_start_pos:new_pos]))
          pos = new_pos
        else:
          pos = field_decoder(buffer, new_pos, end, self, field_dict)
          if field_desc:
            self._UpdateOneofState(field_desc)
      return pos
    cls._InternalParse = InternalParse
function_tokens: def _AddMergeFromStringMethod ( message_descriptor , cls ) : def MergeFromString ( self , serialized ) : length = len ( serialized ) try : if self . _InternalParse ( serialized , 0 , length ) != length : # The only reason _InternalParse would return early is if it # encountered an end-group tag. raise message_mod . DecodeError ( 'Unexpected end-group tag.' ) except ( IndexError , TypeError ) : # Now ord(buf[p:p+1]) == ord('') gets TypeError. raise message_mod . DecodeError ( 'Truncated message.' ) except struct . error as e : raise message_mod . DecodeError ( e ) return length # Return this for legacy reasons. cls . MergeFromString = MergeFromString local_ReadTag = decoder . ReadTag local_SkipField = decoder . SkipField decoders_by_tag = cls . _decoders_by_tag is_proto3 = message_descriptor . syntax == "proto3" def InternalParse ( self , buffer , pos , end ) : self . _Modified ( ) field_dict = self . _fields unknown_field_list = self . _unknown_fields while pos != end : ( tag_bytes , new_pos ) = local_ReadTag ( buffer , pos ) field_decoder , field_desc = decoders_by_tag . get ( tag_bytes , ( None , None ) ) if field_decoder is None : value_start_pos = new_pos new_pos = local_SkipField ( buffer , new_pos , end , tag_bytes ) if new_pos == - 1 : return pos if not is_proto3 : if not unknown_field_list : unknown_field_list = self . _unknown_fields = [ ] unknown_field_list . append ( ( tag_bytes , buffer [ value_start_pos : new_pos ] ) ) pos = new_pos else : pos = field_decoder ( buffer , new_pos , end , self , field_dict ) if field_desc : self . _UpdateOneofState ( field_desc ) return pos cls . _InternalParse = InternalParse