clang 20.0.0git
Types.h
Go to the documentation of this file.
1//===-- Types.h - API Notes Data Types --------------------------*- C++ -*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
9#ifndef LLVM_CLANG_APINOTES_TYPES_H
10#define LLVM_CLANG_APINOTES_TYPES_H
11
13#include "llvm/ADT/ArrayRef.h"
14#include "llvm/ADT/StringRef.h"
15#include <climits>
16#include <optional>
17#include <vector>
18
19namespace llvm {
20class raw_ostream;
21} // namespace llvm
22
23namespace clang {
24namespace api_notes {
26 None,
31};
32
33/// The payload for an enum_extensibility attribute. This is a tri-state rather
34/// than just a boolean because the presence of the attribute indicates
35/// auditing.
37 None,
38 Open,
39 Closed,
40};
41
42/// The kind of a swift_wrapper/swift_newtype.
43enum class SwiftNewTypeKind {
44 None,
45 Struct,
46 Enum,
47};
48
49/// Describes API notes data for any entity.
50///
51/// This is used as the base of all API notes.
53public:
54 /// Message to use when this entity is unavailable.
55 std::string UnavailableMsg;
56
57 /// Whether this entity is marked unavailable.
58 LLVM_PREFERRED_TYPE(bool)
60
61 /// Whether this entity is marked unavailable in Swift.
62 LLVM_PREFERRED_TYPE(bool)
63 unsigned UnavailableInSwift : 1;
64
65private:
66 /// Whether SwiftPrivate was specified.
67 LLVM_PREFERRED_TYPE(bool)
68 unsigned SwiftPrivateSpecified : 1;
69
70 /// Whether this entity is considered "private" to a Swift overlay.
71 LLVM_PREFERRED_TYPE(bool)
72 unsigned SwiftPrivate : 1;
73
74public:
75 /// Swift name of this entity.
76 std::string SwiftName;
77
79 : Unavailable(0), UnavailableInSwift(0), SwiftPrivateSpecified(0),
80 SwiftPrivate(0) {}
81
82 std::optional<bool> isSwiftPrivate() const {
83 return SwiftPrivateSpecified ? std::optional<bool>(SwiftPrivate)
84 : std::nullopt;
85 }
86
87 void setSwiftPrivate(std::optional<bool> Private) {
88 SwiftPrivateSpecified = Private.has_value();
89 SwiftPrivate = Private.value_or(0);
90 }
91
92 friend bool operator==(const CommonEntityInfo &, const CommonEntityInfo &);
93
95 // Merge unavailability.
96 if (RHS.Unavailable) {
97 Unavailable = true;
98 if (UnavailableMsg.empty())
100 }
101
102 if (RHS.UnavailableInSwift) {
103 UnavailableInSwift = true;
104 if (UnavailableMsg.empty())
106 }
107
108 if (!SwiftPrivateSpecified)
110
111 if (SwiftName.empty())
112 SwiftName = RHS.SwiftName;
113
114 return *this;
115 }
116
117 LLVM_DUMP_METHOD void dump(llvm::raw_ostream &OS) const;
118};
119
120inline bool operator==(const CommonEntityInfo &LHS,
121 const CommonEntityInfo &RHS) {
122 return LHS.UnavailableMsg == RHS.UnavailableMsg &&
123 LHS.Unavailable == RHS.Unavailable &&
125 LHS.SwiftPrivateSpecified == RHS.SwiftPrivateSpecified &&
126 LHS.SwiftPrivate == RHS.SwiftPrivate && LHS.SwiftName == RHS.SwiftName;
127}
128
129inline bool operator!=(const CommonEntityInfo &LHS,
130 const CommonEntityInfo &RHS) {
131 return !(LHS == RHS);
132}
133
134/// Describes API notes for types.
136 /// The Swift type to which a given type is bridged.
137 ///
138 /// Reflects the swift_bridge attribute.
139 std::optional<std::string> SwiftBridge;
140
141 /// The NS error domain for this type.
142 std::optional<std::string> NSErrorDomain;
143
144public:
146
147 const std::optional<std::string> &getSwiftBridge() const {
148 return SwiftBridge;
149 }
150
151 void setSwiftBridge(std::optional<std::string> SwiftType) {
152 SwiftBridge = SwiftType;
153 }
154
155 const std::optional<std::string> &getNSErrorDomain() const {
156 return NSErrorDomain;
157 }
158
159 void setNSErrorDomain(const std::optional<std::string> &Domain) {
160 NSErrorDomain = Domain;
161 }
162
163 void setNSErrorDomain(const std::optional<llvm::StringRef> &Domain) {
164 NSErrorDomain = Domain ? std::optional<std::string>(std::string(*Domain))
165 : std::nullopt;
166 }
167
168 friend bool operator==(const CommonTypeInfo &, const CommonTypeInfo &);
169
171 // Merge inherited info.
172 static_cast<CommonEntityInfo &>(*this) |= RHS;
173
174 if (!SwiftBridge)
176 if (!NSErrorDomain)
178
179 return *this;
180 }
181
182 LLVM_DUMP_METHOD void dump(llvm::raw_ostream &OS) const;
183};
184
185inline bool operator==(const CommonTypeInfo &LHS, const CommonTypeInfo &RHS) {
186 return static_cast<const CommonEntityInfo &>(LHS) == RHS &&
187 LHS.SwiftBridge == RHS.SwiftBridge &&
188 LHS.NSErrorDomain == RHS.NSErrorDomain;
189}
190
191inline bool operator!=(const CommonTypeInfo &LHS, const CommonTypeInfo &RHS) {
192 return !(LHS == RHS);
193}
194
195/// Describes API notes data for an Objective-C class or protocol or a C++
196/// namespace.
198 /// Whether this class has a default nullability.
199 LLVM_PREFERRED_TYPE(bool)
200 unsigned HasDefaultNullability : 1;
201
202 /// The default nullability.
203 LLVM_PREFERRED_TYPE(NullabilityKind)
204 unsigned DefaultNullability : 2;
205
206 /// Whether this class has designated initializers recorded.
207 LLVM_PREFERRED_TYPE(bool)
208 unsigned HasDesignatedInits : 1;
209
210 LLVM_PREFERRED_TYPE(bool)
211 unsigned SwiftImportAsNonGenericSpecified : 1;
212 LLVM_PREFERRED_TYPE(bool)
213 unsigned SwiftImportAsNonGeneric : 1;
214
215 LLVM_PREFERRED_TYPE(bool)
216 unsigned SwiftObjCMembersSpecified : 1;
217 LLVM_PREFERRED_TYPE(bool)
218 unsigned SwiftObjCMembers : 1;
219
220public:
222 : HasDefaultNullability(0), DefaultNullability(0), HasDesignatedInits(0),
223 SwiftImportAsNonGenericSpecified(false), SwiftImportAsNonGeneric(false),
224 SwiftObjCMembersSpecified(false), SwiftObjCMembers(false) {}
225
226 /// Determine the default nullability for properties and methods of this
227 /// class.
228 ///
229 /// Returns the default nullability, if implied, or std::nullopt if there is
230 /// none.
231 std::optional<NullabilityKind> getDefaultNullability() const {
232 return HasDefaultNullability
233 ? std::optional<NullabilityKind>(
234 static_cast<NullabilityKind>(DefaultNullability))
235 : std::nullopt;
236 }
237
238 /// Set the default nullability for properties and methods of this class.
240 HasDefaultNullability = true;
241 DefaultNullability = static_cast<unsigned>(Kind);
242 }
243
244 bool hasDesignatedInits() const { return HasDesignatedInits; }
245 void setHasDesignatedInits(bool Value) { HasDesignatedInits = Value; }
246
247 std::optional<bool> getSwiftImportAsNonGeneric() const {
248 return SwiftImportAsNonGenericSpecified
249 ? std::optional<bool>(SwiftImportAsNonGeneric)
250 : std::nullopt;
251 }
252 void setSwiftImportAsNonGeneric(std::optional<bool> Value) {
253 SwiftImportAsNonGenericSpecified = Value.has_value();
254 SwiftImportAsNonGeneric = Value.value_or(false);
255 }
256
257 std::optional<bool> getSwiftObjCMembers() const {
258 return SwiftObjCMembersSpecified ? std::optional<bool>(SwiftObjCMembers)
259 : std::nullopt;
260 }
261 void setSwiftObjCMembers(std::optional<bool> Value) {
262 SwiftObjCMembersSpecified = Value.has_value();
263 SwiftObjCMembers = Value.value_or(false);
264 }
265
266 friend bool operator==(const ContextInfo &, const ContextInfo &);
267
269 // Merge inherited info.
270 static_cast<CommonTypeInfo &>(*this) |= RHS;
271
272 // Merge nullability.
274 if (auto Nullability = RHS.getDefaultNullability())
275 setDefaultNullability(*Nullability);
276
277 if (!SwiftImportAsNonGenericSpecified)
279
280 if (!SwiftObjCMembersSpecified)
282
283 HasDesignatedInits |= RHS.HasDesignatedInits;
284
285 return *this;
286 }
287
288 LLVM_DUMP_METHOD void dump(llvm::raw_ostream &OS);
289};
290
291inline bool operator==(const ContextInfo &LHS, const ContextInfo &RHS) {
292 return static_cast<const CommonTypeInfo &>(LHS) == RHS &&
294 LHS.HasDesignatedInits == RHS.HasDesignatedInits &&
297}
298
299inline bool operator!=(const ContextInfo &LHS, const ContextInfo &RHS) {
300 return !(LHS == RHS);
301}
302
303/// API notes for a variable/property.
305 /// Whether this property has been audited for nullability.
306 LLVM_PREFERRED_TYPE(bool)
307 unsigned NullabilityAudited : 1;
308
309 /// The kind of nullability for this property. Only valid if the nullability
310 /// has been audited.
311 LLVM_PREFERRED_TYPE(NullabilityKind)
312 unsigned Nullable : 2;
313
314 /// The C type of the variable, as a string.
315 std::string Type;
316
317public:
318 VariableInfo() : NullabilityAudited(false), Nullable(0) {}
319
320 std::optional<NullabilityKind> getNullability() const {
321 return NullabilityAudited ? std::optional<NullabilityKind>(
322 static_cast<NullabilityKind>(Nullable))
323 : std::nullopt;
324 }
325
327 NullabilityAudited = true;
328 Nullable = static_cast<unsigned>(kind);
329 }
330
331 const std::string &getType() const { return Type; }
332 void setType(const std::string &type) { Type = type; }
333
334 friend bool operator==(const VariableInfo &, const VariableInfo &);
335
337 static_cast<CommonEntityInfo &>(*this) |= RHS;
338
339 if (!NullabilityAudited && RHS.NullabilityAudited)
341 if (Type.empty())
342 Type = RHS.Type;
343
344 return *this;
345 }
346
347 LLVM_DUMP_METHOD void dump(llvm::raw_ostream &OS) const;
348};
349
350inline bool operator==(const VariableInfo &LHS, const VariableInfo &RHS) {
351 return static_cast<const CommonEntityInfo &>(LHS) == RHS &&
352 LHS.NullabilityAudited == RHS.NullabilityAudited &&
353 LHS.Nullable == RHS.Nullable && LHS.Type == RHS.Type;
354}
355
356inline bool operator!=(const VariableInfo &LHS, const VariableInfo &RHS) {
357 return !(LHS == RHS);
358}
359
360/// Describes API notes data for an Objective-C property.
362 LLVM_PREFERRED_TYPE(bool)
363 unsigned SwiftImportAsAccessorsSpecified : 1;
364 LLVM_PREFERRED_TYPE(bool)
365 unsigned SwiftImportAsAccessors : 1;
366
367public:
369 : SwiftImportAsAccessorsSpecified(false), SwiftImportAsAccessors(false) {}
370
371 std::optional<bool> getSwiftImportAsAccessors() const {
372 return SwiftImportAsAccessorsSpecified
373 ? std::optional<bool>(SwiftImportAsAccessors)
374 : std::nullopt;
375 }
376 void setSwiftImportAsAccessors(std::optional<bool> Value) {
377 SwiftImportAsAccessorsSpecified = Value.has_value();
378 SwiftImportAsAccessors = Value.value_or(false);
379 }
380
381 friend bool operator==(const ObjCPropertyInfo &, const ObjCPropertyInfo &);
382
383 /// Merge class-wide information into the given property.
385 static_cast<CommonEntityInfo &>(*this) |= RHS;
386
387 // Merge nullability.
388 if (!getNullability())
389 if (auto Nullable = RHS.getDefaultNullability())
391
392 return *this;
393 }
394
396 static_cast<VariableInfo &>(*this) |= RHS;
397
398 if (!SwiftImportAsAccessorsSpecified)
400
401 return *this;
402 }
403
404 LLVM_DUMP_METHOD void dump(llvm::raw_ostream &OS) const;
405};
406
407inline bool operator==(const ObjCPropertyInfo &LHS,
408 const ObjCPropertyInfo &RHS) {
409 return static_cast<const VariableInfo &>(LHS) == RHS &&
411}
412
413inline bool operator!=(const ObjCPropertyInfo &LHS,
414 const ObjCPropertyInfo &RHS) {
415 return !(LHS == RHS);
416}
417
418/// Describes a function or method parameter.
419class ParamInfo : public VariableInfo {
420 /// Whether noescape was specified.
421 LLVM_PREFERRED_TYPE(bool)
422 unsigned NoEscapeSpecified : 1;
423
424 /// Whether the this parameter has the 'noescape' attribute.
425 LLVM_PREFERRED_TYPE(bool)
426 unsigned NoEscape : 1;
427
428 /// A biased RetainCountConventionKind, where 0 means "unspecified".
429 ///
430 /// Only relevant for out-parameters.
431 unsigned RawRetainCountConvention : 3;
432
433public:
435 : NoEscapeSpecified(false), NoEscape(false), RawRetainCountConvention() {}
436
437 std::optional<bool> isNoEscape() const {
438 if (!NoEscapeSpecified)
439 return std::nullopt;
440 return NoEscape;
441 }
442 void setNoEscape(std::optional<bool> Value) {
443 NoEscapeSpecified = Value.has_value();
444 NoEscape = Value.value_or(false);
445 }
446
447 std::optional<RetainCountConventionKind> getRetainCountConvention() const {
448 if (!RawRetainCountConvention)
449 return std::nullopt;
450 return static_cast<RetainCountConventionKind>(RawRetainCountConvention - 1);
451 }
452 void
453 setRetainCountConvention(std::optional<RetainCountConventionKind> Value) {
454 RawRetainCountConvention = Value ? static_cast<unsigned>(*Value) + 1 : 0;
455 assert(getRetainCountConvention() == Value && "bitfield too small");
456 }
457
459 static_cast<VariableInfo &>(*this) |= RHS;
460
461 if (!NoEscapeSpecified && RHS.NoEscapeSpecified) {
462 NoEscapeSpecified = true;
463 NoEscape = RHS.NoEscape;
464 }
465
466 if (!RawRetainCountConvention)
467 RawRetainCountConvention = RHS.RawRetainCountConvention;
468
469 return *this;
470 }
471
472 friend bool operator==(const ParamInfo &, const ParamInfo &);
473
474 LLVM_DUMP_METHOD void dump(llvm::raw_ostream &OS) const;
475};
476
477inline bool operator==(const ParamInfo &LHS, const ParamInfo &RHS) {
478 return static_cast<const VariableInfo &>(LHS) == RHS &&
479 LHS.NoEscapeSpecified == RHS.NoEscapeSpecified &&
480 LHS.NoEscape == RHS.NoEscape &&
481 LHS.RawRetainCountConvention == RHS.RawRetainCountConvention;
482}
483
484inline bool operator!=(const ParamInfo &LHS, const ParamInfo &RHS) {
485 return !(LHS == RHS);
486}
487
488/// API notes for a function or method.
490private:
491 static constexpr const uint64_t NullabilityKindMask = 0x3;
492 static constexpr const unsigned NullabilityKindSize = 2;
493
494 static constexpr const unsigned ReturnInfoIndex = 0;
495
496public:
497 // If yes, we consider all types to be non-nullable unless otherwise noted.
498 // If this flag is not set, the pointer types are considered to have
499 // unknown nullability.
500
501 /// Whether the signature has been audited with respect to nullability.
502 LLVM_PREFERRED_TYPE(bool)
504
505 /// Number of types whose nullability is encoded with the NullabilityPayload.
507
508 /// A biased RetainCountConventionKind, where 0 means "unspecified".
510
511 // NullabilityKindSize bits are used to encode the nullability. The info
512 // about the return type is stored at position 0, followed by the nullability
513 // of the parameters.
514
515 /// Stores the nullability of the return type and the parameters.
516 uint64_t NullabilityPayload = 0;
517
518 /// The result type of this function, as a C type.
520
521 /// The function parameters.
523
527
528 static unsigned getMaxNullabilityIndex() {
529 return ((sizeof(NullabilityPayload) * CHAR_BIT) / NullabilityKindSize);
530 }
531
532 void addTypeInfo(unsigned index, NullabilityKind kind) {
533 assert(index <= getMaxNullabilityIndex());
534 assert(static_cast<unsigned>(kind) < NullabilityKindMask);
535
536 NullabilityAudited = true;
537 if (NumAdjustedNullable < index + 1)
538 NumAdjustedNullable = index + 1;
539
540 // Mask the bits.
542 ~(NullabilityKindMask << (index * NullabilityKindSize));
543
544 // Set the value.
545 unsigned kindValue = (static_cast<unsigned>(kind))
546 << (index * NullabilityKindSize);
547 NullabilityPayload |= kindValue;
548 }
549
550 /// Adds the return type info.
552 addTypeInfo(ReturnInfoIndex, kind);
553 }
554
555 /// Adds the parameter type info.
556 void addParamTypeInfo(unsigned index, NullabilityKind kind) {
557 addTypeInfo(index + 1, kind);
558 }
559
560 NullabilityKind getParamTypeInfo(unsigned index) const {
561 return getTypeInfo(index + 1);
562 }
563
564 NullabilityKind getReturnTypeInfo() const { return getTypeInfo(0); }
565
566 std::optional<RetainCountConventionKind> getRetainCountConvention() const {
568 return std::nullopt;
570 }
571 void
572 setRetainCountConvention(std::optional<RetainCountConventionKind> Value) {
573 RawRetainCountConvention = Value ? static_cast<unsigned>(*Value) + 1 : 0;
574 assert(getRetainCountConvention() == Value && "bitfield too small");
575 }
576
577 friend bool operator==(const FunctionInfo &, const FunctionInfo &);
578
579private:
580 NullabilityKind getTypeInfo(unsigned index) const {
581 assert(NullabilityAudited &&
582 "Checking the type adjustment on non-audited method.");
583
584 // If we don't have info about this parameter, return the default.
585 if (index > NumAdjustedNullable)
587 auto nullability = NullabilityPayload >> (index * NullabilityKindSize);
588 return static_cast<NullabilityKind>(nullability & NullabilityKindMask);
589 }
590
591public:
592 LLVM_DUMP_METHOD void dump(llvm::raw_ostream &OS) const;
593};
594
595inline bool operator==(const FunctionInfo &LHS, const FunctionInfo &RHS) {
596 return static_cast<const CommonEntityInfo &>(LHS) == RHS &&
600 LHS.ResultType == RHS.ResultType && LHS.Params == RHS.Params &&
602}
603
604inline bool operator!=(const FunctionInfo &LHS, const FunctionInfo &RHS) {
605 return !(LHS == RHS);
606}
607
608/// Describes API notes data for an Objective-C method.
610public:
611 /// Whether this is a designated initializer of its class.
612 LLVM_PREFERRED_TYPE(bool)
614
615 /// Whether this is a required initializer.
616 LLVM_PREFERRED_TYPE(bool)
617 unsigned RequiredInit : 1;
618
620
621 friend bool operator==(const ObjCMethodInfo &, const ObjCMethodInfo &);
622
624 // Merge Nullability.
625 if (!NullabilityAudited) {
626 if (auto Nullable = RHS.getDefaultNullability()) {
627 NullabilityAudited = true;
629 }
630 }
631 return *this;
632 }
633
634 LLVM_DUMP_METHOD void dump(llvm::raw_ostream &OS);
635};
636
637inline bool operator==(const ObjCMethodInfo &LHS, const ObjCMethodInfo &RHS) {
638 return static_cast<const FunctionInfo &>(LHS) == RHS &&
639 LHS.DesignatedInit == RHS.DesignatedInit &&
640 LHS.RequiredInit == RHS.RequiredInit;
641}
642
643inline bool operator!=(const ObjCMethodInfo &LHS, const ObjCMethodInfo &RHS) {
644 return !(LHS == RHS);
645}
646
647/// Describes API notes data for a global variable.
649public:
651};
652
653/// Describes API notes data for a global function.
655public:
657};
658
659/// Describes API notes data for a C/C++ record field.
660class FieldInfo : public VariableInfo {
661public:
663};
664
665/// Describes API notes data for a C++ method.
667public:
669};
670
671/// Describes API notes data for an enumerator.
673public:
675};
676
677/// Describes API notes data for a tag.
678class TagInfo : public CommonTypeInfo {
679 LLVM_PREFERRED_TYPE(bool)
680 unsigned HasFlagEnum : 1;
681 LLVM_PREFERRED_TYPE(bool)
682 unsigned IsFlagEnum : 1;
683
684 LLVM_PREFERRED_TYPE(bool)
685 unsigned SwiftCopyableSpecified : 1;
686 LLVM_PREFERRED_TYPE(bool)
687 unsigned SwiftCopyable : 1;
688
689public:
690 std::optional<std::string> SwiftImportAs;
691 std::optional<std::string> SwiftRetainOp;
692 std::optional<std::string> SwiftReleaseOp;
693
694 /// The Swift protocol that this type should be automatically conformed to.
695 std::optional<std::string> SwiftConformance;
696
697 std::optional<EnumExtensibilityKind> EnumExtensibility;
698
700 : HasFlagEnum(0), IsFlagEnum(0), SwiftCopyableSpecified(false),
701 SwiftCopyable(false) {}
702
703 std::optional<bool> isFlagEnum() const {
704 if (HasFlagEnum)
705 return IsFlagEnum;
706 return std::nullopt;
707 }
708 void setFlagEnum(std::optional<bool> Value) {
709 HasFlagEnum = Value.has_value();
710 IsFlagEnum = Value.value_or(false);
711 }
712
713 std::optional<bool> isSwiftCopyable() const {
714 return SwiftCopyableSpecified ? std::optional<bool>(SwiftCopyable)
715 : std::nullopt;
716 }
717 void setSwiftCopyable(std::optional<bool> Value) {
718 SwiftCopyableSpecified = Value.has_value();
719 SwiftCopyable = Value.value_or(false);
720 }
721
723 static_cast<CommonTypeInfo &>(*this) |= RHS;
724
725 if (!SwiftImportAs)
727 if (!SwiftRetainOp)
729 if (!SwiftReleaseOp)
731
732 if (!SwiftConformance)
734
735 if (!HasFlagEnum)
736 setFlagEnum(RHS.isFlagEnum());
737
740
741 if (!SwiftCopyableSpecified)
743
744 return *this;
745 }
746
747 friend bool operator==(const TagInfo &, const TagInfo &);
748
749 LLVM_DUMP_METHOD void dump(llvm::raw_ostream &OS);
750};
751
752inline bool operator==(const TagInfo &LHS, const TagInfo &RHS) {
753 return static_cast<const CommonTypeInfo &>(LHS) == RHS &&
754 LHS.SwiftImportAs == RHS.SwiftImportAs &&
755 LHS.SwiftRetainOp == RHS.SwiftRetainOp &&
756 LHS.SwiftReleaseOp == RHS.SwiftReleaseOp &&
758 LHS.isFlagEnum() == RHS.isFlagEnum() &&
759 LHS.isSwiftCopyable() == RHS.isSwiftCopyable() &&
761}
762
763inline bool operator!=(const TagInfo &LHS, const TagInfo &RHS) {
764 return !(LHS == RHS);
765}
766
767/// Describes API notes data for a typedef.
769public:
770 std::optional<SwiftNewTypeKind> SwiftWrapper;
771
773
775 static_cast<CommonTypeInfo &>(*this) |= RHS;
776 if (!SwiftWrapper)
778 return *this;
779 }
780
781 friend bool operator==(const TypedefInfo &, const TypedefInfo &);
782
783 LLVM_DUMP_METHOD void dump(llvm::raw_ostream &OS) const;
784};
785
786inline bool operator==(const TypedefInfo &LHS, const TypedefInfo &RHS) {
787 return static_cast<const CommonTypeInfo &>(LHS) == RHS &&
788 LHS.SwiftWrapper == RHS.SwiftWrapper;
789}
790
791inline bool operator!=(const TypedefInfo &LHS, const TypedefInfo &RHS) {
792 return !(LHS == RHS);
793}
794
795/// The file extension used for the source representation of API notes.
796static const constexpr char SOURCE_APINOTES_EXTENSION[] = "apinotes";
797
798/// Opaque context ID used to refer to an Objective-C class or protocol or a C++
799/// namespace.
801public:
802 unsigned Value;
803
804 explicit ContextID(unsigned value) : Value(value) {}
805};
806
807enum class ContextKind : uint8_t {
808 ObjCClass = 0,
809 ObjCProtocol = 1,
810 Namespace = 2,
811 Tag = 3,
812};
813
814struct Context {
817
819};
820
821/// A temporary reference to an Objective-C selector, suitable for
822/// referencing selector data on the stack.
823///
824/// Instances of this struct do not store references to any of the
825/// data they contain; it is up to the user to ensure that the data
826/// referenced by the identifier list persists.
828 unsigned NumArgs;
830};
831} // namespace api_notes
832} // namespace clang
833
834#endif
enum clang::sema::@1653::IndirectLocalPathEntry::EntryKind Kind
Defines various enumerations that describe declaration and type specifiers.
The base class of the type hierarchy.
Definition: Type.h:1829
Describes API notes data for a C++ method.
Definition: Types.h:666
Describes API notes data for any entity.
Definition: Types.h:52
unsigned UnavailableInSwift
Whether this entity is marked unavailable in Swift.
Definition: Types.h:63
unsigned Unavailable
Whether this entity is marked unavailable.
Definition: Types.h:59
std::string SwiftName
Swift name of this entity.
Definition: Types.h:76
void setSwiftPrivate(std::optional< bool > Private)
Definition: Types.h:87
std::string UnavailableMsg
Message to use when this entity is unavailable.
Definition: Types.h:55
friend bool operator==(const CommonEntityInfo &, const CommonEntityInfo &)
Definition: Types.h:120
LLVM_DUMP_METHOD void dump(llvm::raw_ostream &OS) const
std::optional< bool > isSwiftPrivate() const
Definition: Types.h:82
CommonEntityInfo & operator|=(const CommonEntityInfo &RHS)
Definition: Types.h:94
Describes API notes for types.
Definition: Types.h:135
void setNSErrorDomain(const std::optional< llvm::StringRef > &Domain)
Definition: Types.h:163
const std::optional< std::string > & getSwiftBridge() const
Definition: Types.h:147
LLVM_DUMP_METHOD void dump(llvm::raw_ostream &OS) const
void setNSErrorDomain(const std::optional< std::string > &Domain)
Definition: Types.h:159
friend bool operator==(const CommonTypeInfo &, const CommonTypeInfo &)
Definition: Types.h:185
const std::optional< std::string > & getNSErrorDomain() const
Definition: Types.h:155
void setSwiftBridge(std::optional< std::string > SwiftType)
Definition: Types.h:151
CommonTypeInfo & operator|=(const CommonTypeInfo &RHS)
Definition: Types.h:170
Opaque context ID used to refer to an Objective-C class or protocol or a C++ namespace.
Definition: Types.h:800
ContextID(unsigned value)
Definition: Types.h:804
Describes API notes data for an Objective-C class or protocol or a C++ namespace.
Definition: Types.h:197
std::optional< bool > getSwiftImportAsNonGeneric() const
Definition: Types.h:247
LLVM_DUMP_METHOD void dump(llvm::raw_ostream &OS)
std::optional< bool > getSwiftObjCMembers() const
Definition: Types.h:257
void setDefaultNullability(NullabilityKind Kind)
Set the default nullability for properties and methods of this class.
Definition: Types.h:239
std::optional< NullabilityKind > getDefaultNullability() const
Determine the default nullability for properties and methods of this class.
Definition: Types.h:231
void setSwiftObjCMembers(std::optional< bool > Value)
Definition: Types.h:261
friend bool operator==(const ContextInfo &, const ContextInfo &)
Definition: Types.h:291
bool hasDesignatedInits() const
Definition: Types.h:244
void setSwiftImportAsNonGeneric(std::optional< bool > Value)
Definition: Types.h:252
void setHasDesignatedInits(bool Value)
Definition: Types.h:245
ContextInfo & operator|=(const ContextInfo &RHS)
Definition: Types.h:268
Describes API notes data for an enumerator.
Definition: Types.h:672
Describes API notes data for a C/C++ record field.
Definition: Types.h:660
API notes for a function or method.
Definition: Types.h:489
void addTypeInfo(unsigned index, NullabilityKind kind)
Definition: Types.h:532
uint64_t NullabilityPayload
Stores the nullability of the return type and the parameters.
Definition: Types.h:516
std::optional< RetainCountConventionKind > getRetainCountConvention() const
Definition: Types.h:566
LLVM_DUMP_METHOD void dump(llvm::raw_ostream &OS) const
void setRetainCountConvention(std::optional< RetainCountConventionKind > Value)
Definition: Types.h:572
unsigned RawRetainCountConvention
A biased RetainCountConventionKind, where 0 means "unspecified".
Definition: Types.h:509
std::vector< ParamInfo > Params
The function parameters.
Definition: Types.h:522
NullabilityKind getReturnTypeInfo() const
Definition: Types.h:564
NullabilityKind getParamTypeInfo(unsigned index) const
Definition: Types.h:560
friend bool operator==(const FunctionInfo &, const FunctionInfo &)
Definition: Types.h:595
unsigned NumAdjustedNullable
Number of types whose nullability is encoded with the NullabilityPayload.
Definition: Types.h:506
std::string ResultType
The result type of this function, as a C type.
Definition: Types.h:519
static unsigned getMaxNullabilityIndex()
Definition: Types.h:528
void addReturnTypeInfo(NullabilityKind kind)
Adds the return type info.
Definition: Types.h:551
unsigned NullabilityAudited
Whether the signature has been audited with respect to nullability.
Definition: Types.h:503
void addParamTypeInfo(unsigned index, NullabilityKind kind)
Adds the parameter type info.
Definition: Types.h:556
Describes API notes data for a global function.
Definition: Types.h:654
Describes API notes data for a global variable.
Definition: Types.h:648
Describes API notes data for an Objective-C method.
Definition: Types.h:609
unsigned DesignatedInit
Whether this is a designated initializer of its class.
Definition: Types.h:613
friend bool operator==(const ObjCMethodInfo &, const ObjCMethodInfo &)
Definition: Types.h:637
ObjCMethodInfo & operator|=(const ContextInfo &RHS)
Definition: Types.h:623
unsigned RequiredInit
Whether this is a required initializer.
Definition: Types.h:617
LLVM_DUMP_METHOD void dump(llvm::raw_ostream &OS)
Describes API notes data for an Objective-C property.
Definition: Types.h:361
LLVM_DUMP_METHOD void dump(llvm::raw_ostream &OS) const
void setSwiftImportAsAccessors(std::optional< bool > Value)
Definition: Types.h:376
std::optional< bool > getSwiftImportAsAccessors() const
Definition: Types.h:371
ObjCPropertyInfo & operator|=(const ObjCPropertyInfo &RHS)
Definition: Types.h:395
friend bool operator==(const ObjCPropertyInfo &, const ObjCPropertyInfo &)
Definition: Types.h:407
ObjCPropertyInfo & operator|=(const ContextInfo &RHS)
Merge class-wide information into the given property.
Definition: Types.h:384
Describes a function or method parameter.
Definition: Types.h:419
void setNoEscape(std::optional< bool > Value)
Definition: Types.h:442
std::optional< bool > isNoEscape() const
Definition: Types.h:437
ParamInfo & operator|=(const ParamInfo &RHS)
Definition: Types.h:458
LLVM_DUMP_METHOD void dump(llvm::raw_ostream &OS) const
friend bool operator==(const ParamInfo &, const ParamInfo &)
Definition: Types.h:477
std::optional< RetainCountConventionKind > getRetainCountConvention() const
Definition: Types.h:447
void setRetainCountConvention(std::optional< RetainCountConventionKind > Value)
Definition: Types.h:453
Describes API notes data for a tag.
Definition: Types.h:678
std::optional< std::string > SwiftReleaseOp
Definition: Types.h:692
std::optional< std::string > SwiftRetainOp
Definition: Types.h:691
std::optional< std::string > SwiftImportAs
Definition: Types.h:690
std::optional< EnumExtensibilityKind > EnumExtensibility
Definition: Types.h:697
void setSwiftCopyable(std::optional< bool > Value)
Definition: Types.h:717
std::optional< bool > isFlagEnum() const
Definition: Types.h:703
TagInfo & operator|=(const TagInfo &RHS)
Definition: Types.h:722
std::optional< bool > isSwiftCopyable() const
Definition: Types.h:713
LLVM_DUMP_METHOD void dump(llvm::raw_ostream &OS)
void setFlagEnum(std::optional< bool > Value)
Definition: Types.h:708
friend bool operator==(const TagInfo &, const TagInfo &)
Definition: Types.h:752
std::optional< std::string > SwiftConformance
The Swift protocol that this type should be automatically conformed to.
Definition: Types.h:695
Describes API notes data for a typedef.
Definition: Types.h:768
LLVM_DUMP_METHOD void dump(llvm::raw_ostream &OS) const
TypedefInfo & operator|=(const TypedefInfo &RHS)
Definition: Types.h:774
std::optional< SwiftNewTypeKind > SwiftWrapper
Definition: Types.h:770
friend bool operator==(const TypedefInfo &, const TypedefInfo &)
Definition: Types.h:786
API notes for a variable/property.
Definition: Types.h:304
void setNullabilityAudited(NullabilityKind kind)
Definition: Types.h:326
void setType(const std::string &type)
Definition: Types.h:332
LLVM_DUMP_METHOD void dump(llvm::raw_ostream &OS) const
friend bool operator==(const VariableInfo &, const VariableInfo &)
Definition: Types.h:350
VariableInfo & operator|=(const VariableInfo &RHS)
Definition: Types.h:336
std::optional< NullabilityKind > getNullability() const
Definition: Types.h:320
const std::string & getType() const
Definition: Types.h:331
#define CHAR_BIT
Definition: limits.h:71
bool operator!=(const CommonEntityInfo &LHS, const CommonEntityInfo &RHS)
Definition: Types.h:129
bool operator==(const CommonEntityInfo &LHS, const CommonEntityInfo &RHS)
Definition: Types.h:120
RetainCountConventionKind
Definition: Types.h:25
SwiftNewTypeKind
The kind of a swift_wrapper/swift_newtype.
Definition: Types.h:43
EnumExtensibilityKind
The payload for an enum_extensibility attribute.
Definition: Types.h:36
static const constexpr char SOURCE_APINOTES_EXTENSION[]
The file extension used for the source representation of API notes.
Definition: Types.h:796
const internal::VariadicAllOfMatcher< Type > type
Matches Types in the clang AST.
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.
Definition: Specifiers.h:336
@ 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.
Definition: Dominators.h:30
#define false
Definition: stdbool.h:26
ContextKind kind
Definition: Types.h:816
Context(ContextID id, ContextKind kind)
Definition: Types.h:818
A temporary reference to an Objective-C selector, suitable for referencing selector data on the stack...
Definition: Types.h:827
llvm::ArrayRef< llvm::StringRef > Identifiers
Definition: Types.h:829