Thrift: Fix untriggerable bug.

Reviewed By: mcslee

Test Plan: Compiled the Thrift compiler.

Revert Plan: ok


git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@665228 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/compiler/cpp/src/generate/t_cpp_generator.cc b/compiler/cpp/src/generate/t_cpp_generator.cc
index 99190b7..1bbb2ed 100644
--- a/compiler/cpp/src/generate/t_cpp_generator.cc
+++ b/compiler/cpp/src/generate/t_cpp_generator.cc
@@ -326,7 +326,7 @@
       }
       break;
     default:
-      throw "compiler error: no const of base type " + tbase;
+      throw "compiler error: no const of base type " + t_base_type::t_base_name(tbase);
     }
   } else if (type->is_enum()) {
     render << "(" << type_name(type) << ")" << value->get_integer();
@@ -2000,7 +2000,7 @@
       out << "readDouble(" << name << ");";
       break;
     default:
-      throw "compiler error: no C++ reader for base type " + tbase + name;
+      throw "compiler error: no C++ reader for base type " + t_base_type::t_base_name(tbase) + name;
     }
     out <<
       endl;
@@ -2208,7 +2208,7 @@
         out << "writeDouble(" << name << ");";
         break;
       default:
-        throw "compiler error: no C++ writer for base type " + tbase + name;
+        throw "compiler error: no C++ writer for base type " + t_base_type::t_base_name(tbase) + name;
       }
     } else if (type->is_enum()) {
       out << "writeI32((int32_t)" << name << ");";
@@ -2489,7 +2489,7 @@
   case t_base_type::TYPE_DOUBLE:
     return "double";
   default:
-    throw "compiler error: no C++ base type name for base type " + tbase;
+    throw "compiler error: no C++ base type name for base type " + t_base_type::t_base_name(tbase);
   }
 }
 
@@ -2534,7 +2534,7 @@
         result += " = (double)0";
         break;
       default:
-        throw "compiler error: no C++ initializer for base type " + tbase;
+        throw "compiler error: no C++ initializer for base type " + t_base_type::t_base_name(tbase);
       }
     } else if (type->is_enum()) {
       result += " = (" + type_name(type) + ")0";
diff --git a/compiler/cpp/src/generate/t_erl_generator.cc b/compiler/cpp/src/generate/t_erl_generator.cc
index 36a37a6..e3909bd 100644
--- a/compiler/cpp/src/generate/t_erl_generator.cc
+++ b/compiler/cpp/src/generate/t_erl_generator.cc
@@ -201,7 +201,7 @@
       }
       break;
     default:
-      throw "compiler error: no const of base type " + tbase;
+      throw "compiler error: no const of base type " + t_base_type::t_base_name(tbase);
     }
   } else if (type->is_enum()) {
     indent(out) << value->get_integer();
@@ -1107,7 +1107,7 @@
         out << "readDouble";
         break;
       default:
-        throw "compiler error: no PHP name for base type " + tbase;
+        throw "compiler error: no PHP name for base type " + t_base_type::t_base_name(tbase);
       }
     } else if (type->is_enum()) {
       out << "readI32";
@@ -1317,7 +1317,7 @@
         out << "writeDouble, " << name << "),";
         break;
       default:
-        throw "compiler error: no PHP name for base type " + tbase;
+        throw "compiler error: no PHP name for base type " + t_base_type::t_base_name(tbase);
       }
     } else if (type->is_enum()) {
       out << "writeI32, " << name << "),";
diff --git a/compiler/cpp/src/generate/t_hs_generator.cc b/compiler/cpp/src/generate/t_hs_generator.cc
index 614ebe7..920b453 100644
--- a/compiler/cpp/src/generate/t_hs_generator.cc
+++ b/compiler/cpp/src/generate/t_hs_generator.cc
@@ -236,7 +236,7 @@
       }
       break;
     default:
