File indexing completed on 2024-05-19 15:42:34

0001 /*
0002     SPDX-FileCopyrightText: 2007 Andreas Pakulat <apaku@gmx.de>
0003     SPDX-FileCopyrightText: 2010 Sven Brauch <svenbrauch@googlemail.com>
0004     SPDX-FileCopyrightText: 2012 Patrick Spendrin <ps_ml@gmx.de>
0005 
0006     SPDX-License-Identifier: LGPL-2.0-or-later
0007 */
0008 
0009 #include "astdefaultvisitor.h"
0010 #include "ast.h"
0011 
0012 namespace Python
0013 {
0014 
0015 void free_ast_recursive(CodeAst *node)
0016 {
0017     AstFreeVisitor v;
0018     v.visitCode(node);
0019 }
0020 
0021 AstDefaultVisitor::AstDefaultVisitor() { }
0022 AstDefaultVisitor::~AstDefaultVisitor() { }
0023 
0024 // The Ast "ends" here, those don't have child nodes
0025 // note that Identifier is not a node in this Ast
0026 void AstDefaultVisitor::visitNameConstant(NameConstantAst* node) { Q_UNUSED(node); }
0027 void AstDefaultVisitor::visitPass(PassAst* node) { Q_UNUSED(node); }
0028 void AstDefaultVisitor::visitNonlocal(NonlocalAst* node) { Q_UNUSED(node); }
0029 void AstDefaultVisitor::visitBreak(BreakAst* node) { Q_UNUSED(node); }
0030 void AstDefaultVisitor::visitContinue(ContinueAst* node) { Q_UNUSED(node); }
0031 void AstDefaultVisitor::visitEllipsis(EllipsisAst* node) { Q_UNUSED(node); }
0032 void AstDefaultVisitor::visitNumber(NumberAst* node) { Q_UNUSED(node); }
0033 void AstDefaultVisitor::visitString(StringAst* node) { Q_UNUSED(node); }
0034 void AstDefaultVisitor::visitBytes(BytesAst* node) { Q_UNUSED(node); }
0035 void AstDefaultVisitor::visitIdentifier(Identifier* node) { Q_UNUSED(node); }
0036 
0037 void AstDefaultVisitor::visitJoinedString(JoinedStringAst* node) {
0038 //TODO: Fix range/context/??? bugs, then re-enable this.
0039     Q_UNUSED(node);
0040 //     foreach (Ast* value, node->values) {
0041 //         visitNode(value);
0042 //     }
0043 }
0044 
0045 void AstDefaultVisitor::visitFormattedValue(FormattedValueAst* node) {
0046 // TODO: Fix range issues, then re-enable (if required)
0047     Q_UNUSED(node);
0048 //     visitNode(node->value);
0049 //     visitNode(node->formatSpec);
0050 }
0051 
0052 void AstDefaultVisitor::visitStarred(StarredAst* node) {
0053     visitNode(node->value);
0054 }
0055 
0056 void AstDefaultVisitor::visitArg(ArgAst* node) {
0057     visitNode(node->annotation);
0058     visitNode(node->argumentName);
0059     visitIdentifier(node->argumentName);
0060 }
0061 
0062 void AstDefaultVisitor::visitAlias(AliasAst* node) {
0063     visitIdentifier(node->name);
0064     visitIdentifier(node->asName);
0065 }
0066 
0067 void AstDefaultVisitor::visitName(NameAst* node) {
0068     visitIdentifier(node->identifier);
0069 }
0070 
0071 void AstDefaultVisitor::visitGlobal(GlobalAst* node) {
0072     visitNodeList(node->names);
0073 }
0074 
0075 void AstDefaultVisitor::visitCode(CodeAst* node)
0076 {
0077     visitNodeList(node->body);
0078     visitIdentifier(node->name);
0079 }
0080 
0081 void AstDefaultVisitor::visitExpression(ExpressionAst* node)
0082 {
0083     visitNode(node->value);
0084 }
0085 
0086 void AstDefaultVisitor::visitYieldFrom(YieldFromAst* node)
0087 {
0088     visitNode(node->value);
0089 }
0090 
0091 void AstDefaultVisitor::visitAssertion(AssertionAst* node)
0092 {
0093     visitNode(node->condition);
0094     visitNode(node->message);
0095 }
0096 
0097 void AstDefaultVisitor::visitDelete(DeleteAst* node)
0098 {
0099     visitNodeList(node->targets);
0100 }
0101 
0102 void AstDefaultVisitor::visitFor(ForAst* node)
0103 {
0104     visitNode(node->target);
0105     visitNode(node->iterator);
0106     visitNodeList(node->body);
0107     visitNodeList(node->orelse);
0108 }
0109 
0110 void AstDefaultVisitor::visitGeneratorExpression(GeneratorExpressionAst* node)
0111 {
0112     visitNode(node->element);
0113     visitNodeList(node->generators);
0114 }
0115 
0116 void AstDefaultVisitor::visitIf(IfAst* node)
0117 {
0118     visitNode(node->condition);
0119     visitNodeList(node->body);
0120     visitNodeList(node->orelse);
0121 }
0122 
0123 void AstDefaultVisitor::visitIfExpression(IfExpressionAst* node)
0124 {
0125     visitNode(node->condition);
0126     visitNode(node->body);
0127     visitNode(node->orelse);
0128 }
0129 
0130 void AstDefaultVisitor::visitImport(ImportAst* node)
0131 {
0132     visitNodeList(node->names);
0133 }
0134 
0135 void AstDefaultVisitor::visitImportFrom(ImportFromAst* node)
0136 {
0137     visitNodeList(node->names);
0138     visitIdentifier(node->module);
0139 }
0140 
0141 void AstDefaultVisitor::visitLambda(LambdaAst* node)
0142 {
0143     visitNode(node->arguments);
0144     visitNode(node->body);
0145 }
0146 
0147 void AstDefaultVisitor::visitRaise(RaiseAst* node)
0148 {
0149     visitNode(node->type);
0150 }
0151 
0152 void AstDefaultVisitor::visitReturn(ReturnAst* node)
0153 {
0154     visitNode(node->value);
0155 }
0156 
0157 void AstDefaultVisitor::visitAwait(AwaitAst* node) {
0158     visitNode(node->value);
0159 }
0160 
0161 void AstDefaultVisitor::visitSet(SetAst* node)
0162 {
0163     visitNodeList(node->elements);
0164 }
0165 
0166 void AstDefaultVisitor::visitSetComprehension(SetComprehensionAst* node)
0167 {
0168     visitNode(node->element);
0169     visitNodeList(node->generators);
0170 }
0171 
0172 void AstDefaultVisitor::visitSlice(SliceAst* node)
0173 {
0174     visitNode(node->lower);
0175     visitNode(node->upper);
0176     visitNode(node->step);
0177 }
0178 
0179 void AstDefaultVisitor::visitSubscript(SubscriptAst* node)
0180 {
0181     visitNode(node->value);
0182     visitNode(node->slice);
0183 }
0184 
0185 void AstDefaultVisitor::visitTry(TryAst* node)
0186 {
0187     visitNodeList(node->body);
0188     visitNodeList(node->handlers);
0189     visitNodeList(node->orelse);
0190     visitNodeList(node->finally);
0191 }
0192 
0193 void AstDefaultVisitor::visitTryStar(TryStarAst* node)
0194 {
0195     visitNodeList(node->body);
0196     visitNodeList(node->handlers);
0197     visitNodeList(node->orelse);
0198     visitNodeList(node->finally);
0199 }
0200 
0201 void AstDefaultVisitor::visitTuple(TupleAst* node)
0202 {
0203     visitNodeList(node->elements);
0204 }
0205 
0206 void AstDefaultVisitor::visitUnaryOperation(UnaryOperationAst* node)
0207 {
0208     visitNode(node->operand);
0209 }
0210 
0211 void AstDefaultVisitor::visitWhile(WhileAst* node)
0212 {
0213     visitNode(node->condition);
0214     visitNodeList(node->body);
0215     visitNodeList(node->orelse);
0216 }
0217 
0218 void AstDefaultVisitor::visitWith(WithAst* node)
0219 {
0220     visitNodeList(node->items);
0221     visitNodeList(node->body);
0222 }
0223 
0224 void AstDefaultVisitor::visitWithItem(WithItemAst* node)
0225 {
0226     visitNode(node->contextExpression);
0227     visitNode(node->optionalVars);
0228 }
0229 
0230 void AstDefaultVisitor::visitYield(YieldAst* node)
0231 {
0232     visitNode(node->value);
0233 }
0234 
0235 void AstDefaultVisitor::visitList(ListAst* node)
0236 {
0237     visitNodeList(node->elements);
0238 }
0239 
0240 void AstDefaultVisitor::visitListComprehension(ListComprehensionAst* node)
0241 {
0242     visitNode(node->element);
0243     visitNodeList(node->generators);
0244 }
0245 
0246 void AstDefaultVisitor::visitExceptionHandler(ExceptionHandlerAst* node)
0247 {
0248     visitNode(node->type);
0249     visitNode(node->name);
0250     visitNodeList(node->body);
0251 }
0252 
0253 void AstDefaultVisitor::visitDict(DictAst* node)
0254 {
0255     visitNodeList(node->keys);
0256     visitNodeList(node->values);
0257 }
0258 
0259 void AstDefaultVisitor::visitDictionaryComprehension(DictionaryComprehensionAst* node)
0260 {
0261     visitNode(node->key);
0262     visitNode(node->value);
0263     visitNodeList(node->generators);
0264 }
0265 
0266 void AstDefaultVisitor::visitAugmentedAssignment(AugmentedAssignmentAst* node)
0267 {
0268     visitNode(node->target);
0269     visitNode(node->value);
0270 }
0271 
0272 void AstDefaultVisitor::visitAnnotationAssignment(AnnotationAssignmentAst* node)
0273 {
0274     visitNode(node->target);
0275     visitNode(node->annotation);
0276     visitNode(node->value);
0277 }
0278 
0279 void AstDefaultVisitor::visitAssignmentExpression(AssignmentExpressionAst* node)
0280 {
0281     visitNode(node->target);
0282     visitNode(node->value);
0283 }
0284 
0285 void AstDefaultVisitor::visitBinaryOperation(BinaryOperationAst* node)
0286 {
0287     visitNode(node->lhs);
0288     visitNode(node->rhs);
0289 }
0290 
0291 void AstDefaultVisitor::visitBooleanOperation(BooleanOperationAst* node)
0292 {
0293     visitNodeList(node->values);
0294 }
0295 
0296 void AstDefaultVisitor::visitClassDefinition(ClassDefinitionAst* node)
0297 {
0298     visitNodeList(node->baseClasses);
0299     visitNodeList(node->body);
0300     visitNodeList(node->decorators);
0301     visitIdentifier(node->name);
0302 }
0303 
0304 void AstDefaultVisitor::visitCompare(CompareAst* node)
0305 {
0306     visitNode(node->leftmostElement);
0307     visitNodeList(node->comparands);
0308 }
0309 
0310 void AstDefaultVisitor::visitComprehension(ComprehensionAst* node)
0311 {
0312     visitNode(node->target);
0313     visitNode(node->iterator);
0314     visitNodeList(node->conditions);
0315 }
0316 
0317 void AstDefaultVisitor::visitAssignment(AssignmentAst* node)
0318 {
0319     visitNodeList(node->targets);
0320     visitNode(node->value);
0321 }
0322 
0323 void AstDefaultVisitor::visitCall(CallAst* node)
0324 {
0325     visitNode(node->function);
0326     visitNodeList(node->arguments);
0327     visitNodeList(node->keywords);
0328 }
0329 
0330 void AstDefaultVisitor::visitFunctionDefinition(FunctionDefinitionAst* node)
0331 {
0332     visitNodeList(node->decorators);
0333     visitNode(node->arguments);
0334     visitNode(node->returns);
0335     visitNodeList(node->body);
0336     visitIdentifier(node->name);
0337 }
0338 
0339 void AstDefaultVisitor::visitAttribute(AttributeAst* node)
0340 {
0341     visitNode(node->value);
0342     visitIdentifier(node->attribute);
0343 }
0344 
0345 void AstDefaultVisitor::visitKeyword(KeywordAst* node)
0346 {
0347     visitNode(node->value);
0348     visitIdentifier(node->argumentName);
0349 }
0350 
0351 void AstDefaultVisitor::visitArguments(ArgumentsAst* node)
0352 {
0353     visitNodeList(node->arguments);
0354     visitNodeList(node->defaultValues);
0355 }
0356 
0357 void AstDefaultVisitor::visitMatch(MatchAst* node)
0358 {
0359     visitNode(node->subject);
0360     visitNodeList(node->cases);
0361 }
0362 
0363 void AstDefaultVisitor::visitMatchCase(MatchCaseAst* node)
0364 {
0365     visitNode(node->pattern);
0366     visitNode(node->guard);
0367     visitNodeList(node->body);
0368 }
0369 
0370 void AstDefaultVisitor::visitMatchValue(MatchValueAst* node)
0371 {
0372     visitNode(node->value);
0373 }
0374 
0375 void AstDefaultVisitor::visitMatchSingleton(MatchSingletonAst* node)
0376 {
0377     Q_UNUSED(node);
0378 }
0379 
0380 void AstDefaultVisitor::visitMatchSequence(MatchSequenceAst* node)
0381 {
0382     visitNodeList(node->patterns);
0383 }
0384 
0385 void AstDefaultVisitor::visitMatchMapping(MatchMappingAst* node)
0386 {
0387     visitNodeList(node->keys);
0388     visitNode(node->rest);
0389     visitNodeList(node->patterns);
0390 }
0391 
0392 
0393 void AstDefaultVisitor::visitMatchClass(MatchClassAst* node)
0394 {
0395     visitNode(node->cls);
0396     visitNodeList(node->patterns);
0397     visitNode(node->kwdAttrs);
0398     visitNodeList(node->kwdPatterns);
0399 }
0400 
0401 
0402 void AstDefaultVisitor::visitMatchStar(MatchStarAst* node)
0403 {
0404     visitNode(node->name);
0405 }
0406 
0407 void AstDefaultVisitor::visitMatchAs(MatchAsAst* node)
0408 {
0409     visitNode(node->pattern);
0410     visitNode(node->name);
0411 }
0412 
0413 void AstDefaultVisitor::visitMatchOr(MatchOrAst* node)
0414 {
0415     visitNodeList(node->patterns);
0416 }
0417 
0418 }
0419