From ac252c8ef466ee29873aead34cdd3234f480f1ef Mon Sep 17 00:00:00 2001 From: eidheim Date: Fri, 3 Jul 2015 21:57:09 +0200 Subject: [PATCH] Cleanup. --- src/Diagnostic.cc | 2 +- src/Diagnostic.h | 2 +- src/Token.h | 2 +- src/Tokens.cc | 29 +++++++++++++---------------- src/Tokens.h | 3 ++- src/TranslationUnit.cc | 1 + 6 files changed, 19 insertions(+), 20 deletions(-) diff --git a/src/Diagnostic.cc b/src/Diagnostic.cc index 2167181..46693d2 100644 --- a/src/Diagnostic.cc +++ b/src/Diagnostic.cc @@ -2,7 +2,7 @@ #include "SourceLocation.h" #include "Tokens.h" -clang::Diagnostic::Diagnostic(clang::TranslationUnit& tu, CXDiagnostic clang_diagnostic) { +clang::Diagnostic::Diagnostic(clang::TranslationUnit& tu, CXDiagnostic& clang_diagnostic) { severity=clang_getDiagnosticSeverity(clang_diagnostic); severity_spelling=get_severity_spelling(severity); spelling=clang_getCString(clang_getDiagnosticSpelling(clang_diagnostic)); diff --git a/src/Diagnostic.h b/src/Diagnostic.h index 9ac3b2f..c858d33 100644 --- a/src/Diagnostic.h +++ b/src/Diagnostic.h @@ -13,7 +13,7 @@ namespace clang { unsigned line, column, offset; }; - Diagnostic(clang::TranslationUnit& tu, CXDiagnostic clang_diagnostic); + Diagnostic(clang::TranslationUnit& tu, CXDiagnostic& clang_diagnostic); static const std::string get_severity_spelling(unsigned severity); diff --git a/src/Token.h b/src/Token.h index 5208b6b..dd8efe4 100644 --- a/src/Token.h +++ b/src/Token.h @@ -25,7 +25,7 @@ namespace clang { friend SourceRange; friend SourceLocation; friend Tokens; - CXToken token_; + const CXToken& token_; }; } // namespace clang #endif // TOKEN_H_ diff --git a/src/Tokens.cc b/src/Tokens.cc index 85ba9d1..baf70aa 100644 --- a/src/Tokens.cc +++ b/src/Tokens.cc @@ -2,7 +2,7 @@ #include using namespace std; -clang::Tokens::Tokens(clang::TranslationUnit *tu, clang::SourceRange *range) { +clang::Tokens::Tokens(clang::TranslationUnit *tu, clang::SourceRange *range): tu(*tu) { clang_tokenize(tu->tu_, range->range_, &tokens_, @@ -13,22 +13,16 @@ clang::Tokens::Tokens(clang::TranslationUnit *tu, clang::SourceRange *range) { } clang::Tokens::~Tokens() { - // instead of using clang_disposeTokens() the implementation - // of the latter method is just free(token_) the same as - // delete(tokens_) eliminating the need of tu* - delete tokens_; + clang_disposeTokens(tu.tu_, tokens_, tks.size()); } std::vector& clang::Tokens::tokens() { return tks; } -std::vector clang::Tokens::get_token_cursors(clang::TranslationUnit *tu) { - std::vector clang_tokens; - for(auto& token: tks) - clang_tokens.emplace_back(token.token_); - std::vector clang_cursors(clang_tokens.size()); - clang_annotateTokens(tu->tu_, clang_tokens.data(), clang_tokens.size(), &clang_cursors.data()[0]); +void clang::Tokens::get_token_types(clang::TranslationUnit *tu) { + std::vector clang_cursors(tks.size()); + clang_annotateTokens(tu->tu_, tokens_, tks.size(), clang_cursors.data()); std::vector cursors; for(auto clang_cursor: clang_cursors) { @@ -37,15 +31,19 @@ std::vector clang::Tokens::get_token_cursors(clang::TranslationUn } for(int c=0;c=4 && spelling.substr(0, 4)=="auto") { auto_end=spelling.substr(4); - auto type=clang_getCanonicalType(clang_getCursorType(cursors[c].cursor_)); - spelling=clang_getCString(clang_getTypeSpelling(type)); + auto type=clang_getCanonicalType(clang_getCursorType(clang_cursors[c])); + auto cxstr=clang_getTypeSpelling(type); + spelling=clang_getCString(cxstr); + clang_disposeString(cxstr); if(spelling.find(" ")==std::string::npos) spelling+=auto_end; } @@ -88,5 +86,4 @@ std::vector clang::Tokens::get_token_cursors(clang::TranslationUn } }*/ } - return cursors; } \ No newline at end of file diff --git a/src/Tokens.h b/src/Tokens.h index c381fe8..2fc3de8 100644 --- a/src/Tokens.h +++ b/src/Tokens.h @@ -10,11 +10,12 @@ namespace clang { Tokens(TranslationUnit *tu, SourceRange *range); ~Tokens(); std::vector& tokens(); - std::vector get_token_cursors(clang::TranslationUnit *tu); + void get_token_types(clang::TranslationUnit *tu); private: std::vector tks; CXToken *tokens_; unsigned num_tokens_; + TranslationUnit& tu; }; } // namespace clang #endif // TOKENS_H_ diff --git a/src/TranslationUnit.cc b/src/TranslationUnit.cc index e9cac42..1587a6c 100644 --- a/src/TranslationUnit.cc +++ b/src/TranslationUnit.cc @@ -95,6 +95,7 @@ std::vector clang::TranslationUnit::get_diagnostics() { for(unsigned c=0;c