-      throw "compiler error: no const of base type " + tbase;
+      throw "compiler error: no const of base type " + t_base_type::t_base_name(tbase);
     }
   } else if (type->is_enum()) {
     t_enum* tenum = (t_enum*)type;
@@ -1001,7 +1001,7 @@
       out << "readDouble";
       break;
     default:
-      throw "compiler error: no PHP name for base type " + tbase;
+      throw "compiler error: no PHP name for base type " + t_base_type::t_base_name(tbase);
     }
     out << " iprot";
   } else if (type->is_enum()) {
@@ -1119,7 +1119,7 @@
         out << "writeDouble oprot " << name;
         break;
       default:
-        throw "compiler error: no hs name for base type " + tbase;
+        throw "compiler error: no hs name for base type " + t_base_type::t_base_name(tbase);
       }
     
     } else if (type->is_enum()) {
diff --git a/compiler/cpp/src/generate/t_java_generator.cc b/compiler/cpp/src/generate/t_java_generator.cc
index d4d8fbf..808d7ec 100644
--- a/compiler/cpp/src/generate/t_java_generator.cc
+++ b/compiler/cpp/src/generate/t_java_generator.cc
@@ -281,7 +281,7 @@
       }
       break;
     default:
-      throw "compiler error: no const of base type " + tbase;
+      throw "compiler error: no const of base type " + t_base_type::t_base_name(tbase);
     }
   } else if (type->is_enum()) {
     render << value->get_integer();
@@ -1245,7 +1245,7 @@
         out << "readDouble();";
         break;
       default:
-        throw "compiler error: no Java name for base type " + tbase;
+        throw "compiler error: no Java name for base type " + t_base_type::t_base_name(tbase);
       }
     } else if (type->is_enum()) {
       out << "readI32();";
@@ -1460,7 +1460,7 @@
         out << "writeDouble(" << name << ");";
         break;
       default:
-        throw "compiler error: no Java name for base type " + tbase;
+        throw "compiler error: no Java name for base type " + t_base_type::t_base_name(tbase);
       }
     } else if (type->is_enum()) {
       out << "writeI32(" << name << ");";
@@ -1674,7 +1674,7 @@
   case t_base_type::TYPE_DOUBLE:
     return (in_container ? "Double" : "double");
   default:
-    throw "compiler error: no C++ name for base type " + tbase;
+    throw "compiler error: no C++ name for base type " + t_base_type::t_base_name(tbase);
   }
 }
 
diff --git a/compiler/cpp/src/generate/t_ocaml_generator.cc b/compiler/cpp/src/generate/t_ocaml_generator.cc
index 5d51996..0a5f97b 100644
--- a/compiler/cpp/src/generate/t_ocaml_generator.cc
+++ b/compiler/cpp/src/generate/t_ocaml_generator.cc
@@ -239,7 +239,7 @@
       }
       break;
     default:
-      throw "compiler error: no const of base type " + tbase;
+      throw "compiler error: no const of base type " + t_base_type::t_base_name(tbase);
     }
   } else if (type->is_enum()) {
     t_enum* tenum = (t_enum*)type;
@@ -1086,7 +1086,7 @@
       out << "readDouble";
       break;
     default:
-      throw "compiler error: no PHP name for base type " + tbase;
+      throw "compiler error: no PHP name for base type " + t_base_type::t_base_name(tbase);
     }
   } else if (type->is_enum()) {
     string ename = capitalize(type->get_name());
@@ -1238,7 +1238,7 @@
         out << "writeDouble(" << name << ")";
         break;
       default:
-        throw "compiler error: no ocaml name for base type " + tbase;
+        throw "compiler error: no ocaml name for base type " + t_base_type::t_base_name(tbase);
       }
     } else if (type->is_enum()) {
       string ename = capitalize(type->get_name());
diff --git a/compiler/cpp/src/generate/t_perl_generator.cc b/compiler/cpp/src/generate/t_perl_generator.cc
index 1474deb..ed3fab7 100644
--- a/compiler/cpp/src/generate/t_perl_generator.cc
+++ b/compiler/cpp/src/generate/t_perl_generator.cc
@@ -146,7 +146,7 @@
       }
       break;
     default:
