aboutsummaryrefslogtreecommitdiffstats
path: root/lib/MC/MCSymbol.cpp
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2010-01-17 19:23:46 +0000
committerChris Lattner <sabre@nondot.org>2010-01-17 19:23:46 +0000
commitacd03ae6791fc0fb9f1b05247a1dc082b46b8d8b (patch)
treee6d0919df01249161c80b675e0d9a1e5f091e350 /lib/MC/MCSymbol.cpp
parentc7aa48da3f0d2daf00405e8b7ff823299245f547 (diff)
downloadexternal_llvm-acd03ae6791fc0fb9f1b05247a1dc082b46b8d8b.zip
external_llvm-acd03ae6791fc0fb9f1b05247a1dc082b46b8d8b.tar.gz
external_llvm-acd03ae6791fc0fb9f1b05247a1dc082b46b8d8b.tar.bz2
Get MCSymbol out of the mangling business, and move all the logic
to Mangler. Now MCSymbol just decides whether to slap quotes around a symbol when printing it. This also fixes some weirdness where two MCSymbols could be created for the same symbol, if one needed to be mangled and got mangled to the other one. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@93690 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/MC/MCSymbol.cpp')
-rw-r--r--lib/MC/MCSymbol.cpp61
1 files changed, 4 insertions, 57 deletions
diff --git a/lib/MC/MCSymbol.cpp b/lib/MC/MCSymbol.cpp
index 265d06c..812ee69 100644
--- a/lib/MC/MCSymbol.cpp
+++ b/lib/MC/MCSymbol.cpp
@@ -26,14 +26,6 @@ static bool isAcceptableChar(char C) {
return true;
}
-static char HexDigit(int V) {
- return V < 10 ? V+'0' : V+'A'-10;
-}
-
-static void MangleLetter(raw_ostream &OS, unsigned char C) {
- OS << '_' << HexDigit(C >> 4) << HexDigit(C & 15) << '_';
-}
-
/// NameNeedsEscaping - Return true if the identifier \arg Str needs quotes
/// for this assembler.
static bool NameNeedsEscaping(StringRef Str, const MCAsmInfo &MAI) {
@@ -43,7 +35,7 @@ static bool NameNeedsEscaping(StringRef Str, const MCAsmInfo &MAI) {
// need quotes.
if (!MAI.doesAllowNameToStartWithDigit() && Str[0] >= '0' && Str[0] <= '9')
return true;
-
+
// If any of the characters in the string is an unacceptable character, force
// quotes.
for (unsigned i = 0, e = Str.size(); i != e; ++i)
@@ -52,59 +44,14 @@ static bool NameNeedsEscaping(StringRef Str, const MCAsmInfo &MAI) {
return false;
}
-/// printMangledName - Print the specified string in mangled form if it uses
-/// any unusual characters.
-void MCSymbol::printMangledName(StringRef Str, raw_ostream &OS,
- const MCAsmInfo *MAI) {
- // The first character is not allowed to be a number unless the target
- // explicitly allows it.
- if ((MAI == 0 || !MAI->doesAllowNameToStartWithDigit()) &&
- Str[0] >= '0' && Str[0] <= '9') {
- MangleLetter(OS, Str[0]);
- Str = Str.substr(1);
- }
-
- for (unsigned i = 0, e = Str.size(); i != e; ++i) {
- if (!isAcceptableChar(Str[i]))
- MangleLetter(OS, Str[i]);
- else
- OS << Str[i];
- }
-}
-
-/// PrintMangledQuotedName - On systems that support quoted symbols, we still
-/// have to escape some (obscure) characters like " and \n which would break the
-/// assembler's lexing.
-static void PrintMangledQuotedName(raw_ostream &OS, StringRef Str) {
- OS << '"';
-
- for (unsigned i = 0, e = Str.size(); i != e; ++i) {
- if (Str[i] == '"')
- OS << "_QQ_";
- else if (Str[i] == '\n')
- OS << "_NL_";
- else
- OS << Str[i];
- }
- OS << '"';
-}
-
-
void MCSymbol::print(raw_ostream &OS, const MCAsmInfo *MAI) const {
+ // The name for this MCSymbol is required to be a valid target name. However,
+ // some targets support quoting names with funny characters. If the name
+ // contains a funny character, then print it quoted.
if (MAI == 0 || !NameNeedsEscaping(getName(), *MAI)) {
OS << getName();
return;
}
-
- // On systems that do not allow quoted names, print with mangling.
- if (!MAI->doesAllowQuotesInName())
- return printMangledName(getName(), OS, MAI);
-
- // If the string contains a double quote or newline, we still have to mangle
- // it.
- if (getName().find('"') != std::string::npos ||
- getName().find('\n') != std::string::npos)
- return PrintMangledQuotedName(OS, getName());
OS << '"' << getName() << '"';
}