diff options
Diffstat (limited to 'clang/lib/Sema/TreeTransform.h')
| -rw-r--r-- | clang/lib/Sema/TreeTransform.h | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/clang/lib/Sema/TreeTransform.h b/clang/lib/Sema/TreeTransform.h index b1b2a911c22..aa5f6452759 100644 --- a/clang/lib/Sema/TreeTransform.h +++ b/clang/lib/Sema/TreeTransform.h @@ -883,6 +883,12 @@ public: return SemaRef.Context.getTypeDeclType(Typedef); } + /// Build a new MacroDefined type. + QualType RebuildMacroQualifiedType(QualType T, + const IdentifierInfo *MacroII) { + return SemaRef.Context.getMacroQualifiedType(T, MacroII); + } + /// Build a new class/struct/union type. QualType RebuildRecordType(RecordDecl *Record) { return SemaRef.Context.getTypeDeclType(Record); @@ -6193,6 +6199,27 @@ TreeTransform<Derived>::TransformParenType(TypeLocBuilder &TLB, return Result; } +template <typename Derived> +QualType +TreeTransform<Derived>::TransformMacroQualifiedType(TypeLocBuilder &TLB, + MacroQualifiedTypeLoc TL) { + QualType Inner = getDerived().TransformType(TLB, TL.getInnerLoc()); + if (Inner.isNull()) + return QualType(); + + QualType Result = TL.getType(); + if (getDerived().AlwaysRebuild() || Inner != TL.getInnerLoc().getType()) { + Result = + getDerived().RebuildMacroQualifiedType(Inner, TL.getMacroIdentifier()); + if (Result.isNull()) + return QualType(); + } + + MacroQualifiedTypeLoc NewTL = TLB.push<MacroQualifiedTypeLoc>(Result); + NewTL.setExpansionLoc(TL.getExpansionLoc()); + return Result; +} + template<typename Derived> QualType TreeTransform<Derived>::TransformDependentNameType( TypeLocBuilder &TLB, DependentNameTypeLoc TL) { |

