* actually run the parse session */
| 60 | * actually run the parse session |
| 61 | */ |
| 62 | void runSession() |
| 63 | { |
| 64 | if (!m_session.unit()) { |
| 65 | qerr << "failed to parse code" << Qt::endl; |
| 66 | } |
| 67 | if (m_printTokens) { |
| 68 | CXTranslationUnit TU = m_session.unit(); |
| 69 | auto cursor = clang_getTranslationUnitCursor(TU); |
| 70 | CXSourceRange range = clang_getCursorExtent(cursor); |
| 71 | const ClangTokens tokens(TU, range); |
| 72 | for (CXToken token : tokens) { |
| 73 | CXString spelling = clang_getTokenSpelling(TU, token); |
| 74 | qout << "token= " << clang_getCString(spelling) << Qt::endl; |
| 75 | clang_disposeString(spelling); |
| 76 | } |
| 77 | } |
| 78 | |
| 79 | if (!m_session.unit()) { |
| 80 | qerr << "no AST tree could be generated" << Qt::endl; |
| 81 | exit(255); |
| 82 | return; |
| 83 | } |
| 84 | |
| 85 | qout << "AST tree successfully generated" << Qt::endl; |
| 86 | auto file = m_session.mainFile(); |
| 87 | |
| 88 | if (m_printAst) { |
| 89 | DebugVisitor visitor(&m_session); |
| 90 | visitor.visit(m_session.unit(), file); |
| 91 | } |
| 92 | |
| 93 | const auto problems = m_session.problemsForFile(file); |
| 94 | if (!problems.isEmpty()) { |
| 95 | qerr << "\nproblems encountered during parsing:" << Qt::endl; |
| 96 | for (const ProblemPointer& problem : problems) { |
| 97 | qerr << problem->toString() << Qt::endl; |
| 98 | } |
| 99 | } else { |
| 100 | qout << "no problems encountered during parsing" << Qt::endl; |
| 101 | } |
| 102 | } |
| 103 | |
| 104 | ClangParsingEnvironment environment(const QString& fileName) const |
| 105 | { |