//===--- KnownProtocols.def - Compiler protocol metaprogramming -*- 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 macros used for macro-metaprogramming with compiler-known // protocols. // //===----------------------------------------------------------------------===// /// \def PROTOCOL_WITH_NAME(Id, Name) /// /// The enumerator value is \c KnownProtocolKind::Id. The protocol represented /// is simply named \p Name. #ifndef PROTOCOL_WITH_NAME #define PROTOCOL_WITH_NAME(Id, Name) #endif /// \def EXPRESSIBLE_BY_LITERAL_PROTOCOL_WITH_NAME(Id, Name, typeName, performLocalLookup) /// \param typeName supplies the name used for type lookup, /// \param performLocalLookup specifies whether to first look in the local context. #ifndef EXPRESSIBLE_BY_LITERAL_PROTOCOL_WITH_NAME #define EXPRESSIBLE_BY_LITERAL_PROTOCOL_WITH_NAME(Id, Name, typeName, performLocalLookup) \ PROTOCOL_WITH_NAME(Id, Name) #endif /// \def BUILTIN_EXPRESSIBLE_BY_LITERAL_PROTOCOL_WITH_NAME(Id, Name) /// /// Note that this is not a special form of EXPRESSIBLE_BY_LITERAL_PROTOCOL. #ifndef BUILTIN_EXPRESSIBLE_BY_LITERAL_PROTOCOL_WITH_NAME #define BUILTIN_EXPRESSIBLE_BY_LITERAL_PROTOCOL_WITH_NAME(Id, Name) \ PROTOCOL_WITH_NAME(Id, Name) #endif #define PROTOCOL(name) PROTOCOL_WITH_NAME(name, #name) #define PROTOCOL_(name) PROTOCOL_WITH_NAME(name, "_" #name) /// \param typeName supplies the name used for type lookup, /// \param performLocalLookup specifies whether to first look in the local context. #define EXPRESSIBLE_BY_LITERAL_PROTOCOL(name, typeName, performLocalLookup) \ EXPRESSIBLE_BY_LITERAL_PROTOCOL_WITH_NAME(name, #name, typeName, performLocalLookup) /// \param typeName supplies the name used for type lookup, /// \param performLocalLookup specifies whether to first look in the local context. #define EXPRESSIBLE_BY_LITERAL_PROTOCOL_(name, typeName, performLocalLookup) \ EXPRESSIBLE_BY_LITERAL_PROTOCOL_WITH_NAME(name, "_" #name, typeName, performLocalLookup) #define BUILTIN_EXPRESSIBLE_BY_LITERAL_PROTOCOL_(name) \ BUILTIN_EXPRESSIBLE_BY_LITERAL_PROTOCOL_WITH_NAME(name, "_" #name) PROTOCOL(Sequence) PROTOCOL(IteratorProtocol) PROTOCOL(RawRepresentable) PROTOCOL(Equatable) PROTOCOL(Hashable) PROTOCOL(Comparable) PROTOCOL(Error) PROTOCOL_(ErrorCodeProtocol) PROTOCOL(OptionSet) PROTOCOL(CaseIterable) PROTOCOL(SIMDScalar) PROTOCOL_(BridgedNSError) PROTOCOL_(BridgedStoredNSError) PROTOCOL_(CFObject) PROTOCOL_(SwiftNewtypeWrapper) PROTOCOL(CodingKey) PROTOCOL(Encodable) PROTOCOL(Decodable) PROTOCOL_(ObjectiveCBridgeable) PROTOCOL_(DestructorSafeContainer) PROTOCOL(StringInterpolationProtocol) EXPRESSIBLE_BY_LITERAL_PROTOCOL(ExpressibleByArrayLiteral, "Array", false) EXPRESSIBLE_BY_LITERAL_PROTOCOL(ExpressibleByBooleanLiteral, "BooleanLiteralType", true) EXPRESSIBLE_BY_LITERAL_PROTOCOL(ExpressibleByDictionaryLiteral, "Dictionary", false) EXPRESSIBLE_BY_LITERAL_PROTOCOL(ExpressibleByExtendedGraphemeClusterLiteral, "ExtendedGraphemeClusterType", true) EXPRESSIBLE_BY_LITERAL_PROTOCOL(ExpressibleByFloatLiteral, "FloatLiteralType", true) EXPRESSIBLE_BY_LITERAL_PROTOCOL(ExpressibleByIntegerLiteral, "IntegerLiteralType", true) EXPRESSIBLE_BY_LITERAL_PROTOCOL(ExpressibleByStringInterpolation, "StringLiteralType", true) EXPRESSIBLE_BY_LITERAL_PROTOCOL(ExpressibleByStringLiteral, "StringLiteralType", true) EXPRESSIBLE_BY_LITERAL_PROTOCOL(ExpressibleByNilLiteral, nullptr, false) EXPRESSIBLE_BY_LITERAL_PROTOCOL(ExpressibleByUnicodeScalarLiteral, "UnicodeScalarType", true) EXPRESSIBLE_BY_LITERAL_PROTOCOL_(ExpressibleByColorLiteral, "_ColorLiteralType", true) EXPRESSIBLE_BY_LITERAL_PROTOCOL_(ExpressibleByImageLiteral, "_ImageLiteralType", true) EXPRESSIBLE_BY_LITERAL_PROTOCOL_(ExpressibleByFileReferenceLiteral, "_FileReferenceLiteralType", true) BUILTIN_EXPRESSIBLE_BY_LITERAL_PROTOCOL_(ExpressibleByBuiltinBooleanLiteral) BUILTIN_EXPRESSIBLE_BY_LITERAL_PROTOCOL_(ExpressibleByBuiltinExtendedGraphemeClusterLiteral) BUILTIN_EXPRESSIBLE_BY_LITERAL_PROTOCOL_(ExpressibleByBuiltinFloatLiteral) BUILTIN_EXPRESSIBLE_BY_LITERAL_PROTOCOL_(ExpressibleByBuiltinIntegerLiteral) BUILTIN_EXPRESSIBLE_BY_LITERAL_PROTOCOL_(ExpressibleByBuiltinStringLiteral) BUILTIN_EXPRESSIBLE_BY_LITERAL_PROTOCOL_(ExpressibleByBuiltinUnicodeScalarLiteral) #undef EXPRESSIBLE_BY_LITERAL_PROTOCOL #undef EXPRESSIBLE_BY_LITERAL_PROTOCOL_ #undef EXPRESSIBLE_BY_LITERAL_PROTOCOL_WITH_NAME #undef BUILTIN_EXPRESSIBLE_BY_LITERAL_PROTOCOL_ #undef BUILTIN_EXPRESSIBLE_BY_LITERAL_PROTOCOL_WITH_NAME #undef PROTOCOL #undef PROTOCOL_ #undef PROTOCOL_WITH_NAME