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