diff --git a/src/shared/cplusplus/ASTVisitor.cpp b/src/shared/cplusplus/ASTVisitor.cpp index bee79230eadc2439d4c44f8473c17cdef64afc2d..2cc3d218c5414418a2b522f1b6bf3e49de55184a 100644 --- a/src/shared/cplusplus/ASTVisitor.cpp +++ b/src/shared/cplusplus/ASTVisitor.cpp @@ -69,6 +69,9 @@ Control *ASTVisitor::control() const TranslationUnit *ASTVisitor::translationUnit() const { return _control->translationUnit(); } +const Token &ASTVisitor::tokenAt(unsigned index) const +{ return translationUnit()->tokenAt(index); } + int ASTVisitor::tokenKind(unsigned index) const { return translationUnit()->tokenKind(index); } @@ -87,10 +90,22 @@ NumericLiteral *ASTVisitor::numericLiteral(unsigned index) const StringLiteral *ASTVisitor::stringLiteral(unsigned index) const { return translationUnit()->stringLiteral(index); } +void ASTVisitor::getPosition(unsigned offset, + unsigned *line, + unsigned *column, + StringLiteral **fileName) const +{ translationUnit()->getPosition(offset, line, column, fileName); } + void ASTVisitor::getTokenPosition(unsigned index, unsigned *line, unsigned *column, StringLiteral **fileName) const { translationUnit()->getTokenPosition(index, line, column, fileName); } +void ASTVisitor::getTokenStartPosition(unsigned index, unsigned *line, unsigned *column) const +{ getPosition(tokenAt(index).begin(), line, column); } + +void ASTVisitor::getTokenEndPosition(unsigned index, unsigned *line, unsigned *column) const +{ getPosition(tokenAt(index).end(), line, column); } + CPLUSPLUS_END_NAMESPACE diff --git a/src/shared/cplusplus/ASTVisitor.h b/src/shared/cplusplus/ASTVisitor.h index b1d3d1a49f6f1fc0d9717477dc61966ff47d09fe..64002b8a6c3e4b84e48a4e19297c11a9ae1e6064 100644 --- a/src/shared/cplusplus/ASTVisitor.h +++ b/src/shared/cplusplus/ASTVisitor.h @@ -67,6 +67,7 @@ public: Control *control() const; TranslationUnit *translationUnit() const; + const Token &tokenAt(unsigned index) const; int tokenKind(unsigned index) const; const char *spell(unsigned index) const; Identifier *identifier(unsigned index) const; @@ -74,11 +75,19 @@ public: NumericLiteral *numericLiteral(unsigned index) const; StringLiteral *stringLiteral(unsigned index) const; + void getPosition(unsigned offset, + unsigned *line, + unsigned *column = 0, + StringLiteral **fileName = 0) const; + void getTokenPosition(unsigned index, unsigned *line, unsigned *column = 0, StringLiteral **fileName = 0) const; + void getTokenStartPosition(unsigned index, unsigned *line, unsigned *column) const; + void getTokenEndPosition(unsigned index, unsigned *line, unsigned *column) const; + void accept(AST *ast); virtual bool preVisit(AST *) { return true; } diff --git a/src/shared/cplusplus/CPlusPlusForwardDeclarations.h b/src/shared/cplusplus/CPlusPlusForwardDeclarations.h index bc2decdf0f360a3774758c82a4bbf1732bcba7cf..d04147ad874bdf00563e767618939c40cbfac8ea 100644 --- a/src/shared/cplusplus/CPlusPlusForwardDeclarations.h +++ b/src/shared/cplusplus/CPlusPlusForwardDeclarations.h @@ -131,6 +131,7 @@ class Enum; class ForwardClassDeclaration; class Use; +class Token; CPLUSPLUS_END_NAMESPACE CPLUSPLUS_END_HEADER