//===--- 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)
DECL_ATTR(autoclosure, AutoClosure, OnParam, 28)
SIMPLE_DECL_ATTR(noescape, NoEscape, OnParam, 29)

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(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, Accessibility,
          OnFunc | OnExtension | OnTypeAlias | OnStruct | OnEnum |
          OnClass | OnProtocol | OnVar | OnSubscript | OnConstructor |
          DeclModifier | NotSerialized,
          /* Not serialized */ 46)
DECL_ATTR_ALIAS(fileprivate, Accessibility)
DECL_ATTR_ALIAS(internal, Accessibility)
DECL_ATTR_ALIAS(public, Accessibility)


DECL_ATTR(__accessibility, SetterAccessibility,
          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)

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