-      throw "compiler error: no const of base type " + tbase;
+      throw "compiler error: no const of base type " + t_base_type::t_base_name(tbase);
     }
   } else if (type->is_enum()) {
     out << value->get_integer();
@@ -1078,7 +1078,7 @@
         out << "readDouble(\\$" << name << ");";
         break;
       default:
-        throw "compiler error: no PERL name for base type " + tbase;
+        throw "compiler error: no PERL name for base type " + t_base_type::t_base_name(tbase);
       }
     } else if (type->is_enum()) {
       out << "readI32(\\$" << name << ");";
@@ -1303,7 +1303,7 @@
         out << "writeDouble($" << name << ");";
         break;
       default:
-        throw "compiler error: no PERL name for base type " + tbase;
+        throw "compiler error: no PERL name for base type " + t_base_type::t_base_name(tbase);
       }
     } else if (type->is_enum()) {
       out << "writeI32($" << name << ");";
@@ -1471,7 +1471,7 @@
         result += " = 0.0";
         break;
       default:
-        throw "compiler error: no PERL initializer for base type " + tbase;
+        throw "compiler error: no PERL initializer for base type " + t_base_type::t_base_name(tbase);
       }
     } else if (type->is_enum()) {
       result += " = 0";
diff --git a/compiler/cpp/src/generate/t_php_generator.cc b/compiler/cpp/src/generate/t_php_generator.cc
index 1596a3b..f78a7dc 100644
--- a/compiler/cpp/src/generate/t_php_generator.cc
+++ b/compiler/cpp/src/generate/t_php_generator.cc
@@ -180,7 +180,7 @@
       }
       break;
     default:
-      throw "compiler error: no const of base type " + tbase;
+      throw "compiler error: no const of base type " + t_base_type::t_base_name(tbase);
     }
   } else if (type->is_enum()) {
     indent(out) << value->get_integer();
@@ -1220,7 +1220,7 @@
             indent() << "$" << name << " = $arr[1];" << endl;
           break;
         default:
-          throw "compiler error: no PHP name for base type " + tbase + tfield->get_name();
+          throw "compiler error: no PHP name for base type " + t_base_type::t_base_name(tbase) + tfield->get_name();
         }
       } else if (type->is_enum()) {
           out <<
@@ -1265,7 +1265,7 @@
           out << "readDouble($" << name << ");";
           break;
         default:
-          throw "compiler error: no PHP name for base type " + tbase;
+          throw "compiler error: no PHP name for base type " + t_base_type::t_base_name(tbase);
         }
       } else if (type->is_enum()) {
         out << "readI32($" << name << ");";
@@ -1502,7 +1502,7 @@
             indent() << "$output .= strrev(pack('d', $" << name << "));" << endl;
           break;
         default:
-          throw "compiler error: no PHP name for base type " + tbase;
+          throw "compiler error: no PHP name for base type " + t_base_type::t_base_name(tbase);
         }
       } else if (type->is_enum()) {
         out <<
@@ -1542,7 +1542,7 @@
           out << "writeDouble($" << name << ");";
           break;
         default:
-          throw "compiler error: no PHP name for base type " + tbase;
+          throw "compiler error: no PHP name for base type " + t_base_type::t_base_name(tbase);
         }
       } else if (type->is_enum()) {
         out << "writeI32($" << name << ");";
@@ -1727,7 +1727,7 @@
         result += " = 0.0";
         break;
       default:
-        throw "compiler error: no PHP initializer for base type " + tbase;
+        throw "compiler error: no PHP initializer for base type " + t_base_type::t_base_name(tbase);
       }
     } else if (type->is_enum()) {
       result += " = 0";
diff --git a/compiler/cpp/src/generate/t_py_generator.cc b/compiler/cpp/src/generate/t_py_generator.cc
index 5ed2567..256029e 100644
--- a/compiler/cpp/src/generate/t_py_generator.cc
+++ b/compiler/cpp/src/generate/t_py_generator.cc
@@ -184,7 +184,7 @@
       }
       break;
     default:
