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 }