| 110 | } |
| 111 | |
| 112 | clang::CharSourceRange |
| 113 | getMacroFunctionExpansionRange(const clang::SourceManager &SrcManager, |
| 114 | const SourceLocation &Loc) { |
| 115 | auto FI = SrcManager.getFileID(Loc); |
| 116 | if (FI.isInvalid()) |
| 117 | return clang::CharSourceRange(); |
| 118 | |
| 119 | bool Validity = true; |
| 120 | const auto &SLE = SrcManager.getSLocEntry(FI, &Validity); |
| 121 | if (!Validity || !SLE.isExpansion()) |
| 122 | return clang::CharSourceRange(); |
| 123 | |
| 124 | const auto &ExpInfo = SLE.getExpansion(); |
| 125 | if (!ExpInfo.isFunctionMacroExpansion()) |
| 126 | return clang::CharSourceRange(); |
| 127 | return ExpInfo.getExpansionLocRange(); |
| 128 | } |
| 129 | |
| 130 | SourceLocation getTopMacroCallerLoc(const DynTypedNode &Node, |
| 131 | const SourceManager &SrcManager) { |
no outgoing calls