clang API Documentation
#include <CXXInheritance.h>
Public Types | |
typedef std::list< CXXBasePath > ::iterator | paths_iterator |
typedef std::list< CXXBasePath > ::const_iterator | const_paths_iterator |
typedef NamedDecl ** | decl_iterator |
typedef llvm::iterator_range < decl_iterator > | decl_range |
Public Member Functions | |
CXXBasePaths (bool FindAmbiguities=true, bool RecordPaths=true, bool DetectVirtual=true) | |
~CXXBasePaths () | |
paths_iterator | begin () |
paths_iterator | end () |
const_paths_iterator | begin () const |
const_paths_iterator | end () const |
CXXBasePath & | front () |
const CXXBasePath & | front () const |
decl_range | found_decls () |
bool | isAmbiguous (CanQualType BaseType) |
Determine whether the path from the most-derived type to the given base type is ambiguous (i.e., it refers to multiple subobjects of the same base type). | |
bool | isFindingAmbiguities () const |
Whether we are finding multiple paths to detect ambiguities. | |
bool | isRecordingPaths () const |
Whether we are recording paths. | |
void | setRecordingPaths (bool RP) |
Specify whether we should be recording paths or not. | |
bool | isDetectingVirtual () const |
Whether we are detecting virtual bases. | |
const RecordType * | getDetectedVirtual () const |
The virtual base discovered on the path (if we are merely detecting virtuals). | |
CXXRecordDecl * | getOrigin () const |
Retrieve the type from which this base-paths search began. | |
void | setOrigin (CXXRecordDecl *Rec) |
void | clear () |
Clear the base-paths results. | |
void | swap (CXXBasePaths &Other) |
Swap this data structure's contents with another CXXBasePaths object. | |
Friends | |
class | CXXRecordDecl |
BasePaths - Represents the set of paths from a derived class to one of its (direct or indirect) bases. For example, given the following class hierarchy:
There are two potential BasePaths to represent paths from D to a base subobject of type A. One path is (D,0) -> (B,0) -> (A,0) and another is (D,0)->(C,0)->(A,1). These two paths actually refer to two different base class subobjects of the same type, so the BasePaths object refers to an ambiguous path. On the other hand, consider the following class hierarchy:
class A { }; class B : public virtual A { }; class C : public virtual A { }; class D : public B, public C{ };
Here, there are two potential BasePaths again, (D, 0) -> (B, 0) -> (A,v) and (D, 0) -> (C, 0) -> (A, v), but since both of them refer to the same base class subobject of type A (the virtual one), there is no ambiguity.
Definition at line 117 of file CXXInheritance.h.
typedef std::list<CXXBasePath>::const_iterator clang::CXXBasePaths::const_paths_iterator |
Definition at line 171 of file CXXInheritance.h.
typedef NamedDecl** clang::CXXBasePaths::decl_iterator |
Definition at line 172 of file CXXInheritance.h.
typedef llvm::iterator_range<decl_iterator> clang::CXXBasePaths::decl_range |
Definition at line 193 of file CXXInheritance.h.
typedef std::list<CXXBasePath>::iterator clang::CXXBasePaths::paths_iterator |
Definition at line 170 of file CXXInheritance.h.
clang::CXXBasePaths::CXXBasePaths | ( | bool | FindAmbiguities = true , |
bool | RecordPaths = true , |
||
bool | DetectVirtual = true |
||
) | [inline, explicit] |
BasePaths - Construct a new BasePaths structure to record the paths for a derived-to-base search.
Definition at line 176 of file CXXInheritance.h.
clang::CXXBasePaths::~CXXBasePaths | ( | ) | [inline] |
Definition at line 183 of file CXXInheritance.h.
paths_iterator clang::CXXBasePaths::begin | ( | ) | [inline] |
Definition at line 185 of file CXXInheritance.h.
Referenced by computeOffsetHint(), clang::Sema::DiagnoseAmbiguousLookup(), DiagnoseReinterpretUpDownCast(), FindBaseInitializer(), FindBestPath(), clang::Sema::getAmbiguousPathsDisplayString(), clang::CXXRecordDecl::lookupInBases(), clang::Sema::LookupQualifiedName(), and TryStaticDowncast().
const_paths_iterator clang::CXXBasePaths::begin | ( | ) | const [inline] |
Definition at line 187 of file CXXInheritance.h.
void CXXBasePaths::clear | ( | ) |
Clear the base-paths results.
clear - Clear out all prior path information.
Definition at line 57 of file CXXInheritance.cpp.
References clang::CXXBasePath::clear().
Referenced by clang::Sema::CheckDerivedToBaseConversion(), clang::Sema::CheckExceptionSpecSubset(), and TryStaticDowncast().
paths_iterator clang::CXXBasePaths::end | ( | ) | [inline] |
Definition at line 186 of file CXXInheritance.h.
Referenced by computeOffsetHint(), clang::Sema::DiagnoseAmbiguousLookup(), DiagnoseReinterpretUpDownCast(), FindBaseInitializer(), FindBestPath(), clang::Sema::getAmbiguousPathsDisplayString(), clang::CXXRecordDecl::lookupInBases(), clang::Sema::LookupQualifiedName(), and TryStaticDowncast().
const_paths_iterator clang::CXXBasePaths::end | ( | ) | const [inline] |
Definition at line 188 of file CXXInheritance.h.
Definition at line 38 of file CXXInheritance.cpp.
Referenced by clang::Sema::AddOverriddenMethods().
CXXBasePath& clang::CXXBasePaths::front | ( | ) | [inline] |
Definition at line 190 of file CXXInheritance.h.
Referenced by adjustReturnValue(), clang::Sema::BuildBasePathArray(), clang::Sema::CheckDerivedToBaseConversion(), clang::Sema::CheckExceptionSpecSubset(), clang::Sema::DiagnoseAmbiguousLookup(), clang::ento::StoreManager::evalDynamicCast(), clang::Sema::LookupQualifiedName(), and TryStaticDowncast().
const CXXBasePath& clang::CXXBasePaths::front | ( | ) | const [inline] |
Definition at line 191 of file CXXInheritance.h.
const RecordType* clang::CXXBasePaths::getDetectedVirtual | ( | ) | const [inline] |
The virtual base discovered on the path (if we are merely detecting virtuals).
Definition at line 215 of file CXXInheritance.h.
Referenced by TryStaticDowncast().
CXXRecordDecl* clang::CXXBasePaths::getOrigin | ( | ) | const [inline] |
Retrieve the type from which this base-paths search began.
Definition at line 221 of file CXXInheritance.h.
Referenced by clang::Sema::getAmbiguousPathsDisplayString().
bool CXXBasePaths::isAmbiguous | ( | CanQualType | BaseType | ) |
Determine whether the path from the most-derived type to the given base type is ambiguous (i.e., it refers to multiple subobjects of the same base type).
isAmbiguous - Determines whether the set of paths provided is ambiguous, i.e., there are two or more paths that refer to different base class subobjects of the same type. BaseType must be an unqualified, canonical class type.
Definition at line 50 of file CXXInheritance.cpp.
References clang::CanQual< T >::getUnqualifiedType().
Referenced by adjustReturnValue(), clang::Sema::CheckDerivedToBaseConversion(), clang::Sema::CheckExceptionSpecSubset(), and TryStaticDowncast().
bool clang::CXXBasePaths::isDetectingVirtual | ( | ) | const [inline] |
Whether we are detecting virtual bases.
Definition at line 211 of file CXXInheritance.h.
bool clang::CXXBasePaths::isFindingAmbiguities | ( | ) | const [inline] |
Whether we are finding multiple paths to detect ambiguities.
Definition at line 202 of file CXXInheritance.h.
Referenced by clang::CXXRecordDecl::lookupInBases().
bool clang::CXXBasePaths::isRecordingPaths | ( | ) | const [inline] |
Whether we are recording paths.
Definition at line 205 of file CXXInheritance.h.
Referenced by clang::Sema::BuildBasePathArray(), clang::CXXRecordDecl::lookupInBases(), and TryStaticDowncast().
void clang::CXXBasePaths::setOrigin | ( | CXXRecordDecl * | Rec | ) | [inline] |
Definition at line 222 of file CXXInheritance.h.
Referenced by clang::CXXRecordDecl::isDerivedFrom(), clang::CXXRecordDecl::isVirtuallyDerivedFrom(), and clang::Sema::LookupQualifiedName().
void clang::CXXBasePaths::setRecordingPaths | ( | bool | RP | ) | [inline] |
Specify whether we should be recording paths or not.
Definition at line 208 of file CXXInheritance.h.
Referenced by clang::Sema::CheckDerivedToBaseConversion(), and TryStaticDowncast().
void CXXBasePaths::swap | ( | CXXBasePaths & | Other | ) |
Swap this data structure's contents with another CXXBasePaths object.
Swaps the contents of this CXXBasePaths structure with the contents of Other.
Definition at line 66 of file CXXInheritance.cpp.
Referenced by clang::LookupResult::setAmbiguousBaseSubobjects(), and clang::LookupResult::setAmbiguousBaseSubobjectTypes().
friend class CXXRecordDecl [friend] |
Definition at line 161 of file CXXInheritance.h.