From 3506e42ab67eef41a1f27e180e7c552a2ffff7bb Mon Sep 17 00:00:00 2001 From: Aaron Puchert Date: Tue, 9 Nov 2021 21:46:56 +0100 Subject: [PATCH] Comment AST: Factor out function type extraction in DeclInfo::fill (NFC) Reviewed By: gribozavr2 Differential Revision: https://reviews.llvm.org/D111262 --- clang/lib/AST/Comment.cpp | 59 ++++++++++++++--------------------------------- 1 file changed, 17 insertions(+), 42 deletions(-) diff --git a/clang/lib/AST/Comment.cpp b/clang/lib/AST/Comment.cpp index a02cc9d1..94f6546 100644 --- a/clang/lib/AST/Comment.cpp +++ b/clang/lib/AST/Comment.cpp @@ -221,6 +221,7 @@ void DeclInfo::fill() { CurrentDecl = CommentDecl; Decl::Kind K = CommentDecl->getKind(); + const TypeSourceInfo *TSI = nullptr; switch (K) { default: // Defaults are should be good for declarations we don't handle explicitly. @@ -297,72 +298,46 @@ void DeclInfo::fill() { case Decl::EnumConstant: case Decl::ObjCIvar: case Decl::ObjCAtDefsField: - case Decl::ObjCProperty: { - const TypeSourceInfo *TSI; + case Decl::ObjCProperty: if (const auto *VD = dyn_cast(CommentDecl)) TSI = VD->getTypeSourceInfo(); else if (const auto *PD = dyn_cast(CommentDecl)) TSI = PD->getTypeSourceInfo(); - else - TSI = nullptr; - if (TSI) { - TypeLoc TL = TSI->getTypeLoc().getUnqualifiedLoc(); - FunctionTypeLoc FTL; - if (getFunctionTypeLoc(TL, FTL)) { - ParamVars = FTL.getParams(); - ReturnType = FTL.getReturnLoc().getType(); - } - } Kind = VariableKind; break; - } case Decl::Namespace: Kind = NamespaceKind; break; case Decl::TypeAlias: - case Decl::Typedef: { + case Decl::Typedef: Kind = TypedefKind; - // If this is a typedef / using to something we consider a function, extract - // arguments and return type. - const TypeSourceInfo *TSI = - K == Decl::Typedef - ? cast(CommentDecl)->getTypeSourceInfo() - : cast(CommentDecl)->getTypeSourceInfo(); - if (!TSI) - break; - TypeLoc TL = TSI->getTypeLoc().getUnqualifiedLoc(); - FunctionTypeLoc FTL; - if (getFunctionTypeLoc(TL, FTL)) { - Kind = FunctionKind; - ParamVars = FTL.getParams(); - ReturnType = FTL.getReturnLoc().getType(); - } + TSI = cast(CommentDecl)->getTypeSourceInfo(); break; - } case Decl::TypeAliasTemplate: { const TypeAliasTemplateDecl *TAT = cast(CommentDecl); Kind = TypedefKind; TemplateKind = Template; TemplateParameters = TAT->getTemplateParameters(); - TypeAliasDecl *TAD = TAT->getTemplatedDecl(); - if (!TAD) - break; + if (TypeAliasDecl *TAD = TAT->getTemplatedDecl()) + TSI = TAD->getTypeSourceInfo(); + break; + } + case Decl::Enum: + Kind = EnumKind; + break; + } - const TypeSourceInfo *TSI = TAD->getTypeSourceInfo(); - if (!TSI) - break; + // If the type is a typedef / using to something we consider a function, + // extract arguments and return type. + if (TSI) { TypeLoc TL = TSI->getTypeLoc().getUnqualifiedLoc(); FunctionTypeLoc FTL; if (getFunctionTypeLoc(TL, FTL)) { - Kind = FunctionKind; + if (Kind == TypedefKind) + Kind = FunctionKind; ParamVars = FTL.getParams(); ReturnType = FTL.getReturnLoc().getType(); } - break; - } - case Decl::Enum: - Kind = EnumKind; - break; } IsFilled = true; -- 2.7.4