-      throw "compiler error: no const of base type " + tbase;
+      throw "compiler error: no const of base type " + t_base_type::t_base_name(tbase);
     }
   } else if (type->is_enum()) {
     indent(out) << value->get_integer();
@@ -1230,7 +1230,7 @@
         out << "readDouble();";
         break;
       default:
-        throw "compiler error: no PHP name for base type " + tbase;
+        throw "compiler error: no PHP name for base type " + t_base_type::t_base_name(tbase);
       }
     } else if (type->is_enum()) {
       out << "readI32();";
@@ -1424,7 +1424,7 @@
         out << "writeDouble(" << name << ")";
         break;
       default:
-        throw "compiler error: no PHP name for base type " + tbase;
+        throw "compiler error: no PHP name for base type " + t_base_type::t_base_name(tbase);
       }
     } else if (type->is_enum()) {
       out << "writeI32(" << name << ")";
diff --git a/compiler/cpp/src/generate/t_rb_generator.cc b/compiler/cpp/src/generate/t_rb_generator.cc
index a3f002f..a15b9ce 100644
--- a/compiler/cpp/src/generate/t_rb_generator.cc
+++ b/compiler/cpp/src/generate/t_rb_generator.cc
@@ -176,7 +176,7 @@
       }
       break;
     default:
-      throw "compiler error: no const of base type " + tbase;
+      throw "compiler error: no const of base type " + t_base_type::t_base_name(tbase);
     }
   } else if (type->is_enum()) {
     indent(out) << value->get_integer();
diff --git a/compiler/cpp/src/generate/t_xsd_generator.cc b/compiler/cpp/src/generate/t_xsd_generator.cc
index 3a0ca1c..3f0b8f9 100644
--- a/compiler/cpp/src/generate/t_xsd_generator.cc
+++ b/compiler/cpp/src/generate/t_xsd_generator.cc
@@ -265,6 +265,6 @@
   case t_base_type::TYPE_DOUBLE:
     return "decimal";
   default:
-    throw "compiler error: no C++ base type name for base type " + tbase;
+    throw "compiler error: no C++ base type name for base type " + t_base_type::t_base_name(tbase);
   }
 }
diff --git a/compiler/cpp/src/main.cc b/compiler/cpp/src/main.cc
index 7e561e1..b070b3b 100644
--- a/compiler/cpp/src/main.cc
+++ b/compiler/cpp/src/main.cc
@@ -614,7 +614,7 @@
       }
       break;
     default:
-      throw "compiler error: no const of base type " + tbase + name;
+      throw "compiler error: no const of base type " + t_base_type::t_base_name(tbase) + name;
     }
   } else if (type->is_enum()) {
     if (value->get_type() != t_const_value::CV_INTEGER) {
diff --git a/compiler/cpp/src/parse/t_base_type.h b/compiler/cpp/src/parse/t_base_type.h
index c08c449..1c69c2e 100644
--- a/compiler/cpp/src/parse/t_base_type.h
+++ b/compiler/cpp/src/parse/t_base_type.h
@@ -87,17 +87,24 @@
   }
 
   virtual std::string get_fingerprint_material() const {
-    switch (base_) {
-      case TYPE_VOID   : return   "void"; break;
-      case TYPE_STRING : return "string"; break;
-      case TYPE_BOOL   : return   "bool"; break;
-      case TYPE_BYTE   : return   "byte"; break;
-      case TYPE_I16    : return    "i16"; break;
-      case TYPE_I32    : return    "i32"; break;
-      case TYPE_I64    : return    "164"; break;
-      case TYPE_DOUBLE : return "double"; break;
-      default:
-        throw "BUG: Can't get fingerprint material for this base type.";
+    std::string rv = t_base_name(base_);
+    if (rv == "(unknown)") {
+      throw "BUG: Can't get fingerprint material for this base type.";
+    }
+    return rv;
+  }
+
+  static std::string t_base_name(t_base tbase) {
+    switch (tbase) {
+      case TYPE_VOID   : return      "void"; break;
+      case TYPE_STRING : return    "string"; break;
+      case TYPE_BOOL   : return      "bool"; break;
+      case TYPE_BYTE   : return      "byte"; break;
+      case TYPE_I16    : return       "i16"; break;
+      case TYPE_I32    : return       "i32"; break;
+      case TYPE_I64    : return       "164"; break;
+      case TYPE_DOUBLE : return    "double"; break;
+      default          : return "(unknown)"; break;
     }
   }