Commit fe7d9379 authored by Dan O'Reilly's avatar Dan O'Reilly

Fixing some long/int bugs

Signed-off-by: 's avatarDan O'Reilly <oreilldf@gmail.com>
parent 6654e77f
...@@ -86,6 +86,9 @@ import struct ...@@ -86,6 +86,9 @@ import struct
import six import six
if six.PY3:
long = int
from google.protobuf.internal import encoder from google.protobuf.internal import encoder
from google.protobuf.internal import wire_format from google.protobuf.internal import wire_format
from google.protobuf import message from google.protobuf import message
...@@ -157,8 +160,8 @@ def _SignedVarintDecoder(mask, result_type): ...@@ -157,8 +160,8 @@ def _SignedVarintDecoder(mask, result_type):
# alternate implementations where the distinction is more significant # alternate implementations where the distinction is more significant
# (e.g. the C++ implementation) simpler. # (e.g. the C++ implementation) simpler.
_DecodeVarint = _VarintDecoder((1 << 64) - 1, int) _DecodeVarint = _VarintDecoder((1 << 64) - 1, long)
_DecodeSignedVarint = _SignedVarintDecoder((1 << 64) - 1, int) _DecodeSignedVarint = _SignedVarintDecoder((1 << 64) - 1, long)
# Use these versions for values which must be limited to 32 bits. # Use these versions for values which must be limited to 32 bits.
_DecodeVarint32 = _VarintDecoder((1 << 32) - 1, int) _DecodeVarint32 = _VarintDecoder((1 << 32) - 1, int)
......
...@@ -630,17 +630,17 @@ class ReflectionTest(unittest.TestCase): ...@@ -630,17 +630,17 @@ class ReflectionTest(unittest.TestCase):
TestGetAndDeserialize('optional_int32', 1, int) TestGetAndDeserialize('optional_int32', 1, int)
TestGetAndDeserialize('optional_int32', 1 << 30, int) TestGetAndDeserialize('optional_int32', 1 << 30, int)
TestGetAndDeserialize('optional_uint32', 1 << 30, int) TestGetAndDeserialize('optional_uint32', 1 << 30, int)
try:
integer_64 = long
except NameError: # Python3
integer_64 = int
if struct.calcsize('L') == 4: if struct.calcsize('L') == 4:
# Python only has signed ints, so 32-bit python can't fit an uint32 # Python only has signed ints, so 32-bit python can't fit an uint32
# in an int. # in an int.
TestGetAndDeserialize('optional_uint32', 1 << 31, int) TestGetAndDeserialize('optional_uint32', 1 << 31, long)
else: else:
# 64-bit python can fit uint32 inside an int # 64-bit python can fit uint32 inside an int
TestGetAndDeserialize('optional_uint32', 1 << 31, int) TestGetAndDeserialize('optional_uint32', 1 << 31, int)
try:
integer_64 = long
except NameError: # Python3
integer_64 = int
TestGetAndDeserialize('optional_int64', 1 << 30, integer_64) TestGetAndDeserialize('optional_int64', 1 << 30, integer_64)
TestGetAndDeserialize('optional_int64', 1 << 60, integer_64) TestGetAndDeserialize('optional_int64', 1 << 60, integer_64)
TestGetAndDeserialize('optional_uint64', 1 << 30, integer_64) TestGetAndDeserialize('optional_uint64', 1 << 30, integer_64)
......
...@@ -49,6 +49,9 @@ __author__ = 'robinson@google.com (Will Robinson)' ...@@ -49,6 +49,9 @@ __author__ = 'robinson@google.com (Will Robinson)'
import six import six
if six.PY3:
long = int
from google.protobuf.internal import decoder from google.protobuf.internal import decoder
from google.protobuf.internal import encoder from google.protobuf.internal import encoder
from google.protobuf.internal import wire_format from google.protobuf.internal import wire_format
...@@ -195,13 +198,13 @@ class Uint32ValueChecker(IntValueChecker): ...@@ -195,13 +198,13 @@ class Uint32ValueChecker(IntValueChecker):
class Int64ValueChecker(IntValueChecker): class Int64ValueChecker(IntValueChecker):
_MIN = -(1 << 63) _MIN = -(1 << 63)
_MAX = (1 << 63) - 1 _MAX = (1 << 63) - 1
_TYPE = int _TYPE = long
class Uint64ValueChecker(IntValueChecker): class Uint64ValueChecker(IntValueChecker):
_MIN = 0 _MIN = 0
_MAX = (1 << 64) - 1 _MAX = (1 << 64) - 1
_TYPE = int _TYPE = long
# Type-checkers for all scalar CPPTYPEs. # Type-checkers for all scalar CPPTYPEs.
...@@ -211,9 +214,9 @@ _VALUE_CHECKERS = { ...@@ -211,9 +214,9 @@ _VALUE_CHECKERS = {
_FieldDescriptor.CPPTYPE_UINT32: Uint32ValueChecker(), _FieldDescriptor.CPPTYPE_UINT32: Uint32ValueChecker(),
_FieldDescriptor.CPPTYPE_UINT64: Uint64ValueChecker(), _FieldDescriptor.CPPTYPE_UINT64: Uint64ValueChecker(),
_FieldDescriptor.CPPTYPE_DOUBLE: TypeChecker( _FieldDescriptor.CPPTYPE_DOUBLE: TypeChecker(
float, int, int), float, int, long),
_FieldDescriptor.CPPTYPE_FLOAT: TypeChecker( _FieldDescriptor.CPPTYPE_FLOAT: TypeChecker(
float, int, int), float, int, long),
_FieldDescriptor.CPPTYPE_BOOL: TypeChecker(bool, int), _FieldDescriptor.CPPTYPE_BOOL: TypeChecker(bool, int),
_FieldDescriptor.CPPTYPE_STRING: TypeChecker(bytes), _FieldDescriptor.CPPTYPE_STRING: TypeChecker(bytes),
} }
......
...@@ -39,6 +39,9 @@ import re ...@@ -39,6 +39,9 @@ import re
import six import six
if six.PY3:
long = int
from google.protobuf.internal import type_checkers from google.protobuf.internal import type_checkers
from google.protobuf import descriptor from google.protobuf import descriptor
from google.protobuf import text_encoding from google.protobuf import text_encoding
...@@ -813,7 +816,7 @@ def ParseInteger(text, is_signed=False, is_long=False): ...@@ -813,7 +816,7 @@ def ParseInteger(text, is_signed=False, is_long=False):
# alternate implementations where the distinction is more significant # alternate implementations where the distinction is more significant
# (e.g. the C++ implementation) simpler. # (e.g. the C++ implementation) simpler.
if is_long: if is_long:
result = int(text, 0) result = long(text, 0)
else: else:
result = int(text, 0) result = int(text, 0)
except ValueError: except ValueError:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment