You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@thrift.apache.org by to...@apache.org on 2010/01/19 06:18:55 UTC

svn commit: r900660 - in /incubator/thrift/trunk: compiler/cpp/src/generate/t_generator.h compiler/cpp/src/generate/t_st_generator.cc lib/st/thrift.st

Author: todd
Date: Tue Jan 19 05:18:55 2010
New Revision: 900660

URL: http://svn.apache.org/viewvc?rev=900660&view=rev
Log:
THRIFT-643. smalltalk: Generated code doesnt load on Squeak3.10.2-7179-basic and PharoCore-1.0-10491rc1 images

Modified:
    incubator/thrift/trunk/compiler/cpp/src/generate/t_generator.h
    incubator/thrift/trunk/compiler/cpp/src/generate/t_st_generator.cc
    incubator/thrift/trunk/lib/st/thrift.st

Modified: incubator/thrift/trunk/compiler/cpp/src/generate/t_generator.h
URL: http://svn.apache.org/viewvc/incubator/thrift/trunk/compiler/cpp/src/generate/t_generator.h?rev=900660&r1=900659&r2=900660&view=diff
==============================================================================
--- incubator/thrift/trunk/compiler/cpp/src/generate/t_generator.h (original)
+++ incubator/thrift/trunk/compiler/cpp/src/generate/t_generator.h Tue Jan 19 05:18:55 2010
@@ -178,6 +178,14 @@
     }
     return in;
   }
+  /**
+   * Transforms a camel case string to an equivalent one separated by underscores
+   * e.g. aMultiWord -> a_multi_word
+   *      someName   -> some_name
+   *      CamelCase  -> camel_case
+   *      name       -> name
+   *      Name       -> name
+   */
   std::string underscore(std::string in) {
     in[0] = tolower(in[0]);
     for (size_t i = 1; i < in.size(); ++i) {
@@ -188,6 +196,31 @@
     }
     return in;
   }
+  /**
+    * Transforms a string with words separated by underscores to a camel case equivalent
+    * e.g. a_multi_word -> aMultiWord
+    *      some_name    ->  someName
+    *      name         ->  name
+    */
+  std::string camelcase(std::string in) {
+    std::ostringstream out;
+    bool underscore = false;
+
+    for (size_t i = 0; i < in.size(); i++) {
+      if (in[i] == '_') {
+        underscore = true;
+        continue;
+      }
+      if (underscore) {
+        out << (char) toupper(in[i]);
+        underscore = false;
+        continue;
+      }
+      out << in[i];
+    }
+
+    return out.str();
+  }
 
   /**
    * Get the true type behind a series of typedefs.

Modified: incubator/thrift/trunk/compiler/cpp/src/generate/t_st_generator.cc
URL: http://svn.apache.org/viewvc/incubator/thrift/trunk/compiler/cpp/src/generate/t_st_generator.cc?rev=900660&r1=900659&r2=900660&view=diff
==============================================================================
--- incubator/thrift/trunk/compiler/cpp/src/generate/t_st_generator.cc (original)
+++ incubator/thrift/trunk/compiler/cpp/src/generate/t_st_generator.cc Tue Jan 19 05:18:55 2010
@@ -124,7 +124,6 @@
   std::string client_class_name();
   std::string prefix(std::string name);
   std::string declare_field(t_field* tfield);
-  std::string sanitize(std::string s);
   std::string type_name(t_type* ttype);
 
   std::string function_signature(t_function* tfunction);
@@ -495,7 +494,7 @@
   if (members.size() > 0) {
     for (m_iter = members.begin(); m_iter != members.end(); ++m_iter) {
       if (m_iter != members.begin()) out << " ";
-      out << sanitize((*m_iter)->get_name());
+      out << camelcase((*m_iter)->get_name());
     }
   }
 
@@ -536,7 +535,7 @@
     for (m_iter = members.begin(); m_iter != members.end(); ++m_iter) {
       st_accessors(out,
                    capitalize(type_name(tstruct)),
-                   sanitize((*m_iter)->get_name()),
+                   camelcase((*m_iter)->get_name()),
                    a_type((*m_iter)->get_type()));
     }
     out << endl;
@@ -706,8 +705,8 @@
 
   for (fld_iter = fields.begin(); fld_iter != fields.end(); ++fld_iter) {
     bool optional = (*fld_iter)->get_req() == t_field::T_OPTIONAL;
-    string fname = (*fld_iter)->get_name();
-    string accessor = sname + " " + sanitize(fname);
+    string fname = camelcase((*fld_iter)->get_name());
+    string accessor = sname + " " + camelcase(fname);
 
     if (optional) {
       out << indent() << accessor << " ifNotNil: [" << endl;
@@ -765,7 +764,7 @@
     indent_up();
 
     out << indent() << found << " := true." << endl <<
-      indent() << val << " " << sanitize((*fld_iter)->get_name()) << ": " <<
+      indent() << val << " " << camelcase((*fld_iter)->get_name()) << ": " <<
       read_val((*fld_iter)->get_type());
     indent_down();
 
@@ -854,10 +853,10 @@
   indent_down();
 
   f_ << indent() << "oprot writeStructBegin: " <<
-    "(TStruct new name: '" + capitalize(function->get_name()) + "_args')." << endl;
+    "(TStruct new name: '" + capitalize(camelcase(funname)) + "_args')." << endl;
 
   for (fld_iter = fields.begin(); fld_iter != fields.end(); ++fld_iter) {
-    string fname = (*fld_iter)->get_name();
+    string fname = camelcase((*fld_iter)->get_name());
 
     f_ << indent() << "oprot writeFieldBegin: (TField new name: '" << fname <<
       "'; type: " << type_to_enum((*fld_iter)->get_type()) <<
@@ -875,7 +874,7 @@
 
 // We only support receiving TResult structures (so this won't work on the server side)
 void t_st_generator::generate_recv_method(t_function* function) {
-  string funname = function->get_name();
+  string funname = camelcase(function->get_name());
   string signature = function_signature(function);
 
   t_struct result(program_, "TResult");
@@ -911,7 +910,7 @@
   out << "\"";
 
   for (f_iter = fields.begin(); f_iter != fields.end(); ++f_iter) {
-    out << (*f_iter)->get_name() << ": " << type_name((*f_iter)->get_type());
+    out << camelcase((*f_iter)->get_name()) << ": " << type_name((*f_iter)->get_type());
     if ((f_iter + 1) != fields.end()) {
       out << ", ";
     }
@@ -945,7 +944,7 @@
     "\tcategory: '" << generated_category() << "'!\n\n";
 
   for (f_iter = functions.begin(); f_iter != functions.end(); ++f_iter) {
-    string funname = (*f_iter)->get_name();
+    string funname = camelcase((*f_iter)->get_name());
     string signature = function_signature(*f_iter);
 
     st_method(f_, client_class_name(), signature);
@@ -965,26 +964,6 @@
   }
 }
 
-string t_st_generator::sanitize(string s) {
-  std::ostringstream out;
-  bool underscore = false;
-
-  for (unsigned int i = 0; i < s.size(); i++) {
-    if (s[i] == '_') {
-      underscore = true;
-      continue;
-    }
-    if (underscore) {
-      out << (char) toupper(s[i]);
-      underscore = false;
-      continue;
-    }
-    out << s[i];
-  }
-
-  return out.str();
-}
-
 /**
  * Renders a function signature of the form 'type name(args)'
  *
@@ -992,7 +971,7 @@
  * @return String of rendered function definition
  */
 string t_st_generator::function_signature(t_function* tfunction) {
-  return tfunction->get_name() + capitalize(argument_list(tfunction->get_arglist()));
+  return camelcase(tfunction->get_name()) + capitalize(argument_list(tfunction->get_arglist()));
 }
 
 /**
@@ -1010,7 +989,8 @@
     } else {
       result += " ";
     }
-    result += (*f_iter)->get_name() + ": " + (*f_iter)->get_name();
+    string name = camelcase((*f_iter)->get_name());
+    result += name + ": " + name;
   }
   return result;
 }

Modified: incubator/thrift/trunk/lib/st/thrift.st
URL: http://svn.apache.org/viewvc/incubator/thrift/trunk/lib/st/thrift.st?rev=900660&r1=900659&r2=900660&view=diff
==============================================================================
--- incubator/thrift/trunk/lib/st/thrift.st (original)
+++ incubator/thrift/trunk/lib/st/thrift.st Tue Jan 19 05:18:55 2010
@@ -294,7 +294,6 @@
 
 !TBinaryProtocol methodsFor: 'reading' stamp: 'pc 02/07/2009 19:00'!
 readString
-readString
 	| sz |
 	sz := self readI32.
 	^ sz > 0 ifTrue: [(transport read: sz) asString] ifFalse: ['']! !