aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2007-05-22 07:00:50 +0000
committerChris Lattner <sabre@nondot.org>2007-05-22 07:00:50 +0000
commit9621921acb971aa5c30a4800dd99538361c45eba (patch)
tree310d11dae0004f92550519accbf5d18d578ac44e
parent82f3aee9b79cf99115ff9b80a08bf16eb1a14cbd (diff)
temporarily revert reid's asmwriter patch, it is missing the asmparser piece
that decodes the escape sequences, thus breaking all cases that use them. This fixes test/Assembler/2007-05-21-Escape.ll git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37284 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/VMCore/AsmWriter.cpp52
1 files changed, 19 insertions, 33 deletions
diff --git a/lib/VMCore/AsmWriter.cpp b/lib/VMCore/AsmWriter.cpp
index 1d97d5c54f..536b541dfa 100644
--- a/lib/VMCore/AsmWriter.cpp
+++ b/lib/VMCore/AsmWriter.cpp
@@ -33,7 +33,6 @@
#include "llvm/Support/MathExtras.h"
#include "llvm/Support/Streams.h"
#include <algorithm>
-#include <cctype>
using namespace llvm;
namespace llvm {
@@ -179,39 +178,17 @@ static SlotMachine *createSlotMachine(const Value *V) {
/// NameNeedsQuotes - Return true if the specified llvm name should be wrapped
/// with ""'s.
-static std::string QuoteNameIfNeeded(const std::string &Name) {
- std::string result;
- bool needsQuotes = Name[0] >= '0' && Name[0] <= '9';
- // Scan the name to see if it needs quotes and to replace funky chars with
- // their octal equivalent.
+static bool NameNeedsQuotes(const std::string &Name) {
+ if (Name[0] >= '0' && Name[0] <= '9') return true;
+ // Scan to see if we have any characters that are not on the "white list"
for (unsigned i = 0, e = Name.size(); i != e; ++i) {
char C = Name[i];
assert(C != '"' && "Illegal character in LLVM value name!");
- if (isalnum(C) || C == '-' || C == '.' || C == '_')
- result += C;
- else if (isprint(C)) {
- needsQuotes = true;
- result += C;
- } else {
- needsQuotes = true;
- result += "\\";
- char hex1 = (C >> 4) & 0x0F;
- if (hex1 < 10)
- result += hex1 + '0';
- else
- result += hex1 - 10 + 'A';
- char hex2 = C & 0x0F;
- if (hex2 < 10)
- result += hex2 + '0';
- else
- result += hex2 - 10 + 'A';
- }
- }
- if (needsQuotes) {
- result.insert(0,"\"");
- result += '"';
+ if ((C < 'a' || C > 'z') && (C < 'A' || C > 'Z') && (C < '0' || C > '9') &&
+ C != '-' && C != '.' && C != '_')
+ return true;
}
- return result;
+ return false;
}
enum PrefixType {
@@ -225,11 +202,20 @@ enum PrefixType {
/// surrounded with ""'s (if it has special chars in it).
static std::string getLLVMName(const std::string &Name, PrefixType Prefix) {
assert(!Name.empty() && "Cannot get empty name!");
+
+ // First character cannot start with a number...
+ if (NameNeedsQuotes(Name)) {
+ if (Prefix == GlobalPrefix)
+ return "@\"" + Name + "\"";
+ return "\"" + Name + "\"";
+ }
+
+ // If we get here, then the identifier is legal to use as a "VarID".
switch (Prefix) {
default: assert(0 && "Bad prefix!");
- case GlobalPrefix: return '@' + QuoteNameIfNeeded(Name);
- case LabelPrefix: return QuoteNameIfNeeded(Name);
- case LocalPrefix: return '%' + QuoteNameIfNeeded(Name);
+ case GlobalPrefix: return '@' + Name;
+ case LabelPrefix: return Name;
+ case LocalPrefix: return '%' + Name;
}
}