Browse Source

Cleanup.

merge-requests/37/head
eidheim 11 years ago
parent
commit
ac252c8ef4
  1. 2
      src/Diagnostic.cc
  2. 2
      src/Diagnostic.h
  3. 2
      src/Token.h
  4. 29
      src/Tokens.cc
  5. 3
      src/Tokens.h
  6. 1
      src/TranslationUnit.cc

2
src/Diagnostic.cc

@ -2,7 +2,7 @@
#include "SourceLocation.h" #include "SourceLocation.h"
#include "Tokens.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=clang_getDiagnosticSeverity(clang_diagnostic);
severity_spelling=get_severity_spelling(severity); severity_spelling=get_severity_spelling(severity);
spelling=clang_getCString(clang_getDiagnosticSpelling(clang_diagnostic)); spelling=clang_getCString(clang_getDiagnosticSpelling(clang_diagnostic));

2
src/Diagnostic.h

@ -13,7 +13,7 @@ namespace clang {
unsigned line, column, offset; 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); static const std::string get_severity_spelling(unsigned severity);

2
src/Token.h

@ -25,7 +25,7 @@ namespace clang {
friend SourceRange; friend SourceRange;
friend SourceLocation; friend SourceLocation;
friend Tokens; friend Tokens;
CXToken token_; const CXToken& token_;
}; };
} // namespace clang } // namespace clang
#endif // TOKEN_H_ #endif // TOKEN_H_

29
src/Tokens.cc

@ -2,7 +2,7 @@
#include <iostream> #include <iostream>
using namespace std; 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_, clang_tokenize(tu->tu_,
range->range_, range->range_,
&tokens_, &tokens_,
@ -13,22 +13,16 @@ clang::Tokens::Tokens(clang::TranslationUnit *tu, clang::SourceRange *range) {
} }
clang::Tokens::~Tokens() { clang::Tokens::~Tokens() {
// instead of using clang_disposeTokens() the implementation clang_disposeTokens(tu.tu_, tokens_, tks.size());
// of the latter method is just free(token_) the same as
// delete(tokens_) eliminating the need of tu*
delete tokens_;
} }
std::vector<clang::Token>& clang::Tokens::tokens() { std::vector<clang::Token>& clang::Tokens::tokens() {
return tks; return tks;
} }
std::vector<clang::Cursor> clang::Tokens::get_token_cursors(clang::TranslationUnit *tu) { void clang::Tokens::get_token_types(clang::TranslationUnit *tu) {
std::vector<CXToken> clang_tokens; std::vector<CXCursor> clang_cursors(tks.size());
for(auto& token: tks) clang_annotateTokens(tu->tu_, tokens_, tks.size(), clang_cursors.data());
clang_tokens.emplace_back(token.token_);
std::vector<CXCursor> clang_cursors(clang_tokens.size());
clang_annotateTokens(tu->tu_, clang_tokens.data(), clang_tokens.size(), &clang_cursors.data()[0]);
std::vector<clang::Cursor> cursors; std::vector<clang::Cursor> cursors;
for(auto clang_cursor: clang_cursors) { for(auto clang_cursor: clang_cursors) {
@ -37,15 +31,19 @@ std::vector<clang::Cursor> clang::Tokens::get_token_cursors(clang::TranslationUn
} }
for(int c=0;c<tks.size();c++) { for(int c=0;c<tks.size();c++) {
auto referenced=clang_getCursorReferenced(cursors[c].cursor_); auto referenced=clang_getCursorReferenced(clang_cursors[c]);
if(!clang_Cursor_isNull(referenced)) { if(!clang_Cursor_isNull(referenced)) {
auto type=clang_getCursorType(referenced); auto type=clang_getCursorType(referenced);
std::string spelling=clang_getCString(clang_getTypeSpelling(type)); auto cxstr=clang_getTypeSpelling(type);
std::string spelling=clang_getCString(cxstr);
clang_disposeString(cxstr);
std::string auto_end=""; std::string auto_end="";
if(spelling.size()>=4 && spelling.substr(0, 4)=="auto") { if(spelling.size()>=4 && spelling.substr(0, 4)=="auto") {
auto_end=spelling.substr(4); auto_end=spelling.substr(4);
auto type=clang_getCanonicalType(clang_getCursorType(cursors[c].cursor_)); auto type=clang_getCanonicalType(clang_getCursorType(clang_cursors[c]));
spelling=clang_getCString(clang_getTypeSpelling(type)); auto cxstr=clang_getTypeSpelling(type);
spelling=clang_getCString(cxstr);
clang_disposeString(cxstr);
if(spelling.find(" ")==std::string::npos) if(spelling.find(" ")==std::string::npos)
spelling+=auto_end; spelling+=auto_end;
} }
@ -88,5 +86,4 @@ std::vector<clang::Cursor> clang::Tokens::get_token_cursors(clang::TranslationUn
} }
}*/ }*/
} }
return cursors;
} }

3
src/Tokens.h

@ -10,11 +10,12 @@ namespace clang {
Tokens(TranslationUnit *tu, SourceRange *range); Tokens(TranslationUnit *tu, SourceRange *range);
~Tokens(); ~Tokens();
std::vector<Token>& tokens(); std::vector<Token>& tokens();
std::vector<clang::Cursor> get_token_cursors(clang::TranslationUnit *tu); void get_token_types(clang::TranslationUnit *tu);
private: private:
std::vector<clang::Token> tks; std::vector<clang::Token> tks;
CXToken *tokens_; CXToken *tokens_;
unsigned num_tokens_; unsigned num_tokens_;
TranslationUnit& tu;
}; };
} // namespace clang } // namespace clang
#endif // TOKENS_H_ #endif // TOKENS_H_

1
src/TranslationUnit.cc

@ -95,6 +95,7 @@ std::vector<clang::Diagnostic> clang::TranslationUnit::get_diagnostics() {
for(unsigned c=0;c<clang_getNumDiagnostics(tu_);c++) { for(unsigned c=0;c<clang_getNumDiagnostics(tu_);c++) {
CXDiagnostic clang_diagnostic=clang_getDiagnostic(tu_, c); CXDiagnostic clang_diagnostic=clang_getDiagnostic(tu_, c);
diagnostics.emplace_back(clang::Diagnostic(*this, clang_diagnostic)); diagnostics.emplace_back(clang::Diagnostic(*this, clang_diagnostic));
clang_disposeDiagnostic(clang_diagnostic);
} }
return diagnostics; return diagnostics;
} }

Loading…
Cancel
Save