summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkashirin.alex <kashirin.alex@gmail.com>2022-04-30 16:53:12 +0300
committerJens Geyer <Jens-G@users.noreply.github.com>2022-08-25 22:27:07 +0200
commit8ad8d5d7970b3ef49a71703b720e79afa776ca41 (patch)
tree9978285e725befd6e776d0aa9ba677f0b4f4f865
parent0aa108fe1ab921ef0371bcfffd3edfa8bea2cdc7 (diff)
downloadthrift-8ad8d5d7970b3ef49a71703b720e79afa776ca41.tar.gz
THRIFT-5576: fix old-style cast and redundant copy
-rw-r--r--compiler/cpp/src/thrift/generate/t_cpp_generator.cc27
1 files changed, 14 insertions, 13 deletions
diff --git a/compiler/cpp/src/thrift/generate/t_cpp_generator.cc b/compiler/cpp/src/thrift/generate/t_cpp_generator.cc
index c10d39937..d9898b7c5 100644
--- a/compiler/cpp/src/thrift/generate/t_cpp_generator.cc
+++ b/compiler/cpp/src/thrift/generate/t_cpp_generator.cc
@@ -781,8 +781,9 @@ void t_cpp_generator::print_const_value(ostream& out,
string v2 = render_const_value(out, name, type, value);
indent(out) << name << " = " << v2 << ";" << endl << endl;
} else if (type->is_enum()) {
- indent(out) << name << " = (" << type_name(type) << ")" << value->get_integer() << ";" << endl
- << endl;
+ indent(out) << name
+ << " = static_cast<" << type_name(type) << '>'
+ << '(' << value->get_integer() << ");" << endl << endl;
} else if (type->is_struct() || type->is_xception()) {
const vector<t_field*>& fields = ((t_struct*)type)->get_members();
vector<t_field*>::const_iterator f_iter;
@@ -801,8 +802,8 @@ void t_cpp_generator::print_const_value(ostream& out,
if (field_type == nullptr) {
throw "type error: " + type->get_name() + " has no field " + v_iter->first->get_string();
}
- string val = render_const_value(out, name, field_type, v_iter->second);
- indent(out) << name << "." << v_iter->first->get_string() << " = " << val << ";" << endl;
+ string item_val = render_const_value(out, name, field_type, v_iter->second);
+ indent(out) << name << "." << v_iter->first->get_string() << " = " << item_val << ";" << endl;
if (is_nonrequired_field) {
indent(out) << name << ".__isset." << v_iter->first->get_string() << " = true;" << endl;
}
@@ -815,8 +816,8 @@ void t_cpp_generator::print_const_value(ostream& out,
map<t_const_value*, t_const_value*, t_const_value::value_compare>::const_iterator v_iter;
for (v_iter = val.begin(); v_iter != val.end(); ++v_iter) {
string key = render_const_value(out, name, ktype, v_iter->first);
- string val = render_const_value(out, name, vtype, v_iter->second);
- indent(out) << name << ".insert(std::make_pair(" << key << ", " << val << "));" << endl;
+ string item_val = render_const_value(out, name, vtype, v_iter->second);
+ indent(out) << name << ".insert(std::make_pair(" << key << ", " << item_val << "));" << endl;
}
out << endl;
} else if (type->is_list()) {
@@ -824,8 +825,8 @@ void t_cpp_generator::print_const_value(ostream& out,
const vector<t_const_value*>& val = value->get_list();
vector<t_const_value*>::const_iterator v_iter;
for (v_iter = val.begin(); v_iter != val.end(); ++v_iter) {
- string val = render_const_value(out, name, etype, *v_iter);
- indent(out) << name << ".push_back(" << val << ");" << endl;
+ string item_val = render_const_value(out, name, etype, *v_iter);
+ indent(out) << name << ".push_back(" << item_val << ");" << endl;
}
out << endl;
} else if (type->is_set()) {
@@ -833,8 +834,8 @@ void t_cpp_generator::print_const_value(ostream& out,
const vector<t_const_value*>& val = value->get_list();
vector<t_const_value*>::const_iterator v_iter;
for (v_iter = val.begin(); v_iter != val.end(); ++v_iter) {
- string val = render_const_value(out, name, etype, *v_iter);
- indent(out) << name << ".insert(" << val << ");" << endl;
+ string item_val = render_const_value(out, name, etype, *v_iter);
+ indent(out) << name << ".insert(" << item_val << ");" << endl;
}
out << endl;
} else {
@@ -880,7 +881,8 @@ string t_cpp_generator::render_const_value(ostream& out,
throw "compiler error: no const of base type " + t_base_type::t_base_name(tbase);
}
} else if (type->is_enum()) {
- render << "(" << type_name(type) << ")" << value->get_integer();
+ render << "static_cast<" << type_name(type) << '>'
+ << '(' << value->get_integer() << ')';
} else {
string t = tmp("tmp");
indent(out) << type_name(type) << " " << t << ";" << endl;
@@ -1203,8 +1205,7 @@ void t_cpp_generator::generate_struct_declaration(ostream& out,
// do more of these in the initializer list.
for (m_iter = members.begin(); m_iter != members.end(); ++m_iter) {
t_type* t = get_true_type((*m_iter)->get_type());
-
- if (!t->is_base_type()) {
+ if (!t->is_base_type() && !t->is_enum() && !is_reference(*m_iter)) {
t_const_value* cv = (*m_iter)->get_value();
if (cv != nullptr) {
print_const_value(out, (*m_iter)->get_name(), t, cv);