clang: include/clang/AST/DeclarationName.h Source File (original) (raw)
1
2
3
4
5
6
7
8
9
10
11
12
13#ifndef LLVM_CLANG_AST_DECLARATIONNAME_H
14#define LLVM_CLANG_AST_DECLARATIONNAME_H
15
22#include "llvm/ADT/DenseMapInfo.h"
23#include "llvm/ADT/FoldingSet.h"
24#include "llvm/ADT/STLExtras.h"
25#include "llvm/Support/Compiler.h"
26#include "llvm/Support/type_traits.h"
27#include
28#include
29#include
30#include
31
33
34class ASTContext;
35template <typename> class CanQual;
36class DeclarationName;
37class DeclarationNameTable;
38struct PrintingPolicy;
39class TemplateDecl;
40class TypeSourceInfo;
41
43
44namespace detail {
45
46
47
48
49
50
51
53 : public llvm::FoldingSetNode {
56
57
59
60
61
62
63 void *FETokenInfo;
64
66
67public:
68 void Profile(llvm::FoldingSetNodeID &ID) {
69 ID.AddPointer(Type.getAsOpaquePtr());
70 }
71};
72
73
76 public llvm::FoldingSetNode {
79
80
82
83
84
85
86 void *FETokenInfo;
87
90 FETokenInfo(nullptr) {}
91
92public:
93 void Profile(llvm::FoldingSetNodeID &ID) { ID.AddPointer(Template); }
94};
95
96
97
98
99
103
104
106
107
108
109
110 void *FETokenInfo = nullptr;
111};
112
113
114
117 public llvm::FoldingSetNode {
120
122
123
124
125
126 void *FETokenInfo;
127
130 FETokenInfo(nullptr) {}
131
132public:
133 void Profile(llvm::FoldingSetNodeID &FSID) { FSID.AddPointer(ID); }
134};
135
136}
137
138
139
140
141
142
143
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174 enum StoredNameKind {
175 StoredIdentifier = 0,
176 StoredObjCZeroArgSelector = Selector::ZeroArg,
177 StoredObjCOneArgSelector = Selector::OneArg,
178 StoredCXXConstructorName = 3,
179 StoredCXXDestructorName = 4,
180 StoredCXXConversionFunctionName = 5,
181 StoredCXXOperatorName = 6,
182 StoredDeclarationNameExtra = Selector::MultiArg,
183 PtrMask = 7,
184 UncommonNameKindOffset = 8
185 };
186
193 "The various classes that DeclarationName::Ptr can point to"
194 " must be at least aligned to 8 bytes!");
195
196 static_assert(
197 std::is_same<std::underlying_type_t,
198 std::underlying_type_t<
200 "The various enums used to compute values for NameKind should "
201 "all have the same underlying type");
202
203public:
204
205
206
207
210 ObjCZeroArgSelector = StoredObjCZeroArgSelector,
211 ObjCOneArgSelector = StoredObjCOneArgSelector,
212 CXXConstructorName = StoredCXXConstructorName,
213 CXXDestructorName = StoredCXXDestructorName,
214 CXXConversionFunctionName = StoredCXXConversionFunctionName,
215 CXXOperatorName = StoredCXXOperatorName,
216 CXXDeductionGuideName = llvm::addEnumValues(
217 UncommonNameKindOffset,
218 detail::DeclarationNameExtra::CXXDeductionGuideName),
219 CXXLiteralOperatorName = llvm::addEnumValues(
220 UncommonNameKindOffset,
221 detail::DeclarationNameExtra::CXXLiteralOperatorName),
222 CXXUsingDirective =
223 llvm::addEnumValues(UncommonNameKindOffset,
224 detail::DeclarationNameExtra::CXXUsingDirective),
225 ObjCMultiArgSelector =
226 llvm::addEnumValues(UncommonNameKindOffset,
227 detail::DeclarationNameExtra::ObjCMultiArgSelector),
228 };
229
230private:
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
264
265 StoredNameKind getStoredNameKind() const {
266 return static_cast<StoredNameKind>(Ptr & PtrMask);
267 }
268
269 void *getPtr() const { return reinterpret_cast<void *>(Ptr & ~PtrMask); }
270
271 void setPtrAndKind(const void *P, StoredNameKind Kind) {
273 assert((Kind & ~PtrMask) == 0 &&
274 "Invalid StoredNameKind in setPtrAndKind!");
275 assert((PAsInteger & PtrMask) == 0 &&
276 "Improperly aligned pointer in setPtrAndKind!");
277 Ptr = PAsInteger | Kind;
278 }
279
280
281 DeclarationName(detail::DeclarationNameExtra *Name) {
282 setPtrAndKind(Name, StoredDeclarationNameExtra);
283 }
284
285
286 DeclarationName(detail::CXXSpecialNameExtra *Name,
287 StoredNameKind StoredKind) {
288 assert((StoredKind == StoredCXXConstructorName ||
289 StoredKind == StoredCXXDestructorName ||
290 StoredKind == StoredCXXConversionFunctionName) &&
291 "Invalid StoredNameKind when constructing a DeclarationName"
292 " from a CXXSpecialNameExtra!");
293 setPtrAndKind(Name, StoredKind);
294 }
295
296
297 DeclarationName(detail::CXXOperatorIdName *Name) {
298 setPtrAndKind(Name, StoredCXXOperatorName);
299 }
300
301
302 IdentifierInfo *castAsIdentifierInfo() const {
303 assert((getStoredNameKind() == StoredIdentifier) &&
304 "DeclarationName does not store an IdentifierInfo!");
305 return static_cast<IdentifierInfo *>(getPtr());
306 }
307
308
309
310 detail::DeclarationNameExtra *castAsExtra() const {
311 assert((getStoredNameKind() == StoredDeclarationNameExtra) &&
312 "DeclarationName does not store an Extra structure!");
313 return static_cast<detail::DeclarationNameExtra *>(getPtr());
314 }
315
316
317
318 detail::CXXSpecialNameExtra *castAsCXXSpecialNameExtra() const {
319 assert((getStoredNameKind() == StoredCXXConstructorName ||
320 getStoredNameKind() == StoredCXXDestructorName ||
321 getStoredNameKind() == StoredCXXConversionFunctionName) &&
322 "DeclarationName does not store a CXXSpecialNameExtra!");
323 return static_cast<detail::CXXSpecialNameExtra *>(getPtr());
324 }
325
326
327
328 detail::CXXOperatorIdName *castAsCXXOperatorIdName() const {
329 assert((getStoredNameKind() == StoredCXXOperatorName) &&
330 "DeclarationName does not store a CXXOperatorIdName!");
331 return static_cast<detail::CXXOperatorIdName *>(getPtr());
332 }
333
334
335
336 detail::CXXDeductionGuideNameExtra *castAsCXXDeductionGuideNameExtra() const {
337 assert(getNameKind() == CXXDeductionGuideName &&
338 "DeclarationName does not store a CXXDeductionGuideNameExtra!");
339 return static_cast<detail::CXXDeductionGuideNameExtra *>(getPtr());
340 }
341
342
343
344 detail::CXXLiteralOperatorIdName *castAsCXXLiteralOperatorIdName() const {
345 assert(getNameKind() == CXXLiteralOperatorName &&
346 "DeclarationName does not store a CXXLiteralOperatorIdName!");
347 return static_cast<detail::CXXLiteralOperatorIdName *>(getPtr());
348 }
349
350
351
352 void *getFETokenInfoSlow() const;
353 void setFETokenInfoSlow(void *T);
354
355public:
356
358
359
361 setPtrAndKind(II, StoredIdentifier);
362 }
363
364
366 : Ptr(reinterpret_cast<uintptr_t>(Sel.InfoPtr.getOpaqueValue())) {}
367
368
370
372 detail::DeclarationNameExtra::CXXUsingDirective);
374 }
375
376
377 explicit operator bool() const {
378 return getPtr() || (getStoredNameKind() != StoredIdentifier);
379 }
380
381
382 bool isEmpty() const { return !*this; }
383
384
385 bool isIdentifier() const { return getStoredNameKind() == StoredIdentifier; }
387 return getStoredNameKind() == StoredObjCZeroArgSelector;
388 }
390 return getStoredNameKind() == StoredObjCOneArgSelector;
391 }
392
393
395
396
397 StoredNameKind StoredKind = getStoredNameKind();
398 if (StoredKind != StoredDeclarationNameExtra)
399 return static_cast<NameKind>(StoredKind);
400
401
402
403 unsigned ExtraKind = castAsExtra()->getKind();
404 return static_cast<NameKind>(UncommonNameKindOffset + ExtraKind);
405 }
406
407
408
409
410
411
412
413 bool isDependentName() const;
414
415
417
418
419
421 if (isIdentifier())
422 return castAsIdentifierInfo();
423 return nullptr;
424 }
425
426
428
429
430 void *getAsOpaquePtr() const { return reinterpret_cast<void *>(Ptr); }
431
432
435 N.Ptr = reinterpret_cast<uintptr_t>(P);
436 return N;
437 }
438
439
440
443 N.Ptr = P;
444 return N;
445 }
446
447
448
450 if (getStoredNameKind() == StoredCXXConstructorName ||
451 getStoredNameKind() == StoredCXXDestructorName ||
452 getStoredNameKind() == StoredCXXConversionFunctionName) {
453 assert(getPtr() && "getCXXNameType on a null DeclarationName!");
454 return castAsCXXSpecialNameExtra()->Type;
455 }
457 }
458
459
460
462 if (getNameKind() == CXXDeductionGuideName) {
463 assert(getPtr() &&
464 "getCXXDeductionGuideTemplate on a null DeclarationName!");
465 return castAsCXXDeductionGuideNameExtra()->Template;
466 }
467 return nullptr;
468 }
469
470
471
473 if (getStoredNameKind() == StoredCXXOperatorName) {
474 assert(getPtr() && "getCXXOverloadedOperator on a null DeclarationName!");
475 return castAsCXXOperatorIdName()->Kind;
476 }
478 }
479
480
481
483 if (getNameKind() == CXXLiteralOperatorName) {
484 assert(getPtr() && "getCXXLiteralIdentifier on a null DeclarationName!");
485 return castAsCXXLiteralOperatorIdName()->ID;
486 }
487 return nullptr;
488 }
489
490
492 assert((getNameKind() == ObjCZeroArgSelector ||
493 getNameKind() == ObjCOneArgSelector ||
494 getNameKind() == ObjCMultiArgSelector || !getPtr()) &&
495 "Not a selector!");
497 }
498
499
500
501
503 assert(getPtr() && "getFETokenInfo on an empty DeclarationName!");
504 if (getStoredNameKind() == StoredIdentifier)
505 return castAsIdentifierInfo()->getFETokenInfo();
506 return getFETokenInfoSlow();
507 }
508
510 assert(getPtr() && "setFETokenInfo on an empty DeclarationName!");
511 if (getStoredNameKind() == StoredIdentifier)
512 castAsIdentifierInfo()->setFETokenInfo(T);
513 else
514 setFETokenInfoSlow(T);
515 }
516
517
519 return LHS.Ptr == RHS.Ptr;
520 }
521
522
524 return LHS.Ptr != RHS.Ptr;
525 }
526
530 return Name;
531 }
532
536 return Name;
537 }
538
540
542
543 void dump() const;
544};
545
546raw_ostream &operator<<(raw_ostream &OS, DeclarationName N);
547
548
549
551 return DeclarationName::compare(LHS, RHS) < 0;
552}
553
554
555
557 return DeclarationName::compare(LHS, RHS) > 0;
558}
559
560
561
563 return DeclarationName::compare(LHS, RHS) <= 0;
564}
565
566
567
569 return DeclarationName::compare(LHS, RHS) >= 0;
570}
571
572
573
574
575
576
578
580
581
582
583
584 llvm::FoldingSetdetail::CXXSpecialNameExtra CXXConstructorNames;
585
586
587
588
589 llvm::FoldingSetdetail::CXXSpecialNameExtra CXXDestructorNames;
590
591
592
593
594
595 llvm::FoldingSetdetail::CXXSpecialNameExtra CXXConversionFunctionNames;
596
597
598
599
601
602
603
604
605
606 llvm::FoldingSetdetail::CXXLiteralOperatorIdName CXXLiteralOperatorNames;
607
608
609
610
611
612 llvm::FoldingSetdetail::CXXDeductionGuideNameExtra CXXDeductionGuideNames;
613
614public:
621
622
625 }
626
627
629
630
632
633
635
636
638
639
640
641
642
643
644
647
648
651 }
652
653
655};
656
657
658
659
661
662
663
664
665
666
667 struct NT {
669 };
670
671
672 struct CXXOpName {
675 };
676
677
678 struct CXXLitOpName {
680 };
681
682
683
684
685
686 union {
687 struct NT NamedType;
688 struct CXXOpName CXXOperatorName;
689 struct CXXLitOpName CXXLiteralOperatorName;
690 };
691
692 void setNamedTypeLoc(TypeSourceInfo *TInfo) { NamedType.TInfo = TInfo; }
693
694 void setCXXOperatorNameRange(SourceRange Range) {
695 CXXOperatorName.BeginOpNameLoc = Range.getBegin().getRawEncoding();
696 CXXOperatorName.EndOpNameLoc = Range.getEnd().getRawEncoding();
697 }
698
699 void setCXXLiteralOperatorNameLoc(SourceLocation Loc) {
700 CXXLiteralOperatorName.OpNameLoc = Loc.getRawEncoding();
701 }
702
703public:
704 DeclarationNameLoc(DeclarationName Name);
705
707
708
709
711
712
714 return SourceLocation::getFromRawEncoding(CXXOperatorName.BeginOpNameLoc);
715 }
716
717
719 return SourceLocation::getFromRawEncoding(CXXOperatorName.EndOpNameLoc);
720 }
721
722
723
724
726 return SourceRange(getCXXOperatorNameBeginLoc(),
727 getCXXOperatorNameEndLoc());
728 }
729
730
731
732
734 return SourceLocation::getFromRawEncoding(CXXLiteralOperatorName.OpNameLoc);
735 }
736
737
738
741 DNL.setNamedTypeLoc(TInfo);
742 return DNL;
743 }
744
745
748 return makeCXXOperatorNameLoc(SourceRange(BeginLoc, EndLoc));
749 }
750
751
754 DNL.setCXXOperatorNameRange(Range);
755 return DNL;
756 }
757
758
761 DNL.setCXXLiteralOperatorNameLoc(Loc);
762 return DNL;
763 }
764};
765
766
767
769private:
770
772
773
775
776
778
779public:
780
782
784 : Name(Name), NameLoc(NameLoc), LocInfo(Name) {}
785
788 : Name(Name), NameLoc(NameLoc), LocInfo(LocInfo) {}
789
790
792
793
795
796
798
799
801
804
805
806
808 if (Name.getNameKind() != DeclarationName::CXXConstructorName &&
809 Name.getNameKind() != DeclarationName::CXXDestructorName &&
810 Name.getNameKind() != DeclarationName::CXXConversionFunctionName)
811 return nullptr;
813 }
814
815
816
818 assert(Name.getNameKind() == DeclarationName::CXXConstructorName ||
819 Name.getNameKind() == DeclarationName::CXXDestructorName ||
820 Name.getNameKind() == DeclarationName::CXXConversionFunctionName);
821 LocInfo = DeclarationNameLoc::makeNamedTypeLoc(TInfo);
822 }
823
824
825
827 if (Name.getNameKind() != DeclarationName::CXXOperatorName)
830 }
831
832
833
835 assert(Name.getNameKind() == DeclarationName::CXXOperatorName);
836 LocInfo = DeclarationNameLoc::makeCXXOperatorNameLoc(R);
837 }
838
839
840
841
843 if (Name.getNameKind() != DeclarationName::CXXLiteralOperatorName)
846 }
847
848
849
850
852 assert(Name.getNameKind() == DeclarationName::CXXLiteralOperatorName);
853 LocInfo = DeclarationNameLoc::makeCXXLiteralOperatorNameLoc(Loc);
854 }
855
856
857 bool isInstantiationDependent() const;
858
859
860
861 bool containsUnexpandedParameterPack() const;
862
863
865
866
867 void printName(raw_ostream &OS, PrintingPolicy Policy) const;
868
869
871
872
874 return SourceRange(getBeginLoc(), getEndLoc());
875 }
876
879 return EndLoc.isValid() ? EndLoc : getBeginLoc();
880 }
881
882private:
884};
885
886
887
891 DiagnosticsEngine::ak_declarationname);
892 return PD;
893}
894
895raw_ostream &operator<<(raw_ostream &OS, DeclarationNameInfo DNInfo);
896
897}
898
899namespace llvm {
900
901
902
903template<>
904struct DenseMapInfo<clang::DeclarationName> {
907 }
908
911 }
912
914 return DenseMapInfo<void*>::getHashValue(Name.getAsOpaquePtr());
915 }
916
917 static inline bool
919 return LHS == RHS;
920 }
921};
922
925 return P.getAsOpaquePtr();
926 }
929 }
930 static constexpr int NumLowBitsAvailable = 0;
931};
932
933}
934
935
936
938
939
940
943
947
948public:
949
951};
952
953}
954
955#endif
Defines the Diagnostic-related interfaces.
enum clang::sema::@1726::IndirectLocalPathEntry::EntryKind Kind
static void dump(llvm::raw_ostream &OS, StringRef FunctionName, ArrayRef< CounterExpression > Expressions, ArrayRef< CounterMappingRegion > Regions)
Defines the clang::IdentifierInfo, clang::IdentifierTable, and clang::Selector interfaces.
static void print(llvm::raw_ostream &OS, const T &V, ASTContext &ASTCtx, QualType Ty)
Defines an enumeration for C++ overloaded operators.
Implements a partial diagnostic that can be emitted anwyhere in a DiagnosticBuilder stream.
static bool compare(const PathDiagnostic &X, const PathDiagnostic &Y)
Defines the clang::SourceLocation class and associated facilities.
C Language Family Type Representation.
__DEVICE__ void * memset(void *__a, int __b, size_t __c)
Holds long-lived AST nodes (such as types and decls) that can be referred to throughout the semantic ...
A structure for storing the information associated with a name that has been assumed to be a template...
DeclarationName getDeclName() const
Get the name of the template.
DeclarationNameLoc - Additional source/type location info for a declaration name.
static DeclarationNameLoc makeNamedTypeLoc(TypeSourceInfo *TInfo)
Construct location information for a constructor, destructor or conversion operator.
static DeclarationNameLoc makeCXXLiteralOperatorNameLoc(SourceLocation Loc)
Construct location information for a literal C++ operator.
SourceLocation getCXXLiteralOperatorNameLoc() const
Return the location of the literal operator name (without the operator keyword).
SourceLocation getCXXOperatorNameBeginLoc() const
Return the beginning location of the getCXXOperatorNameRange() range.
TypeSourceInfo * getNamedTypeInfo() const
Returns the source type info.
static DeclarationNameLoc makeCXXOperatorNameLoc(SourceLocation BeginLoc, SourceLocation EndLoc)
Construct location information for a non-literal C++ operator.
SourceLocation getCXXOperatorNameEndLoc() const
Return the end location of the getCXXOperatorNameRange() range.
SourceRange getCXXOperatorNameRange() const
Return the range of the operator name (without the operator keyword).
static DeclarationNameLoc makeCXXOperatorNameLoc(SourceRange Range)
Construct location information for a non-literal C++ operator.
The name of a declaration.
static DeclarationName getFromOpaqueInteger(uintptr_t P)
Get a declaration name from an opaque integer returned by getAsOpaqueInteger.
uintptr_t getAsOpaqueInteger() const
Get the representation of this declaration name as an opaque integer.
IdentifierInfo * getAsIdentifierInfo() const
Retrieve the IdentifierInfo * stored in this declaration name, or null if this declaration name isn't...
static DeclarationName getEmptyMarker()
static DeclarationName getFromOpaquePtr(void *P)
Get a declaration name from an opaque pointer returned by getAsOpaquePtr.
static DeclarationName getTombstoneMarker()
TemplateDecl * getCXXDeductionGuideTemplate() const
If this name is the name of a C++ deduction guide, return the template associated with that name.
DeclarationName(Selector Sel)
Construct a declaration name from an Objective-C selector.
void * getAsOpaquePtr() const
Get the representation of this declaration name as an opaque pointer.
const IdentifierInfo * getCXXLiteralIdentifier() const
If this name is the name of a literal operator, retrieve the identifier associated with it.
friend bool operator==(DeclarationName LHS, DeclarationName RHS)
Determine whether the specified names are identical.
static DeclarationName getUsingDirectiveName()
Returns the name for all C++ using-directives.
friend bool operator!=(DeclarationName LHS, DeclarationName RHS)
Determine whether the specified names are different.
OverloadedOperatorKind getCXXOverloadedOperator() const
If this name is the name of an overloadable operator in C++ (e.g., operator+), retrieve the kind of o...
bool isObjCZeroArgSelector() const
NameKind
The kind of the name stored in this DeclarationName.
void * getFETokenInfo() const
Get and set FETokenInfo.
QualType getCXXNameType() const
If this name is one of the C++ names (of a constructor, destructor, or conversion function),...
Selector getObjCSelector() const
Get the Objective-C selector stored in this declaration name.
bool isObjCOneArgSelector() const
DeclarationName()
Construct an empty declaration name.
NameKind getNameKind() const
Determine what kind of name this is.
bool isEmpty() const
Evaluates true when this declaration name is empty.
DeclarationName(const IdentifierInfo *II)
Construct a declaration name from an IdentifierInfo *.
void setFETokenInfo(void *T)
bool isIdentifier() const
Predicate functions for querying what type of name this is.
One of these records is kept for each identifier that is lexed.
This represents a decl that may have a name.
A (possibly-)qualified type.
Smart pointer class that efficiently represents Objective-C method names.
Encodes a location in the source.
bool isValid() const
Return true if this is a valid SourceLocation object.
A trivial tuple used to represent a source range.
The streaming interface shared between DiagnosticBuilder and PartialDiagnostic.
void AddTaggedVal(uint64_t V, DiagnosticsEngine::ArgumentKind Kind) const
The base class of all kinds of template declarations (e.g., class, function, etc.).
A container of type source information.
The base class of the type hierarchy.
Implementation class used to describe either a set of overloaded template names or an already-substit...
Contains the actual identifier that makes up the name of a C++ literal operator.
void Profile(llvm::FoldingSetNodeID &FSID)
Contains extra information for the name of an overloaded operator in C++, such as "operator+.
The JSON file list parser is used to communicate input to InstallAPI.
OverloadedOperatorKind
Enumeration specifying the different kinds of C++ overloaded operators.
@ OO_None
Not an overloaded operator.
@ NUM_OVERLOADED_OPERATORS
bool operator<(DeclarationName LHS, DeclarationName RHS)
Ordering on two declaration names.
CanQual< Type > CanQualType
Represents a canonical, potentially-qualified type.
bool operator<=(DeclarationName LHS, DeclarationName RHS)
Ordering on two declaration names.
bool operator>(DeclarationName LHS, DeclarationName RHS)
Ordering on two declaration names.
const FunctionProtoType * T
bool operator>=(DeclarationName LHS, DeclarationName RHS)
Ordering on two declaration names.
llvm::StringRef getAsString(SyncScope S)
Diagnostic wrappers for TextAPI types for error reporting.
__UINTPTR_TYPE__ uintptr_t
An unsigned integer type with the property that any valid pointer to void can be converted to this ty...
DeclarationNameInfo - A collector data type for bundling together a DeclarationName and the correspon...
SourceLocation getLoc() const
getLoc - Returns the main location of the declaration name.
DeclarationName getName() const
getName - Returns the embedded declaration name.
void setLoc(SourceLocation L)
setLoc - Sets the main location of the declaration name.
void setCXXLiteralOperatorNameLoc(SourceLocation Loc)
setCXXLiteralOperatorNameLoc - Sets the location of the literal operator name (not the operator keywo...
void setNamedTypeInfo(TypeSourceInfo *TInfo)
setNamedTypeInfo - Sets the source type info associated to the name.
void setInfo(const DeclarationNameLoc &Info)
void setCXXOperatorNameRange(SourceRange R)
setCXXOperatorNameRange - Sets the range of the operator name (without the operator keyword).
SourceRange getCXXOperatorNameRange() const
getCXXOperatorNameRange - Gets the range of the operator name (without the operator keyword).
DeclarationNameInfo(DeclarationName Name, SourceLocation NameLoc)
void setName(DeclarationName N)
setName - Sets the embedded declaration name.
const DeclarationNameLoc & getInfo() const
SourceLocation getBeginLoc() const
getBeginLoc - Retrieve the location of the first token.
TypeSourceInfo * getNamedTypeInfo() const
getNamedTypeInfo - Returns the source type info associated to the name.
SourceRange getSourceRange() const LLVM_READONLY
getSourceRange - The range of the declaration name.
DeclarationNameInfo(DeclarationName Name, SourceLocation NameLoc, DeclarationNameLoc LocInfo)
SourceLocation getCXXLiteralOperatorNameLoc() const
getCXXLiteralOperatorNameLoc - Returns the location of the literal operator name (not the operator ke...
SourceLocation getEndLoc() const LLVM_READONLY
DeclarationNameInfo()=default
Describes how types, statements, expressions, and declarations should be printed.
static clang::DeclarationName getEmptyKey()
static clang::DeclarationName getTombstoneKey()
static bool isEqual(clang::DeclarationName LHS, clang::DeclarationName RHS)
static unsigned getHashValue(clang::DeclarationName Name)
static void * getAsVoidPointer(clang::DeclarationName P)
static clang::DeclarationName getFromVoidPointer(void *P)