THRIFT-5417 Fix Lua compiler omitting default values in Lua service functions
Client: Lua
Patch: Jeffrey Han
This closes #2394
diff --git a/compiler/cpp/src/thrift/generate/t_lua_generator.cc b/compiler/cpp/src/thrift/generate/t_lua_generator.cc
index 17dbac7..410c883 100644
--- a/compiler/cpp/src/thrift/generate/t_lua_generator.cc
+++ b/compiler/cpp/src/thrift/generate/t_lua_generator.cc
@@ -593,7 +593,21 @@
vector<t_field*>::const_iterator fld_iter;
for (fld_iter = args.begin(); fld_iter != args.end(); ++fld_iter) {
std::string argname = (*fld_iter)->get_name();
- indent(out) << "args." << argname << " = " << argname << endl;
+ if ((*fld_iter)->get_value() != nullptr) {
+ // Insert default value for nil arguments
+ t_type* type = get_true_type((*fld_iter)->get_type());
+ indent(out) << "if " << argname << " ~= nil then" << endl;
+ indent_up();
+ indent(out) << "args." << argname << " = " << argname << endl;
+ indent_down();
+ indent(out) << "else" << endl;
+ indent_up();
+ indent(out) << "args." << argname << " = " << render_const_value(type, (*fld_iter)->get_value()) << endl;
+ indent_down();
+ indent(out) << "end" << endl;
+ } else {
+ indent(out) << "args." << argname << " = " << argname << endl;
+ }
}
indent(out) << "args:write(self.oprot)" << endl;