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);
 
 
  344  LLVM_PREFERRED_TYPE(
bool)
 
  345  unsigned NullabilityAudited : 1;
 
  350  unsigned Nullable : 2;
 
  359    return NullabilityAudited ? std::optional<NullabilityKind>(
 
 
  365    NullabilityAudited = 
true;
 
  366    Nullable = 
static_cast<unsigned>(kind);
 
 
  369  const std::string &
getType()
 const { 
return Type; }
 
  377    if (!NullabilityAudited && RHS.NullabilityAudited)
 
 
  385  LLVM_DUMP_METHOD 
void dump(llvm::raw_ostream &OS) 
const;
 
 
  390         LHS.NullabilityAudited == RHS.NullabilityAudited &&
 
  391         LHS.Nullable == RHS.Nullable && LHS.Type == RHS.Type;
 
 
  395  return !(LHS == RHS);
 
 
  400  LLVM_PREFERRED_TYPE(
bool)
 
  401  unsigned SwiftImportAsAccessorsSpecified : 1;
 
  402  LLVM_PREFERRED_TYPE(
bool)
 
  403  unsigned SwiftImportAsAccessors : 1;
 
  407      : SwiftImportAsAccessorsSpecified(
false), SwiftImportAsAccessors(
false) {}
 
 
  410    return SwiftImportAsAccessorsSpecified
 
  411               ? std::optional<bool>(SwiftImportAsAccessors)
 
 
  415    SwiftImportAsAccessorsSpecified = 
Value.has_value();
 
  416    SwiftImportAsAccessors = 
Value.value_or(
false);
 
 
  436    if (!SwiftImportAsAccessorsSpecified)
 
 
  442  LLVM_DUMP_METHOD 
void dump(llvm::raw_ostream &OS) 
const;
 
 
  453  return !(LHS == RHS);
 
 
  459  LLVM_PREFERRED_TYPE(
bool)
 
  460  unsigned NoEscapeSpecified : 1;
 
  463  LLVM_PREFERRED_TYPE(
bool)
 
  464  unsigned NoEscape : 1;
 
  467  LLVM_PREFERRED_TYPE(
bool)
 
  468  unsigned LifetimeboundSpecified : 1;
 
  471  LLVM_PREFERRED_TYPE(
bool)
 
  472  unsigned Lifetimebound : 1;
 
  477  unsigned RawRetainCountConvention : 3;
 
  482        LifetimeboundSpecified(
false), Lifetimebound(
false),
 
  483        RawRetainCountConvention() {}
 
 
  486    return NoEscapeSpecified ? std::optional<bool>(NoEscape) : std::nullopt;
 
 
  489    NoEscapeSpecified = 
Value.has_value();
 
  490    NoEscape = 
Value.value_or(
false);
 
 
  494    return LifetimeboundSpecified ? std::optional<bool>(Lifetimebound)
 
 
  498    LifetimeboundSpecified = 
Value.has_value();
 
  499    Lifetimebound = 
Value.value_or(
false);
 
 
  503    if (!RawRetainCountConvention)
 
 
  509    RawRetainCountConvention = 
Value ? 
static_cast<unsigned>(*Value) + 1 : 0;
 
 
  516    if (!NoEscapeSpecified && RHS.NoEscapeSpecified) {
 
  517      NoEscapeSpecified = 
true;
 
  518      NoEscape = RHS.NoEscape;
 
  521    if (!LifetimeboundSpecified && RHS.LifetimeboundSpecified) {
 
  522      LifetimeboundSpecified = 
true;
 
  523      Lifetimebound = RHS.Lifetimebound;
 
  526    if (!RawRetainCountConvention)
 
  527      RawRetainCountConvention = RHS.RawRetainCountConvention;
 
 
  534  LLVM_DUMP_METHOD 
void dump(llvm::raw_ostream &OS) 
const;
 
 
  539         LHS.NoEscapeSpecified == RHS.NoEscapeSpecified &&
 
  540         LHS.NoEscape == RHS.NoEscape &&
 
  541         LHS.LifetimeboundSpecified == RHS.LifetimeboundSpecified &&
 
  542         LHS.Lifetimebound == RHS.Lifetimebound &&
 
  543         LHS.RawRetainCountConvention == RHS.RawRetainCountConvention;
 
 
  547  return !(LHS == RHS);
 
 
  553  static constexpr const uint64_t NullabilityKindMask = 0x3;
 
  554  static constexpr const unsigned NullabilityKindSize = 2;
 
  556  static constexpr const unsigned ReturnInfoIndex = 0;
 
  564  LLVM_PREFERRED_TYPE(
bool)
 
  599    assert(
static_cast<unsigned>(kind) < NullabilityKindMask);
 
  607        ~(NullabilityKindMask << (
index * NullabilityKindSize));
 
  610    unsigned kindValue = (
static_cast<unsigned>(kind))
 
  611                         << (
index * NullabilityKindSize);
 
 
  626    return getTypeInfo(
index + 1);
 
 
  647           "Checking the type adjustment on non-audited method.");
 
  653    return static_cast<NullabilityKind>(nullability & NullabilityKindMask);
 
  657  LLVM_DUMP_METHOD 
void dump(llvm::raw_ostream &OS) 
const;
 
 
  671  return !(LHS == RHS);
 
 
  678  LLVM_PREFERRED_TYPE(
bool)
 
  682  LLVM_PREFERRED_TYPE(
bool)
 
  702  LLVM_DUMP_METHOD 
void dump(llvm::raw_ostream &OS);
 
 
  712  return !(LHS == RHS);
 
 
  740  LLVM_DUMP_METHOD 
void dump(llvm::raw_ostream &OS);
 
 
  748  return !(LHS == RHS);
 
 
  759  LLVM_PREFERRED_TYPE(
bool)
 
  760  unsigned HasFlagEnum : 1;
 
  761  LLVM_PREFERRED_TYPE(
bool)
 
  762  unsigned IsFlagEnum : 1;
 
  764  LLVM_PREFERRED_TYPE(
bool)
 
  765  unsigned SwiftCopyableSpecified : 1;
 
  766  LLVM_PREFERRED_TYPE(
bool)
 
  767  unsigned SwiftCopyable : 1;
 
  769  LLVM_PREFERRED_TYPE(
bool)
 
  770  unsigned SwiftEscapableSpecified : 1;
 
  771  LLVM_PREFERRED_TYPE(
bool)
 
  772  unsigned SwiftEscapable : 1;
 
  784      : HasFlagEnum(0), IsFlagEnum(0), SwiftCopyableSpecified(
false),
 
  785        SwiftCopyable(
false), SwiftEscapableSpecified(
false),
 
  786        SwiftEscapable(
false) {}
 
 
  794    HasFlagEnum = 
Value.has_value();
 
  795    IsFlagEnum = 
Value.value_or(
false);
 
 
  799    return SwiftCopyableSpecified ? std::optional<bool>(SwiftCopyable)
 
 
  803    SwiftCopyableSpecified = 
Value.has_value();
 
  804    SwiftCopyable = 
Value.value_or(
false);
 
 
  808    return SwiftEscapableSpecified ? std::optional<bool>(SwiftEscapable)
 
 
  813    SwiftEscapableSpecified = 
Value.has_value();
 
  814    SwiftEscapable = 
Value.value_or(
false);
 
 
  837    if (!SwiftCopyableSpecified)
 
  840    if (!SwiftEscapableSpecified)
 
 
  848  LLVM_DUMP_METHOD 
void dump(llvm::raw_ostream &OS);
 
 
  865  return !(LHS == RHS);
 
 
  884  LLVM_DUMP_METHOD 
void dump(llvm::raw_ostream &OS) 
const;
 
 
  893  return !(LHS == RHS);
 
 
Defines various enumerations that describe declaration and type specifiers.
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.
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