summaryrefslogtreecommitdiff
path: root/lib/Target/Mangler.cpp
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2013-11-13 14:01:59 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2013-11-13 14:01:59 +0000
commitde9a1a2055851a0f0a88e459cd23a246a90efd45 (patch)
treedd4e2b5072fd4a527b5c39f3f64d8f07032a6c45 /lib/Target/Mangler.cpp
parent7af43e0ad01a5f85f9066b69faba990a72f89536 (diff)
downloadllvm-de9a1a2055851a0f0a88e459cd23a246a90efd45.tar.gz
llvm-de9a1a2055851a0f0a88e459cd23a246a90efd45.tar.bz2
llvm-de9a1a2055851a0f0a88e459cd23a246a90efd45.tar.xz
Remove AllowQuotesInName and friends from MCAsmInfo.
Accepting quotes is a property of an assembler, not of an object file. For example, ELF can support any names for sections and symbols, but the gnu assembler only accepts quotes in some contexts and llvm-mc in a few more. LLVM should not produce different symbols based on a guess about which assembler will be reading the code it is printing. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@194575 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/Mangler.cpp')
-rw-r--r--lib/Target/Mangler.cpp67
1 files changed, 4 insertions, 63 deletions
diff --git a/lib/Target/Mangler.cpp b/lib/Target/Mangler.cpp
index 20f70a375e..0fc1f2356f 100644
--- a/lib/Target/Mangler.cpp
+++ b/lib/Target/Mangler.cpp
@@ -23,17 +23,6 @@
#include "llvm/Support/raw_ostream.h"
using namespace llvm;
-static bool isAcceptableChar(char C, bool AllowPeriod) {
- if ((C < 'a' || C > 'z') &&
- (C < 'A' || C > 'Z') &&
- (C < '0' || C > '9') &&
- C != '_' && C != '$' && C != '@' &&
- !(AllowPeriod && C == '.') &&
- !(C & 0x80))
- return false;
- return true;
-}
-
static char HexDigit(int V) {
return V < 10 ? V+'0' : V+'A'-10;
}
@@ -45,46 +34,6 @@ static void MangleLetter(SmallVectorImpl<char> &OutName, unsigned char C) {
OutName.push_back('_');
}
-/// NameNeedsEscaping - Return true if the identifier \p Str needs quotes
-/// for this assembler.
-static bool NameNeedsEscaping(StringRef Str, const MCAsmInfo *MAI) {
- assert(!Str.empty() && "Cannot create an empty MCSymbol");
-
- // If the first character is a number and the target does not allow this, we
- // 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.
- bool AllowPeriod = MAI->doesAllowPeriodsInName();
- for (unsigned i = 0, e = Str.size(); i != e; ++i)
- if (!isAcceptableChar(Str[i], AllowPeriod))
- return true;
- return false;
-}
-
-/// appendMangledName - Add the specified string in mangled form if it uses
-/// any unusual characters.
-static void appendMangledName(SmallVectorImpl<char> &OutName, StringRef Str,
- const MCAsmInfo *MAI) {
- // The first character is not allowed to be a number unless the target
- // explicitly allows it.
- if (!MAI->doesAllowNameToStartWithDigit() && Str[0] >= '0' && Str[0] <= '9') {
- MangleLetter(OutName, Str[0]);
- Str = Str.substr(1);
- }
-
- bool AllowPeriod = MAI->doesAllowPeriodsInName();
- for (unsigned i = 0, e = Str.size(); i != e; ++i) {
- if (!isAcceptableChar(Str[i], AllowPeriod))
- MangleLetter(OutName, Str[i]);
- else
- OutName.push_back(Str[i]);
- }
-}
-
-
/// appendMangledQuotedName - On systems that support quoted symbols, we still
/// have to escape some (obscure) characters like " and \n which would break the
/// assembler's lexing.
@@ -134,22 +83,14 @@ void Mangler::getNameWithPrefix(SmallVectorImpl<char> &OutName,
OutName.append(Prefix, Prefix+strlen(Prefix));
}
}
-
+
// If this is a simple string that doesn't need escaping, just append it.
- if (!NameNeedsEscaping(Name, MAI) ||
- // If quotes are supported, they can be used unless the string contains
- // a quote or newline.
- (MAI->doesAllowQuotesInName() &&
- Name.find_first_of("\n\"") == StringRef::npos)) {
+ // Quotes can be used unless the string contains a quote or newline.
+ if (Name.find_first_of("\n\"") == StringRef::npos) {
OutName.append(Name.begin(), Name.end());
return;
}
-
- // On systems that do not allow quoted names, we need to mangle most
- // strange characters.
- if (!MAI->doesAllowQuotesInName())
- return appendMangledName(OutName, Name, MAI);
-
+
// Okay, the system allows quoted strings. We can quote most anything, the
// only characters that need escaping are " and \n.
assert(Name.find_first_of("\n\"") != StringRef::npos);