From 1458476c4ee4bebf7645e6a74bb99c053b9ec742 Mon Sep 17 00:00:00 2001 From: Roberto Raggi <roberto.raggi@nokia.com> Date: Tue, 10 Aug 2010 17:30:20 +0200 Subject: [PATCH] Some cleanup in the diagnostic client. --- src/shared/cplusplus/DiagnosticClient.h | 3 +- src/shared/cplusplus/TranslationUnit.cpp | 94 +++++++++--------------- src/shared/cplusplus/TranslationUnit.h | 4 + 3 files changed, 40 insertions(+), 61 deletions(-) diff --git a/src/shared/cplusplus/DiagnosticClient.h b/src/shared/cplusplus/DiagnosticClient.h index df2c92ae436..5069bfde498 100644 --- a/src/shared/cplusplus/DiagnosticClient.h +++ b/src/shared/cplusplus/DiagnosticClient.h @@ -50,8 +50,7 @@ #define CPLUSPLUS_DIAGNOSTICCLIENT_H #include "CPlusPlusForwardDeclarations.h" -#include "stdarg.h" - +#include <cstdarg> namespace CPlusPlus { diff --git a/src/shared/cplusplus/TranslationUnit.cpp b/src/shared/cplusplus/TranslationUnit.cpp index 340b763fc51..380af92983d 100644 --- a/src/shared/cplusplus/TranslationUnit.cpp +++ b/src/shared/cplusplus/TranslationUnit.cpp @@ -389,7 +389,7 @@ bool TranslationUnit::blockErrors(bool block) return previous; } -void TranslationUnit::warning(unsigned index, const char *format, ...) +void TranslationUnit::message(DiagnosticClient::Level level, unsigned index, const char *format, va_list args) { if (f._blockErrors) return; @@ -401,54 +401,50 @@ void TranslationUnit::warning(unsigned index, const char *format, ...) getTokenPosition(index, &line, &column, &fileName); if (DiagnosticClient *client = control()->diagnosticClient()) { - va_list args; - va_start(args, format); - client->report(DiagnosticClient::Warning, fileName, line, column, - format, args); - va_end(args); + client->report(level, fileName, line, column, format, args); } else { fprintf(stderr, "%s:%d: ", fileName->chars(), line); - fprintf(stderr, "warning: "); + const char *l = "error"; + if (level == DiagnosticClient::Warning) + l = "warning"; + else if (level == DiagnosticClient::Fatal) + l = "fatal"; + fprintf(stderr, "%s: ", l); - va_list args; - va_start(args, format); vfprintf(stderr, format, args); - va_end(args); fputc('\n', stderr); showErrorLine(index, column, stderr); } + + if (level == DiagnosticClient::Fatal) + exit(EXIT_FAILURE); } -void TranslationUnit::error(unsigned index, const char *format, ...) +void TranslationUnit::warning(unsigned index, const char *format, ...) { if (f._blockErrors) return; - index = std::min(index, tokenCount() - 1); - - unsigned line = 0, column = 0; - const StringLiteral *fileName = 0; - getTokenPosition(index, &line, &column, &fileName); - - if (DiagnosticClient *client = control()->diagnosticClient()) { - va_list args; - va_start(args, format); - client->report(DiagnosticClient::Error, fileName, line, column, - format, args); - va_end(args); - } else { - fprintf(stderr, "%s:%d: ", fileName->chars(), line); - fprintf(stderr, "error: "); + va_list args, ap; + va_start(args, format); + va_copy(ap, args); + message(DiagnosticClient::Fatal, index, format, args); + va_end(ap); + va_end(args); +} - va_list args; - va_start(args, format); - vfprintf(stderr, format, args); - va_end(args); - fputc('\n', stderr); +void TranslationUnit::error(unsigned index, const char *format, ...) +{ + if (f._blockErrors) + return; - showErrorLine(index, column, stderr); - } + va_list args, ap; + va_start(args, format); + va_copy(ap, args); + message(DiagnosticClient::Error, index, format, args); + va_end(ap); + va_end(args); } void TranslationUnit::fatal(unsigned index, const char *format, ...) @@ -456,32 +452,12 @@ void TranslationUnit::fatal(unsigned index, const char *format, ...) if (f._blockErrors) return; - index = std::min(index, tokenCount() - 1); - - unsigned line = 0, column = 0; - const StringLiteral *fileName = 0; - getTokenPosition(index, &line, &column, &fileName); - - if (DiagnosticClient *client = control()->diagnosticClient()) { - va_list args; - va_start(args, format); - client->report(DiagnosticClient::Fatal, fileName, line, column, - format, args); - va_end(args); - } else { - fprintf(stderr, "%s:%d: ", fileName->chars(), line); - fprintf(stderr, "fatal: "); - - va_list args; - va_start(args, format); - vfprintf(stderr, format, args); - va_end(args); - fputc('\n', stderr); - - showErrorLine(index, column, stderr); - } - - exit(EXIT_FAILURE); + va_list args, ap; + va_start(args, format); + va_copy(ap, args); + message(DiagnosticClient::Fatal, index, format, args); + va_end(ap); + va_end(args); } unsigned TranslationUnit::findPreviousLineOffset(unsigned tokenIndex) const diff --git a/src/shared/cplusplus/TranslationUnit.h b/src/shared/cplusplus/TranslationUnit.h index 19324f6b877..734042b659e 100644 --- a/src/shared/cplusplus/TranslationUnit.h +++ b/src/shared/cplusplus/TranslationUnit.h @@ -52,6 +52,7 @@ #include "CPlusPlusForwardDeclarations.h" #include "ASTfwd.h" #include "Token.h" +#include "DiagnosticClient.h" #include <cstdio> #include <vector> @@ -108,6 +109,9 @@ public: void error(unsigned index, const char *fmt, ...); void fatal(unsigned index, const char *fmt, ...); + void message(DiagnosticClient::Level level, unsigned index, + const char *format, va_list ap); + bool isTokenized() const; void tokenize(); -- GitLab