blob: 6511fb4da55e64abfdc8595118d7196b61446db5 [file] [log] [blame]
//===--- Attr.def - Swift Attributes 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 attributes.
//
//===----------------------------------------------------------------------===//
#ifndef DECL_ATTR
#define DECL_ATTR(SPELLING, CLASS, OPTIONS, CODE)
#endif
#ifndef CONTEXTUAL_DECL_ATTR
#define CONTEXTUAL_DECL_ATTR(SPELLING, CLASS, OPTIONS, CODE) \
DECL_ATTR(SPELLING, CLASS, OPTIONS, CODE)
#endif
#ifndef SIMPLE_DECL_ATTR
#define SIMPLE_DECL_ATTR(X, CLASS, OPTIONS, CODE) \
DECL_ATTR(X, CLASS, OPTIONS, CODE)
#endif
#ifndef CONTEXTUAL_SIMPLE_DECL_ATTR
#define CONTEXTUAL_SIMPLE_DECL_ATTR(X, CLASS, OPTIONS, CODE) \
SIMPLE_DECL_ATTR(X, CLASS, OPTIONS, CODE)
#endif
#ifndef DECL_ATTR_ALIAS
#define DECL_ATTR_ALIAS(SPELLING, CLASS)
#endif
#ifndef CONTEXTUAL_DECL_ATTR_ALIAS
#define CONTEXTUAL_DECL_ATTR_ALIAS(SPELLING, CLASS) \
DECL_ATTR_ALIAS(SPELLING, CLASS)
#endif
#ifndef TYPE_ATTR
#define TYPE_ATTR(X)
#endif
// Type attributes
TYPE_ATTR(autoclosure)
TYPE_ATTR(convention)
TYPE_ATTR(noreturn)
TYPE_ATTR(noescape)
TYPE_ATTR(escaping)
// SIL-specific attributes
TYPE_ATTR(block_storage)
TYPE_ATTR(box)
TYPE_ATTR(dynamic_self)
TYPE_ATTR(sil_unowned)
TYPE_ATTR(sil_unmanaged)
TYPE_ATTR(sil_weak)
TYPE_ATTR(error)
TYPE_ATTR(out)
TYPE_ATTR(in)
TYPE_ATTR(inout)
TYPE_ATTR(inout_aliasable)
TYPE_ATTR(in_guaranteed)
TYPE_ATTR(in_constant)
TYPE_ATTR(owned)
TYPE_ATTR(unowned_inner_pointer)
TYPE_ATTR(guaranteed)
TYPE_ATTR(autoreleased)
TYPE_ATTR(callee_owned)
TYPE_ATTR(callee_guaranteed)
TYPE_ATTR(objc_metatype)
TYPE_ATTR(opened)
TYPE_ATTR(pseudogeneric)
TYPE_ATTR(yields)
TYPE_ATTR(yield_once)
TYPE_ATTR(yield_many)
// SIL metatype attributes.
TYPE_ATTR(thin)
TYPE_ATTR(thick)
// Schema for DECL_ATTR:
//
// - Attribute name.
// - Class name without the 'Attr' suffix (ignored for
// - Options for the attribute, including:
// * the declarations the attribute can appear on
// * whether duplicates are allowed
// * whether the attribute is considered a decl modifier or not (no '@')
// - Unique attribute identifier used for serialization. This
// can never be changed.
//
// SIMPLE_DECL_ATTR is the same, but the class becomes
// SimpleDeclAttr<DAK_##NAME>.
//
DECL_ATTR(_silgen_name, SILGenName,
OnFunc | OnConstructor | OnDestructor | LongAttribute |
UserInaccessible, 0)
DECL_ATTR(available, Available,
OnFunc | OnStruct | OnEnum | OnClass | OnProtocol | OnVar |
OnConstructor | OnDestructor | OnTypeAlias | OnSubscript |
OnEnumElement | OnExtension | AllowMultipleAttributes | LongAttribute, 1)
CONTEXTUAL_SIMPLE_DECL_ATTR(final, Final, DeclModifier |
OnClass | OnFunc | OnVar | OnSubscript,
2)
DECL_ATTR(objc, ObjC,
OnFunc | OnClass | OnProtocol | OnExtension | OnVar | OnSubscript |
OnConstructor | OnDestructor | OnEnum | OnEnumElement, 3)
CONTEXTUAL_SIMPLE_DECL_ATTR(required, Required, DeclModifier |
OnConstructor,
4)
CONTEXTUAL_SIMPLE_DECL_ATTR(optional, Optional, DeclModifier |
OnConstructor | OnFunc | OnVar | OnSubscript,
5)
/// NOTE: 6 is unused
SIMPLE_DECL_ATTR(noreturn, NoReturn, OnFunc, 7)
SIMPLE_DECL_ATTR(_exported, Exported, OnImport | UserInaccessible, 8)
SIMPLE_DECL_ATTR(dynamicMemberLookup, DynamicMemberLookup,
OnClass | OnStruct | OnEnum | OnProtocol, 9)
SIMPLE_DECL_ATTR(NSCopying, NSCopying,
OnVar, 10)
SIMPLE_DECL_ATTR(IBAction, IBAction,
OnFunc, 11)
SIMPLE_DECL_ATTR(IBDesignable, IBDesignable,
OnClass | OnExtension, 12)
SIMPLE_DECL_ATTR(IBInspectable, IBInspectable,
OnVar, 13)
SIMPLE_DECL_ATTR(IBOutlet, IBOutlet,
OnVar, 14)
SIMPLE_DECL_ATTR(NSManaged, NSManaged, OnVar | OnFunc, 15)
CONTEXTUAL_SIMPLE_DECL_ATTR(lazy, Lazy, DeclModifier |
OnVar,
16)
SIMPLE_DECL_ATTR(LLDBDebuggerFunction, LLDBDebuggerFunction, OnFunc |
UserInaccessible, 17)
SIMPLE_DECL_ATTR(UIApplicationMain, UIApplicationMain,
OnClass, 18)
SIMPLE_DECL_ATTR(unsafe_no_objc_tagged_pointer, UnsafeNoObjCTaggedPointer,
OnProtocol | UserInaccessible, 19)
DECL_ATTR(inline, Inline, OnFunc | OnConstructor, 20)
DECL_ATTR(_semantics, Semantics,
OnFunc | OnConstructor | OnDestructor | OnSubscript |
AllowMultipleAttributes | UserInaccessible, 21)
CONTEXTUAL_SIMPLE_DECL_ATTR(dynamic, Dynamic, DeclModifier |
OnFunc | OnVar | OnSubscript | OnConstructor,
22)
CONTEXTUAL_SIMPLE_DECL_ATTR(infix, Infix, DeclModifier |
OnFunc | OnOperator,
23)
CONTEXTUAL_SIMPLE_DECL_ATTR(prefix, Prefix, DeclModifier |
OnFunc | OnOperator,
24)
CONTEXTUAL_SIMPLE_DECL_ATTR(postfix, Postfix, DeclModifier |
OnFunc | OnOperator,
25)
SIMPLE_DECL_ATTR(_transparent, Transparent,
OnFunc|OnConstructor|OnVar|UserInaccessible, 26)
SIMPLE_DECL_ATTR(requires_stored_property_inits, RequiresStoredPropertyInits,
OnClass, 27)
SIMPLE_DECL_ATTR(nonobjc, NonObjC,
OnExtension | OnFunc | OnVar | OnSubscript | OnConstructor, 30)
SIMPLE_DECL_ATTR(_fixed_layout, FixedLayout,
OnVar | OnClass | OnStruct | UserInaccessible, 31)
SIMPLE_DECL_ATTR(inlinable, Inlinable,
OnVar | OnSubscript | OnFunc | OnConstructor | OnDestructor |
UserInaccessible, 32)
DECL_ATTR(_specialize, Specialize,
OnConstructor | OnFunc | AllowMultipleAttributes | LongAttribute
| UserInaccessible, 33)
SIMPLE_DECL_ATTR(objcMembers, ObjCMembers, OnClass, 34)
CONTEXTUAL_SIMPLE_DECL_ATTR(__consuming, Consuming, DeclModifier |
OnFunc | UserInaccessible |
NotSerialized, 40)
CONTEXTUAL_SIMPLE_DECL_ATTR(mutating, Mutating, DeclModifier |
OnFunc |
NotSerialized, 41)
CONTEXTUAL_SIMPLE_DECL_ATTR(nonmutating, NonMutating, DeclModifier |
OnFunc |
NotSerialized, 42)
CONTEXTUAL_SIMPLE_DECL_ATTR(convenience, Convenience,
OnConstructor | DeclModifier | NotSerialized, 43)
CONTEXTUAL_SIMPLE_DECL_ATTR(override, Override, DeclModifier |
OnFunc | OnVar | OnSubscript | OnConstructor |
NotSerialized, 44)
SIMPLE_DECL_ATTR(sil_stored, SILStored, OnVar | NotSerialized | SILOnly,
/* Not serialized */45)
DECL_ATTR(private, AccessControl,
OnFunc | OnExtension | OnTypeAlias | OnStruct | OnEnum |
OnClass | OnProtocol | OnVar | OnSubscript | OnConstructor |
DeclModifier | NotSerialized,
/* Not serialized */ 46)
DECL_ATTR_ALIAS(fileprivate, AccessControl)
DECL_ATTR_ALIAS(internal, AccessControl)
DECL_ATTR_ALIAS(public, AccessControl)
CONTEXTUAL_DECL_ATTR_ALIAS(open, AccessControl)
DECL_ATTR(__setter_access, SetterAccess,
OnVar | OnSubscript | DeclModifier | NotSerialized | RejectByParser,
/* Not serialized */ 47)
DECL_ATTR(__raw_doc_comment, RawDocComment, OnAnyDecl |
NotSerialized | RejectByParser, /* Not serialized */48)
// Also handles unowned and unowned(weak).
CONTEXTUAL_DECL_ATTR(weak, ReferenceOwnership, DeclModifier |
OnVar | OnParam |
NotSerialized, 49)
CONTEXTUAL_DECL_ATTR_ALIAS(unowned, ReferenceOwnership)
DECL_ATTR(effects, Effects, OnFunc | OnConstructor | OnDestructor |
UserInaccessible, 50)
DECL_ATTR(__objc_bridged, ObjCBridged, OnClass | NotSerialized | RejectByParser,
/* Not serialized */51)
SIMPLE_DECL_ATTR(NSApplicationMain, NSApplicationMain,
OnClass, 52)
SIMPLE_DECL_ATTR(_objc_non_lazy_realization, ObjCNonLazyRealization,
OnClass | UserInaccessible, 53)
DECL_ATTR(__synthesized_protocol, SynthesizedProtocol,
OnStruct | OnEnum | OnClass | NotSerialized | RejectByParser,
/* Not serialized */54)
SIMPLE_DECL_ATTR(testable, Testable,
OnImport | NotSerialized | UserInaccessible,
/* Not serialized */ 55)
DECL_ATTR(_alignment, Alignment, OnStruct | OnEnum | UserInaccessible, 56)
SIMPLE_DECL_ATTR(rethrows, Rethrows,
OnFunc | OnConstructor | RejectByParser, 57)
DECL_ATTR(_swift_native_objc_runtime_base, SwiftNativeObjCRuntimeBase,
OnClass | UserInaccessible, 59)
CONTEXTUAL_SIMPLE_DECL_ATTR(indirect, Indirect, DeclModifier |
OnEnum | OnEnumElement,
60)
SIMPLE_DECL_ATTR(warn_unqualified_access, WarnUnqualifiedAccess,
OnFunc /*| OnVar*/ | LongAttribute, 61)
SIMPLE_DECL_ATTR(_show_in_interface, ShowInInterface,
OnProtocol | UserInaccessible, 62)
DECL_ATTR(_cdecl, CDecl,
OnFunc | LongAttribute | UserInaccessible, 63)
SIMPLE_DECL_ATTR(usableFromInline, UsableFromInline,
OnFunc | OnVar | OnSubscript | OnConstructor |
OnDestructor | OnStruct | OnEnum | OnClass | OnTypeAlias |
OnProtocol | LongAttribute | UserInaccessible,
64)
SIMPLE_DECL_ATTR(discardableResult, DiscardableResult,
OnFunc | OnConstructor | LongAttribute, 65)
SIMPLE_DECL_ATTR(GKInspectable, GKInspectable, OnVar, 66)
DECL_ATTR(_implements, Implements,
OnFunc | OnVar | OnSubscript | OnTypeAlias
| NotSerialized | UserInaccessible,
/* Not serialized */ 67)
DECL_ATTR(_objcRuntimeName, ObjCRuntimeName,
OnClass | NotSerialized | UserInaccessible | RejectByParser,
/*Not serialized */ 68)
SIMPLE_DECL_ATTR(_staticInitializeObjCMetadata, StaticInitializeObjCMetadata,
OnClass | NotSerialized | LongAttribute | RejectByParser,
/*Not serialized */ 69)
DECL_ATTR(_restatedObjCConformance, RestatedObjCConformance,
OnProtocol | NotSerialized | LongAttribute | RejectByParser,
/*Not serialized */ 70)
// HACK: Attribute needed to preserve source compatibility by downgrading errors
// due to an SDK change in Dispatch
SIMPLE_DECL_ATTR(_downgrade_exhaustivity_check, DowngradeExhaustivityCheck,
OnEnumElement | LongAttribute | UserInaccessible, 71)
SIMPLE_DECL_ATTR(_implicitly_unwrapped_optional,
ImplicitlyUnwrappedOptional,
OnFunc | OnVar | OnParam | OnSubscript | OnConstructor
| RejectByParser, 72)
DECL_ATTR(_optimize, Optimize,
OnFunc | OnConstructor | OnDestructor | OnSubscript | OnVar |
UserInaccessible, 73)
DECL_ATTR(_clangImporterSynthesizedType, ClangImporterSynthesizedType,
OnClass | OnStruct | OnEnum | OnProtocol | OnTypeAlias |
LongAttribute | NotSerialized | RejectByParser | UserInaccessible,
/*Not serialized*/74)
SIMPLE_DECL_ATTR(_weakLinked, WeakLinked,
OnEnum | OnStruct | OnClass | OnProtocol |
OnFunc | OnVar | OnSubscript | OnConstructor | OnEnumElement |
UserInaccessible,
75)
SIMPLE_DECL_ATTR(_frozen, Frozen, OnEnum | UserInaccessible, 76)
#undef TYPE_ATTR
#undef DECL_ATTR_ALIAS
#undef CONTEXTUAL_DECL_ATTR_ALIAS
#undef SIMPLE_DECL_ATTR
#undef CONTEXTUAL_SIMPLE_DECL_ATTR
#undef DECL_ATTR
#undef CONTEXTUAL_DECL_ATTR