#include "clang/AST/ASTContext.h"
#include "clang/AST/Attr.h"
#include "clang/AST/Decl.h"
#include "clang/AST/DeclBase.h"
#include "clang/AST/DeclCXX.h"
#include "clang/AST/DeclObjC.h"
#include "clang/AST/DeclTemplate.h"
#include "clang/AST/Expr.h"
#include "clang/AST/NestedNameSpecifier.h"
#include "clang/AST/PrettyPrinter.h"
#include "clang/AST/TemplateBase.h"
#include "clang/AST/TemplateName.h"
#include "clang/AST/TextNodeDumper.h"
#include "clang/AST/Type.h"
#include "clang/Basic/AddressSpaces.h"
#include "clang/Basic/ExceptionSpecificationType.h"
#include "clang/Basic/IdentifierTable.h"
#include "clang/Basic/LLVM.h"
#include "clang/Basic/LangOptions.h"
#include "clang/Basic/SourceLocation.h"
#include "clang/Basic/SourceManager.h"
#include "clang/Basic/Specifiers.h"
#include "llvm/ADT/ArrayRef.h"
#include "llvm/ADT/DenseMap.h"
#include "llvm/ADT/SmallString.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/ADT/Twine.h"
#include "llvm/Support/Casting.h"
#include "llvm/Support/Compiler.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/SaveAndRestore.h"
#include "llvm/Support/raw_ostream.h"
#include <cassert>
#include <string>
usingnamespaceclang;
namespace {
class IncludeStrongLifetimeRAII { … };
class ParamPolicyRAII { … };
class DefaultTemplateArgsPolicyRAII { … };
class ElaboratedTypePolicyRAII { … };
class TypePrinter { … };
}
static void AppendTypeQualList(raw_ostream &OS, unsigned TypeQuals,
bool HasRestrictKeyword) { … }
void TypePrinter::spaceBeforePlaceHolder(raw_ostream &OS) { … }
static SplitQualType splitAccordingToPolicy(QualType QT,
const PrintingPolicy &Policy) { … }
void TypePrinter::print(QualType t, raw_ostream &OS, StringRef PlaceHolder) { … }
void TypePrinter::print(const Type *T, Qualifiers Quals, raw_ostream &OS,
StringRef PlaceHolder) { … }
bool TypePrinter::canPrefixQualifiers(const Type *T,
bool &NeedARCStrongQualifier) { … }
void TypePrinter::printBefore(QualType T, raw_ostream &OS) { … }
void TypePrinter::printBefore(const Type *T,Qualifiers Quals, raw_ostream &OS) { … }
void TypePrinter::printAfter(QualType t, raw_ostream &OS) { … }
void TypePrinter::printAfter(const Type *T, Qualifiers Quals, raw_ostream &OS) { … }
void TypePrinter::printBuiltinBefore(const BuiltinType *T, raw_ostream &OS) { … }
void TypePrinter::printBuiltinAfter(const BuiltinType *T, raw_ostream &OS) { … }
void TypePrinter::printComplexBefore(const ComplexType *T, raw_ostream &OS) { … }
void TypePrinter::printComplexAfter(const ComplexType *T, raw_ostream &OS) { … }
void TypePrinter::printPointerBefore(const PointerType *T, raw_ostream &OS) { … }
void TypePrinter::printPointerAfter(const PointerType *T, raw_ostream &OS) { … }
void TypePrinter::printBlockPointerBefore(const BlockPointerType *T,
raw_ostream &OS) { … }
void TypePrinter::printBlockPointerAfter(const BlockPointerType *T,
raw_ostream &OS) { … }
static QualType skipTopLevelReferences(QualType T) { … }
void TypePrinter::printLValueReferenceBefore(const LValueReferenceType *T,
raw_ostream &OS) { … }
void TypePrinter::printLValueReferenceAfter(const LValueReferenceType *T,
raw_ostream &OS) { … }
void TypePrinter::printRValueReferenceBefore(const RValueReferenceType *T,
raw_ostream &OS) { … }
void TypePrinter::printRValueReferenceAfter(const RValueReferenceType *T,
raw_ostream &OS) { … }
void TypePrinter::printMemberPointerBefore(const MemberPointerType *T,
raw_ostream &OS) { … }
void TypePrinter::printMemberPointerAfter(const MemberPointerType *T,
raw_ostream &OS) { … }
void TypePrinter::printConstantArrayBefore(const ConstantArrayType *T,
raw_ostream &OS) { … }
void TypePrinter::printConstantArrayAfter(const ConstantArrayType *T,
raw_ostream &OS) { … }
void TypePrinter::printIncompleteArrayBefore(const IncompleteArrayType *T,
raw_ostream &OS) { … }
void TypePrinter::printIncompleteArrayAfter(const IncompleteArrayType *T,
raw_ostream &OS) { … }
void TypePrinter::printVariableArrayBefore(const VariableArrayType *T,
raw_ostream &OS) { … }
void TypePrinter::printVariableArrayAfter(const VariableArrayType *T,
raw_ostream &OS) { … }
void TypePrinter::printAdjustedBefore(const AdjustedType *T, raw_ostream &OS) { … }
void TypePrinter::printAdjustedAfter(const AdjustedType *T, raw_ostream &OS) { … }
void TypePrinter::printDecayedBefore(const DecayedType *T, raw_ostream &OS) { … }
void TypePrinter::printArrayParameterAfter(const ArrayParameterType *T,
raw_ostream &OS) { … }
void TypePrinter::printArrayParameterBefore(const ArrayParameterType *T,
raw_ostream &OS) { … }
void TypePrinter::printDecayedAfter(const DecayedType *T, raw_ostream &OS) { … }
void TypePrinter::printDependentSizedArrayBefore(
const DependentSizedArrayType *T,
raw_ostream &OS) { … }
void TypePrinter::printDependentSizedArrayAfter(
const DependentSizedArrayType *T,
raw_ostream &OS) { … }
void TypePrinter::printDependentAddressSpaceBefore(
const DependentAddressSpaceType *T, raw_ostream &OS) { … }
void TypePrinter::printDependentAddressSpaceAfter(
const DependentAddressSpaceType *T, raw_ostream &OS) { … }
void TypePrinter::printDependentSizedExtVectorBefore(
const DependentSizedExtVectorType *T,
raw_ostream &OS) { … }
void TypePrinter::printDependentSizedExtVectorAfter(
const DependentSizedExtVectorType *T,
raw_ostream &OS) { … }
void TypePrinter::printVectorBefore(const VectorType *T, raw_ostream &OS) { … }
void TypePrinter::printVectorAfter(const VectorType *T, raw_ostream &OS) { … }
void TypePrinter::printDependentVectorBefore(
const DependentVectorType *T, raw_ostream &OS) { … }
void TypePrinter::printDependentVectorAfter(
const DependentVectorType *T, raw_ostream &OS) { … }
void TypePrinter::printExtVectorBefore(const ExtVectorType *T,
raw_ostream &OS) { … }
void TypePrinter::printExtVectorAfter(const ExtVectorType *T, raw_ostream &OS) { … }
void TypePrinter::printConstantMatrixBefore(const ConstantMatrixType *T,
raw_ostream &OS) { … }
void TypePrinter::printConstantMatrixAfter(const ConstantMatrixType *T,
raw_ostream &OS) { … }
void TypePrinter::printDependentSizedMatrixBefore(
const DependentSizedMatrixType *T, raw_ostream &OS) { … }
void TypePrinter::printDependentSizedMatrixAfter(
const DependentSizedMatrixType *T, raw_ostream &OS) { … }
void
FunctionProtoType::printExceptionSpecification(raw_ostream &OS,
const PrintingPolicy &Policy)
const { … }
void TypePrinter::printFunctionProtoBefore(const FunctionProtoType *T,
raw_ostream &OS) { … }
StringRef clang::getParameterABISpelling(ParameterABI ABI) { … }
void TypePrinter::printFunctionProtoAfter(const FunctionProtoType *T,
raw_ostream &OS) { … }
void TypePrinter::printFunctionAfter(const FunctionType::ExtInfo &Info,
raw_ostream &OS) { … }
void TypePrinter::printFunctionNoProtoBefore(const FunctionNoProtoType *T,
raw_ostream &OS) { … }
void TypePrinter::printFunctionNoProtoAfter(const FunctionNoProtoType *T,
raw_ostream &OS) { … }
void TypePrinter::printTypeSpec(NamedDecl *D, raw_ostream &OS) { … }
void TypePrinter::printUnresolvedUsingBefore(const UnresolvedUsingType *T,
raw_ostream &OS) { … }
void TypePrinter::printUnresolvedUsingAfter(const UnresolvedUsingType *T,
raw_ostream &OS) { … }
void TypePrinter::printUsingBefore(const UsingType *T, raw_ostream &OS) { … }
void TypePrinter::printUsingAfter(const UsingType *T, raw_ostream &OS) { … }
void TypePrinter::printTypedefBefore(const TypedefType *T, raw_ostream &OS) { … }
void TypePrinter::printMacroQualifiedBefore(const MacroQualifiedType *T,
raw_ostream &OS) { … }
void TypePrinter::printMacroQualifiedAfter(const MacroQualifiedType *T,
raw_ostream &OS) { … }
void TypePrinter::printTypedefAfter(const TypedefType *T, raw_ostream &OS) { … }
void TypePrinter::printTypeOfExprBefore(const TypeOfExprType *T,
raw_ostream &OS) { … }
void TypePrinter::printTypeOfExprAfter(const TypeOfExprType *T,
raw_ostream &OS) { … }
void TypePrinter::printTypeOfBefore(const TypeOfType *T, raw_ostream &OS) { … }
void TypePrinter::printTypeOfAfter(const TypeOfType *T, raw_ostream &OS) { … }
void TypePrinter::printDecltypeBefore(const DecltypeType *T, raw_ostream &OS) { … }
void TypePrinter::printPackIndexingBefore(const PackIndexingType *T,
raw_ostream &OS) { … }
void TypePrinter::printPackIndexingAfter(const PackIndexingType *T,
raw_ostream &OS) { … }
void TypePrinter::printDecltypeAfter(const DecltypeType *T, raw_ostream &OS) { … }
void TypePrinter::printUnaryTransformBefore(const UnaryTransformType *T,
raw_ostream &OS) { … }
void TypePrinter::printUnaryTransformAfter(const UnaryTransformType *T,
raw_ostream &OS) { … }
void TypePrinter::printAutoBefore(const AutoType *T, raw_ostream &OS) { … }
void TypePrinter::printAutoAfter(const AutoType *T, raw_ostream &OS) { … }
void TypePrinter::printDeducedTemplateSpecializationBefore(
const DeducedTemplateSpecializationType *T, raw_ostream &OS) { … }
void TypePrinter::printDeducedTemplateSpecializationAfter(
const DeducedTemplateSpecializationType *T, raw_ostream &OS) { … }
void TypePrinter::printAtomicBefore(const AtomicType *T, raw_ostream &OS) { … }
void TypePrinter::printAtomicAfter(const AtomicType *T, raw_ostream &OS) { … }
void TypePrinter::printPipeBefore(const PipeType *T, raw_ostream &OS) { … }
void TypePrinter::printPipeAfter(const PipeType *T, raw_ostream &OS) { … }
void TypePrinter::printBitIntBefore(const BitIntType *T, raw_ostream &OS) { … }
void TypePrinter::printBitIntAfter(const BitIntType *T, raw_ostream &OS) { … }
void TypePrinter::printDependentBitIntBefore(const DependentBitIntType *T,
raw_ostream &OS) { … }
void TypePrinter::printDependentBitIntAfter(const DependentBitIntType *T,
raw_ostream &OS) { … }
void TypePrinter::AppendScope(DeclContext *DC, raw_ostream &OS,
DeclarationName NameInScope) { … }
void TypePrinter::printTag(TagDecl *D, raw_ostream &OS) { … }
void TypePrinter::printRecordBefore(const RecordType *T, raw_ostream &OS) { … }
void TypePrinter::printRecordAfter(const RecordType *T, raw_ostream &OS) { … }
void TypePrinter::printEnumBefore(const EnumType *T, raw_ostream &OS) { … }
void TypePrinter::printEnumAfter(const EnumType *T, raw_ostream &OS) { … }
void TypePrinter::printTemplateTypeParmBefore(const TemplateTypeParmType *T,
raw_ostream &OS) { … }
void TypePrinter::printTemplateTypeParmAfter(const TemplateTypeParmType *T,
raw_ostream &OS) { … }
void TypePrinter::printSubstTemplateTypeParmBefore(
const SubstTemplateTypeParmType *T,
raw_ostream &OS) { … }
void TypePrinter::printSubstTemplateTypeParmAfter(
const SubstTemplateTypeParmType *T,
raw_ostream &OS) { … }
void TypePrinter::printSubstTemplateTypeParmPackBefore(
const SubstTemplateTypeParmPackType *T,
raw_ostream &OS) { … }
void TypePrinter::printSubstTemplateTypeParmPackAfter(
const SubstTemplateTypeParmPackType *T,
raw_ostream &OS) { … }
void TypePrinter::printTemplateId(const TemplateSpecializationType *T,
raw_ostream &OS, bool FullyQualify) { … }
void TypePrinter::printTemplateSpecializationBefore(
const TemplateSpecializationType *T,
raw_ostream &OS) { … }
void TypePrinter::printTemplateSpecializationAfter(
const TemplateSpecializationType *T,
raw_ostream &OS) { … }
void TypePrinter::printInjectedClassNameBefore(const InjectedClassNameType *T,
raw_ostream &OS) { … }
void TypePrinter::printInjectedClassNameAfter(const InjectedClassNameType *T,
raw_ostream &OS) { … }
void TypePrinter::printElaboratedBefore(const ElaboratedType *T,
raw_ostream &OS) { … }
void TypePrinter::printElaboratedAfter(const ElaboratedType *T,
raw_ostream &OS) { … }
void TypePrinter::printParenBefore(const ParenType *T, raw_ostream &OS) { … }
void TypePrinter::printParenAfter(const ParenType *T, raw_ostream &OS) { … }
void TypePrinter::printDependentNameBefore(const DependentNameType *T,
raw_ostream &OS) { … }
void TypePrinter::printDependentNameAfter(const DependentNameType *T,
raw_ostream &OS) { … }
void TypePrinter::printDependentTemplateSpecializationBefore(
const DependentTemplateSpecializationType *T, raw_ostream &OS) { … }
void TypePrinter::printDependentTemplateSpecializationAfter(
const DependentTemplateSpecializationType *T, raw_ostream &OS) { … }
void TypePrinter::printPackExpansionBefore(const PackExpansionType *T,
raw_ostream &OS) { … }
void TypePrinter::printPackExpansionAfter(const PackExpansionType *T,
raw_ostream &OS) { … }
static void printCountAttributedImpl(const CountAttributedType *T,
raw_ostream &OS,
const PrintingPolicy &Policy) { … }
void TypePrinter::printCountAttributedBefore(const CountAttributedType *T,
raw_ostream &OS) { … }
void TypePrinter::printCountAttributedAfter(const CountAttributedType *T,
raw_ostream &OS) { … }
void TypePrinter::printAttributedBefore(const AttributedType *T,
raw_ostream &OS) { … }
void TypePrinter::printAttributedAfter(const AttributedType *T,
raw_ostream &OS) { … }
void TypePrinter::printBTFTagAttributedBefore(const BTFTagAttributedType *T,
raw_ostream &OS) { … }
void TypePrinter::printBTFTagAttributedAfter(const BTFTagAttributedType *T,
raw_ostream &OS) { … }
void TypePrinter::printHLSLAttributedResourceBefore(
const HLSLAttributedResourceType *T, raw_ostream &OS) { … }
void TypePrinter::printHLSLAttributedResourceAfter(
const HLSLAttributedResourceType *T, raw_ostream &OS) { … }
void TypePrinter::printObjCInterfaceBefore(const ObjCInterfaceType *T,
raw_ostream &OS) { … }
void TypePrinter::printObjCInterfaceAfter(const ObjCInterfaceType *T,
raw_ostream &OS) { … }
void TypePrinter::printObjCTypeParamBefore(const ObjCTypeParamType *T,
raw_ostream &OS) { … }
void TypePrinter::printObjCTypeParamAfter(const ObjCTypeParamType *T,
raw_ostream &OS) { … }
void TypePrinter::printObjCObjectBefore(const ObjCObjectType *T,
raw_ostream &OS) { … }
void TypePrinter::printObjCObjectAfter(const ObjCObjectType *T,
raw_ostream &OS) { … }
void TypePrinter::printObjCObjectPointerBefore(const ObjCObjectPointerType *T,
raw_ostream &OS) { … }
void TypePrinter::printObjCObjectPointerAfter(const ObjCObjectPointerType *T,
raw_ostream &OS) { … }
static
const TemplateArgument &getArgument(const TemplateArgument &A) { … }
static const TemplateArgument &getArgument(const TemplateArgumentLoc &A) { … }
static void printArgument(const TemplateArgument &A, const PrintingPolicy &PP,
llvm::raw_ostream &OS, bool IncludeType) { … }
static void printArgument(const TemplateArgumentLoc &A,
const PrintingPolicy &PP, llvm::raw_ostream &OS,
bool IncludeType) { … }
static bool isSubstitutedTemplateArgument(ASTContext &Ctx, TemplateArgument Arg,
TemplateArgument Pattern,
ArrayRef<TemplateArgument> Args,
unsigned Depth);
static bool isSubstitutedType(ASTContext &Ctx, QualType T, QualType Pattern,
ArrayRef<TemplateArgument> Args, unsigned Depth) { … }
static bool templateArgumentExpressionsEqual(ASTContext const &Ctx,
TemplateArgument const &Pattern,
TemplateArgument const &Arg) { … }
static bool isSubstitutedTemplateArgument(ASTContext &Ctx, TemplateArgument Arg,
TemplateArgument Pattern,
ArrayRef<TemplateArgument> Args,
unsigned Depth) { … }
bool clang::isSubstitutedDefaultArgument(ASTContext &Ctx, TemplateArgument Arg,
const NamedDecl *Param,
ArrayRef<TemplateArgument> Args,
unsigned Depth) { … }
template <typename TA>
static void
printTo(raw_ostream &OS, ArrayRef<TA> Args, const PrintingPolicy &Policy,
const TemplateParameterList *TPL, bool IsPack, unsigned ParmIndex) { … }
void clang::printTemplateArgumentList(raw_ostream &OS,
const TemplateArgumentListInfo &Args,
const PrintingPolicy &Policy,
const TemplateParameterList *TPL) { … }
void clang::printTemplateArgumentList(raw_ostream &OS,
ArrayRef<TemplateArgument> Args,
const PrintingPolicy &Policy,
const TemplateParameterList *TPL) { … }
void clang::printTemplateArgumentList(raw_ostream &OS,
ArrayRef<TemplateArgumentLoc> Args,
const PrintingPolicy &Policy,
const TemplateParameterList *TPL) { … }
std::string Qualifiers::getAsString() const { … }
std::string Qualifiers::getAsString(const PrintingPolicy &Policy) const { … }
bool Qualifiers::isEmptyWhenPrinted(const PrintingPolicy &Policy) const { … }
std::string Qualifiers::getAddrSpaceAsString(LangAS AS) { … }
void Qualifiers::print(raw_ostream &OS, const PrintingPolicy& Policy,
bool appendSpaceIfNonEmpty) const { … }
std::string QualType::getAsString() const { … }
std::string QualType::getAsString(const PrintingPolicy &Policy) const { … }
std::string QualType::getAsString(const Type *ty, Qualifiers qs,
const PrintingPolicy &Policy) { … }
void QualType::print(raw_ostream &OS, const PrintingPolicy &Policy,
const Twine &PlaceHolder, unsigned Indentation) const { … }
void QualType::print(const Type *ty, Qualifiers qs,
raw_ostream &OS, const PrintingPolicy &policy,
const Twine &PlaceHolder, unsigned Indentation) { … }
void QualType::getAsStringInternal(std::string &Str,
const PrintingPolicy &Policy) const { … }
void QualType::getAsStringInternal(const Type *ty, Qualifiers qs,
std::string &buffer,
const PrintingPolicy &policy) { … }
raw_ostream &clang::operator<<(raw_ostream &OS, QualType QT) { … }