Browse Source

Slight optimization of Tokens::get_similar_token_offsets

merge-requests/37/head
eidheim 8 years ago
parent
commit
77cfc43d38
  1. 20
      src/Tokens.cc

20
src/Tokens.cc

@ -1,6 +1,7 @@
#include "Tokens.h"
#include "Utility.h"
#include <unordered_set>
#include <cstring>
clangmm::Tokens::Tokens(CXTranslationUnit &cx_tu, const SourceRange &range): cx_tu(cx_tu) {
clang_tokenize(cx_tu, range.cx_range, &cx_tokens, &num_tokens);
@ -58,12 +59,19 @@ std::vector<std::pair<clangmm::Offset, clangmm::Offset> > clangmm::Tokens::get_s
for(auto &token: *this) {
if(token.is_identifier()) {
auto referenced=token.get_cursor().get_referenced();
if(referenced && spelling==token.get_spelling()) {
auto referenced_usrs=referenced.get_all_usr_extended();
for(auto &usr: referenced_usrs) {
if(usrs.count(usr)) {
offsets.emplace_back(token.offsets);
break;
if(referenced) {
const char *strstr_ptr=nullptr;
auto cx_string=clang_getTokenSpelling(cx_tu, token.cx_token);
if(cx_string.data)
strstr_ptr=std::strstr(static_cast<const char*>(cx_string.data), spelling.c_str());
clang_disposeString(cx_string);
if(strstr_ptr) {
auto referenced_usrs=referenced.get_all_usr_extended();
for(auto &usr: referenced_usrs) {
if(usrs.count(usr)) {
offsets.emplace_back(token.offsets);
break;
}
}
}
}

Loading…
Cancel
Save