|
|
|
@ -3,12 +3,11 @@ |
|
|
|
using namespace std; |
|
|
|
using namespace std; |
|
|
|
|
|
|
|
|
|
|
|
clang::Tokens::Tokens(CXTranslationUnit &cx_tu, const SourceRange &range): cx_tu(cx_tu) { |
|
|
|
clang::Tokens::Tokens(CXTranslationUnit &cx_tu, const SourceRange &range): cx_tu(cx_tu) { |
|
|
|
|
|
|
|
|
|
|
|
clang_tokenize(cx_tu, range.cx_range, &cx_tokens, &num_tokens); |
|
|
|
clang_tokenize(cx_tu, range.cx_range, &cx_tokens, &num_tokens); |
|
|
|
cx_cursors.clear(); |
|
|
|
cx_cursors.clear(); |
|
|
|
cx_cursors.reserve(num_tokens); |
|
|
|
cx_cursors.reserve(num_tokens); |
|
|
|
clang_annotateTokens(cx_tu, cx_tokens, num_tokens, cx_cursors.data()); |
|
|
|
clang_annotateTokens(cx_tu, cx_tokens, num_tokens, cx_cursors.data()); |
|
|
|
for (int i = 0; i < num_tokens; i++) { |
|
|
|
for (unsigned i = 0; i < num_tokens; i++) { |
|
|
|
emplace_back(cx_tu, cx_tokens[i], cx_cursors[i]); |
|
|
|
emplace_back(cx_tu, cx_tokens[i], cx_cursors[i]); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
@ -22,10 +21,12 @@ clang::Tokens::~Tokens() { |
|
|
|
//Similar tokens defined as tokens with equal referenced cursors.
|
|
|
|
//Similar tokens defined as tokens with equal referenced cursors.
|
|
|
|
std::vector<std::pair<unsigned, unsigned> > clang::Tokens::get_similar_token_offsets(clang::Token& token) { |
|
|
|
std::vector<std::pair<unsigned, unsigned> > clang::Tokens::get_similar_token_offsets(clang::Token& token) { |
|
|
|
std::vector<std::pair<unsigned, unsigned> > offsets; |
|
|
|
std::vector<std::pair<unsigned, unsigned> > offsets; |
|
|
|
auto referenced_usr=token.get_cursor().get_referenced_usr(); |
|
|
|
auto referenced=token.get_cursor().get_referenced(); |
|
|
|
if(referenced_usr!="") { |
|
|
|
if(referenced) { |
|
|
|
|
|
|
|
auto referenced_usr=referenced.get_usr(); |
|
|
|
for(auto &a_token: *this) { |
|
|
|
for(auto &a_token: *this) { |
|
|
|
if(referenced_usr==a_token.get_cursor().get_referenced_usr() && token.get_token_spelling()==a_token.get_token_spelling()) { |
|
|
|
auto a_referenced=a_token.get_cursor().get_referenced(); |
|
|
|
|
|
|
|
if(a_referenced && referenced_usr==a_referenced.get_usr() && token.get_spelling()==a_token.get_spelling()) { |
|
|
|
offsets.emplace_back(a_token.offsets); |
|
|
|
offsets.emplace_back(a_token.offsets); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|