9#ifndef LLVM_CLANG_APINOTES_TYPES_H
10#define LLVM_CLANG_APINOTES_TYPES_H
13#include "llvm/ADT/ArrayRef.h"
14#include "llvm/ADT/StringRef.h"
58 LLVM_PREFERRED_TYPE(
bool)
62 LLVM_PREFERRED_TYPE(
bool)
67 LLVM_PREFERRED_TYPE(
bool)
68 unsigned SwiftPrivateSpecified : 1;
71 LLVM_PREFERRED_TYPE(
bool)
72 unsigned SwiftPrivate : 1;
83 return SwiftPrivateSpecified ? std::optional<bool>(SwiftPrivate)
88 SwiftPrivateSpecified =
Private.has_value();
89 SwiftPrivate =
Private.value_or(0);
108 if (!SwiftPrivateSpecified)
117 LLVM_DUMP_METHOD
void dump(llvm::raw_ostream &OS)
const;
125 LHS.SwiftPrivateSpecified == RHS.SwiftPrivateSpecified &&
131 return !(LHS == RHS);
139 std::optional<std::string> SwiftBridge;
142 std::optional<std::string> NSErrorDomain;
145 std::optional<std::string> SwiftConformance;
155 SwiftBridge = SwiftType;
159 return NSErrorDomain;
167 NSErrorDomain =
Domain ? std::optional<std::string>(std::string(*
Domain))
172 return SwiftConformance;
176 SwiftConformance = conformance;
189 if (SwiftConformance)
195 LLVM_DUMP_METHOD
void dump(llvm::raw_ostream &OS)
const;
200 LHS.SwiftBridge == RHS.SwiftBridge &&
201 LHS.NSErrorDomain == RHS.NSErrorDomain &&
202 LHS.SwiftConformance == RHS.SwiftConformance;
206 return !(LHS == RHS);
213 LLVM_PREFERRED_TYPE(
bool)
214 unsigned HasDefaultNullability : 1;
218 unsigned DefaultNullability : 2;
221 LLVM_PREFERRED_TYPE(
bool)
222 unsigned HasDesignatedInits : 1;
224 LLVM_PREFERRED_TYPE(
bool)
225 unsigned SwiftImportAsNonGenericSpecified : 1;
226 LLVM_PREFERRED_TYPE(
bool)
227 unsigned SwiftImportAsNonGeneric : 1;
229 LLVM_PREFERRED_TYPE(
bool)
230 unsigned SwiftObjCMembersSpecified : 1;
231 LLVM_PREFERRED_TYPE(
bool)
232 unsigned SwiftObjCMembers : 1;
236 : HasDefaultNullability(0), DefaultNullability(0), HasDesignatedInits(0),
237 SwiftImportAsNonGenericSpecified(
false), SwiftImportAsNonGeneric(
false),
238 SwiftObjCMembersSpecified(
false), SwiftObjCMembers(
false) {}
246 return HasDefaultNullability
247 ? std::optional<NullabilityKind>(
254 HasDefaultNullability =
true;
255 DefaultNullability =
static_cast<unsigned>(
Kind);
262 return SwiftImportAsNonGenericSpecified
263 ? std::optional<bool>(SwiftImportAsNonGeneric)
267 SwiftImportAsNonGenericSpecified =
Value.has_value();
268 SwiftImportAsNonGeneric =
Value.value_or(
false);
272 return SwiftObjCMembersSpecified ? std::optional<bool>(SwiftObjCMembers)
276 SwiftObjCMembersSpecified =
Value.has_value();
277 SwiftObjCMembers =
Value.value_or(
false);
291 if (!SwiftImportAsNonGenericSpecified)
294 if (!SwiftObjCMembersSpecified)
297 HasDesignatedInits |= RHS.HasDesignatedInits;
302 LLVM_DUMP_METHOD
void dump(llvm::raw_ostream &OS);
308 LHS.HasDesignatedInits == RHS.HasDesignatedInits &&
314 return !(LHS == RHS);
320 LLVM_PREFERRED_TYPE(
bool)
321 unsigned NullabilityAudited : 1;
326 unsigned Nullable : 2;
335 return NullabilityAudited ? std::optional<NullabilityKind>(
341 NullabilityAudited =
true;
342 Nullable =
static_cast<unsigned>(kind);
353 if (!NullabilityAudited && RHS.NullabilityAudited)
361 LLVM_DUMP_METHOD
void dump(llvm::raw_ostream &OS)
const;
366 LHS.NullabilityAudited == RHS.NullabilityAudited &&
367 LHS.Nullable == RHS.Nullable && LHS.Type == RHS.Type;
371 return !(LHS == RHS);
376 LLVM_PREFERRED_TYPE(
bool)
377 unsigned SwiftImportAsAccessorsSpecified : 1;
378 LLVM_PREFERRED_TYPE(
bool)
379 unsigned SwiftImportAsAccessors : 1;
383 : SwiftImportAsAccessorsSpecified(
false), SwiftImportAsAccessors(
false) {}
386 return SwiftImportAsAccessorsSpecified
387 ? std::optional<bool>(SwiftImportAsAccessors)
391 SwiftImportAsAccessorsSpecified =
Value.has_value();
392 SwiftImportAsAccessors =
Value.value_or(
false);
412 if (!SwiftImportAsAccessorsSpecified)
418 LLVM_DUMP_METHOD
void dump(llvm::raw_ostream &OS)
const;
429 return !(LHS == RHS);
435 LLVM_PREFERRED_TYPE(
bool)
436 unsigned NoEscapeSpecified : 1;
439 LLVM_PREFERRED_TYPE(
bool)
440 unsigned NoEscape : 1;
443 LLVM_PREFERRED_TYPE(
bool)
444 unsigned LifetimeboundSpecified : 1;
447 LLVM_PREFERRED_TYPE(
bool)
448 unsigned Lifetimebound : 1;
453 unsigned RawRetainCountConvention : 3;
458 LifetimeboundSpecified(
false), Lifetimebound(
false),
459 RawRetainCountConvention() {}
462 return NoEscapeSpecified ? std::optional<bool>(NoEscape) : std::nullopt;
465 NoEscapeSpecified =
Value.has_value();
466 NoEscape =
Value.value_or(
false);
470 return LifetimeboundSpecified ? std::optional<bool>(Lifetimebound)
474 LifetimeboundSpecified =
Value.has_value();
475 Lifetimebound =
Value.value_or(
false);
479 if (!RawRetainCountConvention)
485 RawRetainCountConvention =
Value ?
static_cast<unsigned>(*Value) + 1 : 0;
492 if (!NoEscapeSpecified && RHS.NoEscapeSpecified) {
493 NoEscapeSpecified =
true;
494 NoEscape = RHS.NoEscape;
497 if (!LifetimeboundSpecified && RHS.LifetimeboundSpecified) {
498 LifetimeboundSpecified =
true;
499 Lifetimebound = RHS.Lifetimebound;
502 if (!RawRetainCountConvention)
503 RawRetainCountConvention = RHS.RawRetainCountConvention;
510 LLVM_DUMP_METHOD
void dump(llvm::raw_ostream &OS)
const;
515 LHS.NoEscapeSpecified == RHS.NoEscapeSpecified &&
516 LHS.NoEscape == RHS.NoEscape &&
517 LHS.LifetimeboundSpecified == RHS.LifetimeboundSpecified &&
518 LHS.Lifetimebound == RHS.Lifetimebound &&
519 LHS.RawRetainCountConvention == RHS.RawRetainCountConvention;
523 return !(LHS == RHS);
529 static constexpr const uint64_t NullabilityKindMask = 0x3;
530 static constexpr const unsigned NullabilityKindSize = 2;
532 static constexpr const unsigned ReturnInfoIndex = 0;
540 LLVM_PREFERRED_TYPE(
bool)
575 assert(
static_cast<unsigned>(kind) < NullabilityKindMask);
583 ~(NullabilityKindMask << (index * NullabilityKindSize));
586 unsigned kindValue = (
static_cast<unsigned>(kind))
587 << (index * NullabilityKindSize);
602 return getTypeInfo(index + 1);
623 "Checking the type adjustment on non-audited method.");
629 return static_cast<NullabilityKind>(nullability & NullabilityKindMask);
633 LLVM_DUMP_METHOD
void dump(llvm::raw_ostream &OS)
const;
647 return !(LHS == RHS);
654 LLVM_PREFERRED_TYPE(
bool)
658 LLVM_PREFERRED_TYPE(
bool)
678 LLVM_DUMP_METHOD
void dump(llvm::raw_ostream &OS);
688 return !(LHS == RHS);
716 LLVM_DUMP_METHOD
void dump(llvm::raw_ostream &OS);
724 return !(LHS == RHS);
735 LLVM_PREFERRED_TYPE(
bool)
736 unsigned HasFlagEnum : 1;
737 LLVM_PREFERRED_TYPE(
bool)
738 unsigned IsFlagEnum : 1;
740 LLVM_PREFERRED_TYPE(
bool)
741 unsigned SwiftCopyableSpecified : 1;
742 LLVM_PREFERRED_TYPE(
bool)
743 unsigned SwiftCopyable : 1;
745 LLVM_PREFERRED_TYPE(
bool)
746 unsigned SwiftEscapableSpecified : 1;
747 LLVM_PREFERRED_TYPE(
bool)
748 unsigned SwiftEscapable : 1;
760 : HasFlagEnum(0), IsFlagEnum(0), SwiftCopyableSpecified(
false),
761 SwiftCopyable(
false), SwiftEscapableSpecified(
false),
762 SwiftEscapable(
false) {}
770 HasFlagEnum =
Value.has_value();
771 IsFlagEnum =
Value.value_or(
false);
775 return SwiftCopyableSpecified ? std::optional<bool>(SwiftCopyable)
779 SwiftCopyableSpecified =
Value.has_value();
780 SwiftCopyable =
Value.value_or(
false);
784 return SwiftEscapableSpecified ? std::optional<bool>(SwiftEscapable)
789 SwiftEscapableSpecified =
Value.has_value();
790 SwiftEscapable =
Value.value_or(
false);
813 if (!SwiftCopyableSpecified)
816 if (!SwiftEscapableSpecified)
824 LLVM_DUMP_METHOD
void dump(llvm::raw_ostream &OS);
841 return !(LHS == RHS);
860 LLVM_DUMP_METHOD
void dump(llvm::raw_ostream &OS)
const;
869 return !(LHS == RHS);
enum clang::sema::@1840::IndirectLocalPathEntry::EntryKind Kind
Defines various enumerations that describe declaration and type specifiers.
The base class of the type hierarchy.
Describes API notes data for a C++ method.
std::optional< ParamInfo > This
LLVM_DUMP_METHOD void dump(llvm::raw_ostream &OS)
Describes API notes data for any entity.
unsigned UnavailableInSwift
Whether this entity is marked unavailable in Swift.
unsigned Unavailable
Whether this entity is marked unavailable.
std::string SwiftName
Swift name of this entity.
void setSwiftPrivate(std::optional< bool > Private)
std::string UnavailableMsg
Message to use when this entity is unavailable.
friend bool operator==(const CommonEntityInfo &, const CommonEntityInfo &)
LLVM_DUMP_METHOD void dump(llvm::raw_ostream &OS) const
std::optional< bool > isSwiftPrivate() const
CommonEntityInfo & operator|=(const CommonEntityInfo &RHS)
Describes API notes for types.
void setNSErrorDomain(const std::optional< llvm::StringRef > &Domain)
std::optional< std::string > getSwiftConformance() const
const std::optional< std::string > & getSwiftBridge() const
void setSwiftConformance(std::optional< std::string > conformance)
LLVM_DUMP_METHOD void dump(llvm::raw_ostream &OS) const
void setNSErrorDomain(const std::optional< std::string > &Domain)
friend bool operator==(const CommonTypeInfo &, const CommonTypeInfo &)
const std::optional< std::string > & getNSErrorDomain() const
void setSwiftBridge(std::optional< std::string > SwiftType)
CommonTypeInfo & operator|=(const CommonTypeInfo &RHS)
Opaque context ID used to refer to an Objective-C class or protocol or a C++ namespace.
ContextID(unsigned value)
Describes API notes data for an Objective-C class or protocol or a C++ namespace.
std::optional< bool > getSwiftImportAsNonGeneric() const
LLVM_DUMP_METHOD void dump(llvm::raw_ostream &OS)
std::optional< bool > getSwiftObjCMembers() const
void setDefaultNullability(NullabilityKind Kind)
Set the default nullability for properties and methods of this class.
std::optional< NullabilityKind > getDefaultNullability() const
Determine the default nullability for properties and methods of this class.
void setSwiftObjCMembers(std::optional< bool > Value)
friend bool operator==(const ContextInfo &, const ContextInfo &)
bool hasDesignatedInits() const
void setSwiftImportAsNonGeneric(std::optional< bool > Value)
void setHasDesignatedInits(bool Value)
ContextInfo & operator|=(const ContextInfo &RHS)
Describes API notes data for an enumerator.
Describes API notes data for a C/C++ record field.
API notes for a function or method.
std::string SwiftReturnOwnership
Ownership convention for return value.
void addTypeInfo(unsigned index, NullabilityKind kind)
uint64_t NullabilityPayload
Stores the nullability of the return type and the parameters.
std::optional< RetainCountConventionKind > getRetainCountConvention() const
LLVM_DUMP_METHOD void dump(llvm::raw_ostream &OS) const
void setRetainCountConvention(std::optional< RetainCountConventionKind > Value)
unsigned RawRetainCountConvention
A biased RetainCountConventionKind, where 0 means "unspecified".
std::vector< ParamInfo > Params
The function parameters.
NullabilityKind getReturnTypeInfo() const
NullabilityKind getParamTypeInfo(unsigned index) const
friend bool operator==(const FunctionInfo &, const FunctionInfo &)
unsigned NumAdjustedNullable
Number of types whose nullability is encoded with the NullabilityPayload.
std::string ResultType
The result type of this function, as a C type.
static unsigned getMaxNullabilityIndex()
void addReturnTypeInfo(NullabilityKind kind)
Adds the return type info.
unsigned NullabilityAudited
Whether the signature has been audited with respect to nullability.
void addParamTypeInfo(unsigned index, NullabilityKind kind)
Adds the parameter type info.
Describes API notes data for a global function.
Describes API notes data for a global variable.
Describes API notes data for an Objective-C method.
unsigned DesignatedInit
Whether this is a designated initializer of its class.
friend bool operator==(const ObjCMethodInfo &, const ObjCMethodInfo &)
std::optional< ParamInfo > Self
ObjCMethodInfo & operator|=(const ContextInfo &RHS)
unsigned RequiredInit
Whether this is a required initializer.
LLVM_DUMP_METHOD void dump(llvm::raw_ostream &OS)
Describes API notes data for an Objective-C property.
LLVM_DUMP_METHOD void dump(llvm::raw_ostream &OS) const
void setSwiftImportAsAccessors(std::optional< bool > Value)
std::optional< bool > getSwiftImportAsAccessors() const
ObjCPropertyInfo & operator|=(const ObjCPropertyInfo &RHS)
friend bool operator==(const ObjCPropertyInfo &, const ObjCPropertyInfo &)
ObjCPropertyInfo & operator|=(const ContextInfo &RHS)
Merge class-wide information into the given property.
Describes a function or method parameter.
void setNoEscape(std::optional< bool > Value)
std::optional< bool > isNoEscape() const
ParamInfo & operator|=(const ParamInfo &RHS)
LLVM_DUMP_METHOD void dump(llvm::raw_ostream &OS) const
std::optional< bool > isLifetimebound() const
friend bool operator==(const ParamInfo &, const ParamInfo &)
void setLifetimebound(std::optional< bool > Value)
std::optional< RetainCountConventionKind > getRetainCountConvention() const
void setRetainCountConvention(std::optional< RetainCountConventionKind > Value)
Describes API notes data for a tag.
std::optional< std::string > SwiftReleaseOp
std::optional< std::string > SwiftRetainOp
std::optional< std::string > SwiftImportAs
std::optional< std::string > SwiftDefaultOwnership
std::optional< EnumExtensibilityKind > EnumExtensibility
void setSwiftCopyable(std::optional< bool > Value)
std::optional< std::string > SwiftDestroyOp
void setSwiftEscapable(std::optional< bool > Value)
std::optional< bool > isFlagEnum() const
TagInfo & operator|=(const TagInfo &RHS)
std::optional< bool > isSwiftCopyable() const
LLVM_DUMP_METHOD void dump(llvm::raw_ostream &OS)
std::optional< bool > isSwiftEscapable() const
void setFlagEnum(std::optional< bool > Value)
friend bool operator==(const TagInfo &, const TagInfo &)
Describes API notes data for a typedef.
LLVM_DUMP_METHOD void dump(llvm::raw_ostream &OS) const
TypedefInfo & operator|=(const TypedefInfo &RHS)
std::optional< SwiftNewTypeKind > SwiftWrapper
friend bool operator==(const TypedefInfo &, const TypedefInfo &)
API notes for a variable/property.
void setNullabilityAudited(NullabilityKind kind)
void setType(const std::string &type)
LLVM_DUMP_METHOD void dump(llvm::raw_ostream &OS) const
friend bool operator==(const VariableInfo &, const VariableInfo &)
VariableInfo & operator|=(const VariableInfo &RHS)
std::optional< NullabilityKind > getNullability() const
const std::string & getType() const
bool operator!=(const CommonEntityInfo &LHS, const CommonEntityInfo &RHS)
bool operator==(const CommonEntityInfo &LHS, const CommonEntityInfo &RHS)
RetainCountConventionKind
SwiftNewTypeKind
The kind of a swift_wrapper/swift_newtype.
EnumExtensibilityKind
The payload for an enum_extensibility attribute.
static const constexpr char SOURCE_APINOTES_EXTENSION[]
The file extension used for the source representation of API notes.
const internal::VariadicAllOfMatcher< Type > type
Matches Types in the clang AST.
The JSON file list parser is used to communicate input to InstallAPI.
NullabilityKind
Describes the nullability of a particular type.
@ Nullable
Values of this type can be null.
@ NonNull
Values of this type can never be null.
@ Private
'private' clause, allowed on 'parallel', 'serial', 'loop', 'parallel loop', and 'serial loop' constru...
Diagnostic wrappers for TextAPI types for error reporting.
Context(ContextID id, ContextKind kind)
A temporary reference to an Objective-C selector, suitable for referencing selector data on the stack...
llvm::ArrayRef< llvm::StringRef > Identifiers