@@ -799,8 +799,7 @@ class CaptureVisitor final : public VNVisitor {
799
799
const bool refIsXref = VN_IS (varRefp, VarXRef);
800
800
const bool varIsFuncLocal = varRefp->varp ()->isFuncLocal ();
801
801
const bool varHasAutomaticLifetime = varRefp->varp ()->lifetime ().isAutomatic ();
802
- const bool varIsFieldOfCaller
803
- = callerClassp && varClassp ? isSuperClassOf (varClassp, callerClassp) : false ;
802
+ const bool varIsFieldOfCaller = AstClass::isClassExtendedFrom (callerClassp, varClassp);
804
803
if (refIsXref) return CaptureMode::CAP_VALUE | CaptureMode::CAP_F_XREF;
805
804
if (varIsFuncLocal && varHasAutomaticLifetime) return CaptureMode::CAP_VALUE;
806
805
// Static var in function (will not be inlined, because it's in class)
@@ -843,17 +842,6 @@ class CaptureVisitor final : public VNVisitor {
843
842
m_ignore.emplace (memberSelp);
844
843
}
845
844
846
- // Returns true if the first class is a superclass of the second class
847
- bool isSuperClassOf (AstClass* const classIsp, AstClass* const classOfp) {
848
- if (classIsp == classOfp) return true ;
849
- for (AstClassExtends* extendsp = classOfp->extendsp (); extendsp;
850
- extendsp = VN_AS (extendsp->nextp (), ClassExtends)) {
851
- AstClass* const superClassp = VN_AS (extendsp->childDTypep (), ClassRefDType)->classp ();
852
- if (isSuperClassOf (classIsp, superClassp)) return true ;
853
- }
854
- return false ;
855
- }
856
-
857
845
// VISITORS
858
846
859
847
void visit (AstNodeVarRef* nodep) override {
0 commit comments