Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Blame | Last modification | View Log | Download | RSS feed

  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_AST_LOCINFOTYPE_H
  14. #define LLVM_CLANG_AST_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.  
  37.   LocInfoType(QualType ty, TypeSourceInfo *TInfo)
  38.       : Type((TypeClass)LocInfo, ty, ty->getDependence()), DeclInfo(TInfo) {
  39.     assert(getTypeClass() == (TypeClass)LocInfo && "LocInfo didn't fit in TC?");
  40.   }
  41.   friend class Sema;
  42.  
  43. public:
  44.   QualType getType() const { return getCanonicalTypeInternal(); }
  45.   TypeSourceInfo *getTypeSourceInfo() const { return DeclInfo; }
  46.  
  47.   void getAsStringInternal(std::string &Str,
  48.                            const PrintingPolicy &Policy) const;
  49.  
  50.   static bool classof(const Type *T) {
  51.     return T->getTypeClass() == (TypeClass)LocInfo;
  52.   }
  53. };
  54.  
  55. } // end namespace clang
  56.  
  57. #endif // LLVM_CLANG_AST_LOCINFOTYPE_H
  58.