From e91d5474b63e305be8c7e8e5aab31bac08bcbf05 Mon Sep 17 00:00:00 2001 From: malte_langkabel Date: Mon, 13 Oct 2014 16:19:50 +0200 Subject: [PATCH] data: fixes in TokenLocations * TokenLocations for used datatypes are more precise now. * added -c option to parser to indicate that no executable will be built. --- src/lib/data/parser/cxx/ASTVisitor.cpp | 18 ++++++++++-------- src/lib/data/parser/cxx/CxxParser.cpp | 3 +++ 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/src/lib/data/parser/cxx/ASTVisitor.cpp b/src/lib/data/parser/cxx/ASTVisitor.cpp index 6999ec64..92f2784e 100644 --- a/src/lib/data/parser/cxx/ASTVisitor.cpp +++ b/src/lib/data/parser/cxx/ASTVisitor.cpp @@ -1,5 +1,7 @@ #include "data/parser/cxx/ASTVisitor.h" +#include + #include "data/parser/cxx/ASTBodyVisitor.h" #include "data/parser/cxx/utilityCxx.h" #include "data/parser/ParseFunction.h" @@ -398,8 +400,8 @@ ParseLocation ASTVisitor::getParseLocation(const clang::SourceRange& sourceRange } const clang::SourceManager& sourceManager = m_context->getSourceManager(); - const clang::PresumedLoc& presumedBegin = sourceManager.getPresumedLoc(sourceRange.getBegin()); - const clang::PresumedLoc& presumedEnd = sourceManager.getPresumedLoc(sourceRange.getEnd()); + const clang::PresumedLoc& presumedBegin = sourceManager.getPresumedLoc(sourceRange.getBegin(), false); + const clang::PresumedLoc& presumedEnd = sourceManager.getPresumedLoc(sourceRange.getEnd(), false); return ParseLocation( presumedBegin.getFilename(), @@ -456,13 +458,13 @@ ParseTypeUsage ASTVisitor::getParseTypeUsage(clang::TypeLoc typeLoc, const clang if (!typeLoc.isNull()) { - while (typeLoc.getNextTypeLoc()) - { - typeLoc = typeLoc.getNextTypeLoc(); - } + clang::SourceRange sr( + typeLoc.getLocStart(), + clang::Lexer::getLocForEndOfToken(typeLoc.getLocEnd(), 0, m_context->getSourceManager(), clang::LangOptions()) + ); - parseLocation = getParseLocation(typeLoc.getSourceRange()); - parseLocation.endColumnNumber += dataType.getRawTypeName().size() - 1; + parseLocation = getParseLocation(sr); + parseLocation.endColumnNumber -= 1; } return ParseTypeUsage(parseLocation, dataType); diff --git a/src/lib/data/parser/cxx/CxxParser.cpp b/src/lib/data/parser/cxx/CxxParser.cpp index 64fa2c19..1f62d2b0 100644 --- a/src/lib/data/parser/cxx/CxxParser.cpp +++ b/src/lib/data/parser/cxx/CxxParser.cpp @@ -26,6 +26,9 @@ void CxxParser::parseFiles( // verbose // args.push_back("-v"); + // The option -c signals that no executable is built. + args.push_back("-c"); + // The option '-x c++' treats subsequent input files as C++. args.push_back("-x"); args.push_back("c++");