libreoffice/compilerplugins/clang/postfixincrementfix.hxx
Luboš Luňák 153a69cad2 pass around CompilerInstance rather than ASTContext
It's possible to get the latter from the former, and the former
is useful for other things too (access to the preprocessor, for example).

Change-Id: I708d709129fd3a35bf7c63da4de09c2e696b382d
2013-03-28 18:01:00 +01:00

41 lines
1.2 KiB
C++

/*
* This file is part of the LibreOffice project.
*
* Based on LLVM/Clang.
*
* This file is distributed under the University of Illinois Open Source
* License. See LICENSE.TXT for details.
*
*/
#ifndef POSTFIXINCREMENTFIX_H
#define POSTFIXINCREMENTFIX_H
#include "plugin.hxx"
namespace loplugin
{
class PostfixIncrementFix
: public RecursiveASTVisitor< PostfixIncrementFix >
, public RewritePlugin
{
public:
explicit PostfixIncrementFix( CompilerInstance& compiler, Rewriter& rewriter );
virtual void run();
bool VisitFunctionDecl( FunctionDecl* declaration );
private:
typedef std::vector< const Stmt* > StmtParents;
void fixPostfixOperator( const CXXOperatorCallExpr* op, StmtParents& parents );
void fixPostfixOperators( const Stmt* stmt, StmtParents& parents );
bool canChangePostfixToPrefix( const CXXOperatorCallExpr* op, StmtParents& parents, int parent_pos );
bool canChangeInConditionStatement( const CXXOperatorCallExpr* op, const Expr* condition,
const StmtParents& parents, unsigned int parent_pos );
bool shouldDoChange( const Expr* op );
};
} // namespace
#endif // POSTFIXINCREMENTFIX_H