OSDN Git Service

Remove locale-dependence of enum mangling and use existing function.
authorTim Northover <Tim.Northover@arm.com>
Thu, 10 Jan 2013 16:47:31 +0000 (16:47 +0000)
committerTim Northover <Tim.Northover@arm.com>
Thu, 10 Jan 2013 16:47:31 +0000 (16:47 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@172077 91177308-0d34-0410-b5e6-96231b3b80d8

utils/TableGen/AsmMatcherEmitter.cpp

index f0fb970..a4b0694 100644 (file)
@@ -958,8 +958,12 @@ static std::string getEnumNameForToken(StringRef Str) {
     case ':': Res += "_COLON_"; break;
     case '!': Res += "_EXCLAIM_"; break;
     case '.': Res += "_DOT_"; break;
+    case '<': Res += "_LT_"; break;
+    case '>': Res += "_GT_"; break;
     default:
-      if (isalnum(*it))
+      if ((*it >= 'A' && *it <= 'Z') ||
+          (*it >= 'a' && *it <= 'z') ||
+          (*it >= '0' && *it <= '9'))
         Res += *it;
       else
         Res += "_" + utostr((unsigned) *it) + "_";
@@ -1658,16 +1662,6 @@ void MatchableInfo::buildAliasResultOperands() {
   }
 }
 
-// Modify a string so that it is suitable for use as an enum tag.
-static std::string mangle(const std::string &Name) {
-  std::string MangledName = Name;
-  for (unsigned i = 0; i < MangledName.size(); ++i) {
-    if (!isalnum(MangledName[i]) && MangledName[i] != '_')
-      MangledName[i] = '_';
-  }
-  return MangledName;
-}
-
 static unsigned getConverterOperandID(const std::string &Name,
                                       SetVector<std::string> &Table,
                                       bool &IsNew) {
@@ -1764,7 +1758,8 @@ static void emitConvertFuncs(CodeGenTarget &Target, StringRef ClassName,
 
       // Remember this converter for the kind enum.
       unsigned KindID = OperandConversionKinds.size();
-      OperandConversionKinds.insert("CVT_" + mangle(AsmMatchConverter));
+      OperandConversionKinds.insert("CVT_" +
+                                    getEnumNameForToken(AsmMatchConverter));
 
       // Add the converter row for this instruction.
       ConversionTable.push_back(std::vector<uint8_t>());
@@ -1772,7 +1767,8 @@ static void emitConvertFuncs(CodeGenTarget &Target, StringRef ClassName,
       ConversionTable.back().push_back(CVT_Done);
 
       // Add the handler to the conversion driver function.
-      CvtOS << "    case CVT_" << mangle(AsmMatchConverter) << ":\n"
+      CvtOS << "    case CVT_"
+            << getEnumNameForToken(AsmMatchConverter) << ":\n"
             << "      " << AsmMatchConverter << "(Inst, Operands);\n"
             << "      break;\n";
 
@@ -1810,7 +1806,7 @@ static void emitConvertFuncs(CodeGenTarget &Target, StringRef ClassName,
         // the index of its entry in the vector).
         std::string Name = "CVT_" + (Op.Class->isRegisterClass() ? "Reg" :
                                      Op.Class->RenderMethod);
-        Name = mangle(Name);
+        Name = getEnumNameForToken(Name);
 
         bool IsNewConverter = false;
         unsigned ID = getConverterOperandID(Name, OperandConversionKinds,