From 66a3e71579c4ea629f31284e1d36604a214324d5 Mon Sep 17 00:00:00 2001
From: Roberto Raggi <roberto.raggi@nokia.com>
Date: Fri, 6 Mar 2009 10:20:15 +0100
Subject: [PATCH] Added ASTVisitor::getTokenStartPosition() and
 ASTVisitor::getTokenEndPosition().

---
 src/shared/cplusplus/ASTVisitor.cpp | 15 +++++++++++++++
 src/shared/cplusplus/ASTVisitor.h   |  9 +++++++++
 2 files changed, 24 insertions(+)

diff --git a/src/shared/cplusplus/ASTVisitor.cpp b/src/shared/cplusplus/ASTVisitor.cpp
index bee79230ead..2cc3d218c54 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 b1d3d1a49f6..64002b8a6c3 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; }
-- 
GitLab