[cfe-dev] SourceLocation TODO
Chris Lattner
clattner at apple.com
Thu May 8 21:37:28 PDT 2008
On May 8, 2008, at 8:26 PM, caiwei wrote:
> Taking a look at the ObjC Rewriter for examples, I want to change
> the operator * to << (source to source) .
>
> I create a new BinaryOperator and replace the Expr .
>
>
> rhs = new IntegerLiteral( Res, BO->getRHS()->getType(), BO-
> >getRHS()->getExprLoc() );
> // change * to <<
> Replacement = new BinaryOperator(BO->getLHS(), rhs,
> BO->Shl, BO->getType(), BO-
> >getLHS()->getExprLoc());
> //replace the expression
> assert( !Rewrite.ReplaceStmt(BO, Replacement) );
>
>
> but the output SourceLocation has some problem in the result source
> code, when there are two * Operateor more.
I assume that you mean that you have problems rewriting things like
"(x*2)*2".
This is because you're deleting the AST:
> // change * to <<
> Replacement = new BinaryOperator(BO->getLHS(), rhs,
> BO->Shl, BO->getType(), BO-
> >getLHS()->getExprLoc());
Here the old multiply node and the << both point to the LHS AST.
>
> delete BO;
This deletes the "*" AST and the LHS/RHS. To avoid having it delete
the LHS, set the LHS of the multiply to null before you delete it.
-Chris
More information about the cfe-dev
mailing list