Add comma-separated list of type "slist" to thrift
authorMark Slee <mcslee@apache.org>
Fri, 19 Jan 2007 19:14:36 +0000 (19:14 +0000)
committerMark Slee <mcslee@apache.org>
Fri, 19 Jan 2007 19:14:36 +0000 (19:14 +0000)
Summary: Useful for API arguments

Reviewed By: tbr-dave

git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@664931 13f79535-47bb-0310-9956-ffa450edef68

compiler/cpp/src/generate/t_php_generator.cc
compiler/cpp/src/generate/t_py_generator.cc
compiler/cpp/src/globals.h
compiler/cpp/src/main.cc
compiler/cpp/src/parse/t_base_type.h
compiler/cpp/src/parse/t_type.h
compiler/cpp/src/thrift.l
compiler/cpp/src/thrift.y

index 1f77575..092244e 100644 (file)
@@ -836,7 +836,8 @@ void t_php_generator::generate_service_rest(t_service* tservice) {
       }
       f_service_ <<
         indent() << "$" << (*a_iter)->get_name() << " = $request['" << (*a_iter)->get_name() << "'];" << endl;
-      if (atype->is_list()) {
+      if (atype->is_string() &&
+          ((t_base_type*)atype)->is_string_list()) {
         f_service_ << 
           indent() << "$" << (*a_iter)->get_name() << " = explode(',', $" << (*a_iter)->get_name() << ");" << endl;
       }      
index c6e81e3..a8e0726 100644 (file)
@@ -811,7 +811,7 @@ void t_py_generator::generate_service_remote(t_service* tservice) {
       "    sys.exit(1)" << endl <<
       "  pp.pprint(client." << (*f_iter)->get_name() << "(";
     for (int i = 0; i < num_args; ++i) {
-      if (args[i]->get_type() == g_type_string) {
+      if (args[i]->get_type()->is_string()) {
         f_remote << "args[" << i << "],";
       } else {
         f_remote << "eval(args[" << i << "]),";
index 51502c7..dd1067f 100644 (file)
@@ -47,6 +47,7 @@ extern t_program* g_program;
 
 extern t_type* g_type_void;
 extern t_type* g_type_string;
+extern t_type* g_type_slist;
 extern t_type* g_type_bool;
 extern t_type* g_type_byte;
 extern t_type* g_type_i16;
index 065c95f..2fbf913 100644 (file)
@@ -41,6 +41,7 @@ t_program* g_program;
 
 t_type* g_type_void;
 t_type* g_type_string;
+t_type* g_type_slist;
 t_type* g_type_bool;
 t_type* g_type_byte;
 t_type* g_type_i16;
@@ -621,6 +622,8 @@ int main(int argc, char** argv) {
   // Initialize global types
   g_type_void   = new t_base_type("void",   t_base_type::TYPE_VOID);
   g_type_string = new t_base_type("string", t_base_type::TYPE_STRING);
+  g_type_slist  = new t_base_type("string", t_base_type::TYPE_STRING);
+  ((t_base_type*)g_type_slist)->set_string_list(true);
   g_type_bool   = new t_base_type("bool",   t_base_type::TYPE_BOOL);
   g_type_byte   = new t_base_type("byte",   t_base_type::TYPE_BYTE);
   g_type_i16    = new t_base_type("i16",    t_base_type::TYPE_I16);
index 837caa5..b0d41d6 100644 (file)
@@ -27,7 +27,8 @@ class t_base_type : public t_type {
 
   t_base_type(std::string name, t_base base) :
     t_type(name),
-    base_(base) {}
+    base_(base),
+    string_list_(false) {}
     
   t_base get_base() const {
     return base_;
@@ -37,12 +38,25 @@ class t_base_type : public t_type {
     return base_ == TYPE_VOID;
   }
 
+  bool is_string() const {
+    return base_ == TYPE_STRING;
+  }
+  
+  void set_string_list(bool val) {
+    string_list_ = val;
+  }
+
+  bool is_string_list() const {
+    return base_ == TYPE_STRING && string_list_;
+  }
+
   bool is_base_type() const {
     return true;
   }
     
  private:
   t_base base_;
+  bool string_list_;
 };
 
 #endif
index 9589f02..da062b5 100644 (file)
@@ -28,6 +28,7 @@ class t_type {
 
   virtual bool is_void()      const { return false; }
   virtual bool is_base_type() const { return false; }
+  virtual bool is_string()    const { return false; }
   virtual bool is_typedef()   const { return false; }
   virtual bool is_enum()      const { return false; }
   virtual bool is_struct()    const { return false; }
index 4f2d542..b7008c6 100644 (file)
@@ -70,6 +70,7 @@ sliteral      ("'"[^']*"'")
 "i64"           { return tok_i64;           }
 "double"        { return tok_double;        }
 "string"        { return tok_string;        }
+"slist"         { return tok_slist;         }
 "map"           { return tok_map;           }
 "list"          { return tok_list;          }
 "set"           { return tok_set;           }
index cfb3e44..fe56dad 100644 (file)
@@ -75,6 +75,7 @@ int y_field_val = -1;
 %token tok_bool
 %token tok_byte
 %token tok_string
+%token tok_slist
 %token tok_i16
 %token tok_i32
 %token tok_i64
@@ -637,6 +638,11 @@ BaseType:
       pdebug("BaseType -> tok_string");
       $$ = g_type_string;
     }
+| tok_slist
+    {
+      pdebug("BaseType -> tok_slist");
+      $$ = g_type_slist;
+    }
 | tok_bool
     {
       pdebug("BaseType -> tok_bool");