<div dir="ltr">Hi,<div><br></div><div>You probably want something like this:</div><div><br></div><div><span style="font-family:arial,sans-serif;font-size:13px">operatorCallExpr(hasArgument(declRefExpr(</span><span style="font-family:arial,sans-serif;font-size:13px">to(varDecl().bind("varName"))))</span><span style="font-family:arial,sans-serif;font-size:13px">, </span><span style="font-family:arial,sans-serif;font-size:13px">hasOverloadedOperatorName("[]"</span><span style="font-family:arial,sans-serif;font-size:13px">));</span><br>

</div><div><span style="font-family:arial,sans-serif;font-size:13px"><br></span></div><div><font face="arial, sans-serif">Writing x(y()) in a matcher expression means that the matched node should satisfy x() and it should also satisfy y(). So what you were writing (</font><span style="font-family:arial,sans-serif;font-size:13px">operatorCallExpr(declRefExpr(...))</span><span style="font-family:arial,sans-serif">) would have required a node to be both a CXXOperatorCallExpr and a DeclRefExpr.</span></div>

<div><span style="font-family:arial,sans-serif"><br></span></div><div><font face="arial, sans-serif">You should also make sure that this does not match on a call like this:</font></div><div><span style="font-family:arial,sans-serif">y[x]</span><br>

</div><div><span style="font-family:arial,sans-serif">Here "y" should be matched, not "x". I _think_ that the above matcher expression will produce the desired output for this, because I guess the reference to "y" will be earlier among the parameters than "x", but you need to verify this.</span></div>

<div><span style="font-family:arial,sans-serif"><br></span></div><div><span style="font-family:arial,sans-serif">Hope this helps!</span></div><div><span style="font-family:arial,sans-serif"><br></span></div><div><span style="font-family:arial,sans-serif">Gabor</span></div>

</div><div class="gmail_extra"><br><br><div class="gmail_quote">2013/8/19 Shereen <span dir="ltr"><<a href="mailto:shereent7@gmail.com" target="_blank">shereent7@gmail.com</a>></span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

Hi,<br>
<br>
I'm having trouble writing an ASTMatcher for vector like class access.<br>
Matching CXXMemberCallExpr works fine and I can extract all the<br>
information I need like the object name etc.<br>
<br>
Unfortunately I haven't found a way yet to do this for<br>
CXXOperatorCallExpr. If I have the following class, is there any way to<br>
write a matcher which matches the call to x[1 + 1] and binds x?<br>
<br>
----------------------------------------------<br>
struct X {<br>
  int operator[](int x) { return x; }<br>
};<br>
<br>
X x;<br>
int y = x[1 + 1];<br>
----------------------------------------------<br>
<br>
I tried something along the lines<br>
<br>
------------------------------------------------------------<br>
operatorCallExpr(declRefExpr(to(varDecl().bind("varName"))),<br>
                 hasOverloadedOperatorName("[]"));<br>
------------------------------------------------------------<br>
<br>
as the ast contains the declRefExpr to the object<br>
<br>
--------------------------------------------------------------------------------------<br>
CXXOperatorCallExpr 0x2dc41c0 <col:9, col:14> 'int'<br>
    |-ImplicitCastExpr 0x2dc41a8 <col:10, col:14> 'int (*)(int)'<br>
<FunctionToPointerDecay><br>
    | `-DeclRefExpr 0x2dc4158 <col:10, col:14> 'int (int)' lvalue CXXMethod<br>
0x2d92660 'operator[]' 'int (int)'<br>
    |-DeclRefExpr 0x2dc40c8 <col:9> 'struct X' lvalue Var 0x2dc3c90 'x'<br>
'struct X'<br>
    `-BinaryOperator 0x2dc4130 <col:11, col:13> 'int' '+'<br>
      |-IntegerLiteral 0x2dc40f0 <col:11> 'int' 1<br>
      `-IntegerLiteral 0x2dc4110 <col:13> 'int' 1<br>
--------------------------------------------------------------------------------------<br>
<br>
bit this doesn't match. Calling getCalleeDecl() on the<br>
CXXOperatorCallExpr also just returns "operator[]".<br>
<br>
Is there any other way to get the name of the object operator[] is called<br>
on?<br>
<br>
Kind regards,<br>
Shereen<br>
<br>
<br>
<br>
--<br>
View this message in context: <a href="http://clang-developers.42468.n3.nabble.com/ASTMatcher-CXXOperatorCallExpr-tp4033959.html" target="_blank">http://clang-developers.42468.n3.nabble.com/ASTMatcher-CXXOperatorCallExpr-tp4033959.html</a><br>


Sent from the Clang Developers mailing list archive at Nabble.com.<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>