Commit 28b68200 authored by Nikolai Kosjar's avatar Nikolai Kosjar

Clang: Print error code on parse error

Change-Id: Idecb0e9b78cc14c603de09fc460bbf17f43bb451
Reviewed-by: default avatarChristian Stenger <christian.stenger@theqtcompany.com>
Reviewed-by: Orgad Shaneh's avatarOrgad Shaneh <orgads@gmail.com>
parent 427bb8c3
......@@ -417,7 +417,9 @@ void TranslationUnit::checkTranslationUnitErrorCode(CXErrorCode errorCode) const
{
switch (errorCode) {
case CXError_Success: break;
default: throw TranslationUnitParseErrorException(d->filePath, d->projectPart.projectPartId());
default: throw TranslationUnitParseErrorException(d->filePath,
d->projectPart.projectPartId(),
errorCode);
}
}
......
......@@ -27,9 +27,13 @@
namespace ClangBackEnd {
TranslationUnitParseErrorException::TranslationUnitParseErrorException(const Utf8String &filePath, const Utf8String &projectPartId)
TranslationUnitParseErrorException::TranslationUnitParseErrorException(
const Utf8String &filePath,
const Utf8String &projectPartId,
CXErrorCode errorCode)
: filePath_(filePath),
projectPartId_(projectPartId)
projectPartId_(projectPartId),
errorCode_(errorCode)
{
}
......@@ -43,14 +47,31 @@ const Utf8String &TranslationUnitParseErrorException::projectPartId() const
return projectPartId_;
}
#define RETURN_TEXT_FOR_CASE(enumValue) case enumValue: return #enumValue
static const char *errorCodeToText(CXErrorCode errorCode)
{
switch (errorCode) {
RETURN_TEXT_FOR_CASE(CXError_Success);
RETURN_TEXT_FOR_CASE(CXError_Failure);
RETURN_TEXT_FOR_CASE(CXError_Crashed);
RETURN_TEXT_FOR_CASE(CXError_InvalidArguments);
RETURN_TEXT_FOR_CASE(CXError_ASTReadError);
}
return "UnknownCXErrorCode";
}
#undef RETURN_TEXT_FOR_CASE
const char *TranslationUnitParseErrorException::what() const Q_DECL_NOEXCEPT
{
if (what_.isEmpty())
if (what_.isEmpty()) {
what_ += Utf8StringLiteral("Parse error for file ")
+ filePath()
+ Utf8StringLiteral(" in project ")
+ projectPartId()
+ Utf8StringLiteral("!");
+ Utf8StringLiteral(": ")
+ Utf8String::fromUtf8(errorCodeToText(errorCode_));
}
return what_.constData();
}
......
......@@ -28,6 +28,8 @@
#include <utf8string.h>
#include <clang-c/Index.h>
#include <exception>
namespace ClangBackEnd {
......@@ -35,7 +37,9 @@ namespace ClangBackEnd {
class TranslationUnitParseErrorException : public std::exception
{
public:
TranslationUnitParseErrorException(const Utf8String &filePath, const Utf8String &projectPartId);
TranslationUnitParseErrorException(const Utf8String &filePath,
const Utf8String &projectPartId,
CXErrorCode errorCode);
const Utf8String &filePath() const;
const Utf8String &projectPartId() const;
......@@ -51,6 +55,7 @@ public:
private:
Utf8String filePath_;
Utf8String projectPartId_;
CXErrorCode errorCode_;
mutable Utf8String what_;
};
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment