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"
65 unsigned SwiftPrivateSpecified : 1;
68 unsigned SwiftPrivate : 1;
79 return SwiftPrivateSpecified ? std::optional<bool>(SwiftPrivate)
84 SwiftPrivateSpecified = Private.has_value();
85 SwiftPrivate = Private.value_or(0);
104 if (!SwiftPrivateSpecified)
113 LLVM_DUMP_METHOD
void dump(llvm::raw_ostream &OS)
const;
121 LHS.SwiftPrivateSpecified == RHS.SwiftPrivateSpecified &&
127 return !(LHS == RHS);
135 std::optional<std::string> SwiftBridge;
138 std::optional<std::string> NSErrorDomain;
148 SwiftBridge = SwiftType;
152 return NSErrorDomain;
160 NSErrorDomain =
Domain ? std::optional<std::string>(std::string(*
Domain))
178 LLVM_DUMP_METHOD
void dump(llvm::raw_ostream &OS)
const;
183 LHS.SwiftBridge == RHS.SwiftBridge &&
184 LHS.NSErrorDomain == RHS.NSErrorDomain;
188 return !(LHS == RHS);
194 unsigned HasDefaultNullability : 1;
197 unsigned DefaultNullability : 2;
200 unsigned HasDesignatedInits : 1;
202 unsigned SwiftImportAsNonGenericSpecified : 1;
203 unsigned SwiftImportAsNonGeneric : 1;
205 unsigned SwiftObjCMembersSpecified : 1;
206 unsigned SwiftObjCMembers : 1;
210 : HasDefaultNullability(0), DefaultNullability(0), HasDesignatedInits(0),
211 SwiftImportAsNonGenericSpecified(
false), SwiftImportAsNonGeneric(
false),
212 SwiftObjCMembersSpecified(
false), SwiftObjCMembers(
false) {}
220 return HasDefaultNullability
221 ? std::optional<NullabilityKind>(
228 HasDefaultNullability =
true;
229 DefaultNullability =
static_cast<unsigned>(Kind);
236 return SwiftImportAsNonGenericSpecified
237 ? std::optional<bool>(SwiftImportAsNonGeneric)
241 SwiftImportAsNonGenericSpecified =
Value.has_value();
242 SwiftImportAsNonGeneric =
Value.value_or(
false);
246 return SwiftObjCMembersSpecified ? std::optional<bool>(SwiftObjCMembers)
250 SwiftObjCMembersSpecified =
Value.has_value();
251 SwiftObjCMembers =
Value.value_or(
false);
257 HasDefaultNullability =
false;
258 DefaultNullability = 0;
272 if (!SwiftImportAsNonGenericSpecified)
275 if (!SwiftObjCMembersSpecified)
278 HasDesignatedInits |= RHS.HasDesignatedInits;
283 LLVM_DUMP_METHOD
void dump(llvm::raw_ostream &OS);
289 LHS.HasDesignatedInits == RHS.HasDesignatedInits &&
295 return !(LHS == RHS);
301 unsigned NullabilityAudited : 1;
305 unsigned Nullable : 2;
314 return NullabilityAudited ? std::optional<NullabilityKind>(
320 NullabilityAudited =
true;
321 Nullable =
static_cast<unsigned>(kind);
332 if (!NullabilityAudited && RHS.NullabilityAudited)
340 LLVM_DUMP_METHOD
void dump(llvm::raw_ostream &OS)
const;
345 LHS.NullabilityAudited == RHS.NullabilityAudited &&
346 LHS.Nullable == RHS.Nullable && LHS.Type == RHS.Type;
350 return !(LHS == RHS);
355 unsigned SwiftImportAsAccessorsSpecified : 1;
356 unsigned SwiftImportAsAccessors : 1;
360 : SwiftImportAsAccessorsSpecified(
false), SwiftImportAsAccessors(
false) {}
363 return SwiftImportAsAccessorsSpecified
364 ? std::optional<bool>(SwiftImportAsAccessors)
368 SwiftImportAsAccessorsSpecified =
Value.has_value();
369 SwiftImportAsAccessors =
Value.value_or(
false);
389 if (!SwiftImportAsAccessorsSpecified)
395 LLVM_DUMP_METHOD
void dump(llvm::raw_ostream &OS)
const;
406 return !(LHS == RHS);
412 unsigned NoEscapeSpecified : 1;
415 unsigned NoEscape : 1;
420 unsigned RawRetainCountConvention : 3;
424 : NoEscapeSpecified(
false), NoEscape(
false), RawRetainCountConvention() {}
427 if (!NoEscapeSpecified)
432 NoEscapeSpecified =
Value.has_value();
433 NoEscape =
Value.value_or(
false);
437 if (!RawRetainCountConvention)
443 RawRetainCountConvention =
Value ?
static_cast<unsigned>(*Value) + 1 : 0;
450 if (!NoEscapeSpecified && RHS.NoEscapeSpecified) {
451 NoEscapeSpecified =
true;
452 NoEscape = RHS.NoEscape;
455 if (!RawRetainCountConvention)
456 RawRetainCountConvention = RHS.RawRetainCountConvention;
463 LLVM_DUMP_METHOD
void dump(llvm::raw_ostream &OS)
const;
468 LHS.NoEscapeSpecified == RHS.NoEscapeSpecified &&
469 LHS.NoEscape == RHS.NoEscape &&
470 LHS.RawRetainCountConvention == RHS.RawRetainCountConvention;
474 return !(LHS == RHS);
480 static constexpr const uint64_t NullabilityKindMask = 0x3;
481 static constexpr const unsigned NullabilityKindSize = 2;
483 static constexpr const unsigned ReturnInfoIndex = 0;
522 assert(
static_cast<unsigned>(kind) < NullabilityKindMask);
530 ~(NullabilityKindMask << (index * NullabilityKindSize));
533 unsigned kindValue = (
static_cast<unsigned>(kind))
534 << (index * NullabilityKindSize);
549 return getTypeInfo(index + 1);
570 "Checking the type adjustment on non-audited method.");
576 return static_cast<NullabilityKind>(nullability & NullabilityKindMask);
580 LLVM_DUMP_METHOD
void dump(llvm::raw_ostream &OS)
const;
593 return !(LHS == RHS);
620 LLVM_DUMP_METHOD
void dump(llvm::raw_ostream &OS);
630 return !(LHS == RHS);
653 unsigned HasFlagEnum : 1;
654 unsigned IsFlagEnum : 1;
671 HasFlagEnum =
Value.has_value();
672 IsFlagEnum =
Value.value_or(
false);
696 LLVM_DUMP_METHOD
void dump(llvm::raw_ostream &OS);
709 return !(LHS == RHS);
728 LLVM_DUMP_METHOD
void dump(llvm::raw_ostream &OS)
const;
737 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 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 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< std::string > SwiftReleaseOp
std::optional< std::string > SwiftRetainOp
std::optional< std::string > SwiftImportAs
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.
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.
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.
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