clang  9.0.0svn
LocInfoType.h
Go to the documentation of this file.
1 //===--- LocInfoType.h - Parsed Type with Location Information---*- 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 // This file defines the LocInfoType class, which holds a type and its
10 // source-location information.
11 //
12 //===----------------------------------------------------------------------===//
13 #ifndef LLVM_CLANG_SEMA_LOCINFOTYPE_H
14 #define LLVM_CLANG_SEMA_LOCINFOTYPE_H
15 
16 #include "clang/AST/Type.h"
17 
18 namespace clang {
19 
20 class TypeSourceInfo;
21 
22 /// Holds a QualType and a TypeSourceInfo* that came out of a declarator
23 /// parsing.
24 ///
25 /// LocInfoType is a "transient" type, only needed for passing to/from Parser
26 /// and Sema, when we want to preserve type source info for a parsed type.
27 /// It will not participate in the type system semantics in any way.
28 class LocInfoType : public Type {
29  enum {
30  // The last number that can fit in Type's TC.
31  // Avoids conflict with an existing Type class.
32  LocInfo = Type::TypeLast + 1
33  };
34 
35  TypeSourceInfo *DeclInfo;
36 
38  : Type((TypeClass)LocInfo, ty, ty->isDependentType(),
41  DeclInfo(TInfo) {
42  assert(getTypeClass() == (TypeClass)LocInfo && "LocInfo didn't fit in TC?");
43  }
44  friend class Sema;
45 
46 public:
48  TypeSourceInfo *getTypeSourceInfo() const { return DeclInfo; }
49 
50  void getAsStringInternal(std::string &Str,
51  const PrintingPolicy &Policy) const;
52 
53  static bool classof(const Type *T) {
54  return T->getTypeClass() == (TypeClass)LocInfo;
55  }
56 };
57 
58 } // end namespace clang
59 
60 #endif // LLVM_CLANG_SEMA_LOCINFOTYPE_H
A (possibly-)qualified type.
Definition: Type.h:637
C Language Family Type Representation.
The base class of the type hierarchy.
Definition: Type.h:1406
A container of type source information.
Definition: Decl.h:86
QualType getType() const
Definition: LocInfoType.h:47
Describes how types, statements, expressions, and declarations should be printed. ...
Definition: PrettyPrinter.h:37
Type(TypeClass tc, QualType canon, bool Dependent, bool InstantiationDependent, bool VariablyModified, bool ContainsUnexpandedParameterPack)
Definition: Type.h:1769
bool containsUnexpandedParameterPack() const
Whether this type is or contains an unexpanded parameter pack, used to support C++0x variadic templat...
Definition: Type.h:1830
void getAsStringInternal(std::string &Str, const PrintingPolicy &Policy) const
Definition: SemaType.cpp:5708
Sema - This implements semantic analysis and AST building for C.
Definition: Sema.h:277
Holds a QualType and a TypeSourceInfo* that came out of a declarator parsing.
Definition: LocInfoType.h:28
bool isVariablyModifiedType() const
Whether this type is a variably-modified type (C99 6.7.5).
Definition: Type.h:2094
TypeClass getTypeClass() const
Definition: Type.h:1810
bool isInstantiationDependentType() const
Determine whether this type is an instantiation-dependent type, meaning that the type involves a temp...
Definition: Type.h:2084
static bool classof(const Type *T)
Definition: LocInfoType.h:53
Dataflow Directional Tag Classes.
TypeSourceInfo * getTypeSourceInfo() const
Definition: LocInfoType.h:48
QualType getCanonicalTypeInternal() const
Definition: Type.h:2357
bool isDependentType() const
Whether this type is a dependent type, meaning that its definition somehow depends on a template para...
Definition: Type.h:2078