blob: 2a3feb163657202309be619f4ef73c6a4964eb55 [file] [log] [blame]
/*===- TableGen'erated file -------------------------------------*- C++ -*-===*\
|* *|
|* A CRTP reader for Clang Type nodes *|
|* *|
|* Automatically generated file, do not edit! *|
|* *|
\*===----------------------------------------------------------------------===*/
template <class PropertyReader>
class AbstractTypeReader {
public:
PropertyReader &R;
AbstractTypeReader(PropertyReader &R) : R(R) {}
QualType read(Type::TypeClass kind) {
switch (kind) {
case Type::Adjusted:
return readAdjustedType();
case Type::Decayed:
return readDecayedType();
case Type::ConstantArray:
return readConstantArrayType();
case Type::DependentSizedArray:
return readDependentSizedArrayType();
case Type::IncompleteArray:
return readIncompleteArrayType();
case Type::VariableArray:
return readVariableArrayType();
case Type::Atomic:
return readAtomicType();
case Type::Attributed:
return readAttributedType();
case Type::BlockPointer:
return readBlockPointerType();
case Type::Builtin:
return readBuiltinType();
case Type::Complex:
return readComplexType();
case Type::Decltype:
return readDecltypeType();
case Type::Auto:
return readAutoType();
case Type::DeducedTemplateSpecialization:
return readDeducedTemplateSpecializationType();
case Type::DependentAddressSpace:
return readDependentAddressSpaceType();
case Type::DependentExtInt:
return readDependentExtIntType();
case Type::DependentName:
return readDependentNameType();
case Type::DependentSizedExtVector:
return readDependentSizedExtVectorType();
case Type::DependentTemplateSpecialization:
return readDependentTemplateSpecializationType();
case Type::DependentVector:
return readDependentVectorType();
case Type::Elaborated:
return readElaboratedType();
case Type::ExtInt:
return readExtIntType();
case Type::FunctionNoProto:
return readFunctionNoProtoType();
case Type::FunctionProto:
return readFunctionProtoType();
case Type::InjectedClassName:
return readInjectedClassNameType();
case Type::MacroQualified:
return readMacroQualifiedType();
case Type::ConstantMatrix:
return readConstantMatrixType();
case Type::DependentSizedMatrix:
return readDependentSizedMatrixType();
case Type::MemberPointer:
return readMemberPointerType();
case Type::ObjCObjectPointer:
return readObjCObjectPointerType();
case Type::ObjCObject:
return readObjCObjectType();
case Type::ObjCInterface:
return readObjCInterfaceType();
case Type::ObjCTypeParam:
return readObjCTypeParamType();
case Type::PackExpansion:
return readPackExpansionType();
case Type::Paren:
return readParenType();
case Type::Pipe:
return readPipeType();
case Type::Pointer:
return readPointerType();
case Type::LValueReference:
return readLValueReferenceType();
case Type::RValueReference:
return readRValueReferenceType();
case Type::SubstTemplateTypeParmPack:
return readSubstTemplateTypeParmPackType();
case Type::SubstTemplateTypeParm:
return readSubstTemplateTypeParmType();
case Type::Enum:
return readEnumType();
case Type::Record:
return readRecordType();
case Type::TemplateSpecialization:
return readTemplateSpecializationType();
case Type::TemplateTypeParm:
return readTemplateTypeParmType();
case Type::TypeOfExpr:
return readTypeOfExprType();
case Type::TypeOf:
return readTypeOfType();
case Type::Typedef:
return readTypedefType();
case Type::UnaryTransform:
return readUnaryTransformType();
case Type::UnresolvedUsing:
return readUnresolvedUsingType();
case Type::Vector:
return readVectorType();
case Type::ExtVector:
return readExtVectorType();
}
llvm_unreachable("bad kind");
}
QualType readAdjustedType() {
auto &ctx = R.getASTContext();
QualType originalType = R.find("originalType").readQualType();
QualType adjustedType = R.find("adjustedType").readQualType();
return ctx.getAdjustedType(originalType, adjustedType);
}
QualType readDecayedType() {
auto &ctx = R.getASTContext();
QualType originalType = R.find("originalType").readQualType();
return ctx.getAdjustedParameterType(originalType);
}
QualType readConstantArrayType() {
auto &ctx = R.getASTContext();
llvm::APInt sizeValue = R.find("sizeValue").readAPInt();
Expr* size = R.find("size").readExprRef();
QualType elementType = R.find("elementType").readQualType();
ArrayType::ArraySizeModifier sizeModifier = R.find("sizeModifier").readArraySizeModifier();
Qualifiers indexQualifiers = R.find("indexQualifiers").readQualifiers();
return ctx.getConstantArrayType(elementType, sizeValue, size,
sizeModifier,
indexQualifiers.getCVRQualifiers());
}
QualType readDependentSizedArrayType() {
auto &ctx = R.getASTContext();
Expr* size = R.find("size").readExprRef();
SourceLocation leftBracketLoc = R.find("leftBracketLoc").readSourceLocation();
SourceLocation rightBracketLoc = R.find("rightBracketLoc").readSourceLocation();
QualType elementType = R.find("elementType").readQualType();
ArrayType::ArraySizeModifier sizeModifier = R.find("sizeModifier").readArraySizeModifier();
Qualifiers indexQualifiers = R.find("indexQualifiers").readQualifiers();
return ctx.getDependentSizedArrayType(elementType, size, sizeModifier,
indexQualifiers.getCVRQualifiers(),
SourceRange(leftBracketLoc,
rightBracketLoc));
}
QualType readIncompleteArrayType() {
auto &ctx = R.getASTContext();
QualType elementType = R.find("elementType").readQualType();
ArrayType::ArraySizeModifier sizeModifier = R.find("sizeModifier").readArraySizeModifier();
Qualifiers indexQualifiers = R.find("indexQualifiers").readQualifiers();
return ctx.getIncompleteArrayType(elementType, sizeModifier,
indexQualifiers.getCVRQualifiers());
}
QualType readVariableArrayType() {
auto &ctx = R.getASTContext();
SourceLocation leftBracketLoc = R.find("leftBracketLoc").readSourceLocation();
SourceLocation rightBracketLoc = R.find("rightBracketLoc").readSourceLocation();
Expr* size = R.find("size").readExprRef();
QualType elementType = R.find("elementType").readQualType();
ArrayType::ArraySizeModifier sizeModifier = R.find("sizeModifier").readArraySizeModifier();
Qualifiers indexQualifiers = R.find("indexQualifiers").readQualifiers();
return ctx.getVariableArrayType(elementType, size, sizeModifier,
indexQualifiers.getCVRQualifiers(),
SourceRange(leftBracketLoc,
rightBracketLoc));
}
QualType readAtomicType() {
auto &ctx = R.getASTContext();
QualType valueType = R.find("valueType").readQualType();
return ctx.getAtomicType(valueType);
}
QualType readAttributedType() {
auto &ctx = R.getASTContext();
QualType modifiedType = R.find("modifiedType").readQualType();
QualType equivalentType = R.find("equivalentType").readQualType();
attr::Kind attribute = R.find("attribute").readAttrKind();
return ctx.getAttributedType(attribute, modifiedType, equivalentType);
}
QualType readBlockPointerType() {
auto &ctx = R.getASTContext();
QualType pointeeType = R.find("pointeeType").readQualType();
return ctx.getBlockPointerType(pointeeType);
}
QualType readBuiltinType() {
auto &ctx = R.getASTContext();
BuiltinType::Kind kind = R.find("kind").readBuiltinTypeKind();
switch (kind) {
#define IMAGE_TYPE(IMGTYPE, ID, SINGLETON_ID, ACCESS, SUFFIX) \
case BuiltinType::ID: return ctx.SINGLETON_ID;
#include "clang/Basic/OpenCLImageTypes.def"
#define EXT_OPAQUE_TYPE(EXTTYPE, ID, EXT) \
case BuiltinType::ID: return ctx.ID##Ty;
#include "clang/Basic/OpenCLExtensionTypes.def"
#define SVE_TYPE(NAME, ID, SINGLETON_ID) \
case BuiltinType::ID: return ctx.SINGLETON_ID;
#include "clang/Basic/AArch64SVEACLETypes.def"
#define PPC_VECTOR_TYPE(NAME, ID, SIZE) \
case BuiltinType::ID: return ctx.ID##Ty;
#include "clang/Basic/PPCTypes.def"
#define BUILTIN_TYPE(ID, SINGLETON_ID) \
case BuiltinType::ID: return ctx.SINGLETON_ID;
#include "clang/AST/BuiltinTypes.def"
}
llvm_unreachable("unreachable builtin case");
}
QualType readComplexType() {
auto &ctx = R.getASTContext();
QualType elementType = R.find("elementType").readQualType();
return ctx.getComplexType(elementType);
}
QualType readDecltypeType() {
auto &ctx = R.getASTContext();
QualType underlyingType = R.find("underlyingType").readQualType();
Expr* expression = R.find("expression").readExprRef();
return ctx.getDecltypeType(expression, underlyingType);
}
QualType readAutoType() {
auto &ctx = R.getASTContext();
llvm::Optional<QualType> deducedType = R.find("deducedType").template readOptional<QualType>();
AutoTypeKeyword keyword = R.find("keyword").readAutoTypeKeyword();
llvm::Optional<ConceptDecl*> typeConstraintConcept = R.find("typeConstraintConcept").template readOptional<ConceptDecl*>();
llvm::SmallVector<TemplateArgument, 8> typeConstraintArguments_buffer_0;
llvm::ArrayRef<TemplateArgument> typeConstraintArguments = R.find("typeConstraintArguments").template readArray<TemplateArgument>(typeConstraintArguments_buffer_0);
uint32_t dependence = R.find("dependence").readUInt32();
return ctx.getAutoType(makeNullableFromOptional(deducedType), keyword,
/*isDependentWithoutDeducedType*/ dependence > 0,
/*isPackWithoutDeducedType*/ dependence > 1,
makePointerFromOptional(typeConstraintConcept),
typeConstraintArguments);
}
QualType readDeducedTemplateSpecializationType() {
auto &ctx = R.getASTContext();
llvm::Optional<TemplateName> templateName = R.find("templateName").template readOptional<TemplateName>();
QualType deducedType = R.find("deducedType").readQualType();
bool dependent = R.find("dependent").readBool();
return ctx.getDeducedTemplateSpecializationType(
makeNullableFromOptional(templateName),
deducedType, dependent);
}
QualType readDependentAddressSpaceType() {
auto &ctx = R.getASTContext();
QualType pointeeType = R.find("pointeeType").readQualType();
Expr* addressSpace = R.find("addressSpace").readExprRef();
SourceLocation attributeLoc = R.find("attributeLoc").readSourceLocation();
return ctx.getDependentAddressSpaceType(pointeeType, addressSpace,
attributeLoc);
}
QualType readDependentExtIntType() {
auto &ctx = R.getASTContext();
bool isUnsigned = R.find("isUnsigned").readBool();
Expr* numBitsExpr = R.find("numBitsExpr").readExprRef();
return ctx.getDependentExtIntType(isUnsigned, numBitsExpr);
}
QualType readDependentNameType() {
auto &ctx = R.getASTContext();
ElaboratedTypeKeyword keyword = R.find("keyword").readElaboratedTypeKeyword();
NestedNameSpecifier * qualifier = R.find("qualifier").readNestedNameSpecifier();
IdentifierInfo* name = R.find("name").readIdentifier();
llvm::Optional<QualType> underlyingType = R.find("underlyingType").template readOptional<QualType>();
QualType canon = (underlyingType
? ctx.getCanonicalType(*underlyingType)
: QualType());
return ctx.getDependentNameType(keyword, qualifier, name, canon);
}
QualType readDependentSizedExtVectorType() {
auto &ctx = R.getASTContext();
QualType elementType = R.find("elementType").readQualType();
Expr* size = R.find("size").readExprRef();
SourceLocation attributeLoc = R.find("attributeLoc").readSourceLocation();
return ctx.getDependentSizedExtVectorType(elementType, size, attributeLoc);
}
QualType readDependentTemplateSpecializationType() {
auto &ctx = R.getASTContext();
ElaboratedTypeKeyword keyword = R.find("keyword").readElaboratedTypeKeyword();
NestedNameSpecifier * qualifier = R.find("qualifier").readNestedNameSpecifier();
IdentifierInfo* name = R.find("name").readIdentifier();
llvm::SmallVector<TemplateArgument, 8> templateArguments_buffer_0;
llvm::ArrayRef<TemplateArgument> templateArguments = R.find("templateArguments").template readArray<TemplateArgument>(templateArguments_buffer_0);
return ctx.getDependentTemplateSpecializationType(keyword, qualifier,
name, templateArguments);
}
QualType readDependentVectorType() {
auto &ctx = R.getASTContext();
QualType elementType = R.find("elementType").readQualType();
Expr* size = R.find("size").readExprRef();
SourceLocation attributeLoc = R.find("attributeLoc").readSourceLocation();
VectorType::VectorKind vectorKind = R.find("vectorKind").readVectorKind();
return ctx.getDependentVectorType(elementType, size, attributeLoc,
vectorKind);
}
QualType readElaboratedType() {
auto &ctx = R.getASTContext();
ElaboratedTypeKeyword keyword = R.find("keyword").readElaboratedTypeKeyword();
NestedNameSpecifier * qualifier = R.find("qualifier").readNestedNameSpecifier();
QualType namedType = R.find("namedType").readQualType();
llvm::Optional<TagDecl*> ownedTag = R.find("ownedTag").template readOptional<TagDecl*>();
return ctx.getElaboratedType(keyword, qualifier, namedType,
makePointerFromOptional(ownedTag));
}
QualType readExtIntType() {
auto &ctx = R.getASTContext();
bool isUnsigned = R.find("isUnsigned").readBool();
uint32_t numBits = R.find("numBits").readUInt32();
return ctx.getExtIntType(isUnsigned, numBits);
}
QualType readFunctionNoProtoType() {
auto &ctx = R.getASTContext();
QualType returnType = R.find("returnType").readQualType();
bool noReturn = R.find("noReturn").readBool();
bool hasRegParm = R.find("hasRegParm").readBool();
uint32_t regParm = R.find("regParm").readUInt32();
CallingConv callingConvention = R.find("callingConvention").readCallingConv();
bool producesResult = R.find("producesResult").readBool();
bool noCallerSavedRegs = R.find("noCallerSavedRegs").readBool();
bool noCfCheck = R.find("noCfCheck").readBool();
bool cmseNSCall = R.find("cmseNSCall").readBool();
auto extInfo = FunctionType::ExtInfo(noReturn, hasRegParm, regParm,
callingConvention, producesResult,
noCallerSavedRegs, noCfCheck,
cmseNSCall);
return ctx.getFunctionNoProtoType(returnType, extInfo);
}
QualType readFunctionProtoType() {
auto &ctx = R.getASTContext();
bool variadic = R.find("variadic").readBool();
bool trailingReturn = R.find("trailingReturn").readBool();
Qualifiers methodQualifiers = R.find("methodQualifiers").readQualifiers();
RefQualifierKind refQualifier = R.find("refQualifier").readRefQualifierKind();
llvm::SmallVector<QualType, 8> exceptionSpecifier_buffer_0;
FunctionProtoType::ExceptionSpecInfo exceptionSpecifier = R.find("exceptionSpecifier").readExceptionSpecInfo(exceptionSpecifier_buffer_0);
llvm::SmallVector<QualType, 8> parameters_buffer_0;
llvm::ArrayRef<QualType> parameters = R.find("parameters").template readArray<QualType>(parameters_buffer_0);
llvm::SmallVector<FunctionProtoType::ExtParameterInfo, 8> extParameterInfo_buffer_0;
llvm::ArrayRef<FunctionProtoType::ExtParameterInfo> extParameterInfo = R.find("extParameterInfo").template readArray<FunctionProtoType::ExtParameterInfo>(extParameterInfo_buffer_0);
QualType returnType = R.find("returnType").readQualType();
bool noReturn = R.find("noReturn").readBool();
bool hasRegParm = R.find("hasRegParm").readBool();
uint32_t regParm = R.find("regParm").readUInt32();
CallingConv callingConvention = R.find("callingConvention").readCallingConv();
bool producesResult = R.find("producesResult").readBool();
bool noCallerSavedRegs = R.find("noCallerSavedRegs").readBool();
bool noCfCheck = R.find("noCfCheck").readBool();
bool cmseNSCall = R.find("cmseNSCall").readBool();
auto extInfo = FunctionType::ExtInfo(noReturn, hasRegParm, regParm,
callingConvention, producesResult,
noCallerSavedRegs, noCfCheck,
cmseNSCall);
FunctionProtoType::ExtProtoInfo epi;
epi.ExtInfo = extInfo;
epi.Variadic = variadic;
epi.HasTrailingReturn = trailingReturn;
epi.TypeQuals = methodQualifiers;
epi.RefQualifier = refQualifier;
epi.ExceptionSpec = exceptionSpecifier;
epi.ExtParameterInfos =
extParameterInfo.empty() ? nullptr : extParameterInfo.data();
return ctx.getFunctionType(returnType, parameters, epi);
}
QualType readInjectedClassNameType() {
auto &ctx = R.getASTContext();
Decl* declaration = R.find("declaration").readDeclRef();
QualType injectedSpecializationType = R.find("injectedSpecializationType").readQualType();
// FIXME: ASTContext::getInjectedClassNameType is not currently suitable
// for AST reading, too much interdependencies.
const Type *T = nullptr;
auto typeDecl = cast<CXXRecordDecl>(declaration);
for (auto *DI = typeDecl; DI; DI = DI->getPreviousDecl()) {
if (const Type *existing = DI->getTypeForDecl()) {
T = existing;
break;
}
}
if (!T) {
T = new (ctx, TypeAlignment)
InjectedClassNameType(typeDecl, injectedSpecializationType);
for (auto *DI = typeDecl; DI; DI = DI->getPreviousDecl())
DI->setTypeForDecl(T);
}
return QualType(T, 0);
}
QualType readMacroQualifiedType() {
auto &ctx = R.getASTContext();
QualType underlyingType = R.find("underlyingType").readQualType();
IdentifierInfo* macroIdentifier = R.find("macroIdentifier").readIdentifier();
return ctx.getMacroQualifiedType(underlyingType, macroIdentifier);
}
QualType readConstantMatrixType() {
auto &ctx = R.getASTContext();
uint32_t numRows = R.find("numRows").readUInt32();
uint32_t numColumns = R.find("numColumns").readUInt32();
QualType elementType = R.find("elementType").readQualType();
return ctx.getConstantMatrixType(elementType, numRows, numColumns);
}
QualType readDependentSizedMatrixType() {
auto &ctx = R.getASTContext();
Expr* rows = R.find("rows").readExprRef();
Expr* columns = R.find("columns").readExprRef();
SourceLocation attributeLoc = R.find("attributeLoc").readSourceLocation();
QualType elementType = R.find("elementType").readQualType();
return ctx.getDependentSizedMatrixType(elementType, rows, columns, attributeLoc);
}
QualType readMemberPointerType() {
auto &ctx = R.getASTContext();
QualType pointeeType = R.find("pointeeType").readQualType();
QualType baseType = R.find("baseType").readQualType();
return ctx.getMemberPointerType(pointeeType, baseType.getTypePtr());
}
QualType readObjCObjectPointerType() {
auto &ctx = R.getASTContext();
QualType pointeeType = R.find("pointeeType").readQualType();
return ctx.getObjCObjectPointerType(pointeeType);
}
QualType readObjCObjectType() {
auto &ctx = R.getASTContext();
QualType baseType = R.find("baseType").readQualType();
llvm::SmallVector<QualType, 8> typeArgsAsWritten_buffer_0;
llvm::ArrayRef<QualType> typeArgsAsWritten = R.find("typeArgsAsWritten").template readArray<QualType>(typeArgsAsWritten_buffer_0);
llvm::SmallVector<ObjCProtocolDecl*, 8> qualifiers_buffer_0;
llvm::ArrayRef<ObjCProtocolDecl*> qualifiers = R.find("qualifiers").template readArray<ObjCProtocolDecl*>(qualifiers_buffer_0);
bool isKindOfTypeAsWritten = R.find("isKindOfTypeAsWritten").readBool();
return ctx.getObjCObjectType(baseType, typeArgsAsWritten, qualifiers,
isKindOfTypeAsWritten);
}
QualType readObjCInterfaceType() {
auto &ctx = R.getASTContext();
Decl* declaration = R.find("declaration").readDeclRef();
return ctx.getObjCInterfaceType(
cast<ObjCInterfaceDecl>(declaration->getCanonicalDecl()));
}
QualType readObjCTypeParamType() {
auto &ctx = R.getASTContext();
ObjCTypeParamDecl* declaration = R.find("declaration").readObjCTypeParamDeclRef();
llvm::SmallVector<ObjCProtocolDecl*, 8> qualifiers_buffer_0;
llvm::ArrayRef<ObjCProtocolDecl*> qualifiers = R.find("qualifiers").template readArray<ObjCProtocolDecl*>(qualifiers_buffer_0);
return ctx.getObjCTypeParamType(declaration, qualifiers);
}
QualType readPackExpansionType() {
auto &ctx = R.getASTContext();
QualType pattern = R.find("pattern").readQualType();
llvm::Optional<uint32_t> numExpansions = R.find("numExpansions").template readOptional<uint32_t>();
return ctx.getPackExpansionType(pattern, numExpansions,
/*ExpectPackInType*/false);
}
QualType readParenType() {
auto &ctx = R.getASTContext();
QualType innerType = R.find("innerType").readQualType();
return ctx.getParenType(innerType);
}
QualType readPipeType() {
auto &ctx = R.getASTContext();
QualType elementType = R.find("elementType").readQualType();
bool isReadOnly = R.find("isReadOnly").readBool();
return ctx.getPipeType(elementType, isReadOnly);
}
QualType readPointerType() {
auto &ctx = R.getASTContext();
QualType pointeeType = R.find("pointeeType").readQualType();
return ctx.getPointerType(pointeeType);
}
QualType readLValueReferenceType() {
auto &ctx = R.getASTContext();
bool isSpelledAsLValue = R.find("isSpelledAsLValue").readBool();
QualType pointeeTypeAsWritten = R.find("pointeeTypeAsWritten").readQualType();
return ctx.getLValueReferenceType(pointeeTypeAsWritten,
isSpelledAsLValue);
}
QualType readRValueReferenceType() {
auto &ctx = R.getASTContext();
QualType pointeeTypeAsWritten = R.find("pointeeTypeAsWritten").readQualType();
return ctx.getRValueReferenceType(pointeeTypeAsWritten);
}
QualType readSubstTemplateTypeParmPackType() {
auto &ctx = R.getASTContext();
QualType replacedParameter = R.find("replacedParameter").readQualType();
TemplateArgument replacementPack = R.find("replacementPack").readTemplateArgument();
return ctx.getSubstTemplateTypeParmPackType(
cast<TemplateTypeParmType>(replacedParameter),
replacementPack);
}
QualType readSubstTemplateTypeParmType() {
auto &ctx = R.getASTContext();
QualType replacedParameter = R.find("replacedParameter").readQualType();
QualType replacementType = R.find("replacementType").readQualType();
// The call to getCanonicalType here existed in ASTReader.cpp, too.
return ctx.getSubstTemplateTypeParmType(
cast<TemplateTypeParmType>(replacedParameter),
ctx.getCanonicalType(replacementType));
}
QualType readEnumType() {
auto &ctx = R.getASTContext();
bool dependent = R.find("dependent").readBool();
Decl* declaration = R.find("declaration").readDeclRef();
QualType result = ctx.getEnumType(cast<EnumDecl>(declaration));
if (dependent)
const_cast<Type *>(result.getTypePtr())
->addDependence(TypeDependence::DependentInstantiation);
return result;
}
QualType readRecordType() {
auto &ctx = R.getASTContext();
bool dependent = R.find("dependent").readBool();
Decl* declaration = R.find("declaration").readDeclRef();
auto record = cast<RecordDecl>(declaration);
QualType result = ctx.getRecordType(record);
if (dependent)
const_cast<Type *>(result.getTypePtr())
->addDependence(TypeDependence::DependentInstantiation);
return result;
}
QualType readTemplateSpecializationType() {
auto &ctx = R.getASTContext();
bool dependent = R.find("dependent").readBool();
TemplateName templateName = R.find("templateName").readTemplateName();
llvm::SmallVector<TemplateArgument, 8> templateArguments_buffer_0;
llvm::ArrayRef<TemplateArgument> templateArguments = R.find("templateArguments").template readArray<TemplateArgument>(templateArguments_buffer_0);
llvm::Optional<QualType> underlyingType = R.find("underlyingType").template readOptional<QualType>();
QualType result;
if (!underlyingType.hasValue()) {
result = ctx.getCanonicalTemplateSpecializationType(templateName,
templateArguments);
} else {
result = ctx.getTemplateSpecializationType(templateName,
templateArguments,
*underlyingType);
}
if (dependent)
const_cast<Type *>(result.getTypePtr())
->addDependence(TypeDependence::DependentInstantiation);
return result;
}
QualType readTemplateTypeParmType() {
auto &ctx = R.getASTContext();
uint32_t depth = R.find("depth").readUInt32();
uint32_t index = R.find("index").readUInt32();
bool isParameterPack = R.find("isParameterPack").readBool();
llvm::Optional<TemplateTypeParmDecl*> declaration = R.find("declaration").template readOptional<TemplateTypeParmDecl*>();
return ctx.getTemplateTypeParmType(depth, index, isParameterPack,
makePointerFromOptional(declaration));
}
QualType readTypeOfExprType() {
auto &ctx = R.getASTContext();
Expr* expression = R.find("expression").readExprRef();
return ctx.getTypeOfExprType(expression);
}
QualType readTypeOfType() {
auto &ctx = R.getASTContext();
QualType underlyingType = R.find("underlyingType").readQualType();
return ctx.getTypeOfType(underlyingType);
}
QualType readTypedefType() {
auto &ctx = R.getASTContext();
Decl* declaration = R.find("declaration").readDeclRef();
llvm::Optional<QualType> canonicalType = R.find("canonicalType").template readOptional<QualType>();
QualType finalCanonicalType =
canonicalType ? ctx.getCanonicalType(*canonicalType)
: QualType();
return ctx.getTypedefType(cast<TypedefNameDecl>(declaration),
finalCanonicalType);
}
QualType readUnaryTransformType() {
auto &ctx = R.getASTContext();
QualType baseType = R.find("baseType").readQualType();
QualType underlyingType = R.find("underlyingType").readQualType();
UnaryTransformType::UTTKind transform = R.find("transform").readUnaryTypeTransformKind();
return ctx.getUnaryTransformType(baseType, underlyingType, transform);
}
QualType readUnresolvedUsingType() {
auto &ctx = R.getASTContext();
Decl* declaration = R.find("declaration").readDeclRef();
return ctx.getTypeDeclType(cast<UnresolvedUsingTypenameDecl>(declaration));
}
QualType readVectorType() {
auto &ctx = R.getASTContext();
QualType elementType = R.find("elementType").readQualType();
uint32_t numElements = R.find("numElements").readUInt32();
VectorType::VectorKind vectorKind = R.find("vectorKind").readVectorKind();
return ctx.getVectorType(elementType, numElements, vectorKind);
}
QualType readExtVectorType() {
auto &ctx = R.getASTContext();
QualType elementType = R.find("elementType").readQualType();
uint32_t numElements = R.find("numElements").readUInt32();
return ctx.getExtVectorType(elementType, numElements);
}
};