Lines Matching defs:LineInfo
339 bool SourcePrinter::cacheSource(const DILineInfo &LineInfo) {
341 if (LineInfo.Source) {
342 Buffer = MemoryBuffer::getMemBuffer(*LineInfo.Source);
345 MemoryBuffer::getFile(LineInfo.FileName, /*IsText=*/true);
347 if (MissingSources.insert(LineInfo.FileName).second)
348 reportWarning("failed to find source " + LineInfo.FileName,
357 std::vector<StringRef> &Lines = LineCache[LineInfo.FileName];
366 SourceCache[LineInfo.FileName] = std::move(Buffer);
378 DILineInfo LineInfo = DILineInfo();
383 LineInfo = *ExpectedLineInfo;
393 sys::path::is_absolute_gnu(LineInfo.FileName)) {
396 assert(!LineInfo.FileName.empty());
399 auto StrippedNameStart = LineInfo.FileName.begin();
403 for (auto Pos = StrippedNameStart + 1, End = LineInfo.FileName.end();
411 LineInfo.FileName =
412 std::string(StrippedNameStart, LineInfo.FileName.end());
416 sys::path::append(FilePath, Prefix, LineInfo.FileName);
418 LineInfo.FileName = std::string(FilePath);
422 printLines(OS, LineInfo, Delimiter, LVP);
424 printSources(OS, LineInfo, ObjectFilename, Delimiter, LVP);
425 OldLineInfo = LineInfo;
429 const DILineInfo &LineInfo, StringRef Delimiter,
431 bool PrintFunctionName = LineInfo.FunctionName != DILineInfo::BadString &&
432 LineInfo.FunctionName != OldLineInfo.FunctionName;
434 OS << Delimiter << LineInfo.FunctionName;
437 if (!StringRef(LineInfo.FunctionName).ends_with("()"))
441 if (LineInfo.FileName != DILineInfo::BadString && LineInfo.Line != 0 &&
442 (OldLineInfo.Line != LineInfo.Line ||
443 OldLineInfo.FileName != LineInfo.FileName || PrintFunctionName)) {
444 OS << Delimiter << LineInfo.FileName << ":" << LineInfo.Line;
449 // Get the source line text for LineInfo:
450 // - use LineInfo::LineSource if available;
451 // - use LineCache if LineInfo::Source otherwise.
452 StringRef SourcePrinter::getLine(const DILineInfo &LineInfo,
454 if (LineInfo.LineSource)
455 return LineInfo.LineSource.value();
457 if (SourceCache.find(LineInfo.FileName) == SourceCache.end())
458 if (!cacheSource(LineInfo))
461 auto LineBuffer = LineCache.find(LineInfo.FileName);
465 if (LineInfo.Line > LineBuffer->second.size()) {
468 LineInfo.Line, LineInfo.FileName),
474 return LineBuffer->second[LineInfo.Line - 1];
478 const DILineInfo &LineInfo,
481 if (LineInfo.FileName == DILineInfo::BadString || LineInfo.Line == 0 ||
482 (OldLineInfo.Line == LineInfo.Line &&
483 OldLineInfo.FileName == LineInfo.FileName))
486 StringRef Line = getLine(LineInfo, ObjectFilename);