//===--- TypeCheckerTypeIDZone.def ------------------------------*- C++ -*-===//
//
// This source file is part of the Swift.org open source project
//
// Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors
// Licensed under Apache License v2.0 with Runtime Library Exception
//
// See https://swift.org/LICENSE.txt for license information
// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
//
//===----------------------------------------------------------------------===//
//
//  This definition file describes the types in the type checker's
//  TypeID zone, for use with the TypeID template.
//
//===----------------------------------------------------------------------===//

SWIFT_REQUEST(TypeChecker, AbstractGenericSignatureRequest,
              GenericSignature (GenericSignatureImpl *,
                                SmallVector<GenericTypeParamType *, 2>,
                                SmallVector<Requirement, 2>),
              Cached, NoLocationInfo)
SWIFT_REQUEST(TypeChecker, AttachedFunctionBuilderRequest,
              CustomAttr *(ValueDecl *), Cached, NoLocationInfo)
SWIFT_REQUEST(TypeChecker, AttachedPropertyWrapperTypeRequest,
              Type(VarDecl *, unsigned), Cached, NoLocationInfo)
SWIFT_REQUEST(TypeChecker, AttachedPropertyWrappersRequest,
              llvm::TinyPtrVector<CustomAttr *>(VarDecl *), Cached,
              NoLocationInfo)
SWIFT_REQUEST(TypeChecker, ClassAncestryFlagsRequest,
              AncestryFlags(ClassDecl *), Cached, NoLocationInfo)
SWIFT_REQUEST(TypeChecker, DefaultDefinitionTypeRequest,
              Type(AssociatedTypeDecl *), Cached, NoLocationInfo)
SWIFT_REQUEST(TypeChecker, DefaultTypeRequest,
              Type(KnownProtocolKind, const DeclContext *), SeparatelyCached,
              NoLocationInfo)
SWIFT_REQUEST(TypeChecker, EmittedMembersRequest, DeclRange(ClassDecl *),
              SeparatelyCached, NoLocationInfo)
SWIFT_REQUEST(TypeChecker, EnumRawValuesRequest,
              bool (EnumDecl *, TypeResolutionStage), SeparatelyCached,
              NoLocationInfo)
SWIFT_REQUEST(TypeChecker, EnumRawTypeRequest,
              Type(EnumDecl *, TypeResolutionStage), SeparatelyCached,
              NoLocationInfo)
SWIFT_REQUEST(TypeChecker, ExistentialConformsToSelfRequest,
              bool(ProtocolDecl *), SeparatelyCached, NoLocationInfo)
SWIFT_REQUEST(TypeChecker, ExistentialTypeSupportedRequest,
              bool(ProtocolDecl *), SeparatelyCached, NoLocationInfo)
SWIFT_REQUEST(TypeChecker, ExtendedTypeRequest, Type(ExtensionDecl *), Cached,
              NoLocationInfo)
SWIFT_REQUEST(TypeChecker, FunctionBuilderTypeRequest, Type(ValueDecl *),
              Cached, NoLocationInfo)
SWIFT_REQUEST(TypeChecker, FunctionOperatorRequest, OperatorDecl *(FuncDecl *),
              Cached, NoLocationInfo)
SWIFT_REQUEST(NameLookup, GenericSignatureRequest,
              GenericSignature (GenericContext *),
              SeparatelyCached, NoLocationInfo)
SWIFT_REQUEST(TypeChecker, InferredGenericSignatureRequest,
              GenericSignature (ModuleDecl *, GenericSignatureImpl *,
                                 GenericParamList *,
                                 SmallVector<Requirement, 2>,
                                 SmallVector<TypeLoc, 2>, bool),
              Cached, NoLocationInfo)
SWIFT_REQUEST(TypeChecker, InheritedTypeRequest,
              Type(llvm::PointerUnion<TypeDecl *, ExtensionDecl *>, unsigned,
                   TypeResolutionStage),
              SeparatelyCached, HasNearestLocation)
SWIFT_REQUEST(TypeChecker, InitKindRequest,
              CtorInitializerKind(ConstructorDecl *), Cached, NoLocationInfo)
SWIFT_REQUEST(TypeChecker, IsAccessorTransparentRequest, bool(AccessorDecl *),
              SeparatelyCached, NoLocationInfo)
SWIFT_REQUEST(TypeChecker, IsDynamicRequest, bool(ValueDecl *),
              SeparatelyCached, NoLocationInfo)
SWIFT_REQUEST(TypeChecker, IsFinalRequest, bool(ValueDecl *), SeparatelyCached,
              NoLocationInfo)
SWIFT_REQUEST(TypeChecker, IsGetterMutatingRequest, bool(AbstractStorageDecl *),
              SeparatelyCached, NoLocationInfo)
SWIFT_REQUEST(TypeChecker, IsImplicitlyUnwrappedOptionalRequest,
              bool(ValueDecl *), SeparatelyCached, NoLocationInfo)
SWIFT_REQUEST(TypeChecker, IsObjCRequest, bool(ValueDecl *), SeparatelyCached,
              NoLocationInfo)
SWIFT_REQUEST(TypeChecker, IsSetterMutatingRequest, bool(AbstractStorageDecl *),
              SeparatelyCached, NoLocationInfo)
SWIFT_REQUEST(TypeChecker, LazyStoragePropertyRequest, VarDecl *(VarDecl *),
              Cached, NoLocationInfo)
