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"
60 LLVM_PREFERRED_TYPE(
bool)
64 LLVM_PREFERRED_TYPE(
bool)
69 LLVM_PREFERRED_TYPE(
bool)
70 unsigned SwiftPrivateSpecified : 1;
73 LLVM_PREFERRED_TYPE(
bool)
74 unsigned SwiftPrivate : 1;
76 LLVM_PREFERRED_TYPE(
bool)
77 unsigned SwiftSafetyAudited : 1;
80 unsigned SwiftSafety : 2;
88 SwiftPrivate(0), SwiftSafetyAudited(0), SwiftSafety(0) {}
91 return SwiftPrivateSpecified ? std::optional<bool>(SwiftPrivate)
96 SwiftPrivateSpecified =
Private.has_value();
97 SwiftPrivate =
Private.value_or(0);
101 return SwiftSafetyAudited ? std::optional<SwiftSafetyKind>(
107 SwiftSafetyAudited = 1;
108 SwiftSafety =
static_cast<unsigned>(Safety);
127 if (!SwiftPrivateSpecified)
130 if (!SwiftSafetyAudited && RHS.SwiftSafetyAudited)
139 LLVM_DUMP_METHOD
void dump(llvm::raw_ostream &OS)
const;
147 LHS.SwiftPrivateSpecified == RHS.SwiftPrivateSpecified &&
148 LHS.SwiftPrivate == RHS.SwiftPrivate &&
149 LHS.SwiftSafetyAudited == RHS.SwiftSafetyAudited &&
155 return !(LHS == RHS);
163 std::optional<std::string> SwiftBridge;
166 std::optional<std::string> NSErrorDomain;
169 std::optional<std::string> SwiftConformance;
179 SwiftBridge = SwiftType;
183 return NSErrorDomain;
191 NSErrorDomain =
Domain ? std::optional<std::string>(std::string(*
Domain))
196 return SwiftConformance;
200 SwiftConformance = conformance;
213 if (SwiftConformance)
219 LLVM_DUMP_METHOD
void dump(llvm::raw_ostream &OS)
const;
224 LHS.SwiftBridge == RHS.SwiftBridge &&
225 LHS.NSErrorDomain == RHS.NSErrorDomain &&
226 LHS.SwiftConformance == RHS.SwiftConformance;
230 return !(LHS == RHS);
237 LLVM_PREFERRED_TYPE(
bool)
238 unsigned HasDefaultNullability : 1;
242 unsigned DefaultNullability : 2;
245 LLVM_PREFERRED_TYPE(
bool)
246 unsigned HasDesignatedInits : 1;
248 LLVM_PREFERRED_TYPE(
bool)
249 unsigned SwiftImportAsNonGenericSpecified : 1;
250 LLVM_PREFERRED_TYPE(
bool)
251 unsigned SwiftImportAsNonGeneric : 1;
253 LLVM_PREFERRED_TYPE(
bool)
254 unsigned SwiftObjCMembersSpecified : 1;
255 LLVM_PREFERRED_TYPE(
bool)
256 unsigned SwiftObjCMembers : 1;
260 : HasDefaultNullability(0), DefaultNullability(0), HasDesignatedInits(0),
261 SwiftImportAsNonGenericSpecified(
false), SwiftImportAsNonGeneric(
false),
262 SwiftObjCMembersSpecified(
false), SwiftObjCMembers(
false) {}
270 return HasDefaultNullability
271 ? std::optional<NullabilityKind>(
278 HasDefaultNullability =
true;
279 DefaultNullability =
static_cast<unsigned>(Kind);
286 return SwiftImportAsNonGenericSpecified
287 ? std::optional<bool>(SwiftImportAsNonGeneric)
291 SwiftImportAsNonGenericSpecified =
Value.has_value();
292 SwiftImportAsNonGeneric =
Value.value_or(
false);
296 return SwiftObjCMembersSpecified ? std::optional<bool>(SwiftObjCMembers)
300 SwiftObjCMembersSpecified =
Value.has_value();
301 SwiftObjCMembers =
Value.value_or(
false);
315 if (!SwiftImportAsNonGenericSpecified)
318 if (!SwiftObjCMembersSpecified)
321 HasDesignatedInits |= RHS.HasDesignatedInits;
326 LLVM_DUMP_METHOD
void dump(llvm::raw_ostream &OS);
332 LHS.HasDesignatedInits == RHS.HasDesignatedInits &&
338 return !(LHS == RHS);
358 LLVM_PREFERRED_TYPE(
bool)
359 unsigned KindAudited : 1;
366 LLVM_PREFERRED_TYPE(
bool)
367 unsigned LevelAudited : 1;
373 : Kind(0), KindAudited(
false), Level(0), LevelAudited(
false),
376 std::optional<BoundsSafetyKind>
getKind()
const {
377 return KindAudited ? std::optional<BoundsSafetyKind>(
384 Kind =
static_cast<unsigned>(
kind);
388 return LevelAudited ? std::optional<unsigned>(Level) : std::nullopt;
398 LLVM_DUMP_METHOD
void dump(llvm::raw_ostream &OS)
const;
403 return LHS.KindAudited == RHS.KindAudited && LHS.Kind == RHS.Kind &&
404 LHS.LevelAudited == RHS.LevelAudited && LHS.Level == RHS.Level &&
410 return !(LHS == RHS);
416 LLVM_PREFERRED_TYPE(
bool)
417 unsigned NullabilityAudited : 1;
422 unsigned Nullable : 2;
431 return NullabilityAudited ? std::optional<NullabilityKind>(
437 NullabilityAudited =
true;
438 Nullable =
static_cast<unsigned>(
kind);
441 const std::string &
getType()
const {
return Type; }
449 if (!NullabilityAudited && RHS.NullabilityAudited)
457 LLVM_DUMP_METHOD
void dump(llvm::raw_ostream &OS)
const;
462 LHS.NullabilityAudited == RHS.NullabilityAudited &&
463 LHS.Nullable == RHS.Nullable && LHS.Type == RHS.Type;
467 return !(LHS == RHS);
472 LLVM_PREFERRED_TYPE(
bool)
473 unsigned SwiftImportAsAccessorsSpecified : 1;
474 LLVM_PREFERRED_TYPE(
bool)
475 unsigned SwiftImportAsAccessors : 1;
479 : SwiftImportAsAccessorsSpecified(
false), SwiftImportAsAccessors(
false) {}
482 return SwiftImportAsAccessorsSpecified
483 ? std::optional<bool>(SwiftImportAsAccessors)
487 SwiftImportAsAccessorsSpecified =
Value.has_value();
488 SwiftImportAsAccessors =
Value.value_or(
false);
508 if (!SwiftImportAsAccessorsSpecified)
514 LLVM_DUMP_METHOD
void dump(llvm::raw_ostream &OS)
const;
525 return !(LHS == RHS);
531 LLVM_PREFERRED_TYPE(
bool)
532 unsigned NoEscapeSpecified : 1;
535 LLVM_PREFERRED_TYPE(
bool)
536 unsigned NoEscape : 1;
539 LLVM_PREFERRED_TYPE(
bool)
540 unsigned LifetimeboundSpecified : 1;
543 LLVM_PREFERRED_TYPE(
bool)
544 unsigned Lifetimebound : 1;
549 unsigned RawRetainCountConvention : 3;
556 LifetimeboundSpecified(
false), Lifetimebound(
false),
560 return NoEscapeSpecified ? std::optional<bool>(NoEscape) : std::nullopt;
563 NoEscapeSpecified =
Value.has_value();
564 NoEscape =
Value.value_or(
false);
568 return LifetimeboundSpecified ? std::optional<bool>(Lifetimebound)
572 LifetimeboundSpecified =
Value.has_value();
573 Lifetimebound =
Value.value_or(
false);
577 if (!RawRetainCountConvention)
583 RawRetainCountConvention =
Value ?
static_cast<unsigned>(*Value) + 1 : 0;
590 if (!NoEscapeSpecified && RHS.NoEscapeSpecified) {
591 NoEscapeSpecified =
true;
592 NoEscape = RHS.NoEscape;
595 if (!LifetimeboundSpecified && RHS.LifetimeboundSpecified) {
596 LifetimeboundSpecified =
true;
597 Lifetimebound = RHS.Lifetimebound;
600 if (!RawRetainCountConvention)
601 RawRetainCountConvention = RHS.RawRetainCountConvention;
611 LLVM_DUMP_METHOD
void dump(llvm::raw_ostream &OS)
const;
616 LHS.NoEscapeSpecified == RHS.NoEscapeSpecified &&
617 LHS.NoEscape == RHS.NoEscape &&
618 LHS.LifetimeboundSpecified == RHS.LifetimeboundSpecified &&
619 LHS.Lifetimebound == RHS.Lifetimebound &&
620 LHS.RawRetainCountConvention == RHS.RawRetainCountConvention &&
625 return !(LHS == RHS);
631 static constexpr const uint64_t NullabilityKindMask = 0x3;
632 static constexpr const unsigned NullabilityKindSize = 2;
634 static constexpr const unsigned ReturnInfoIndex = 0;
642 LLVM_PREFERRED_TYPE(
bool)
677 assert(
static_cast<unsigned>(
kind) < NullabilityKindMask);
685 ~(NullabilityKindMask << (
index * NullabilityKindSize));
688 unsigned kindValue = (
static_cast<unsigned>(
kind))
689 << (
index * NullabilityKindSize);
704 return getTypeInfo(
index + 1);
725 "Checking the type adjustment on non-audited method.");
731 return static_cast<NullabilityKind>(nullability & NullabilityKindMask);
735 LLVM_DUMP_METHOD
void dump(llvm::raw_ostream &OS)
const;
749 return !(LHS == RHS);
756 LLVM_PREFERRED_TYPE(
bool)
760 LLVM_PREFERRED_TYPE(
bool)
780 LLVM_DUMP_METHOD
void dump(llvm::raw_ostream &OS);
790 return !(LHS == RHS);
818 LLVM_DUMP_METHOD
void dump(llvm::raw_ostream &OS);
826 return !(LHS == RHS);
837 LLVM_PREFERRED_TYPE(
bool)
838 unsigned HasFlagEnum : 1;
839 LLVM_PREFERRED_TYPE(
bool)
840 unsigned IsFlagEnum : 1;
842 LLVM_PREFERRED_TYPE(
bool)
843 unsigned SwiftCopyableSpecified : 1;
844 LLVM_PREFERRED_TYPE(
bool)
845 unsigned SwiftCopyable : 1;
847 LLVM_PREFERRED_TYPE(
bool)
848 unsigned SwiftEscapableSpecified : 1;
849 LLVM_PREFERRED_TYPE(
bool)
850 unsigned SwiftEscapable : 1;
862 : HasFlagEnum(0), IsFlagEnum(0), SwiftCopyableSpecified(
false),
863 SwiftCopyable(
false), SwiftEscapableSpecified(
false),
864 SwiftEscapable(
false) {}
872 HasFlagEnum =
Value.has_value();
873 IsFlagEnum =
Value.value_or(
false);
877 return SwiftCopyableSpecified ? std::optional<bool>(SwiftCopyable)
881 SwiftCopyableSpecified =
Value.has_value();
882 SwiftCopyable =
Value.value_or(
false);
886 return SwiftEscapableSpecified ? std::optional<bool>(SwiftEscapable)
891 SwiftEscapableSpecified =
Value.has_value();
892 SwiftEscapable =
Value.value_or(
false);
915 if (!SwiftCopyableSpecified)
918 if (!SwiftEscapableSpecified)
926 LLVM_DUMP_METHOD
void dump(llvm::raw_ostream &OS);
943 return !(LHS == RHS);
962 LLVM_DUMP_METHOD
void dump(llvm::raw_ostream &OS)
const;
971 return !(LHS == RHS);
*collection of selector each with an associated kind and an ordered *collection of selectors A selector has a kind
Defines various enumerations that describe declaration and type specifiers.
std::optional< BoundsSafetyKind > getKind() const
LLVM_DUMP_METHOD void dump(llvm::raw_ostream &OS) const
std::optional< unsigned > getLevel() const
friend bool operator==(const BoundsSafetyInfo &, const BoundsSafetyInfo &)
std::string ExternalBounds
void setKindAudited(BoundsSafetyKind kind)
void setLevelAudited(unsigned level)
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 setSwiftSafety(SwiftSafetyKind Safety)
void setSwiftPrivate(std::optional< bool > Private)
friend bool operator==(const CommonEntityInfo &, const CommonEntityInfo &)
std::string UnavailableMsg
Message to use when this entity is unavailable.
std::optional< SwiftSafetyKind > getSwiftSafety() const
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)
friend bool operator==(const CommonTypeInfo &, const CommonTypeInfo &)
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)
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)
bool hasDesignatedInits() const
void setSwiftImportAsNonGeneric(std::optional< bool > Value)
void setHasDesignatedInits(bool Value)
friend bool operator==(const ContextInfo &, const ContextInfo &)
ContextInfo & operator|=(const ContextInfo &RHS)
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
friend bool operator==(const FunctionInfo &, const FunctionInfo &)
NullabilityKind getParamTypeInfo(unsigned index) const
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 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
friend bool operator==(const ObjCPropertyInfo &, const ObjCPropertyInfo &)
ObjCPropertyInfo & operator|=(const ObjCPropertyInfo &RHS)
ObjCPropertyInfo & operator|=(const ContextInfo &RHS)
Merge class-wide information into the given property.
Describes a function or method parameter.
std::optional< BoundsSafetyInfo > BoundsSafety
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)
friend bool operator==(const TagInfo &, const TagInfo &)
std::optional< bool > isSwiftEscapable() const
void setFlagEnum(std::optional< bool > Value)
Describes API notes data for a typedef.
LLVM_DUMP_METHOD void dump(llvm::raw_ostream &OS) const
TypedefInfo & operator|=(const TypedefInfo &RHS)
friend bool operator==(const TypedefInfo &, const TypedefInfo &)
std::optional< SwiftNewTypeKind > SwiftWrapper
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
VariableInfo & operator|=(const VariableInfo &RHS)
std::optional< NullabilityKind > getNullability() const
const std::string & getType() const
friend bool operator==(const VariableInfo &, const VariableInfo &)
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