summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Reiss <dreiss@apache.org>2008-12-16 20:28:13 +0000
committerDavid Reiss <dreiss@apache.org>2008-12-16 20:28:13 +0000
commita8efac862a847ea4c2c2983704ef875a12f92080 (patch)
tree275f2565fca3c99d4f691ee54ac921ae8ac45b2f
parent083c07a26579e685bd62b085471f8720ef0aa822 (diff)
downloadthrift-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.cc4
-rw-r--r--compiler/cpp/src/generate/t_java_generator.cc8
-rw-r--r--test/DebugProtoTest.thrift9
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 {