#include "Tokens.h" #include using namespace std; clang::Tokens::Tokens(clang::TranslationUnit *tu, clang::SourceRange *range) { clang_tokenize(tu->tu_, range->range_, &tokens_, &num_tokens_); for (int i = 0; i < num_tokens_; i++) { tks.push_back(clang::Token(tokens_[i])); } } 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_; } 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]); std::vector cursors; for(auto clang_cursor: clang_cursors) { cursors.emplace_back(); cursors.back().cursor_=clang_cursor; } for(int c=0;c