forked from OSchip/llvm-project
Normalize SourceMgr messages.
- Don't print "Parsing" in front of every message. - Take additional "type" argument which is prepended to the message (with ": ") if given. - Update clients to print errors (warnings) as: <filename>:<line number>: error(warning): ... llvm-svn: 74489
This commit is contained in:
parent
8e66e0bab4
commit
c9dc78ae40
|
@ -111,7 +111,10 @@ public:
|
|||
|
||||
/// PrintMessage - Emit a message about the specified location with the
|
||||
/// specified string.
|
||||
void PrintMessage(SMLoc Loc, const std::string &Msg) const;
|
||||
///
|
||||
/// @param Type - If non-null, the kind of message (e.g., "error") which is
|
||||
/// prefixed to the message.
|
||||
void PrintMessage(SMLoc Loc, const std::string &Msg, const char *Type) const;
|
||||
|
||||
private:
|
||||
void PrintIncludeStack(SMLoc IncludeLoc) const;
|
||||
|
|
|
@ -90,7 +90,8 @@ void SourceMgr::PrintIncludeStack(SMLoc IncludeLoc) const {
|
|||
}
|
||||
|
||||
|
||||
void SourceMgr::PrintMessage(SMLoc Loc, const std::string &Msg) const {
|
||||
void SourceMgr::PrintMessage(SMLoc Loc, const std::string &Msg,
|
||||
const char *Type) const {
|
||||
raw_ostream &OS = errs();
|
||||
|
||||
// First thing to do: find the current buffer containing the specified
|
||||
|
@ -103,9 +104,12 @@ void SourceMgr::PrintMessage(SMLoc Loc, const std::string &Msg) const {
|
|||
MemoryBuffer *CurMB = getBufferInfo(CurBuf).Buffer;
|
||||
|
||||
|
||||
OS << "Parsing " << CurMB->getBufferIdentifier() << ":"
|
||||
OS << CurMB->getBufferIdentifier() << ":"
|
||||
<< FindLineNumber(Loc, CurBuf) << ": ";
|
||||
|
||||
|
||||
if (Type)
|
||||
OS << Type << ": ";
|
||||
|
||||
OS << Msg << "\n";
|
||||
|
||||
// Scan backward to find the start of the line.
|
||||
|
|
|
@ -42,14 +42,15 @@ SMLoc AsmLexer::getLoc() const {
|
|||
return SMLoc::getFromPointer(TokStart);
|
||||
}
|
||||
|
||||
void AsmLexer::PrintMessage(SMLoc Loc, const std::string &Msg) const {
|
||||
SrcMgr.PrintMessage(Loc, Msg);
|
||||
void AsmLexer::PrintMessage(SMLoc Loc, const std::string &Msg,
|
||||
const char *Type) const {
|
||||
SrcMgr.PrintMessage(Loc, Msg, Type);
|
||||
}
|
||||
|
||||
/// ReturnError - Set the error to the specified string at the specified
|
||||
/// location. This is defined to always return asmtok::Error.
|
||||
asmtok::TokKind AsmLexer::ReturnError(const char *Loc, const std::string &Msg) {
|
||||
SrcMgr.PrintMessage(SMLoc::getFromPointer(Loc), Msg);
|
||||
SrcMgr.PrintMessage(SMLoc::getFromPointer(Loc), Msg, "error");
|
||||
return asmtok::Error;
|
||||
}
|
||||
|
||||
|
|
|
@ -97,7 +97,7 @@ public:
|
|||
|
||||
SMLoc getLoc() const;
|
||||
|
||||
void PrintMessage(SMLoc Loc, const std::string &Msg) const;
|
||||
void PrintMessage(SMLoc Loc, const std::string &Msg, const char *Type) const;
|
||||
|
||||
private:
|
||||
int getNextChar();
|
||||
|
|
|
@ -22,13 +22,17 @@
|
|||
#include "llvm/Support/raw_ostream.h"
|
||||
using namespace llvm;
|
||||
|
||||
void AsmParser::Warning(SMLoc L, const char *Msg) {
|
||||
Lexer.PrintMessage(L, Msg, "warning");
|
||||
}
|
||||
|
||||
bool AsmParser::Error(SMLoc L, const char *Msg) {
|
||||
Lexer.PrintMessage(L, Msg);
|
||||
Lexer.PrintMessage(L, Msg, "error");
|
||||
return true;
|
||||
}
|
||||
|
||||
bool AsmParser::TokError(const char *Msg) {
|
||||
Lexer.PrintMessage(Lexer.getLoc(), Msg);
|
||||
Lexer.PrintMessage(Lexer.getLoc(), Msg, "error");
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -482,7 +486,7 @@ bool AsmParser::ParseStatement() {
|
|||
if (!strcmp(IDVal, ".weak_reference"))
|
||||
return ParseDirectiveSymbolAttribute(MCStreamer::WeakReference);
|
||||
|
||||
Lexer.PrintMessage(IDLoc, "warning: ignoring directive for now");
|
||||
Warning(IDLoc, "ignoring directive for now");
|
||||
EatToEndOfStatement();
|
||||
return false;
|
||||
}
|
||||
|
@ -810,14 +814,14 @@ bool AsmParser::ParseDirectiveAlign(bool IsPow2, unsigned ValueSize) {
|
|||
// Diagnose non-sensical max bytes to fill.
|
||||
if (MaxBytesLoc.isValid()) {
|
||||
if (MaxBytesToFill < 1) {
|
||||
Lexer.PrintMessage(MaxBytesLoc, "warning: alignment directive can never "
|
||||
"be satisfied in this many bytes, ignoring");
|
||||
Warning(MaxBytesLoc, "alignment directive can never be satisfied in this "
|
||||
"many bytes, ignoring");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (MaxBytesToFill >= Alignment) {
|
||||
Lexer.PrintMessage(MaxBytesLoc, "warning: maximum bytes expression "
|
||||
"exceeds alignment and has no effect");
|
||||
Warning(MaxBytesLoc, "maximum bytes expression exceeds alignment and "
|
||||
"has no effect");
|
||||
MaxBytesToFill = 0;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -39,7 +39,8 @@ public:
|
|||
|
||||
private:
|
||||
bool ParseStatement();
|
||||
|
||||
|
||||
void Warning(SMLoc L, const char *Msg);
|
||||
bool Error(SMLoc L, const char *Msg);
|
||||
bool TokError(const char *Msg);
|
||||
|
||||
|
|
|
@ -80,7 +80,7 @@ static int AsLexInput(const char *ProgName) {
|
|||
while (Tok != asmtok::Eof) {
|
||||
switch (Tok) {
|
||||
default:
|
||||
Lexer.PrintMessage(Lexer.getLoc(), "driver: unknown token");
|
||||
Lexer.PrintMessage(Lexer.getLoc(), "unknown token", "warning");
|
||||
Error = true;
|
||||
break;
|
||||
case asmtok::Error:
|
||||
|
|
|
@ -44,11 +44,11 @@ tgtok::TokKind TGLexer::ReturnError(const char *Loc, const std::string &Msg) {
|
|||
|
||||
|
||||
void TGLexer::PrintError(const char *Loc, const std::string &Msg) const {
|
||||
SrcMgr.PrintMessage(SMLoc::getFromPointer(Loc), Msg);
|
||||
SrcMgr.PrintMessage(SMLoc::getFromPointer(Loc), Msg, "error");
|
||||
}
|
||||
|
||||
void TGLexer::PrintError(SMLoc Loc, const std::string &Msg) const {
|
||||
SrcMgr.PrintMessage(Loc, Msg);
|
||||
SrcMgr.PrintMessage(Loc, Msg, "error");
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -127,7 +127,7 @@ RecordKeeper llvm::Records;
|
|||
static SourceMgr SrcMgr;
|
||||
|
||||
void llvm::PrintError(SMLoc ErrorLoc, const std::string &Msg) {
|
||||
SrcMgr.PrintMessage(ErrorLoc, Msg);
|
||||
SrcMgr.PrintMessage(ErrorLoc, Msg, "error");
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue