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;
152 SwiftBridge = SwiftType;
156 return NSErrorDomain;
164 NSErrorDomain =
Domain ? std::optional<std::string>(std::string(*
Domain))
182 LLVM_DUMP_METHOD
void dump(llvm::raw_ostream &OS)
const;
187 LHS.SwiftBridge == RHS.SwiftBridge &&
188 LHS.NSErrorDomain == RHS.NSErrorDomain;
192 return !(LHS == RHS);
198 LLVM_PREFERRED_TYPE(
bool)
199 unsigned HasDefaultNullability : 1;
203 unsigned DefaultNullability : 2;
206 LLVM_PREFERRED_TYPE(
bool)
207 unsigned HasDesignatedInits : 1;
209 LLVM_PREFERRED_TYPE(
bool)
210 unsigned SwiftImportAsNonGenericSpecified : 1;
211 LLVM_PREFERRED_TYPE(
bool)
212 unsigned SwiftImportAsNonGeneric : 1;
214 LLVM_PREFERRED_TYPE(
bool)
215 unsigned SwiftObjCMembersSpecified : 1;
216 LLVM_PREFERRED_TYPE(
bool)
217 unsigned SwiftObjCMembers : 1;
221 : HasDefaultNullability(0), DefaultNullability(0), HasDesignatedInits(0),
222 SwiftImportAsNonGenericSpecified(
false), SwiftImportAsNonGeneric(
false),
223 SwiftObjCMembersSpecified(
false), SwiftObjCMembers(
false) {}
231 return HasDefaultNullability
232 ? std::optional<NullabilityKind>(
239 HasDefaultNullability =
true;
240 DefaultNullability =
static_cast<unsigned>(
Kind);
247 return SwiftImportAsNonGenericSpecified
248 ? std::optional<bool>(SwiftImportAsNonGeneric)
252 SwiftImportAsNonGenericSpecified =
Value.has_value();
253 SwiftImportAsNonGeneric =
Value.value_or(
false);
257 return SwiftObjCMembersSpecified ? std::optional<bool>(SwiftObjCMembers)
261 SwiftObjCMembersSpecified =
Value.has_value();
262 SwiftObjCMembers =
Value.value_or(
false);
268 HasDefaultNullability =
false;
269 DefaultNullability = 0;
283 if (!SwiftImportAsNonGenericSpecified)
286 if (!SwiftObjCMembersSpecified)
289 HasDesignatedInits |= RHS.HasDesignatedInits;
294 LLVM_DUMP_METHOD
void dump(llvm::raw_ostream &OS);
300 LHS.HasDesignatedInits == RHS.HasDesignatedInits &&
306 return !(LHS == RHS);
312 LLVM_PREFERRED_TYPE(
bool)
313 unsigned NullabilityAudited : 1;
318 unsigned Nullable : 2;
327 return NullabilityAudited ? std::optional<NullabilityKind>(
333 NullabilityAudited =
true;
334 Nullable =
static_cast<unsigned>(
kind);
345 if (!NullabilityAudited && RHS.NullabilityAudited)
353 LLVM_DUMP_METHOD
void dump(llvm::raw_ostream &OS)
const;
358 LHS.NullabilityAudited == RHS.NullabilityAudited &&
359 LHS.Nullable == RHS.Nullable && LHS.Type == RHS.Type;
363 return !(LHS == RHS);
368 LLVM_PREFERRED_TYPE(
bool)
369 unsigned SwiftImportAsAccessorsSpecified : 1;
370 LLVM_PREFERRED_TYPE(
bool)
371 unsigned SwiftImportAsAccessors : 1;
375 : SwiftImportAsAccessorsSpecified(
false), SwiftImportAsAccessors(
false) {}
378 return SwiftImportAsAccessorsSpecified
379 ? std::optional<bool>(SwiftImportAsAccessors)
383 SwiftImportAsAccessorsSpecified =
Value.has_value();
384 SwiftImportAsAccessors =
Value.value_or(
false);
404 if (!SwiftImportAsAccessorsSpecified)
410 LLVM_DUMP_METHOD
void dump(llvm::raw_ostream &OS)
const;
421 return !(LHS == RHS);
427 LLVM_PREFERRED_TYPE(
bool)
428 unsigned NoEscapeSpecified : 1;
431 LLVM_PREFERRED_TYPE(
bool)
432 unsigned NoEscape : 1;
437 unsigned RawRetainCountConvention : 3;
441 : NoEscapeSpecified(
false), NoEscape(
false), RawRetainCountConvention() {}
444 if (!NoEscapeSpecified)
449 NoEscapeSpecified =
Value.has_value();
450 NoEscape =
Value.value_or(
false);
454 if (!RawRetainCountConvention)
460 RawRetainCountConvention =
Value ?
static_cast<unsigned>(*Value) + 1 : 0;
467 if (!NoEscapeSpecified && RHS.NoEscapeSpecified) {
468 NoEscapeSpecified =
true;
469 NoEscape = RHS.NoEscape;
472 if (!RawRetainCountConvention)
473 RawRetainCountConvention = RHS.RawRetainCountConvention;
480 LLVM_DUMP_METHOD
void dump(llvm::raw_ostream &OS)
const;
485 LHS.NoEscapeSpecified == RHS.NoEscapeSpecified &&
486 LHS.NoEscape == RHS.NoEscape &&
487 LHS.RawRetainCountConvention == RHS.RawRetainCountConvention;
491 return !(LHS == RHS);
497 static constexpr
const uint64_t NullabilityKindMask = 0x3;
498 static constexpr
const unsigned NullabilityKindSize = 2;
500 static constexpr
const unsigned ReturnInfoIndex = 0;
508 LLVM_PREFERRED_TYPE(
bool)
540 assert(
static_cast<unsigned>(
kind) < NullabilityKindMask);
548 ~(NullabilityKindMask << (index * NullabilityKindSize));
551 unsigned kindValue = (
static_cast<unsigned>(
kind))
552 << (index * NullabilityKindSize);
567 return getTypeInfo(index + 1);
588 "Checking the type adjustment on non-audited method.");
594 return static_cast<NullabilityKind>(nullability & NullabilityKindMask);
598 LLVM_DUMP_METHOD
void dump(llvm::raw_ostream &OS)
const;
611 return !(LHS == RHS);
618 LLVM_PREFERRED_TYPE(
bool)
622 LLVM_PREFERRED_TYPE(
bool)
640 LLVM_DUMP_METHOD
void dump(llvm::raw_ostream &OS);
650 return !(LHS == RHS);
673 LLVM_PREFERRED_TYPE(
bool)
674 unsigned HasFlagEnum : 1;
675 LLVM_PREFERRED_TYPE(
bool)
676 unsigned IsFlagEnum : 1;
678 LLVM_PREFERRED_TYPE(
bool)
679 unsigned SwiftCopyableSpecified : 1;
680 LLVM_PREFERRED_TYPE(
bool)
681 unsigned SwiftCopyable : 1;
691 : HasFlagEnum(0), IsFlagEnum(0), SwiftCopyableSpecified(
false),
692 SwiftCopyable(
false) {}
700 HasFlagEnum =
Value.has_value();
701 IsFlagEnum =
Value.value_or(
false);
705 return SwiftCopyableSpecified ? std::optional<bool>(SwiftCopyable)
709 SwiftCopyableSpecified =
Value.has_value();
710 SwiftCopyable =
Value.value_or(
false);
729 if (!SwiftCopyableSpecified)
737 LLVM_DUMP_METHOD
void dump(llvm::raw_ostream &OS);
751 return !(LHS == RHS);
770 LLVM_DUMP_METHOD
void dump(llvm::raw_ostream &OS)
const;
779 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.
std::optional< bool > isSwiftPrivate() const
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
CommonEntityInfo & operator|=(const CommonEntityInfo &RHS)
Describes API notes for types.
void setNSErrorDomain(const std::optional< llvm::StringRef > &Domain)
LLVM_DUMP_METHOD void dump(llvm::raw_ostream &OS) const
CommonTypeInfo & operator|=(const CommonTypeInfo &RHS)
const std::optional< std::string > & getNSErrorDomain() const
const std::optional< std::string > & getSwiftBridge() const
void setNSErrorDomain(const std::optional< std::string > &Domain)
friend bool operator==(const CommonTypeInfo &, const CommonTypeInfo &)
void setSwiftBridge(std::optional< std::string > SwiftType)
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.
LLVM_DUMP_METHOD void dump(llvm::raw_ostream &OS) const
void setRetainCountConvention(std::optional< RetainCountConventionKind > Value)
std::optional< RetainCountConventionKind > getRetainCountConvention() const
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.
std::optional< bool > getSwiftObjCMembers() const
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
ObjCContextInfo & operator|=(const ObjCContextInfo &RHS)
void setSwiftImportAsNonGeneric(std::optional< bool > Value)
std::optional< bool > getSwiftImportAsNonGeneric() const
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.
friend bool operator==(const ObjCMethodInfo &, const ObjCMethodInfo &)
unsigned RequiredInit
Whether this is a required initializer.
ObjCMethodInfo & operator|=(const ObjCContextInfo &RHS)
LLVM_DUMP_METHOD void dump(llvm::raw_ostream &OS)
Describes API notes data for an Objective-C property.
ObjCPropertyInfo & operator|=(const ObjCContextInfo &RHS)
Merge class-wide information into the given property.
LLVM_DUMP_METHOD void dump(llvm::raw_ostream &OS) const
void setSwiftImportAsAccessors(std::optional< bool > Value)
ObjCPropertyInfo & operator|=(const ObjCPropertyInfo &RHS)
std::optional< bool > getSwiftImportAsAccessors() const
friend bool operator==(const ObjCPropertyInfo &, const ObjCPropertyInfo &)
Describes a function or method parameter.
void setNoEscape(std::optional< bool > Value)
LLVM_DUMP_METHOD void dump(llvm::raw_ostream &OS) const
ParamInfo & operator|=(const ParamInfo &RHS)
friend bool operator==(const ParamInfo &, const ParamInfo &)
std::optional< RetainCountConventionKind > getRetainCountConvention() const
std::optional< bool > isNoEscape() 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< bool > isFlagEnum() const
std::optional< EnumExtensibilityKind > EnumExtensibility
void setSwiftCopyable(std::optional< bool > Value)
TagInfo & operator|=(const TagInfo &RHS)
std::optional< bool > isSwiftCopyable() const
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
std::optional< SwiftNewTypeKind > SwiftWrapper
friend bool operator==(const TypedefInfo &, const TypedefInfo &)
TypedefInfo & operator|=(const TypedefInfo &RHS)
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
const std::string & getType() const
friend bool operator==(const VariableInfo &, const VariableInfo &)
std::optional< NullabilityKind > getNullability() const
VariableInfo & operator|=(const VariableInfo &RHS)
bool operator!=(const CommonEntityInfo &LHS, const CommonEntityInfo &RHS)
static constexpr const char SOURCE_APINOTES_EXTENSION[]
The file extension used for the source representation of API notes.
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.
unsigned kind
All of the diagnostics that can be emitted by the frontend.
The JSON file list parser is used to communicate input to InstallAPI.
@ Private
'private' clause, allowed on 'parallel', 'serial', 'loop', 'parallel loop', and 'serial loop' constru...
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.
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