Repository: thrift Updated Branches: refs/heads/master dd89dce84 -> 362a5eda2
THRIFT-1840 Thrift Generated Code Causes Global Variable Leaksk Client: Node.js Patch: Jan Brauer <[email protected]> & Tim Sebastian <[email protected]> This closes #707 Project: http://git-wip-us.apache.org/repos/asf/thrift/repo Commit: http://git-wip-us.apache.org/repos/asf/thrift/commit/70e6c29e Tree: http://git-wip-us.apache.org/repos/asf/thrift/tree/70e6c29e Diff: http://git-wip-us.apache.org/repos/asf/thrift/diff/70e6c29e Branch: refs/heads/master Commit: 70e6c29e3a0cce7e40a23c6646147ce312e7ab24 Parents: dd89dce Author: Jan Brauer <[email protected]> Authored: Wed Nov 18 21:40:58 2015 +0100 Committer: Nobuaki Sukegawa <[email protected]> Committed: Fri Dec 4 00:37:31 2015 +0900 ---------------------------------------------------------------------- compiler/cpp/src/generate/t_js_generator.cc | 28 +++++++++++++++++------- 1 file changed, 20 insertions(+), 8 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/thrift/blob/70e6c29e/compiler/cpp/src/generate/t_js_generator.cc ---------------------------------------------------------------------- diff --git a/compiler/cpp/src/generate/t_js_generator.cc b/compiler/cpp/src/generate/t_js_generator.cc index 3b3cc35..7c73add 100644 --- a/compiler/cpp/src/generate/t_js_generator.cc +++ b/compiler/cpp/src/generate/t_js_generator.cc @@ -221,6 +221,11 @@ public: return js_namespace(p); } + bool has_js_namespace(t_program* p) { + std::string ns = p->get_namespace("js"); + return (ns.size() > 0); + } + std::string js_namespace(t_program* p) { std::string ns = p->get_namespace("js"); if (ns.size() > 0) { @@ -383,7 +388,7 @@ string t_js_generator::render_includes() { const vector<t_program*>& includes = program_->get_includes(); for (size_t i = 0; i < includes.size(); ++i) { result += "var " + includes[i]->get_name() + "_ttypes = require('./" + includes[i]->get_name() - + "_types')\n"; + + "_types');\n"; } if (includes.size() > 0) { result += "\n"; @@ -634,11 +639,12 @@ void t_js_generator::generate_js_struct_definition(ofstream& out, vector<t_field*>::const_iterator m_iter; if (gen_node_) { + string prefix = has_js_namespace(tstruct->get_program()) ? js_namespace(tstruct->get_program()) : "var "; if (is_exported) { - out << js_namespace(tstruct->get_program()) << tstruct->get_name() << " = " + out << prefix << tstruct->get_name() << " = " << "module.exports." << tstruct->get_name() << " = function(args) {" << endl; } else { - out << js_namespace(tstruct->get_program()) << tstruct->get_name() << " = function(args) {" + out << prefix << tstruct->get_name() << " = function(args) {" << endl; } } else { @@ -935,11 +941,11 @@ void t_js_generator::generate_service(t_service* tservice) { if (gen_node_) { if (tservice->get_extends() != NULL) { f_service_ << "var " << tservice->get_extends()->get_name() << " = require('./" - << tservice->get_extends()->get_name() << "')" << endl << "var " + << tservice->get_extends()->get_name() << "');" << endl << "var " << tservice->get_extends()->get_name() - << "Client = " << tservice->get_extends()->get_name() << ".Client" << endl + << "Client = " << tservice->get_extends()->get_name() << ".Client;" << endl << "var " << tservice->get_extends()->get_name() - << "Processor = " << tservice->get_extends()->get_name() << ".Processor" << endl; + << "Processor = " << tservice->get_extends()->get_name() << ".Processor;" << endl; } f_service_ << "var ttypes = require('./" + program_->get_name() + "_types');" << endl; @@ -971,8 +977,13 @@ void t_js_generator::generate_service_processor(t_service* tservice) { vector<t_function*> functions = tservice->get_functions(); vector<t_function*>::iterator f_iter; - f_service_ << js_namespace(tservice->get_program()) << service_name_ << "Processor = " + if (gen_node_) { + string prefix = has_js_namespace(tservice->get_program()) ? js_namespace(tservice->get_program()) : "var "; + f_service_ << prefix << service_name_ << "Processor = " << "exports.Processor = function(handler) "; + } else { + f_service_ << js_namespace(tservice->get_program()) << service_name_ << "Processor = " << "exports.Processor = function(handler) "; + } scope_up(f_service_); @@ -1245,7 +1256,8 @@ void t_js_generator::generate_service_rest(t_service* tservice) { */ void t_js_generator::generate_service_client(t_service* tservice) { if (gen_node_) { - f_service_ << js_namespace(tservice->get_program()) << service_name_ << "Client = " + string prefix = has_js_namespace(tservice->get_program()) ? js_namespace(tservice->get_program()) : "var "; + f_service_ << prefix << service_name_ << "Client = " << "exports.Client = function(output, pClass) {" << endl; } else { f_service_ << js_namespace(tservice->get_program()) << service_name_
