Browse Source

A minor optimization of Diagnostic::Diagnostic

merge-requests/37/head
eidheim 8 years ago
parent
commit
25afc70c0c
  1. 2
      src/Diagnostic.cc
  2. 12
      src/Tokens.cc
  3. 2
      src/Tokens.h

2
src/Diagnostic.cc

@ -11,7 +11,7 @@ clangmm::Diagnostic::Diagnostic(CXTranslationUnit& cx_tu, CXDiagnostic& cx_diagn
SourceLocation start_location(clang_getDiagnosticLocation(cx_diagnostic));
path=start_location.get_path();
auto start_offset=start_location.get_offset();
Tokens tokens(cx_tu, SourceRange(start_location, start_location));
Tokens tokens(cx_tu, SourceRange(start_location, start_location), false);
if(tokens.size()==1)
offsets={start_offset, tokens.begin()->get_source_range().get_offsets().second};

12
src/Tokens.cc

@ -4,9 +4,19 @@
#include <cstring>
#include <map>
clangmm::Tokens::Tokens(CXTranslationUnit &cx_tu, const SourceRange &range): cx_tu(cx_tu) {
clangmm::Tokens::Tokens(CXTranslationUnit &cx_tu, const SourceRange &range, bool annotate_tokens): cx_tu(cx_tu) {
unsigned num_tokens;
clang_tokenize(cx_tu, range.cx_range, &cx_tokens, &num_tokens);
if(!annotate_tokens) {
cx_cursors=std::unique_ptr<CXCursor[]>(new CXCursor[num_tokens]);
for (unsigned i = 0; i < num_tokens; i++) {
cx_cursors[i]=clang_getNullCursor();
emplace_back(Token(cx_tu, cx_tokens[i], cx_cursors[i]));
}
return;
}
cx_cursors=std::unique_ptr<CXCursor[]>(new CXCursor[num_tokens]); // To avoid allocation with initialization
clang_annotateTokens(cx_tu, cx_tokens, num_tokens, cx_cursors.get());

2
src/Tokens.h

@ -11,7 +11,7 @@ namespace clangmm {
class Tokens : public std::vector<clangmm::Token> {
friend class TranslationUnit;
friend class Diagnostic;
Tokens(CXTranslationUnit &cx_tu, const SourceRange &range);
Tokens(CXTranslationUnit &cx_tu, const SourceRange &range, bool annotate_tokens=true);
public:
~Tokens();
std::vector<std::pair<clangmm::Offset, clangmm::Offset> > get_similar_token_offsets(Cursor::Kind kind, const std::string &spelling,

Loading…
Cancel
Save