Browse Source

Now storing the token ranges for optimisation.

merge-requests/37/head
eidheim 11 years ago
parent
commit
1276a723f2
  1. 3
      src/Diagnostic.cc
  2. 7
      src/Token.h
  3. 2
      tests/SourceLocation_H_Test.cc

3
src/Diagnostic.cc

@ -12,8 +12,7 @@ clang::Diagnostic::Diagnostic(CXTranslationUnit& cx_tu, CXDiagnostic& cx_diagnos
clang::Tokens tokens(cx_tu, range); clang::Tokens tokens(cx_tu, range);
if(tokens.size()==1) { if(tokens.size()==1) {
auto& token=tokens[0]; auto& token=tokens[0];
clang::SourceRange range=token.get_source_range(); auto locations=token.source_range.get_source_locations();
auto locations=range.get_source_locations();
this->range=SourceRange::get_range_data(location, locations.second); this->range=SourceRange::get_range_data(location, locations.second);
} }
} }

7
src/Token.h

@ -17,11 +17,11 @@ namespace clang {
class Token { class Token {
public: public:
explicit Token(CXTranslationUnit &cx_tu, CXToken &cx_token, CXCursor &cx_cursor): cx_tu(cx_tu), cx_token(cx_token), cx_cursor(cx_cursor) {}; Token(CXTranslationUnit &cx_tu, CXToken &cx_token, CXCursor &cx_cursor):
cx_tu(cx_tu), cx_token(cx_token), cx_cursor(cx_cursor), source_range(get_source_range()) {};
const TokenKind kind(); const TokenKind kind();
std::string get_token_spelling(); std::string get_token_spelling();
SourceLocation get_source_location(); SourceLocation get_source_location();
SourceRange get_source_range();
clang::Cursor get_cursor() {return clang::Cursor(cx_cursor);} clang::Cursor get_cursor() {return clang::Cursor(cx_cursor);}
bool has_type(); bool has_type();
std::string get_type(); std::string get_type();
@ -29,6 +29,9 @@ namespace clang {
CXTranslationUnit &cx_tu; CXTranslationUnit &cx_tu;
CXToken& cx_token; CXToken& cx_token;
CXCursor& cx_cursor; CXCursor& cx_cursor;
SourceRange source_range;
private:
SourceRange get_source_range();
}; };
} // namespace clang } // namespace clang
#endif // TOKEN_H_ #endif // TOKEN_H_

2
tests/SourceLocation_H_Test.cc

@ -10,7 +10,7 @@ BOOST_AUTO_TEST_CASE(source_location) {
clang::TranslationUnit tu(index, path); clang::TranslationUnit tu(index, path);
auto tokens=tu.get_tokens(0, 113); auto tokens=tu.get_tokens(0, 113);
clang::SourceRange token_range = (*tokens)[28].get_source_range(); clang::SourceRange token_range = (*tokens)[28].source_range;
unsigned token_start_line, token_start_column, token_start_offset, unsigned token_start_line, token_start_column, token_start_offset,
token_end_line, token_end_column, token_end_offset; token_end_line, token_end_column, token_end_offset;

Loading…
Cancel
Save