8383import struct
8484from google .protobuf .internal import encoder
8585from google .protobuf .internal import wire_format
86+ from google .protobuf .internal .utils import bytestr_to_string , byte_ord
8687from google .protobuf import message
8788
8889
@@ -108,12 +109,11 @@ def _VarintDecoder(mask):
108109 decoder returns a (value, new_pos) pair.
109110 """
110111
111- local_ord = ord
112112 def DecodeVarint (buffer , pos ):
113113 result = 0
114114 shift = 0
115115 while 1 :
116- b = local_ord (buffer [pos ])
116+ b = byte_ord (buffer [pos ])
117117 result |= ((b & 0x7f ) << shift )
118118 pos += 1
119119 if not (b & 0x80 ):
@@ -128,12 +128,11 @@ def DecodeVarint(buffer, pos):
128128def _SignedVarintDecoder (mask ):
129129 """Like _VarintDecoder() but decodes signed values."""
130130
131- local_ord = ord
132131 def DecodeVarint (buffer , pos ):
133132 result = 0
134133 shift = 0
135134 while 1 :
136- b = local_ord (buffer [pos ])
135+ b = byte_ord (buffer [pos ])
137136 result |= ((b & 0x7f ) << shift )
138137 pos += 1
139138 if not (b & 0x80 ):
@@ -169,7 +168,7 @@ def ReadTag(buffer, pos):
169168 """
170169
171170 start = pos
172- while ord (buffer [pos ]) & 0x80 :
171+ while byte_ord (buffer [pos ]) & 0x80 :
173172 pos += 1
174173 pos += 1
175174 return (buffer [start :pos ], pos )
@@ -378,7 +377,6 @@ def StringDecoder(field_number, is_repeated, is_packed, key, new_default):
378377 """Returns a decoder for a string field."""
379378
380379 local_DecodeVarint = _DecodeVarint
381- local_unicode = unicode
382380
383381 assert not is_packed
384382 if is_repeated :
@@ -394,7 +392,7 @@ def DecodeRepeatedField(buffer, pos, end, message, field_dict):
394392 new_pos = pos + size
395393 if new_pos > end :
396394 raise _DecodeError ('Truncated string.' )
397- value .append (local_unicode (buffer [pos :new_pos ], 'utf-8' ))
395+ value .append (bytestr_to_string (buffer [pos :new_pos ]))
398396 # Predict that the next tag is another copy of the same repeated field.
399397 pos = new_pos + tag_len
400398 if buffer [new_pos :pos ] != tag_bytes or new_pos == end :
@@ -407,7 +405,7 @@ def DecodeField(buffer, pos, end, message, field_dict):
407405 new_pos = pos + size
408406 if new_pos > end :
409407 raise _DecodeError ('Truncated string.' )
410- field_dict [key ] = local_unicode (buffer [pos :new_pos ], 'utf-8' )
408+ field_dict [key ] = bytestr_to_string (buffer [pos :new_pos ])
411409 return new_pos
412410 return DecodeField
413411
@@ -626,7 +624,7 @@ def DecodeItem(buffer, pos, end, message, field_dict):
626624def _SkipVarint (buffer , pos , end ):
627625 """Skip a varint value. Returns the new position."""
628626
629- while ord (buffer [pos ]) & 0x80 :
627+ while byte_ord (buffer [pos ]) & 0x80 :
630628 pos += 1
631629 pos += 1
632630 if pos > end :
@@ -693,7 +691,6 @@ def _FieldSkipper():
693691 ]
694692
695693 wiretype_mask = wire_format .TAG_TYPE_MASK
696- local_ord = ord
697694
698695 def SkipField (buffer , pos , end , tag_bytes ):
699696 """Skips a field with the specified tag.
@@ -706,7 +703,7 @@ def SkipField(buffer, pos, end, tag_bytes):
706703 """
707704
708705 # The wire type is always in the first byte since varints are little-endian.
709- wire_type = local_ord (tag_bytes [0 ]) & wiretype_mask
706+ wire_type = byte_ord (tag_bytes [0 ]) & wiretype_mask
710707 return WIRETYPE_TO_SKIPPER [wire_type ](buffer , pos , end )
711708
712709 return SkipField
0 commit comments