File indexing completed on 2024-05-19 04:41:36
0001 /* 0002 SPDX-FileCopyrightText: 2006 Andreas Pakulat <apaku@gmx.de> 0003 0004 SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #include "qmakedebugvisitor.h" 0008 0009 #include "qmakeparser.h" 0010 #include "qmakeast.h" 0011 #include "kdev-pg-token-stream.h" 0012 #include <debug.h> 0013 0014 namespace QMake { 0015 0016 DebugVisitor::DebugVisitor(QMake::Parser* parser) 0017 : m_out(stderr) 0018 , m_parser(parser) 0019 , indent(0) 0020 { 0021 } 0022 0023 QString DebugVisitor::getTokenInfo(qint64 idx) 0024 { 0025 qint64 line, col; 0026 QMake::Parser::Token token = m_parser->tokenStream->at(idx); 0027 m_parser->tokenStream->startPosition(idx, &line, &col); 0028 return QStringLiteral("%1,%2,%3").arg(line).arg(col).arg(m_parser->tokenText(token.begin, token.end).replace(QLatin1Char('\n'), QLatin1String("\\n"))); 0029 } 0030 0031 QString DebugVisitor::getIndent() 0032 { 0033 return QString().fill(QLatin1Char(' '), indent * 4); 0034 } 0035 0036 void DebugVisitor::visitArgumentList(ArgumentListAst* node) 0037 { 0038 m_out << getIndent() << "BEGIN(arg_list)(" << getTokenInfo(node->startToken) << ")\n"; 0039 indent++; 0040 DefaultVisitor::visitArgumentList(node); 0041 indent--; 0042 m_out << getIndent() << "END(arg_list)(" << getTokenInfo(node->startToken) << ")\n"; 0043 } 0044 0045 void DebugVisitor::visitOrOperator(OrOperatorAst* node) 0046 { 0047 m_out << getIndent() << "BEGIN(or_op)(" << getTokenInfo(node->startToken) << ")\n"; 0048 indent++; 0049 DefaultVisitor::visitOrOperator(node); 0050 indent--; 0051 m_out << getIndent() << "END(or_op)(" << getTokenInfo(node->endToken) << ")\n"; 0052 } 0053 0054 void DebugVisitor::visitScope(ScopeAst* node) 0055 { 0056 m_out << getIndent() << "BEGIN(scope)(" << getTokenInfo(node->startToken) << ")\n"; 0057 indent++; 0058 visitNode(node->functionArguments); 0059 visitNode(node->orOperator); 0060 visitNode(node->ifElse); 0061 indent--; 0062 m_out << getIndent() << "END(scope)(" << getTokenInfo(node->endToken) << ")\n"; 0063 } 0064 0065 void DebugVisitor::visitIfElse(IfElseAst* node) 0066 { 0067 m_out << getIndent() << "BEGIN(scope)(" << getTokenInfo(node->startToken) << ")\n"; 0068 indent++; 0069 visitNode(node->ifBody); 0070 if (node->elseBody) { 0071 m_out << getIndent() << "ELSE:\n"; 0072 visitNode(node->elseBody); 0073 } 0074 indent--; 0075 m_out << getIndent() << "END(scope)(" << getTokenInfo(node->endToken) << ")\n"; 0076 } 0077 0078 void DebugVisitor::visitFunctionArguments(FunctionArgumentsAst* node) 0079 { 0080 m_out << getIndent() << "BEGIN(function_args)(" << getTokenInfo(node->startToken) << ")\n"; 0081 indent++; 0082 DefaultVisitor::visitFunctionArguments(node); 0083 indent--; 0084 m_out << getIndent() << "END(function_args)(" << getTokenInfo(node->endToken) << ")\n"; 0085 } 0086 0087 void DebugVisitor::visitOp(OpAst* node) 0088 { 0089 m_out << getIndent() << "BEGIN(op)(" << getTokenInfo(node->startToken) << ")\n"; 0090 indent++; 0091 m_out << getIndent() << "optoken =" << getTokenInfo(node->optoken) << '\n'; 0092 DefaultVisitor::visitOp(node); 0093 indent--; 0094 m_out << getIndent() << "END(op)(" << getTokenInfo(node->endToken) << ")\n"; 0095 } 0096 0097 void DebugVisitor::visitProject(ProjectAst* node) 0098 { 0099 m_out << getIndent() << "BEGIN(project)(" << getTokenInfo(node->startToken) << ")\n"; 0100 indent++; 0101 DefaultVisitor::visitProject(node); 0102 indent--; 0103 m_out << getIndent() << "END(project)(" << getTokenInfo(node->endToken) << ")\n"; 0104 } 0105 0106 void DebugVisitor::visitScopeBody(ScopeBodyAst* node) 0107 { 0108 m_out << getIndent() << "BEGIN(scope_body)(" << getTokenInfo(node->startToken) << ")\n"; 0109 indent++; 0110 DefaultVisitor::visitScopeBody(node); 0111 indent--; 0112 m_out << getIndent() << "END(scope_body)(" << getTokenInfo(node->endToken) << ")\n"; 0113 } 0114 0115 void DebugVisitor::visitStatement(StatementAst* node) 0116 { 0117 m_out << getIndent() << "BEGIN(stmt)(" << getTokenInfo(node->startToken) << ")\n"; 0118 indent++; 0119 m_out << getIndent() << "isExclam=" << node->isExclam << '\n'; 0120 if (!node->isNewline) { 0121 m_out << getIndent() << "id=" << getTokenInfo(node->id) << '\n'; 0122 } 0123 DefaultVisitor::visitStatement(node); 0124 indent--; 0125 m_out << getIndent() << "END(stmt)(" << getTokenInfo(node->endToken) << ")\n"; 0126 } 0127 0128 void DebugVisitor::visitValue(ValueAst* node) 0129 { 0130 m_out << getIndent() << "BEGIN(value)(" << getTokenInfo(node->startToken) << ")\n"; 0131 indent++; 0132 m_out << getIndent() << "value=" << getTokenInfo(node->value) << '\n'; 0133 DefaultVisitor::visitValue(node); 0134 indent--; 0135 m_out << getIndent() << "END(value)(" << getTokenInfo(node->endToken) << ")\n"; 0136 } 0137 0138 void DebugVisitor::visitValueList(ValueListAst* node) 0139 { 0140 m_out << getIndent() << "BEGIN(value_list)(" << getTokenInfo(node->startToken) << ")\n"; 0141 indent++; 0142 DefaultVisitor::visitValueList(node); 0143 indent--; 0144 m_out << getIndent() << "END(value_list)(" << getTokenInfo(node->endToken) << ")\n"; 0145 } 0146 0147 void DebugVisitor::visitVariableAssignment(VariableAssignmentAst* node) 0148 { 0149 m_out << getIndent() << "BEGIN(variable_assignment)(" << getTokenInfo(node->startToken) << ")\n"; 0150 indent++; 0151 DefaultVisitor::visitVariableAssignment(node); 0152 indent--; 0153 m_out << getIndent() << "END(variable_assignment)(" << getTokenInfo(node->endToken) << ")\n"; 0154 } 0155 0156 void DebugVisitor::visitItem(ItemAst* node) 0157 { 0158 0159 m_out << getIndent() << "BEGIN(item)(" << getTokenInfo(node->startToken) << ")\n"; 0160 indent++; 0161 m_out << getIndent() << "id=" << getTokenInfo(node->id) << '\n'; 0162 DefaultVisitor::visitItem(node); 0163 indent--; 0164 m_out << getIndent() << "END(item)(" << getTokenInfo(node->endToken) << ")\n"; 0165 } 0166 }