//===--- TypeCheckRequestPayloads.def - Type Checking Payloads --*- 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 file defines the kinds of payloads that can be stored within a
// TypeCheckRequest. It is designed to be included multiple times with
// different definitions of the TYPE_CHECK_REQUEST_PAYLOAD(Name,Type)
// macro, whose parameters are:
//
//   Name: The name of the payload.
//   Type: The type of the payload.
//
// Note that the TYPE_CHECK_REQUEST_PAYLOAD macro should always be
// defined as a variadic macro, e.g.,
//
// \code
// #define TYPE_CHECK_REQUEST_PAYLOAD(PayloadName,...)
// \endcode
//
// So that __VA_ARGS__ can capture the type, which may include commas.
//===----------------------------------------------------------------------===//

#if !defined(TYPE_CHECK_REQUEST_PAYLOAD)
#  error define TYPE_CHECK_REQUEST_PAYLOAD before including this file
#endif

TYPE_CHECK_REQUEST_PAYLOAD(Class, ClassDecl *)
TYPE_CHECK_REQUEST_PAYLOAD(Enum, EnumDecl *)
TYPE_CHECK_REQUEST_PAYLOAD(InheritedClauseEntry, std::pair<llvm::PointerUnion<TypeDecl *, ExtensionDecl *>, unsigned>)
TYPE_CHECK_REQUEST_PAYLOAD(Protocol, ProtocolDecl *)
TYPE_CHECK_REQUEST_PAYLOAD(DeclContextLookup, DeclContextLookupInfo)
TYPE_CHECK_REQUEST_PAYLOAD(TypeResolution, std::tuple<TypeRepr *, DeclContext *, unsigned>)
TYPE_CHECK_REQUEST_PAYLOAD(TypeDeclResolution, TypeDecl *)

#undef TYPE_CHECK_REQUEST_PAYLOAD
