diff options
author | David Reiss <dreiss@apache.org> | 2008-12-16 20:28:13 +0000 |
---|---|---|
committer | David Reiss <dreiss@apache.org> | 2008-12-16 20:28:13 +0000 |
commit | a8efac862a847ea4c2c2983704ef875a12f92080 (patch) | |
tree | 275f2565fca3c99d4f691ee54ac921ae8ac45b2f | |
parent | 083c07a26579e685bd62b085471f8720ef0aa822 (diff) | |
download | thrift-a8efac862a847ea4c2c2983704ef875a12f92080.tar.gz |
THRIFT-225. java/cpp: Handle non-i32 integer constants properly
Java generates a warning when converting from an integer constant
to a byte or short without an explicit cast. This change adds a
cast to byte and short literals in Java.
Both Java and C++ fail to compile integer literals larger than 2^31
unless they are decorated with "L" (for Java) or "LL" (for g++).
This change adds the appropriate decorations.
git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@727130 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r-- | compiler/cpp/src/generate/t_cpp_generator.cc | 4 | ||||
-rw-r--r-- | compiler/cpp/src/generate/t_java_generator.cc | 8 | ||||
-rw-r--r-- | test/DebugProtoTest.thrift | 9 |
3 files changed, 16 insertions, 5 deletions
diff --git a/compiler/cpp/src/generate/t_cpp_generator.cc b/compiler/cpp/src/generate/t_cpp_generator.cc index 6366497b6..2bb24c438 100644 --- a/compiler/cpp/src/generate/t_cpp_generator.cc +++ b/compiler/cpp/src/generate/t_cpp_generator.cc @@ -560,9 +560,11 @@ string t_cpp_generator::render_const_value(ofstream& out, string name, t_type* t case t_base_type::TYPE_BYTE: case t_base_type::TYPE_I16: case t_base_type::TYPE_I32: - case t_base_type::TYPE_I64: render << value->get_integer(); break; + case t_base_type::TYPE_I64: + render << value->get_integer() << "LL"; + break; case t_base_type::TYPE_DOUBLE: if (value->get_type() == t_const_value::CV_INTEGER) { render << value->get_integer(); diff --git a/compiler/cpp/src/generate/t_java_generator.cc b/compiler/cpp/src/generate/t_java_generator.cc index 6da8e3c6c..887fc7ac2 100644 --- a/compiler/cpp/src/generate/t_java_generator.cc +++ b/compiler/cpp/src/generate/t_java_generator.cc @@ -478,11 +478,17 @@ string t_java_generator::render_const_value(ofstream& out, string name, t_type* render << ((value->get_integer() > 0) ? "true" : "false"); break; case t_base_type::TYPE_BYTE: + render << "(byte)" << value->get_integer(); + break; case t_base_type::TYPE_I16: + render << "(short)" << value->get_integer(); + break; case t_base_type::TYPE_I32: - case t_base_type::TYPE_I64: render << value->get_integer(); break; + case t_base_type::TYPE_I64: + render << value->get_integer() << "L"; + break; case t_base_type::TYPE_DOUBLE: if (value->get_type() == t_const_value::CV_INTEGER) { render << value->get_integer(); diff --git a/test/DebugProtoTest.thrift b/test/DebugProtoTest.thrift index 515635e3c..e8eb9a38e 100644 --- a/test/DebugProtoTest.thrift +++ b/test/DebugProtoTest.thrift @@ -15,15 +15,18 @@ struct Doubles { struct OneOfEach { 1: bool im_true, 2: bool im_false, - 3: byte a_bite, - 4: i16 integer16, + 3: byte a_bite = 200, + 4: i16 integer16 = 33000, 5: i32 integer32, - 6: i64 integer64, + 6: i64 integer64 = 10000000000, 7: double double_precision, 8: string some_characters, 9: string zomg_unicode, 10: bool what_who, 11: binary base64, + 12: list<byte> byte_list = [1, 2, 3], + 13: list<i16> i16_list = [1,2,3], + 14: list<i64> i64_list = [1,2,3] } struct Bonk { |