summaryrefslogtreecommitdiff
path: root/utils/TableGen
diff options
context:
space:
mode:
authorTim Northover <Tim.Northover@arm.com>2013-01-10 16:47:31 +0000
committerTim Northover <Tim.Northover@arm.com>2013-01-10 16:47:31 +0000
commit12da505d938ecfbc49b203e454bada99eda950e3 (patch)
treef0f800bf76544aa4d1760c2a6f90148074f3cfa2 /utils/TableGen
parent88abcde3b47dcd9b64e8b0cd6558481d692609eb (diff)
downloadllvm-12da505d938ecfbc49b203e454bada99eda950e3.tar.gz
llvm-12da505d938ecfbc49b203e454bada99eda950e3.tar.bz2
llvm-12da505d938ecfbc49b203e454bada99eda950e3.tar.xz
Remove locale-dependence of enum mangling and use existing function.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@172077 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'utils/TableGen')
-rw-r--r--utils/TableGen/AsmMatcherEmitter.cpp24
1 files changed, 10 insertions, 14 deletions
diff --git a/utils/TableGen/AsmMatcherEmitter.cpp b/utils/TableGen/AsmMatcherEmitter.cpp
index f0fb970802..a4b0694bc0 100644
--- a/utils/TableGen/AsmMatcherEmitter.cpp
+++ b/utils/TableGen/AsmMatcherEmitter.cpp
@@ -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,