Dear clang developers, greetings!
I would like to ask what is the best way to prevent double rewriting of the code; Please consider further example:
m_foundPixels.resize(0);
Where m_foundPixels is class member of "RedPixels" class; Here is the AST dump for it:
CXXMemberCallExpr 0x555557a11e40 'void'
|-MemberExpr 0x555557a11e10 '<bound member function type>' .resize 0x555557597370
| `-MemberExpr 0x555557a11d60 'std::vector<PixelInfo>':'class std::vector<struct RedPixels::PixelInfoT, struct tinystl::allocator>' lvalue ->m_foundPixels 0x5555577db5a8
| `-CXXThisExpr 0x555557a11d50 'class RedPixels *' implicit this
`-ImplicitCastExpr 0x555557a11e68 'size_t':'unsigned long' <IntegralCast>
`-IntegerLiteral 0x555557a11df0 'int'
In my logic i have 2 different rewrites:
1) VisitMemberExpr
2) VisitCXXMemberCallExpr
The problems is that for this example VisitMemberExpr is called earlier than VisitCXXMemberCallExpr.
So if i rewrite the code inside VisitMemberExpr ("m_foundPixels"), my next rewrite in VisitCXXMemberCallExpr (which suppose to rewrite "m_foundPixels.resize(0)") produce incorrect result.
I think I can come up with solutions for specific cases, but I would like to know if there is any good general way to prevent such situations.
For my program logic i suppose that if some upper level of the tree is to be rewritten, we definitely shouldn't touch the lower levels anymore.
Many thanks!
--
Best Regards,
Frolov V.A.
_______________________________________________ cfe-users mailing list cfe-users@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-users