SWIFT_REQUEST(TypeChecker, MangleLocalTypeDeclRequest,
              std::string(const TypeDecl *), Cached, NoLocationInfo)
SWIFT_REQUEST(TypeChecker, OpaqueReadOwnershipRequest,
              OpaqueReadOwnership(AbstractStorageDecl *), SeparatelyCached,
              NoLocationInfo)
SWIFT_REQUEST(TypeChecker, OpaqueResultTypeRequest,
              OpaqueTypeDecl *(ValueDecl *),
              Cached, NoLocationInfo)
SWIFT_REQUEST(TypeChecker, OperatorPrecedenceGroupRequest,
              PrecedenceGroupDecl *(PrecedenceGroupDecl *),
              Cached, NoLocationInfo)
SWIFT_REQUEST(TypeChecker, OverriddenDeclsRequest,
              llvm::TinyPtrVector<ValueDecl *>(ValueDecl *), SeparatelyCached,
              NoLocationInfo)
SWIFT_REQUEST(TypeChecker, PropertyWrapperBackingPropertyInfoRequest,
              PropertyWrapperBackingPropertyInfo(VarDecl *), Cached,
              NoLocationInfo)
SWIFT_REQUEST(TypeChecker, PropertyWrapperBackingPropertyTypeRequest,
              Type(VarDecl *), Cached, NoLocationInfo)
SWIFT_REQUEST(TypeChecker, PropertyWrapperMutabilityRequest,
              Optional<PropertyWrapperMutability>(VarDecl *), Cached,
              NoLocationInfo)
SWIFT_REQUEST(TypeChecker, PropertyWrapperTypeInfoRequest,
              PropertyWrapperTypeInfo(NominalTypeDecl *), Cached,
              NoLocationInfo)
SWIFT_REQUEST(TypeChecker, ProtocolRequiresClassRequest, bool(ProtocolDecl *),
              SeparatelyCached, NoLocationInfo)
SWIFT_REQUEST(TypeChecker, RequirementRequest,
              Requirement(WhereClauseOwner, unsigned, TypeResolutionStage),
              SeparatelyCached, HasNearestLocation)
SWIFT_REQUEST(TypeChecker, RequirementSignatureRequest,
              ArrayRef<Requirement>(ProtocolDecl *), SeparatelyCached,
              NoLocationInfo)
SWIFT_REQUEST(TypeChecker, RequiresOpaqueAccessorsRequest, bool(VarDecl *),
              SeparatelyCached, NoLocationInfo)
SWIFT_REQUEST(TypeChecker, RequiresOpaqueModifyCoroutineRequest,
              bool(AbstractStorageDecl *), SeparatelyCached, NoLocationInfo)
SWIFT_REQUEST(TypeChecker, ResilienceExpansionRequest,
              ResilienceExpansion(DeclContext *), Cached, NoLocationInfo)
SWIFT_REQUEST(TypeChecker, SelfAccessKindRequest, SelfAccessKind(FuncDecl *),
              SeparatelyCached, NoLocationInfo)
SWIFT_REQUEST(TypeChecker, StorageImplInfoRequest,
              StorageImplInfo(AbstractStorageDecl *), SeparatelyCached,
              NoLocationInfo)
SWIFT_REQUEST(TypeChecker, StoredPropertiesAndMissingMembersRequest,
              ArrayRef<Decl *>(NominalTypeDecl *), Cached, NoLocationInfo)
SWIFT_REQUEST(TypeChecker, StoredPropertiesRequest,
              ArrayRef<VarDecl *>(NominalTypeDecl *), Cached, NoLocationInfo)
SWIFT_REQUEST(TypeChecker, StructuralTypeRequest, Type(TypeAliasDecl *), Cached,
              NoLocationInfo)
SWIFT_REQUEST(TypeChecker, SuperclassTypeRequest,
              Type(NominalTypeDecl *, TypeResolutionStage), SeparatelyCached,
              NoLocationInfo)
SWIFT_REQUEST(TypeChecker, SynthesizeAccessorRequest,
              AccessorDecl *(AbstractStorageDecl *, AccessorKind),
              SeparatelyCached, NoLocationInfo)
SWIFT_REQUEST(TypeChecker, TypeCheckFunctionBodyUntilRequest,
              bool(AbstractFunctionDecl *, SourceLoc), Cached, NoLocationInfo)
SWIFT_REQUEST(TypeChecker, UnderlyingTypeRequest, Type(TypeAliasDecl *),
              SeparatelyCached, NoLocationInfo)
SWIFT_REQUEST(TypeChecker, USRGenerationRequest, std::string(const ValueDecl *),
              Cached, NoLocationInfo)
SWIFT_REQUEST(TypeChecker, IsABICompatibleOverrideRequest,
              bool(ValueDecl *), Cached, NoLocationInfo)
SWIFT_REQUEST(TypeChecker, IsStaticRequest,
              bool(FuncDecl *), SeparatelyCached, NoLocationInfo)
SWIFT_REQUEST(TypeChecker, NeedsNewVTableEntryRequest,
              bool(AbstractFunctionDecl *), SeparatelyCached, NoLocationInfo)
SWIFT_REQUEST(TypeChecker, ParamSpecifierRequest,
              ParamDecl::Specifier(ParamDecl *), SeparatelyCached, NoLocationInfo)
SWIFT_REQUEST(TypeChecker, ResultTypeRequest,
              Type(ValueDecl *), SeparatelyCached, NoLocationInfo)
