//===--- NameLookupTypeIDZone.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 name-lookup
//  TypeID zone, for use with the TypeID template.
//
//===----------------------------------------------------------------------===//

SWIFT_REQUEST(NameLookup, CustomAttrNominalRequest,
              NominalTypeDecl *(CustomAttr *, DeclContext *), Cached,
              NoLocationInfo)
SWIFT_REQUEST(NameLookup, ExtendedNominalRequest,
              NominalTypeDecl *(ExtensionDecl *), SeparatelyCached,
              NoLocationInfo)
SWIFT_REQUEST(NameLookup, GenericParamListRequest,
              GenericParamList *(GenericContext *), SeparatelyCached,
              NoLocationInfo)
SWIFT_REQUEST(NameLookup, GetDestructorRequest, DestructorDecl *(ClassDecl *),
              SeparatelyCached, NoLocationInfo)
SWIFT_REQUEST(NameLookup, InheritedDeclsReferencedRequest,
              DirectlyReferencedTypeDecls(
                  llvm::PointerUnion<TypeDecl *, ExtensionDecl *>, unsigned),
              Uncached, HasNearestLocation)
SWIFT_REQUEST(NameLookup, LookupPrecedenceGroupRequest,
              PrecedenceGroupDecl *(DeclContext *, Identifier, SourceLoc),
              Cached, NoLocationInfo)
SWIFT_REQUEST(NameLookup, SelfBoundsFromWhereClauseRequest,
              SelfBounds(llvm::PointerUnion<TypeDecl *, ExtensionDecl *>),
              Uncached, NoLocationInfo)
SWIFT_REQUEST(NameLookup, SuperclassDeclRequest, ClassDecl *(NominalTypeDecl *),
              SeparatelyCached, NoLocationInfo)
SWIFT_REQUEST(NameLookup, TypeDeclsFromWhereClauseRequest,
              DirectlyReferencedTypeDecls(ExtensionDecl *), Uncached,
              NoLocationInfo)
SWIFT_REQUEST(NameLookup, UnderlyingTypeDeclsReferencedRequest,
              DirectlyReferencedTypeDecls(TypeAliasDecl *), Uncached,
              NoLocationInfo)
