HTMLDiagnostics: Always display diagnostics *below* the line in question.

llvm-svn: 64959
This commit is contained in:
Ted Kremenek 2009-02-18 22:10:00 +00:00
parent e3bba6e3d0
commit ea3a9e270c
1 changed files with 7 additions and 22 deletions

View File

@ -351,20 +351,14 @@ void HTMLDiagnostics::HandlePiece(Rewriter& R, FileID BugFileID,
const char *TokInstantiationPtr =Pos.getInstantiationLoc().getCharacterData();
const char *LineStart = TokInstantiationPtr-ColNo;
// Only compute LineEnd if we display below a line.
// Compute LineEnd.
const char *LineEnd = TokInstantiationPtr;
if (P.getDisplayHint() == PathDiagnosticPiece::Below) {
const char* FileEnd = Buf->getBufferEnd();
while (*LineEnd != '\n' && LineEnd != FileEnd)
++LineEnd;
}
const char* FileEnd = Buf->getBufferEnd();
while (*LineEnd != '\n' && LineEnd != FileEnd)
++LineEnd;
// Compute the margin offset by counting tabs and non-tabs.
unsigned PosNo = 0;
unsigned PosNo = 0;
for (const char* c = LineStart; c != TokInstantiationPtr; ++c)
PosNo += *c == '\t' ? 8 : 1;
@ -432,19 +426,10 @@ void HTMLDiagnostics::HandlePiece(Rewriter& R, FileID BugFileID,
os << html::EscapeText(Msg) << "</div></td></tr>";
// Insert the new html.
unsigned DisplayPos;
switch (P.getDisplayHint()) {
default: assert(0 && "Unhandled hint.");
case PathDiagnosticPiece::Above:
DisplayPos = LineStart - FileStart;
break;
case PathDiagnosticPiece::Below:
DisplayPos = LineEnd - FileStart;
break;
}
unsigned DisplayPos = LineEnd - FileStart;
SourceLocation Loc =
SM.getLocForStartOfFile(LPosInfo.first).getFileLocWithOffset(DisplayPos);
R.InsertStrBefore(Loc, os.str());
}