You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@thrift.apache.org by je...@apache.org on 2021/05/20 20:38:56 UTC

[thrift] branch master updated: THRIFT-5417 Fix Lua compiler omitting default values in Lua service functions Client: Lua Patch: Jeffrey Han

This is an automated email from the ASF dual-hosted git repository.

jensg pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/thrift.git


The following commit(s) were added to refs/heads/master by this push:
     new c54cfcb  THRIFT-5417 Fix Lua compiler omitting default values in Lua service functions Client: Lua Patch: Jeffrey Han
c54cfcb is described below

commit c54cfcb8d213180986ce14e63abe122c1a4ec86f
Author: Jeffrey Han <je...@fb.com>
AuthorDate: Tue May 18 13:56:02 2021 -0700

    THRIFT-5417 Fix Lua compiler omitting default values in Lua service functions
    Client: Lua
    Patch: Jeffrey Han
    
    This closes #2394
---
 compiler/cpp/src/thrift/generate/t_lua_generator.cc | 16 +++++++++++++++-
 1 file changed, 15 insertions(+), 1 deletion(-)

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 @@ void t_lua_generator::generate_service_client(ostream& out, t_service* tservice)
     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;