Lines Matching defs:Base
21 /// \brief Computes the set of declarations referenced by these base
51 /// different base class subobjects of the same type. BaseType must be
79 bool CXXRecordDecl::isDerivedFrom(const CXXRecordDecl *Base) const {
82 return isDerivedFrom(Base, Paths);
85 bool CXXRecordDecl::isDerivedFrom(const CXXRecordDecl *Base,
87 if (getCanonicalDecl() == Base->getCanonicalDecl())
92 const_cast<CXXRecordDecl*>(Base->getCanonicalDecl()),
96 bool CXXRecordDecl::isVirtuallyDerivedFrom(CXXRecordDecl *Base) const {
103 if (getCanonicalDecl() == Base->getCanonicalDecl())
107 return lookupInBases(&FindVirtualBaseClass, Base->getCanonicalDecl(), Paths);
110 static bool BaseIsNot(const CXXRecordDecl *Base, void *OpaqueTarget) {
112 return Base->getCanonicalDecl() != (const CXXRecordDecl*) OpaqueTarget;
115 bool CXXRecordDecl::isProvablyNotDerivedFrom(const CXXRecordDecl *Base) const {
116 return forallBases(BaseIsNot, (void*) Base->getCanonicalDecl());
136 CXXRecordDecl *Base =
138 if (!Base) {
144 Queue.push_back(Base);
145 if (!BaseMatches(Base, OpaqueData)) {
174 // Find the record of the base class subobjects for this type.
180 // if a base class of the class template depends on a template-parameter,
181 // the base class scope is not examined during unqualified name lookup
187 // Determine whether we need to visit this base class at all,
197 // there is no base path here, we'll reset it later.
205 // Add this base specifier to the current path.
207 Element.Base = &*BaseSpec;
215 // Calculate the "top-down" access to this base class.
237 // Track whether there's a path involving this specific base.
241 // We've found a path that terminates at this base.
258 // a sub-object A if A is a base class sub-object of B. Any
262 // There is a path to a base class that meets the criteria. If we're
270 // Pop this base specifier off the current path (if we're
301 // When virtual base classes are used, a hidden declaration can be
304 // ambiguity. The identical use with nonvirtual base classes is an
316 if (PE->Base->isVirtual()) {
318 if (const RecordType *Record = PE->Base->getType()->getAs<RecordType>())
324 // subobject of a virtual base. Check whether this virtual
325 // base is a subobject of any other path; if so, then the
333 = HidingP->back().Base->getType()->getAs<RecordType>())
459 /// \brief Overriders for each virtual base subobject.
482 for (CXXRecordDecl::base_class_const_iterator Base = RD->bases_begin(),
483 BaseEnd = RD->bases_end(); Base != BaseEnd; ++Base) {
484 if (const RecordType *RT = Base->getType()->getAs<RecordType>()) {
489 if (Overriders.empty() && !Base->isVirtual()) {
491 // so let the base class fill in our overriders for us.
496 // Collect all of the overridders from the base class subobject
498 // For virtual base classes, populate or use the cached virtual
499 // overrides so that we do not walk the virtual base class (and
500 // its base classes) more than once.
503 if (Base->isVirtual()) {
514 // Merge the overriders from this base class into our own set of
573 // of which S is a base class subobject (if any) declares
577 // replace any overrides from base classes with this
615 // Weed out any final overriders that come from virtual base class
639 // We have an overriding method in a virtual base class
640 // subobject (or non-virtual base class subobject thereof);
642 // in a base class subobject that hides the virtual base class
673 // If the record has a virtual primary base class, add it to our set.
687 // indirect primary virtual base classes.
710 // indirect primary virtual base classes.