<div dir="ltr">Expr::IgnoreImplicit() lets you easily look through implicit expressions.<div><div><br></div><div>-Eli</div></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Tue, Jun 4, 2013 at 11:56 AM, Pan, Wei <span dir="ltr"><<a href="mailto:wei.pan@intel.com" target="_blank">wei.pan@intel.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi all,<br>
<br>
I am wondering if it is possible to remove all the implicitly generated AST nodes.<br>
<br>
For example (below), the only argument to call (1) is a "DeclRefExpr" to y, and the only<br>
argument to call (2) is a "CXXContructExpr", if ignoring nodes created by the initialization<br>
sequence for the call.<br>
<br>
Basically, I want to get the "syntactic form" Expr from an expression with some semantic<br>
analysis. Is there an existing way to do so? Or what would be a proper way to implement this?<br>
<br>
Thanks!<br>
<br>
Wei<br>
<br>
------------------------------------------------------------------<br>
<br>
struct Y { };<br>
struct X { X(); X(Y&); };<br>
void foo(X);<br>
<br>
void bar(Y &y) {<br>
  foo(y);     // (1)<br>
  foo(X(y));  // (2)<br>
}<br>
<br>
|-CallExpr 0x2a6c790 <line:8:3, col:8> 'void'<br>
| |-ImplicitCastExpr 0x2a6c778 <col:3> 'void (*)(struct X)' <FunctionToPointerDecay><br>
| | `-DeclRefExpr 0x2a6c728 <col:3> 'void (struct X)' lvalue Function 0x2a6c2c0 'foo' 'void (struct X)'<br>
| `-CXXConstructExpr 0x2a6c9f8 <col:7> 'struct X' 'void (const struct X &) throw()' elidable<br>
|   `-MaterializeTemporaryExpr 0x2a6c988 <col:7> 'const struct X' lvalue<br>
|     `-ImplicitCastExpr 0x2a6c970 <col:7> 'const struct X' <NoOp><br>
|       `-ImplicitCastExpr 0x2a6c800 <col:7> 'struct X' <ConstructorConversion><br>
|         `-CXXConstructExpr 0x2a6c7c8 <col:7> 'struct X' 'void (struct Y &)'<br>
|           `-DeclRefExpr 0x2a6c500 <col:7> 'struct Y' lvalue ParmVar 0x2a6c380 'y' 'struct Y &'<br>
`-CallExpr 0x2a6cb60 <line:9:3, col:11> 'void'<br>
  |-ImplicitCastExpr 0x2a6cb48 <col:3> 'void (*)(struct X)' <FunctionToPointerDecay><br>
  | `-DeclRefExpr 0x2a6cb20 <col:3> 'void (struct X)' lvalue Function 0x2a6c2c0 'foo' 'void (struct X)'<br>
   `-CXXConstructExpr 0x2a6cbc8 <col:7, col:10> 'struct X' 'void (const struct X &) throw()' elidable<br>
     `-MaterializeTemporaryExpr 0x2a6cbb0 <col:7, col:10> 'const struct X' lvalue<br>
       `-ImplicitCastExpr 0x2a6cb98 <col:7, col:10> 'const struct X' <NoOp><br>
         `-CXXFunctionalCastExpr 0x2a6caf8 <col:7, col:10> 'struct X' functional cast to struct X <ConstructorConversion><br>
           `-CXXConstructExpr 0x2a6cac0 <col:7, col:10> 'struct X' 'void (struct Y &)'<br>
             `-DeclRefExpr 0x2a6ca98 <col:9> 'struct Y' lvalue ParmVar 0x2a6c380 'y' 'struct Y &'<br>
<br>
_______________________________________________<br>
cfe-dev mailing list<br>
<a href="mailto:cfe-dev@cs.uiuc.edu">cfe-dev@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev</a><br>
</blockquote></div><br></div>