///
/// Example: obj.prop += 1;
class ObjCPropertyAccess : public ObjCMethodCall {
+ const ObjCPropertyRefExpr *PropE;
SourceRange EntireRange;
public:
- ObjCPropertyAccess(SourceRange range, const ObjCMessageExpr *Msg,
- const ProgramStateRef St, const LocationContext *LCtx)
- : ObjCMethodCall(Msg, St, LCtx, CE_ObjCPropertyAccess), EntireRange(range)
- {}
+ ObjCPropertyAccess(const ObjCPropertyRefExpr *pe, SourceRange range,
+ const ObjCMessageExpr *Msg, const ProgramStateRef St,
+ const LocationContext *LCtx)
+ : ObjCMethodCall(Msg, St, LCtx, CE_ObjCPropertyAccess), PropE(pe),
+ EntireRange(range)
+ {}
/// \brief Returns true if this property access is calling the setter method.
bool isSetter() const {
return EntireRange;
}
+ const ObjCPropertyRefExpr *getPropertyExpr() const {
+ return PropE;
+ }
+
static bool classof(const CallEvent *CA) {
return CA->getKind() == CE_ObjCPropertyAccess;
}
if (const BinaryOperator *BO = dyn_cast<BinaryOperator>(syntactic))
syntactic = BO->getLHS();
- if (isa<ObjCPropertyRefExpr>(syntactic)) {
- VisitObjCMessage(ObjCPropertyAccess(PO->getSourceRange(), ME,
+ if (const ObjCPropertyRefExpr *PR =
+ dyn_cast<ObjCPropertyRefExpr>(syntactic)) {
+ VisitObjCMessage(ObjCPropertyAccess(PR, PO->getSourceRange(), ME,
Pred->getState(), LCtx),
Pred, Dst);
evaluated = true;