<html><body><div style="color:#000; background-color:#fff; font-family:HelveticaNeue-Light, Helvetica Neue Light, Helvetica Neue, Helvetica, Arial, Lucida Grande, sans-serif;font-size:13px"><div dir="ltr" id="yui_3_16_0_1_1415210535068_87453"><span id="yui_3_16_0_1_1415210535068_87501">I'd already read the matcher guide, as well as reading through the suggested .h files.  Sadly, I completely missed seeing that the various .cc files that implement the matchers lacked imports of the *ObjC.h files from the AST.  Adding those imports has made my compilation errors evaporate. I'm back to making progress!</span></div><div id="yui_3_16_0_1_1415210535068_87502" dir="ltr"><br><span id="yui_3_16_0_1_1415210535068_87501"></span></div><div id="yui_3_16_0_1_1415210535068_87503" dir="ltr"><span id="yui_3_16_0_1_1415210535068_87501">Dean</span></div><div id="yui_3_16_0_1_1415210535068_87506" dir="ltr"><span id="yui_3_16_0_1_1415210535068_87501"></span></div> <div class="qtdSeparateBR"><br><br></div><div style="display: block;" class="yahoo_quoted"> <div style="font-family: HelveticaNeue-Light, Helvetica Neue Light, Helvetica Neue, Helvetica, Arial, Lucida Grande, sans-serif; font-size: 13px;"> <div style="font-family: HelveticaNeue, Helvetica Neue, Helvetica, Arial, Lucida Grande, sans-serif; font-size: 16px;"> <div dir="ltr"> <font face="Arial" size="2"> On Wednesday, November 5, 2014 12:26 AM, Gabor Kozar <kozargabor@gmail.com> wrote:<br> </font> </div>  <br><br> <div class="y_msg_container"><div id="yiv7232196542"><title></title><div><div>Take a look at the AST matcher guide: <a rel="nofollow" shape="rect" target="_blank" href="http://clang.llvm.org/docs/LibASTMatchers.html">http://clang.llvm.org/docs/LibASTMatchers.html</a><br clear="none"></div>
<div>In the source tree, check out clang/include/clang/ASTMatchers/ASTMatchersMacros.h for the macros used for writing matchers, and clang/include/clang/ASTMatchers/ASTMatchers.h to look at how existing matchers are implemented.<br clear="none"></div>
<div> </div>
<div id="yiv7232196542sig19426269"><div class="yiv7232196542signature">---<br clear="none"></div>
<div class="yiv7232196542signature">Best regards,<br clear="none"></div>
<div class="yiv7232196542signature"> </div>
<div class="yiv7232196542signature">Gábor 'ShdNx' Kozár<br clear="none"></div>
<div class="yiv7232196542signature"><a rel="nofollow" shape="rect" target="_blank" href="http://gaborkozar.me/">http://gaborkozar.me</a><br clear="none"></div>
<div class="yiv7232196542signature"> </div>
</div>
<div> </div>
<div> </div>
<div class="yiv7232196542yqt7290210007" id="yiv7232196542yqtfd29871"><div>On Wed, Nov 5, 2014, at 00:27, Dean Sutherland wrote:<br clear="none"></div>
</div><blockquote type="cite"><div class="yiv7232196542yqt7290210007" id="yiv7232196542yqtfd46806"><div>I'd like to write a matcher that would find the following ObjectiveC<br clear="none"></div>
<div>snippet:<br clear="none"></div>
<div> </div>
<div>[self.externalWebView loadHTMLString:@"" baseURL:nil];<br clear="none"></div>
<div> </div>
<div>(A dump of the AST for this code snippet is appended at the end of this<br clear="none"></div>
<div>message.)<br clear="none"></div>
<div> </div>
<div>If matchers for ObjC AST nodes existed, the matcher I want might look<br clear="none"></div>
<div>something like this:<br clear="none"></div>
<div> </div>
<div>objcMessageExpr(hasSelector("loadHTMLString:baseURL:"),<br clear="none"></div>
<div>hasArgument(1, ignoringParenImpCasts(integerLiteral(equals(0)))));<br clear="none"></div>
<div> </div>
<div>How do I go about writing the matchers I need, such as objcMessageExpr<br clear="none"></div>
<div>and hasSelector?  I took a whack at the writing objcMessageExpr and<br clear="none"></div>
<div>promptly got lost in failed template instantiation errors.<br clear="none"></div>
<div> </div>
<div>Suggestions or guidance would be most welcome.<br clear="none"></div>
<div> </div>
<div> </div>
<div>Dean<br clear="none"></div>
<div><a rel="nofollow" shape="rect" ymailto="mailto:dfsuther@yahoo-inc.com" target="_blank" href="mailto:dfsuther@yahoo-inc.com">dfsuther@yahoo-inc.com</a><br clear="none"></div>
<div> </div>
<div>-----------------------<br clear="none"></div>
<div>`-ExprWithCleanups 0x7fb8af3f4210 <line:927:13,col:72> 'void'<br clear="none"></div>
<div>`-ObjCMessageExpr 0x7fb8af3f41c8 <col:13,col:72> 'void'<br clear="none"></div>
<div>selector=loadHTMLString:baseURL:<br clear="none"></div>
<div>|-PseudoObjectExpr 0x7fb8af3f4188 <col:14,col:34> 'UIWebView *'<br clear="none"></div>
<div>| |-ObjCPropertyRefExpr 0x7fb8af3f4110 <col:14,col:34> '<pseudo-object<br clear="none"></div>
<div>type>' lvalue objcproperty Kind=PropertyRef Property="webview"<br clear="none"></div>
<div>Messaging=Getter<br clear="none"></div>
<div>| | `-OpaqueValueExpr 0x7fb8af3f40f0 <col:14,col:19> 'HRBookendedWebView<br clear="none"></div>
<div>*'<br clear="none"></div>
<div>| |   `-PseudoObjectExpr 0x7fb8af3f17c8 <col:14,col:19><br clear="none"></div>
<div>'HRBookendedWebView *'<br clear="none"></div>
<div>| |     |-ObjCPropertyRefExpr 0x7fb8af3f1750 <col:14,col:19><br clear="none"></div>
<div>'<pseudo-object type>' lvalue objcproperty Kind=PropertyRef<br clear="none"></div>
<div>Property="articleWebView" Messaging=Getter<br clear="none"></div>
<div>| |     | `-OpaqueValueExpr 0x7fb8af3f1730 <col:14><br clear="none"></div>
<div>'HRiPadArticleViewController *'<br clear="none"></div>
<div>| |     |   `-ImplicitCastExpr 0x7fb8af3f16e8 <col:14><br clear="none"></div>
<div>'HRiPadArticleViewController *' <LValueToRValue><br clear="none"></div>
<div>| |     |     `-DeclRefExpr 0x7fb8af3f16c0 <col:14><br clear="none"></div>
<div>'HRiPadArticleViewController *const __strong' lvalue ImplicitParam<br clear="none"></div>
<div>0x7fb8af3f0dd0 'self' 'HRiPadArticleViewController *const __strong'<br clear="none"></div>
<div>| |     |-OpaqueValueExpr 0x7fb8af3f1730 <col:14><br clear="none"></div>
<div>'HRiPadArticleViewController *'<br clear="none"></div>
<div>| |     | `-ImplicitCastExpr 0x7fb8af3f16e8 <col:14><br clear="none"></div>
<div>'HRiPadArticleViewController *' <LValueToRValue><br clear="none"></div>
<div>| |     |   `-DeclRefExpr 0x7fb8af3f16c0 <col:14><br clear="none"></div>
<div>'HRiPadArticleViewController *const __strong' lvalue ImplicitParam<br clear="none"></div>
<div>0x7fb8af3f0dd0 'self' 'HRiPadArticleViewController *const __strong'<br clear="none"></div>
<div>| |     `-ImplicitCastExpr 0x7fb8af3f17b0 <col:19> 'HRBookendedWebView *'<br clear="none"></div>
<div><ARCReclaimReturnedObject><br clear="none"></div>
<div>| |       `-ObjCMessageExpr 0x7fb8af3f1780 <col:19> 'HRBookendedWebView<br clear="none"></div>
<div>*' selector=articleWebView<br clear="none"></div>
<div>| |         `-OpaqueValueExpr 0x7fb8af3f1730 <col:14><br clear="none"></div>
<div>'HRiPadArticleViewController *'<br clear="none"></div>
<div>| |           `-ImplicitCastExpr 0x7fb8af3f16e8 <col:14><br clear="none"></div>
<div>'HRiPadArticleViewController *' <LValueToRValue><br clear="none"></div>
<div>| |             `-DeclRefExpr 0x7fb8af3f16c0 <col:14><br clear="none"></div>
<div>'HRiPadArticleViewController *const __strong' lvalue ImplicitParam<br clear="none"></div>
<div>0x7fb8af3f0dd0 'self' 'HRiPadArticleViewController *const __strong'<br clear="none"></div>
<div>| |-OpaqueValueExpr 0x7fb8af3f40f0 <col:14,col:19> 'HRBookendedWebView<br clear="none"></div>
<div>*'<br clear="none"></div>
<div>| | `-PseudoObjectExpr 0x7fb8af3f17c8 <col:14,col:19><br clear="none"></div>
<div>'HRBookendedWebView *'<br clear="none"></div>
<div>| |   |-ObjCPropertyRefExpr 0x7fb8af3f1750 <col:14,col:19><br clear="none"></div>
<div>'<pseudo-object type>' lvalue objcproperty Kind=PropertyRef<br clear="none"></div>
<div>Property="articleWebView" Messaging=Getter<br clear="none"></div>
<div>| |   | `-OpaqueValueExpr 0x7fb8af3f1730 <col:14><br clear="none"></div>
<div>'HRiPadArticleViewController *'<br clear="none"></div>
<div>| |   |   `-ImplicitCastExpr 0x7fb8af3f16e8 <col:14><br clear="none"></div>
<div>'HRiPadArticleViewController *' <LValueToRValue><br clear="none"></div>
<div>| |   |     `-DeclRefExpr 0x7fb8af3f16c0 <col:14><br clear="none"></div>
<div>'HRiPadArticleViewController *const __strong' lvalue ImplicitParam<br clear="none"></div>
<div>0x7fb8af3f0dd0 'self' 'HRiPadArticleViewController *const __strong'<br clear="none"></div>
<div>| |   |-OpaqueValueExpr 0x7fb8af3f1730 <col:14><br clear="none"></div>
<div>'HRiPadArticleViewController *'<br clear="none"></div>
<div>| |   | `-ImplicitCastExpr 0x7fb8af3f16e8 <col:14><br clear="none"></div>
<div>'HRiPadArticleViewController *' <LValueToRValue><br clear="none"></div>
<div>| |   |   `-DeclRefExpr 0x7fb8af3f16c0 <col:14><br clear="none"></div>
<div>'HRiPadArticleViewController *const __strong' lvalue ImplicitParam<br clear="none"></div>
<div>0x7fb8af3f0dd0 'self' 'HRiPadArticleViewController *const __strong'<br clear="none"></div>
<div>| |   `-ImplicitCastExpr 0x7fb8af3f17b0 <col:19> 'HRBookendedWebView *'<br clear="none"></div>
<div><ARCReclaimReturnedObject><br clear="none"></div>
<div>| |     `-ObjCMessageExpr 0x7fb8af3f1780 <col:19> 'HRBookendedWebView *'<br clear="none"></div>
<div>selector=articleWebView<br clear="none"></div>
<div>| |       `-OpaqueValueExpr 0x7fb8af3f1730 <col:14><br clear="none"></div>
<div>'HRiPadArticleViewController *'<br clear="none"></div>
<div>| |         `-ImplicitCastExpr 0x7fb8af3f16e8 <col:14><br clear="none"></div>
<div>'HRiPadArticleViewController *' <LValueToRValue><br clear="none"></div>
<div>| |           `-DeclRefExpr 0x7fb8af3f16c0 <col:14><br clear="none"></div>
<div>'HRiPadArticleViewController *const __strong' lvalue ImplicitParam<br clear="none"></div>
<div>0x7fb8af3f0dd0 'self' 'HRiPadArticleViewController *const __strong'<br clear="none"></div>
<div>| `-ImplicitCastExpr 0x7fb8af3f4170 <col:34> 'UIWebView *'<br clear="none"></div>
<div><ARCReclaimReturnedObject><br clear="none"></div>
<div>|   `-ObjCMessageExpr 0x7fb8af3f4140 <col:34> 'UIWebView *'<br clear="none"></div>
<div>selector=webview<br clear="none"></div>
<div>|     `-OpaqueValueExpr 0x7fb8af3f40f0 <col:14,col:19><br clear="none"></div>
<div>'HRBookendedWebView *'<br clear="none"></div>
<div>|       `-PseudoObjectExpr 0x7fb8af3f17c8 <col:14,col:19><br clear="none"></div>
<div>'HRBookendedWebView *'<br clear="none"></div>
<div>|         |-ObjCPropertyRefExpr 0x7fb8af3f1750 <col:14,col:19><br clear="none"></div>
<div>'<pseudo-object type>' lvalue objcproperty Kind=PropertyRef<br clear="none"></div>
<div>Property="articleWebView" Messaging=Getter<br clear="none"></div>
<div>|         | `-OpaqueValueExpr 0x7fb8af3f1730 <col:14><br clear="none"></div>
<div>'HRiPadArticleViewController *'<br clear="none"></div>
<div>|         |   `-ImplicitCastExpr 0x7fb8af3f16e8 <col:14><br clear="none"></div>
<div>'HRiPadArticleViewController *' <LValueToRValue><br clear="none"></div>
<div>|         |     `-DeclRefExpr 0x7fb8af3f16c0 <col:14><br clear="none"></div>
<div>'HRiPadArticleViewController *const __strong' lvalue ImplicitParam<br clear="none"></div>
<div>0x7fb8af3f0dd0 'self' 'HRiPadArticleViewController *const __strong'<br clear="none"></div>
<div>|         |-OpaqueValueExpr 0x7fb8af3f1730 <col:14><br clear="none"></div>
<div>'HRiPadArticleViewController *'<br clear="none"></div>
<div>|         | `-ImplicitCastExpr 0x7fb8af3f16e8 <col:14><br clear="none"></div>
<div>'HRiPadArticleViewController *' <LValueToRValue><br clear="none"></div>
<div>|         |   `-DeclRefExpr 0x7fb8af3f16c0 <col:14><br clear="none"></div>
<div>'HRiPadArticleViewController *const __strong' lvalue ImplicitParam<br clear="none"></div>
<div>0x7fb8af3f0dd0 'self' 'HRiPadArticleViewController *const __strong'<br clear="none"></div>
<div>|         `-ImplicitCastExpr 0x7fb8af3f17b0 <col:19> 'HRBookendedWebView<br clear="none"></div>
<div>*' <ARCReclaimReturnedObject><br clear="none"></div>
<div>|           `-ObjCMessageExpr 0x7fb8af3f1780 <col:19> 'HRBookendedWebView<br clear="none"></div>
<div>*' selector=articleWebView<br clear="none"></div>
<div>|             `-OpaqueValueExpr 0x7fb8af3f1730 <col:14><br clear="none"></div>
<div>'HRiPadArticleViewController *'<br clear="none"></div>
<div>|               `-ImplicitCastExpr 0x7fb8af3f16e8 <col:14><br clear="none"></div>
<div>'HRiPadArticleViewController *' <LValueToRValue><br clear="none"></div>
<div>|                 `-DeclRefExpr 0x7fb8af3f16c0 <col:14><br clear="none"></div>
<div>'HRiPadArticleViewController *const __strong' lvalue ImplicitParam<br clear="none"></div>
<div>0x7fb8af3f0dd0 'self' 'HRiPadArticleViewController *const __strong'<br clear="none"></div>
<div>|-ObjCStringLiteral 0x7fb8af3f4058 <col:57,col:58> 'NSString *'<br clear="none"></div>
<div>| `-StringLiteral 0x7fb8af3f4030 <col:58> 'char [1]' lvalue ""<br clear="none"></div>
<div>`-ImplicitCastExpr 0x7fb8af3f41b0<br clear="none"></div>
<div></Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator8.1.sdk/usr/include/sys/_types.h:52:23,<br clear="none"></div>
<div>col:33> 'NSURL *' <NullToPointer><br clear="none"></div>
<div>`-ParenExpr 0x7fb8af3f40d0 <col:23,col:33> 'void *'<br clear="none"></div>
<div>`-CStyleCastExpr 0x7fb8af3f40a8 <col:24,col:32> 'void *' <NullToPointer><br clear="none"></div>
</div><div><div class="yiv7232196542yqt7290210007" id="yiv7232196542yqtfd00274">`-IntegerLiteral 0x7fb8af3f4078 <col:32> 'int' 0</div><br clear="none"></div>
<div><u>_______________________________________________</u><br clear="none"></div>
<div>cfe-dev mailing list<br clear="none"></div>
<div><a rel="nofollow" shape="rect" ymailto="mailto:cfe-dev@cs.uiuc.edu" target="_blank" href="mailto:cfe-dev@cs.uiuc.edu">cfe-dev@cs.uiuc.edu</a><br clear="none"></div>
<div><a rel="nofollow" shape="rect" target="_blank" href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev</a><div class="yiv7232196542yqt7290210007" id="yiv7232196542yqtfd78039"><br clear="none"></div></div><div class="yiv7232196542yqt7290210007" id="yiv7232196542yqtfd66946">
</div></blockquote><div class="yiv7232196542yqt7290210007" id="yiv7232196542yqtfd64914"><div> </div>
</div></div></div><br>_______________________________________________<br clear="none">cfe-dev mailing list<br clear="none"><a shape="rect" ymailto="mailto:cfe-dev@cs.uiuc.edu" href="mailto:cfe-dev@cs.uiuc.edu">cfe-dev@cs.uiuc.edu</a><br clear="none"><a shape="rect" href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev</a><div class="yqt7290210007" id="yqtfd99281"><br clear="none"></div><br><br></div>  </div> </div>  </div> </div></body></html>