9#ifndef LLVM_CLANG_APINOTES_TYPES_H
10#define LLVM_CLANG_APINOTES_TYPES_H
13#include "llvm/ADT/StringRef.h"
64 unsigned SwiftPrivateSpecified : 1;
67 unsigned SwiftPrivate : 1;
78 return SwiftPrivateSpecified ? std::optional<bool>(SwiftPrivate)
83 SwiftPrivateSpecified = Private.has_value();
84 SwiftPrivate = Private.value_or(0);
103 if (!SwiftPrivateSpecified)
112 LLVM_DUMP_METHOD
void dump(llvm::raw_ostream &
OS)
const;
120 LHS.SwiftPrivateSpecified == RHS.SwiftPrivateSpecified &&
126 return !(LHS == RHS);
134 std::optional<std::string> SwiftBridge;
137 std::optional<std::string> NSErrorDomain;
147 SwiftBridge = SwiftType;
151 SwiftBridge = SwiftType
152 ? std::optional<std::string>(std::string(*SwiftType))
157 return NSErrorDomain;
165 NSErrorDomain =
Domain ? std::optional<std::string>(std::string(*
Domain))
183 LLVM_DUMP_METHOD
void dump(llvm::raw_ostream &
OS)
const;
188 LHS.SwiftBridge == RHS.SwiftBridge &&
189 LHS.NSErrorDomain == RHS.NSErrorDomain;
193 return !(LHS == RHS);
199 unsigned HasDefaultNullability : 1;
202 unsigned DefaultNullability : 2;
205 unsigned HasDesignatedInits : 1;
207 unsigned SwiftImportAsNonGenericSpecified : 1;
208 unsigned SwiftImportAsNonGeneric : 1;
210 unsigned SwiftObjCMembersSpecified : 1;
211 unsigned SwiftObjCMembers : 1;
215 : HasDefaultNullability(0), DefaultNullability(0), HasDesignatedInits(0),
216 SwiftImportAsNonGenericSpecified(
false), SwiftImportAsNonGeneric(
false),
217 SwiftObjCMembersSpecified(
false), SwiftObjCMembers(
false) {}
225 return HasDefaultNullability
226 ? std::optional<NullabilityKind>(
233 HasDefaultNullability =
true;
234 DefaultNullability =
static_cast<unsigned>(Kind);
241 return SwiftImportAsNonGenericSpecified
242 ? std::optional<bool>(SwiftImportAsNonGeneric)
246 SwiftImportAsNonGenericSpecified =
Value.has_value();
247 SwiftImportAsNonGeneric =
Value.value_or(
false);
251 return SwiftObjCMembersSpecified ? std::optional<bool>(SwiftObjCMembers)
255 SwiftObjCMembersSpecified =
Value.has_value();
256 SwiftObjCMembers =
Value.value_or(
false);
262 HasDefaultNullability =
false;
263 DefaultNullability = 0;
277 if (!SwiftImportAsNonGenericSpecified)
280 if (!SwiftObjCMembersSpecified)
283 HasDesignatedInits |= RHS.HasDesignatedInits;
288 LLVM_DUMP_METHOD
void dump(llvm::raw_ostream &
OS);
294 LHS.HasDesignatedInits == RHS.HasDesignatedInits &&
300 return !(LHS == RHS);
306 unsigned NullabilityAudited : 1;
310 unsigned Nullable : 2;
319 return NullabilityAudited ? std::optional<NullabilityKind>(
325 NullabilityAudited =
true;
326 Nullable =
static_cast<unsigned>(kind);
337 if (!NullabilityAudited && RHS.NullabilityAudited)
345 LLVM_DUMP_METHOD
void dump(llvm::raw_ostream &
OS)
const;
350 LHS.NullabilityAudited == RHS.NullabilityAudited &&
351 LHS.Nullable == RHS.Nullable && LHS.Type == RHS.Type;
355 return !(LHS == RHS);
360 unsigned SwiftImportAsAccessorsSpecified : 1;
361 unsigned SwiftImportAsAccessors : 1;
365 : SwiftImportAsAccessorsSpecified(
false), SwiftImportAsAccessors(
false) {}
368 return SwiftImportAsAccessorsSpecified
369 ? std::optional<bool>(SwiftImportAsAccessors)
373 SwiftImportAsAccessorsSpecified =
Value.has_value();
374 SwiftImportAsAccessors =
Value.value_or(
false);
394 if (!SwiftImportAsAccessorsSpecified)
400 LLVM_DUMP_METHOD
void dump(llvm::raw_ostream &
OS)
const;
411 return !(LHS == RHS);
417 unsigned NoEscapeSpecified : 1;
420 unsigned NoEscape : 1;
425 unsigned RawRetainCountConvention : 3;
429 : NoEscapeSpecified(
false), NoEscape(
false), RawRetainCountConvention() {}
432 if (!NoEscapeSpecified)
437 NoEscapeSpecified =
Value.has_value();
438 NoEscape =
Value.value_or(
false);
442 if (!RawRetainCountConvention)
448 RawRetainCountConvention =
Value ?
static_cast<unsigned>(*Value) + 1 : 0;
455 if (!NoEscapeSpecified && RHS.NoEscapeSpecified) {
456 NoEscapeSpecified =
true;
457 NoEscape = RHS.NoEscape;
460 if (!RawRetainCountConvention)
461 RawRetainCountConvention = RHS.RawRetainCountConvention;
468 LLVM_DUMP_METHOD
void dump(llvm::raw_ostream &
OS)
const;
473 LHS.NoEscapeSpecified == RHS.NoEscapeSpecified &&
474 LHS.NoEscape == RHS.NoEscape &&
475 LHS.RawRetainCountConvention == RHS.RawRetainCountConvention;
479 return !(LHS == RHS);
485 static constexpr const uint64_t NullabilityKindMask = 0x3;
486 static constexpr const unsigned NullabilityKindSize = 2;
488 static constexpr const unsigned ReturnInfoIndex = 0;
527 assert(
static_cast<unsigned>(kind) < NullabilityKindMask);
535 ~(NullabilityKindMask << (index * NullabilityKindSize));
538 unsigned kindValue = (
static_cast<unsigned>(kind))
539 << (index * NullabilityKindSize);
554 return getTypeInfo(index + 1);
575 "Checking the type adjustment on non-audited method.");
581 return static_cast<NullabilityKind>(nullability & NullabilityKindMask);
585 LLVM_DUMP_METHOD
void dump(llvm::raw_ostream &
OS)
const;
598 return !(LHS == RHS);
625 LLVM_DUMP_METHOD
void dump(llvm::raw_ostream &
OS);
635 return !(LHS == RHS);
658 unsigned HasFlagEnum : 1;
659 unsigned IsFlagEnum : 1;
672 HasFlagEnum =
Value.has_value();
673 IsFlagEnum =
Value.value_or(
false);
690 LLVM_DUMP_METHOD
void dump(llvm::raw_ostream &
OS);
700 return !(LHS == RHS);
719 LLVM_DUMP_METHOD
void dump(llvm::raw_ostream &
OS)
const;
728 return !(LHS == RHS);
Defines various enumerations that describe declaration and type specifiers.
The base class of the type hierarchy.
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)
const std::optional< std::string > & getSwiftBridge() const
LLVM_DUMP_METHOD void dump(llvm::raw_ostream &OS) const
void setSwiftBridge(const std::optional< std::string > &SwiftType)
void setNSErrorDomain(const std::optional< std::string > &Domain)
friend bool operator==(const CommonTypeInfo &, const CommonTypeInfo &)
const std::optional< std::string > & getNSErrorDomain() const
void setSwiftBridge(const std::optional< llvm::StringRef > &SwiftType)
CommonTypeInfo & operator|=(const CommonTypeInfo &RHS)
Describes API notes data for an enumerator.
API notes for a function or method.
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 class or protocol.
friend bool operator==(const ObjCContextInfo &, const ObjCContextInfo &)
std::optional< NullabilityKind > getDefaultNullability() const
Determine the default nullability for properties and methods of this class.
void stripModuleLocalInfo()
Strip off any information within the class information structure that is module-local,...
void setSwiftObjCMembers(std::optional< bool > Value)
void setHasDesignatedInits(bool Value)
bool hasDesignatedInits() const
std::optional< bool > getSwiftObjCMembers() const
std::optional< bool > getSwiftImportAsNonGeneric() const
void setSwiftImportAsNonGeneric(std::optional< bool > Value)
ObjCContextInfo & operator|=(const ObjCContextInfo &RHS)
void setDefaultNullability(NullabilityKind Kind)
Set the default nullability for properties and methods of this class.
LLVM_DUMP_METHOD void dump(llvm::raw_ostream &OS)
Describes API notes data for an Objective-C method.
unsigned DesignatedInit
Whether this is a designated initializer of its class.
ObjCMethodInfo & operator|=(const ObjCContextInfo &RHS)
friend bool operator==(const ObjCMethodInfo &, const ObjCMethodInfo &)
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)
ObjCPropertyInfo & operator|=(const ObjCContextInfo &RHS)
Merge class-wide information into the given property.
std::optional< bool > getSwiftImportAsAccessors() const
ObjCPropertyInfo & operator|=(const ObjCPropertyInfo &RHS)
friend bool operator==(const ObjCPropertyInfo &, const ObjCPropertyInfo &)
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
friend bool operator==(const ParamInfo &, const ParamInfo &)
std::optional< RetainCountConventionKind > getRetainCountConvention() const
void setRetainCountConvention(std::optional< RetainCountConventionKind > Value)
Describes API notes data for a tag.
std::optional< EnumExtensibilityKind > EnumExtensibility
std::optional< bool > isFlagEnum() const
TagInfo & operator|=(const TagInfo &RHS)
LLVM_DUMP_METHOD void dump(llvm::raw_ostream &OS)
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.
const internal::VariadicAllOfMatcher< Type > type
Matches Types in the clang AST.
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.
YAML serialization mapping.