1 //===-- ClangUtil.cpp -------------------------------------------*- C++ -*-===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 // A collection of helper methods and data structures for manipulating clang
10 //===----------------------------------------------------------------------===//
12 #include "lldb/Symbol/ClangUtil.h"
13 #include "lldb/Symbol/ClangASTContext.h"
15 using namespace clang;
16 using namespace lldb_private;
18 bool ClangUtil::IsClangType(const CompilerType &ct) {
19 if (llvm::dyn_cast_or_null<ClangASTContext>(ct.GetTypeSystem()) == nullptr)
22 if (!ct.GetOpaqueQualType())
28 QualType ClangUtil::GetQualType(const CompilerType &ct) {
29 // Make sure we have a clang type before making a clang::QualType
33 return QualType::getFromOpaquePtr(ct.GetOpaqueQualType());
36 QualType ClangUtil::GetCanonicalQualType(const CompilerType &ct) {
40 return GetQualType(ct).getCanonicalType();
43 CompilerType ClangUtil::RemoveFastQualifiers(const CompilerType &ct) {
47 QualType qual_type(GetQualType(ct));
48 qual_type.removeLocalFastQualifiers();
49 return CompilerType(ct.GetTypeSystem(), qual_type.getAsOpaquePtr());
52 clang::TagDecl *ClangUtil::GetAsTagDecl(const CompilerType &type) {
53 clang::QualType qual_type = ClangUtil::GetCanonicalQualType(type);
54 if (qual_type.isNull())
57 return qual_type->getAsTagDecl();