Files
swift-mirror/include/swift/AST/Attr.def
Jordan Rose 3f4cba25d4 Use a semantic ClangImporterSynthesizedTypeAttr for error structs
...rather than the ad hoc CustomTypeNameManglingAttr I was using
before. As John pointed out, the AST should be semantic wherever
possible.

We may someday want to get out of this being an attribute altogether,
or duplicating information that's available in the original Clang
node, by actually storing a reference to that node somewhere. This is
tricky and mixed up with deciding what hasClangNode() or
getClangDecl() would mean, though, so for now the attribute just
carries the information we need.
2018-01-24 10:57:52 -08:00

314 lines
10 KiB
C++

//===--- 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)
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)
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 | 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)
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 |
OnDestructor | 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)
// 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)
#undef TYPE_ATTR
#undef DECL_ATTR_ALIAS
#undef SIMPLE_DECL_ATTR
#undef DECL_ATTR