BOZConstantExpr::BOZConstantExpr(ASTContext &C, SourceLocation Loc, SourceLocation MaxLoc, llvm::StringRef Data) : ConstantExpr(BOZConstantExprClass, C.IntegerTy, Loc, MaxLoc) { unsigned Radix = 0; switch (Data[0]) { case 'B': Kind = BinaryExprClass; Radix = 2; break; case 'O': Kind = Octal; Radix = 8; break; case 'Z': case 'X': Kind = Hexadecimal; Radix = 16; break; } size_t LastQuote = Data.rfind(Data[1]); assert(LastQuote == llvm::StringRef::npos && "Invalid BOZ constant!"); llvm::StringRef NumStr = Data.slice(2, LastQuote); APInt Val; NumStr.getAsInteger(Radix, Val); Num.setValue(C, Val); }
std::string getClangRepositoryPath() { #ifdef SVN_REPOSITORY llvm::StringRef URL(SVN_REPOSITORY); #else llvm::StringRef URL(""); #endif // If the SVN_REPOSITORY is empty, try to use the SVN keyword. This helps us // pick up a tag in an SVN export, for example. static llvm::StringRef SVNRepository("$URL$"); if (URL.empty()) { URL = SVNRepository.slice(SVNRepository.find(':'), SVNRepository.find("/lib/Basic")); } // Strip off version from a build from an integration branch. URL = URL.slice(0, URL.find("/src/tools/clang")); // Trim path prefix off, assuming path came from standard cfe path. size_t Start = URL.find("cfe/"); if (Start != llvm::StringRef::npos) URL = URL.substr(Start + 4); return URL; }
void TemplightProtobufReader::loadBeginEntry(llvm::StringRef aSubBuffer) { // Set default values: LastBeginEntry.InstantiationKind = 0; LastBeginEntry.Name = ""; LastBeginEntry.TimeStamp = 0.0; LastBeginEntry.MemoryUsage = 0; while ( aSubBuffer.size() ) { unsigned int cur_wire = llvm::protobuf::loadVarInt(aSubBuffer); switch( cur_wire ) { case llvm::protobuf::getVarIntWire<1>::value: LastBeginEntry.InstantiationKind = llvm::protobuf::loadVarInt(aSubBuffer); break; case llvm::protobuf::getStringWire<2>::value: { std::uint64_t cur_size = llvm::protobuf::loadVarInt(aSubBuffer); loadTemplateName(aSubBuffer.slice(0, cur_size)); aSubBuffer = aSubBuffer.drop_front(cur_size); break; } case llvm::protobuf::getStringWire<3>::value: { std::uint64_t cur_size = llvm::protobuf::loadVarInt(aSubBuffer); loadLocation(aSubBuffer.slice(0, cur_size), fileNameMap, LastBeginEntry.FileName, LastBeginEntry.Line, LastBeginEntry.Column); aSubBuffer = aSubBuffer.drop_front(cur_size); break; } case llvm::protobuf::getDoubleWire<4>::value: LastBeginEntry.TimeStamp = llvm::protobuf::loadDouble(aSubBuffer); break; case llvm::protobuf::getVarIntWire<5>::value: LastBeginEntry.MemoryUsage = llvm::protobuf::loadVarInt(aSubBuffer); break; case llvm::protobuf::getStringWire<6>::value: { std::uint64_t cur_size = llvm::protobuf::loadVarInt(aSubBuffer); loadLocation(aSubBuffer.slice(0, cur_size), fileNameMap, LastBeginEntry.TempOri_FileName, LastBeginEntry.TempOri_Line, LastBeginEntry.TempOri_Column); aSubBuffer = aSubBuffer.drop_front(cur_size); break; } default: llvm::protobuf::skipData(aSubBuffer, cur_wire); break; } } LastChunk = TemplightProtobufReader::BeginEntry; }
static llvm::StringRef substrBefore(llvm::StringRef whole, llvm::StringRef part) { return whole.slice(0, part.data() - whole.data()); }
/// ApplyQAOverride - Apply a list of edits to the input argument lists. /// /// The input string is a space separate list of edits to perform, /// they are applied in order to the input argument lists. Edits /// should be one of the following forms: /// /// '#': Silence information about the changes to the command line arguments. /// /// '^': Add FOO as a new argument at the beginning of the command line. /// /// '+': Add FOO as a new argument at the end of the command line. /// /// 's/XXX/YYY/': Substitute the regular expression XXX with YYY in the command /// line. /// /// 'xOPTION': Removes all instances of the literal argument OPTION. /// /// 'XOPTION': Removes all instances of the literal argument OPTION, /// and the following argument. /// /// 'Ox': Removes all flags matching 'O' or 'O[sz0-9]' and adds 'Ox' /// at the end of the command line. /// /// \param OS - The stream to write edit information to. /// \param Args - The vector of command line arguments. /// \param Edit - The override command to perform. /// \param SavedStrings - Set to use for storing string representations. static void ApplyOneQAOverride(llvm::raw_ostream &OS, llvm::SmallVectorImpl<const char*> &Args, llvm::StringRef Edit, std::set<std::string> &SavedStrings) { // This does not need to be efficient. if (Edit[0] == '^') { const char *Str = SaveStringInSet(SavedStrings, Edit.substr(1)); OS << "### Adding argument " << Str << " at beginning\n"; Args.insert(Args.begin() + 1, Str); } else if (Edit[0] == '+') { const char *Str = SaveStringInSet(SavedStrings, Edit.substr(1)); OS << "### Adding argument " << Str << " at end\n"; Args.push_back(Str); } else if (Edit[0] == 's' && Edit[1] == '/' && Edit.endswith("/") && Edit.slice(2, Edit.size()-1).find('/') != llvm::StringRef::npos) { llvm::StringRef MatchPattern = Edit.substr(2).split('/').first; llvm::StringRef ReplPattern = Edit.substr(2).split('/').second; ReplPattern = ReplPattern.slice(0, ReplPattern.size()-1); for (unsigned i = 1, e = Args.size(); i != e; ++i) { std::string Repl = llvm::Regex(MatchPattern).sub(ReplPattern, Args[i]); if (Repl != Args[i]) { OS << "### Replacing '" << Args[i] << "' with '" << Repl << "'\n"; Args[i] = SaveStringInSet(SavedStrings, Repl); } } } else if (Edit[0] == 'x' || Edit[0] == 'X') { std::string Option = Edit.substr(1, std::string::npos); for (unsigned i = 1; i < Args.size();) { if (Option == Args[i]) { OS << "### Deleting argument " << Args[i] << '\n'; Args.erase(Args.begin() + i); if (Edit[0] == 'X') { if (i < Args.size()) { OS << "### Deleting argument " << Args[i] << '\n'; Args.erase(Args.begin() + i); } else OS << "### Invalid X edit, end of command line!\n"; } } else ++i; } } else if (Edit[0] == 'O') { for (unsigned i = 1; i < Args.size();) { const char *A = Args[i]; if (A[0] == '-' && A[1] == 'O' && (A[2] == '\0' || (A[3] == '\0' && (A[2] == 's' || A[2] == 'z' || ('0' <= A[2] && A[2] <= '9'))))) { OS << "### Deleting argument " << Args[i] << '\n'; Args.erase(Args.begin() + i); } else ++i; } OS << "### Adding argument " << Edit << " at end\n"; Args.push_back(SaveStringInSet(SavedStrings, '-' + Edit.str())); } else { OS << "### Unrecognized edit: " << Edit << "\n"; } }