1*5ffd83dbSDimitry Andric //===-- ClangUtil.h ---------------------------------------------*- C++ -*-===// 2*5ffd83dbSDimitry Andric // 3*5ffd83dbSDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*5ffd83dbSDimitry Andric // See https://llvm.org/LICENSE.txt for license information. 5*5ffd83dbSDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*5ffd83dbSDimitry Andric // 7*5ffd83dbSDimitry Andric // A collection of helper methods and data structures for manipulating clang 8*5ffd83dbSDimitry Andric // types and decls. 9*5ffd83dbSDimitry Andric //===----------------------------------------------------------------------===// 10*5ffd83dbSDimitry Andric 11*5ffd83dbSDimitry Andric #ifndef LLDB_SOURCE_PLUGINS_EXPRESSIONPARSER_CLANG_CLANGUTIL_H 12*5ffd83dbSDimitry Andric #define LLDB_SOURCE_PLUGINS_EXPRESSIONPARSER_CLANG_CLANGUTIL_H 13*5ffd83dbSDimitry Andric 14*5ffd83dbSDimitry Andric #include "clang/AST/DeclBase.h" 15*5ffd83dbSDimitry Andric #include "clang/AST/Type.h" 16*5ffd83dbSDimitry Andric 17*5ffd83dbSDimitry Andric #include "lldb/Symbol/CompilerType.h" 18*5ffd83dbSDimitry Andric 19*5ffd83dbSDimitry Andric namespace clang { 20*5ffd83dbSDimitry Andric class TagDecl; 21*5ffd83dbSDimitry Andric } 22*5ffd83dbSDimitry Andric 23*5ffd83dbSDimitry Andric namespace lldb_private { 24*5ffd83dbSDimitry Andric struct ClangUtil { 25*5ffd83dbSDimitry Andric static bool IsClangType(const CompilerType &ct); 26*5ffd83dbSDimitry Andric 27*5ffd83dbSDimitry Andric /// Returns the clang::Decl of the given CompilerDecl. 28*5ffd83dbSDimitry Andric /// CompilerDecl has to be valid and represent a clang::Decl. 29*5ffd83dbSDimitry Andric static clang::Decl *GetDecl(const CompilerDecl &decl); 30*5ffd83dbSDimitry Andric 31*5ffd83dbSDimitry Andric static clang::QualType GetQualType(const CompilerType &ct); 32*5ffd83dbSDimitry Andric 33*5ffd83dbSDimitry Andric static clang::QualType GetCanonicalQualType(const CompilerType &ct); 34*5ffd83dbSDimitry Andric 35*5ffd83dbSDimitry Andric static CompilerType RemoveFastQualifiers(const CompilerType &ct); 36*5ffd83dbSDimitry Andric 37*5ffd83dbSDimitry Andric static clang::TagDecl *GetAsTagDecl(const CompilerType &type); 38*5ffd83dbSDimitry Andric 39*5ffd83dbSDimitry Andric /// Returns a textual representation of the given Decl's AST. Does not 40*5ffd83dbSDimitry Andric /// deserialize any child nodes. 41*5ffd83dbSDimitry Andric static std::string DumpDecl(const clang::Decl *d); 42*5ffd83dbSDimitry Andric /// Returns a textual representation of the given type. 43*5ffd83dbSDimitry Andric static std::string ToString(const clang::Type *t); 44*5ffd83dbSDimitry Andric /// Returns a textual representation of the given CompilerType (assuming 45*5ffd83dbSDimitry Andric /// its underlying type is a Clang type). 46*5ffd83dbSDimitry Andric static std::string ToString(const CompilerType &c); 47*5ffd83dbSDimitry Andric }; 48*5ffd83dbSDimitry Andric } 49*5ffd83dbSDimitry Andric 50*5ffd83dbSDimitry Andric #endif 51