| //===--- KnownProtocols.def - Compiler protocol metaprogramming -*- C++ -*-===// |
| // |
| // This source file is part of the Swift.org open source project |
| // |
| // Copyright (c) 2014 - 2016 Apple Inc. and the Swift project authors |
| // Licensed under Apache License v2.0 with Runtime Library Exception |
| // |
| // See http://swift.org/LICENSE.txt for license information |
| // See http://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 LITERAL_CONVERTIBLE_PROTOCOL_WITH_NAME(Id, Name) |
| #ifndef LITERAL_CONVERTIBLE_PROTOCOL_WITH_NAME |
| #define LITERAL_CONVERTIBLE_PROTOCOL_WITH_NAME(Id, Name) \ |
| PROTOCOL_WITH_NAME(Id, Name) |
| #endif |
| |
| /// \def BUILTIN_LITERAL_CONVERTIBLE_PROTOCOL_WITH_NAME(Id, Name) |
| /// |
| /// Note that this is not a special form of LITERAL_CONVERTIBLE_PROTOCOL. |
| #ifndef BUILTIN_LITERAL_CONVERTIBLE_PROTOCOL_WITH_NAME |
| #define BUILTIN_LITERAL_CONVERTIBLE_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) |
| #define LITERAL_CONVERTIBLE_PROTOCOL(name) \ |
| LITERAL_CONVERTIBLE_PROTOCOL_WITH_NAME(name, #name) |
| #define LITERAL_CONVERTIBLE_PROTOCOL_(name) \ |
| LITERAL_CONVERTIBLE_PROTOCOL_WITH_NAME(name, "_" #name) |
| #define BUILTIN_LITERAL_CONVERTIBLE_PROTOCOL_(name) \ |
| BUILTIN_LITERAL_CONVERTIBLE_PROTOCOL_WITH_NAME(name, "_" #name) |
| |
| PROTOCOL(SequenceType) |
| PROTOCOL(GeneratorType) |
| PROTOCOL(BooleanType) |
| PROTOCOL(AnyObject) |
| PROTOCOL(RawRepresentable) |
| PROTOCOL(Equatable) |
| PROTOCOL(Hashable) |
| PROTOCOL(Comparable) |
| PROTOCOL(ErrorType) |
| PROTOCOL(OptionSetType) |
| PROTOCOL_(BridgedNSError) |
| |
| PROTOCOL_(ObjectiveCBridgeable) |
| PROTOCOL_(DestructorSafeContainer) |
| |
| LITERAL_CONVERTIBLE_PROTOCOL(ArrayLiteralConvertible) |
| LITERAL_CONVERTIBLE_PROTOCOL(BooleanLiteralConvertible) |
| LITERAL_CONVERTIBLE_PROTOCOL(DictionaryLiteralConvertible) |
| LITERAL_CONVERTIBLE_PROTOCOL(ExtendedGraphemeClusterLiteralConvertible) |
| LITERAL_CONVERTIBLE_PROTOCOL(FloatLiteralConvertible) |
| LITERAL_CONVERTIBLE_PROTOCOL(IntegerLiteralConvertible) |
| LITERAL_CONVERTIBLE_PROTOCOL(StringInterpolationConvertible) |
| LITERAL_CONVERTIBLE_PROTOCOL(StringLiteralConvertible) |
| LITERAL_CONVERTIBLE_PROTOCOL(NilLiteralConvertible) |
| LITERAL_CONVERTIBLE_PROTOCOL(UnicodeScalarLiteralConvertible) |
| |
| LITERAL_CONVERTIBLE_PROTOCOL_(ColorLiteralConvertible) |
| LITERAL_CONVERTIBLE_PROTOCOL_(ImageLiteralConvertible) |
| LITERAL_CONVERTIBLE_PROTOCOL_(FileReferenceLiteralConvertible) |
| |
| BUILTIN_LITERAL_CONVERTIBLE_PROTOCOL_(BuiltinBooleanLiteralConvertible) |
| BUILTIN_LITERAL_CONVERTIBLE_PROTOCOL_(BuiltinExtendedGraphemeClusterLiteralConvertible) |
| BUILTIN_LITERAL_CONVERTIBLE_PROTOCOL_(BuiltinFloatLiteralConvertible) |
| BUILTIN_LITERAL_CONVERTIBLE_PROTOCOL_(BuiltinIntegerLiteralConvertible) |
| BUILTIN_LITERAL_CONVERTIBLE_PROTOCOL_(BuiltinStringLiteralConvertible) |
| BUILTIN_LITERAL_CONVERTIBLE_PROTOCOL_(BuiltinUTF16StringLiteralConvertible) |
| BUILTIN_LITERAL_CONVERTIBLE_PROTOCOL_(BuiltinUnicodeScalarLiteralConvertible) |
| |
| #undef LITERAL_CONVERTIBLE_PROTOCOL |
| #undef LITERAL_CONVERTIBLE_PROTOCOL_ |
| #undef LITERAL_CONVERTIBLE_PROTOCOL_WITH_NAME |
| #undef BUILTIN_LITERAL_CONVERTIBLE_PROTOCOL_ |
| #undef BUILTIN_LITERAL_CONVERTIBLE_PROTOCOL_WITH_NAME |
| #undef PROTOCOL |
| #undef PROTOCOL_ |
| #undef PROTOCOL_WITH_NAME |