ASTVisitor.cpp 3.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. // Copyright (c) 2008 Roberto Raggi <[email protected]>
  2. //
  3. // Permission is hereby granted, free of charge, to any person obtaining a copy
  4. // of this software and associated documentation files (the "Software"), to deal
  5. // in the Software without restriction, including without limitation the rights
  6. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  7. // copies of the Software, and to permit persons to whom the Software is
  8. // furnished to do so, subject to the following conditions:
  9. //
  10. // The above copyright notice and this permission notice shall be included in
  11. // all copies or substantial portions of the Software.
  12. //
  13. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  14. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  15. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  16. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  17. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  18. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  19. // THE SOFTWARE.
  20. #include "ASTVisitor.h"
  21. #include "AST.h"
  22. #include "TranslationUnit.h"
  23. #include "Control.h"
  24. using namespace CPlusPlus;
  25. ASTVisitor::ASTVisitor(TranslationUnit *translationUnit)
  26. : _translationUnit(translationUnit)
  27. { }
  28. ASTVisitor::~ASTVisitor()
  29. { }
  30. void ASTVisitor::accept(AST *ast)
  31. { AST::accept(ast, this); }
  32. Control *ASTVisitor::control() const
  33. {
  34. if (_translationUnit)
  35. return _translationUnit->control();
  36. return 0;
  37. }
  38. TranslationUnit *ASTVisitor::translationUnit() const
  39. { return _translationUnit; }
  40. void ASTVisitor::setTranslationUnit(TranslationUnit *translationUnit)
  41. { _translationUnit = translationUnit; }
  42. unsigned ASTVisitor::tokenCount() const
  43. { return translationUnit()->tokenCount(); }
  44. const Token &ASTVisitor::tokenAt(unsigned index) const
  45. { return translationUnit()->tokenAt(index); }
  46. int ASTVisitor::tokenKind(unsigned index) const
  47. { return translationUnit()->tokenKind(index); }
  48. const char *ASTVisitor::spell(unsigned index) const
  49. { return translationUnit()->spell(index); }
  50. const Identifier *ASTVisitor::identifier(unsigned index) const
  51. { return translationUnit()->identifier(index); }
  52. const Literal *ASTVisitor::literal(unsigned index) const
  53. { return translationUnit()->literal(index); }
  54. const NumericLiteral *ASTVisitor::numericLiteral(unsigned index) const
  55. { return translationUnit()->numericLiteral(index); }
  56. const StringLiteral *ASTVisitor::stringLiteral(unsigned index) const
  57. { return translationUnit()->stringLiteral(index); }
  58. void ASTVisitor::getPosition(unsigned offset,
  59. unsigned *line,
  60. unsigned *column,
  61. const StringLiteral **fileName) const
  62. { translationUnit()->getPosition(offset, line, column, fileName); }
  63. void ASTVisitor::getTokenPosition(unsigned index,
  64. unsigned *line,
  65. unsigned *column,
  66. const StringLiteral **fileName) const
  67. { translationUnit()->getTokenPosition(index, line, column, fileName); }
  68. void ASTVisitor::getTokenStartPosition(unsigned index, unsigned *line, unsigned *column) const
  69. { getPosition(tokenAt(index).utf16charsBegin(), line, column); }
  70. void ASTVisitor::getTokenEndPosition(unsigned index, unsigned *line, unsigned *column) const
  71. { getPosition(tokenAt(index).utf16charsEnd(), line, column); }