1 //===- DeclObjCCommon.h - Classes for representing declarations -*- C++ -*-===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 //
9 //  This file contains common ObjC enums and classes used in AST and
10 //  Sema.
11 //
12 //===----------------------------------------------------------------------===//
13 
14 #ifndef LLVM_CLANG_AST_DECLOBJCCOMMON_H
15 #define LLVM_CLANG_AST_DECLOBJCCOMMON_H
16 
17 namespace clang {
18 
19 /// ObjCPropertyAttribute::Kind - list of property attributes.
20 /// Keep this list in sync with LLVM's Dwarf.h ApplePropertyAttributes.s
21 namespace ObjCPropertyAttribute {
22 enum Kind {
23   kind_noattr = 0x00,
24   kind_readonly = 0x01,
25   kind_getter = 0x02,
26   kind_assign = 0x04,
27   kind_readwrite = 0x08,
28   kind_retain = 0x10,
29   kind_copy = 0x20,
30   kind_nonatomic = 0x40,
31   kind_setter = 0x80,
32   kind_atomic = 0x100,
33   kind_weak = 0x200,
34   kind_strong = 0x400,
35   kind_unsafe_unretained = 0x800,
36   /// Indicates that the nullability of the type was spelled with a
37   /// property attribute rather than a type qualifier.
38   kind_nullability = 0x1000,
39   kind_null_resettable = 0x2000,
40   kind_class = 0x4000,
41   kind_direct = 0x8000,
42   // Adding a property should change NumObjCPropertyAttrsBits
43   // Also, don't forget to update the Clang C API at CXObjCPropertyAttrKind and
44   // clang_Cursor_getObjCPropertyAttributes.
45 };
46 } // namespace ObjCPropertyAttribute::Kind
47 
48 enum {
49   /// Number of bits fitting all the property attributes.
50   NumObjCPropertyAttrsBits = 16
51 };
52 
53 } // namespace clang
54 
55 #endif // LLVM_CLANG_AST_DECLOBJCCOMMON_H
56