On May 19, 2007, at 12:25 AM, Reid Spencer wrote: > > Adjust how LLVM names are produced: > 1. Always use % for local and @ for global. > 2. Replace NameNeedsQuotes with QuoteNameIfNeeded so that any > adjustments > to the name can be done in one pass. > 3. Implement generation of hex escapes so we don't get "wonky" > characters > in the output.
Cool, thanks Reid! > +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. > 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)) { Shouldn't this be "isprint(c) && C != '\\' ? Otherwise, you won't escape the quote in "\10" correctly. -Chris > + needsQuotes = true; > + result += C; > + } else { > + needsQuotes = true; > + result += "\\"; > + char hex1 = C & 0x0F; > + if (hex1 < 10) > + result += hex1 + '0'; > + else > + result += hex1 - 10 + 'A'; > + char hex2 = (C >> 4) & 0x0F; > + if (hex2 < 10) > + result += hex2 + '0'; > + else > + result += hex2 - 10 + 'A'; > + } > + } > + if (needsQuotes) { > + result.insert(0,"\""); > + result += '"'; > } > - return false; > + return result; > } > > enum PrefixType { > @@ -202,20 +225,11 @@ > /// 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 '@' + Name; > - case LabelPrefix: return Name; > - case LocalPrefix: return '%' + Name; > + case GlobalPrefix: return '@' + QuoteNameIfNeeded(Name); > + case LabelPrefix: return QuoteNameIfNeeded(Name); > + case LocalPrefix: return '%' + QuoteNameIfNeeded(Name); > } > } > > > > > _______________________________________________ > llvm-commits mailing list > llvm-commits@cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits