summaryrefslogtreecommitdiff
path: root/compiler/cpp
diff options
context:
space:
mode:
authorRoger Meier <roger@apache.org>2014-09-04 00:24:17 +0200
committerRoger Meier <roger@apache.org>2014-09-04 00:24:17 +0200
commit0cc6d3c7bd454ad701bf5652a58a49f689babfc5 (patch)
tree72e725ed0e13610ab74a4bb4badd0e38568b059c /compiler/cpp
parentd62473c3b0fff3f50f5d1f7e9dd6f8bdf91d4a66 (diff)
downloadthrift-0cc6d3c7bd454ad701bf5652a58a49f689babfc5.tar.gz
THRIFT-2690
c_glib: Incorrect behaviour when serializing a map with typedef'd keys Patch: Simon South
Diffstat (limited to 'compiler/cpp')
-rw-r--r--compiler/cpp/src/generate/t_c_glib_generator.cc13
1 files changed, 11 insertions, 2 deletions
diff --git a/compiler/cpp/src/generate/t_c_glib_generator.cc b/compiler/cpp/src/generate/t_c_glib_generator.cc
index 632dbc7f4..96ce99e20 100644
--- a/compiler/cpp/src/generate/t_c_glib_generator.cc
+++ b/compiler/cpp/src/generate/t_c_glib_generator.cc
@@ -2971,8 +2971,8 @@ void t_c_glib_generator::generate_serialize_container(ofstream &out,
t_type *tval = ((t_map *) ttype)->get_val_type();
string tkey_name = type_name (tkey);
string tval_name = type_name (tval);
- string tkey_ptr = tkey->is_string() || !tkey->is_base_type() ? "" : "*";
- string tval_ptr = tval->is_string() || !tval->is_base_type() ? "" : "*";
+ string tkey_ptr;
+ string tval_ptr;
string keyname = tmp("key");
string valname = tmp("val");
@@ -2993,6 +2993,15 @@ void t_c_glib_generator::generate_serialize_container(ofstream &out,
indent() << "GList *key_list = NULL, *iter = NULL;" << endl;
declare_local_variable(out, tkey, keyname);
declare_local_variable(out, tval, valname);
+
+ /* If either the key or value type is a typedef, find its underlying type so
+ we can correctly determine how to generate a pointer to it */
+ tkey = get_true_type(tkey);
+ tval = get_true_type(tval);
+
+ tkey_ptr = tkey->is_string() || !tkey->is_base_type() ? "" : "*";
+ tval_ptr = tval->is_string() || !tval->is_base_type() ? "" : "*";
+
out <<
indent() << "g_hash_table_foreach ((GHashTable *) " << prefix <<
", thrift_hash_table_get_keys, &key_list);" << endl <<