THRIFT-1045 Support "included"ed thrift files

Patch: Henrique Mendonca


git-svn-id: https://svn.apache.org/repos/asf/thrift/trunk@1071366 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/compiler/cpp/src/generate/t_js_generator.cc b/compiler/cpp/src/generate/t_js_generator.cc
index a654fc9..ba82fea 100644
--- a/compiler/cpp/src/generate/t_js_generator.cc
+++ b/compiler/cpp/src/generate/t_js_generator.cc
@@ -192,15 +192,14 @@
       return pieces;
   }
 
-  std::string js_type_namespace(t_type* ttype) {
-    t_program* program = ttype->get_program();
+  std::string js_type_namespace(t_program* p) {
     if (gen_node_) {
-      if (program != NULL && program != program_) {
-        return program->get_name() + "_ttypes.";
+      if (p != NULL && p != program_) {
+        return p->get_name() + "_ttypes.";
       }
       return "ttypes.";
     }
-    return js_namespace(program);
+    return js_namespace(p);
   }
 
   std::string js_export_namespace(t_program* p) {
@@ -336,7 +335,7 @@
  * @param tenum The enumeration
  */
 void t_js_generator::generate_enum(t_enum* tenum) {
-  f_types_ << js_type_namespace(tenum)<<tenum->get_name()<<" = { "<<endl;
+  f_types_ << js_type_namespace(tenum->get_program())<<tenum->get_name()<<" = { "<<endl;
 
   vector<t_enum_value*> constants = tenum->get_constants();
   vector<t_enum_value*>::iterator c_iter;
@@ -359,7 +358,7 @@
   string name = tconst->get_name();
   t_const_value* value = tconst->get_value();
 
-  f_types_ << js_type_namespace(type)  << name << " = ";
+  f_types_ << js_type_namespace(program_)  << name << " = ";
   f_types_ << render_const_value(type, value) << endl;
 }
 
@@ -401,7 +400,7 @@
   } else if (type->is_enum()) {
     out << value->get_integer();
   } else if (type->is_struct() || type->is_xception()) {
-    out << "new " << js_type_namespace(type) << type->get_name() << "({" << endl;
+    out << "new " << js_type_namespace(type->get_program()) << type->get_name() << "({" << endl;
     indent_up();
     const vector<t_field*>& fields = ((t_struct*)type)->get_members();
     vector<t_field*>::const_iterator f_iter;
@@ -727,10 +726,8 @@
 
         }
 
-        if (gen_node_) {
-          f_service_ <<
-            "var ttypes = require('./" + program_->get_name() + "_types');" << endl;
-        }
+        f_service_ <<
+          "var ttypes = require('./" + program_->get_name() + "_types');" << endl;
     }
 
     generate_service_helpers(tservice);
@@ -1259,7 +1256,7 @@
                                                    t_struct* tstruct,
                                                    string prefix) {
     out <<
-        indent() << prefix << " = new " <<  js_type_namespace(tstruct)<<tstruct->get_name() << "()" << endl <<
+        indent() << prefix << " = new " <<  js_type_namespace(tstruct->get_program())<<tstruct->get_name() << "()" << endl <<
         indent() << prefix << ".read(input)" << endl;
 
 }
@@ -1653,7 +1650,7 @@
       result += " = null";
     } else if (type->is_struct() || type->is_xception()) {
       if (obj) {
-          result += " = new " +js_type_namespace(type) + type->get_name() + "()";
+          result += " = new " +js_type_namespace(type->get_program()) + type->get_name() + "()";
       } else {
         result += " = null";
       }