//===--- 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 SIMPLE_DECL_ATTR
#define SIMPLE_DECL_ATTR(X, CLASS, OPTIONS, CODE) DECL_ATTR(X, CLASS, OPTIONS, CODE)
#endif

#ifndef DECL_ATTR_ALIAS
#define 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)

// 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)

SIMPLE_DECL_ATTR(final, Final,
                 OnClass | OnFunc | OnVar | OnSubscript|DeclModifier, 2)

DECL_ATTR(objc, ObjC,
          OnFunc | OnClass | OnProtocol | OnExtension | OnVar | OnSubscript |
          OnConstructor | OnDestructor | OnEnum | OnEnumElement, 3)

SIMPLE_DECL_ATTR(required, Required,
                 OnConstructor|DeclModifier, 4)

SIMPLE_DECL_ATTR(optional, Optional,
                 OnConstructor|OnFunc|OnVar|OnSubscript|DeclModifier, 5)

/// NOTE: 6 is unused

SIMPLE_DECL_ATTR(noreturn, NoReturn, OnFunc, 7)

SIMPLE_DECL_ATTR(_exported, Exported, OnImport | UserInaccessible, 8)

/// NOTE: 9 is unused.

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)

SIMPLE_DECL_ATTR(lazy, Lazy, OnVar|DeclModifier, 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)

SIMPLE_DECL_ATTR(dynamic, Dynamic,
                 OnFunc | OnVar | OnSubscript | OnConstructor | DeclModifier, 22)

SIMPLE_DECL_ATTR(infix  , Infix  , OnFunc | OnOperator | DeclModifier, 23)
SIMPLE_DECL_ATTR(prefix , Prefix , OnFunc | OnOperator | DeclModifier, 24)
SIMPLE_DECL_ATTR(postfix, Postfix, OnFunc | OnOperator | DeclModifier, 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 | OnEnum | UserInaccessible, 31)

SIMPLE_DECL_ATTR(_inlineable, Inlineable,
                 OnVar | OnSubscript | OnFunc | OnConstructor | OnDestructor |
                 UserInaccessible, 32)

DECL_ATTR(_specialize, Specialize,
          OnConstructor | OnFunc | AllowMultipleAttributes | LongAttribute
          | UserInaccessible, 33)

SIMPLE_DECL_ATTR(objcMembers, ObjCMembers, OnClass, 34)

// Non-serialized attributes.

SIMPLE_DECL_ATTR(__consuming, Consuming, OnFunc | DeclModifier | NotSerialized,
                 /* Not serialized */ 40)
SIMPLE_DECL_ATTR(mutating, Mutating, OnFunc | DeclModifier | NotSerialized,
                 /* Not serialized */ 41)
SIMPLE_DECL_ATTR(nonmutating, NonMutating, OnFunc | DeclModifier | NotSerialized,
                 /* Not serialized */ 42)

SIMPLE_DECL_ATTR(convenience, Convenience,
                 OnConstructor|DeclModifier|NotSerialized, 43)

SIMPLE_DECL_ATTR(override, Override,
                 OnFunc | OnVar | OnSubscript | OnConstructor | DeclModifier |
                 NotSerialized,
                 /* Not serialized */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)


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).
DECL_ATTR(weak, Ownership, OnVar | OnParam | DeclModifier | NotSerialized,
          /* Not serialized */49)
DECL_ATTR_ALIAS(unowned, Ownership)

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, 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)

SIMPLE_DECL_ATTR(indirect, Indirect,
                 OnEnum | OnEnumElement | DeclModifier,
                 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)

// A testing attribute for Library Evolution ("resilience").
// FIXME: Replace with improved @available attribute.
SIMPLE_DECL_ATTR(_versioned, Versioned,
                 OnFunc | OnVar | OnSubscript | OnConstructor |
                 OnStruct | OnEnum | OnClass | 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)

// 70 is available; it was not a serialized attribute.

// 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)

#undef TYPE_ATTR
#undef DECL_ATTR_ALIAS
#undef SIMPLE_DECL_ATTR
#undef DECL_ATTR
