<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body><div>Take a look at the AST matcher guide: <a href="http://clang.llvm.org/docs/LibASTMatchers.html">http://clang.llvm.org/docs/LibASTMatchers.html</a><br></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></div>
<div> </div>
<div id="sig19426269"><div class="signature">---<br></div>
<div class="signature">Best regards,<br></div>
<div class="signature"> </div>
<div class="signature">Gábor 'ShdNx' Kozár<br></div>
<div class="signature"><a href="http://gaborkozar.me">http://gaborkozar.me</a><br></div>
<div class="signature"> </div>
</div>
<div> </div>
<div> </div>
<div>On Wed, Nov 5, 2014, at 00:27, Dean Sutherland wrote:<br></div>
<blockquote type="cite"><div>I'd like to write a matcher that would find the following ObjectiveC<br></div>
<div>snippet:<br></div>
<div> </div>
<div>[self.externalWebView loadHTMLString:@"" baseURL:nil];<br></div>
<div> </div>
<div>(A dump of the AST for this code snippet is appended at the end of this<br></div>
<div>message.)<br></div>
<div> </div>
<div>If matchers for ObjC AST nodes existed, the matcher I want might look<br></div>
<div>something like this:<br></div>
<div> </div>
<div>objcMessageExpr(hasSelector("loadHTMLString:baseURL:"),<br></div>
<div>hasArgument(1, ignoringParenImpCasts(integerLiteral(equals(0)))));<br></div>
<div> </div>
<div>How do I go about writing the matchers I need, such as objcMessageExpr<br></div>
<div>and hasSelector?  I took a whack at the writing objcMessageExpr and<br></div>
<div>promptly got lost in failed template instantiation errors.<br></div>
<div> </div>
<div>Suggestions or guidance would be most welcome.<br></div>
<div> </div>
<div> </div>
<div>Dean<br></div>
<div><a href="mailto:dfsuther@yahoo-inc.com">dfsuther@yahoo-inc.com</a><br></div>
<div> </div>
<div>-----------------------<br></div>
<div>`-ExprWithCleanups 0x7fb8af3f4210 <line:927:13,col:72> 'void'<br></div>
<div>`-ObjCMessageExpr 0x7fb8af3f41c8 <col:13,col:72> 'void'<br></div>
<div>selector=loadHTMLString:baseURL:<br></div>
<div>|-PseudoObjectExpr 0x7fb8af3f4188 <col:14,col:34> 'UIWebView *'<br></div>
<div>| |-ObjCPropertyRefExpr 0x7fb8af3f4110 <col:14,col:34> '<pseudo-object<br></div>
<div>type>' lvalue objcproperty Kind=PropertyRef Property="webview"<br></div>
<div>Messaging=Getter<br></div>
<div>| | `-OpaqueValueExpr 0x7fb8af3f40f0 <col:14,col:19> 'HRBookendedWebView<br></div>
<div>*'<br></div>
<div>| |   `-PseudoObjectExpr 0x7fb8af3f17c8 <col:14,col:19><br></div>
<div>'HRBookendedWebView *'<br></div>
<div>| |     |-ObjCPropertyRefExpr 0x7fb8af3f1750 <col:14,col:19><br></div>
<div>'<pseudo-object type>' lvalue objcproperty Kind=PropertyRef<br></div>
<div>Property="articleWebView" Messaging=Getter<br></div>
<div>| |     | `-OpaqueValueExpr 0x7fb8af3f1730 <col:14><br></div>
<div>'HRiPadArticleViewController *'<br></div>
<div>| |     |   `-ImplicitCastExpr 0x7fb8af3f16e8 <col:14><br></div>
<div>'HRiPadArticleViewController *' <LValueToRValue><br></div>
<div>| |     |     `-DeclRefExpr 0x7fb8af3f16c0 <col:14><br></div>
<div>'HRiPadArticleViewController *const __strong' lvalue ImplicitParam<br></div>
<div>0x7fb8af3f0dd0 'self' 'HRiPadArticleViewController *const __strong'<br></div>
<div>| |     |-OpaqueValueExpr 0x7fb8af3f1730 <col:14><br></div>
<div>'HRiPadArticleViewController *'<br></div>
<div>| |     | `-ImplicitCastExpr 0x7fb8af3f16e8 <col:14><br></div>
<div>'HRiPadArticleViewController *' <LValueToRValue><br></div>
<div>| |     |   `-DeclRefExpr 0x7fb8af3f16c0 <col:14><br></div>
<div>'HRiPadArticleViewController *const __strong' lvalue ImplicitParam<br></div>
<div>0x7fb8af3f0dd0 'self' 'HRiPadArticleViewController *const __strong'<br></div>
<div>| |     `-ImplicitCastExpr 0x7fb8af3f17b0 <col:19> 'HRBookendedWebView *'<br></div>
<div><ARCReclaimReturnedObject><br></div>
<div>| |       `-ObjCMessageExpr 0x7fb8af3f1780 <col:19> 'HRBookendedWebView<br></div>
<div>*' selector=articleWebView<br></div>
<div>| |         `-OpaqueValueExpr 0x7fb8af3f1730 <col:14><br></div>
<div>'HRiPadArticleViewController *'<br></div>
<div>| |           `-ImplicitCastExpr 0x7fb8af3f16e8 <col:14><br></div>
<div>'HRiPadArticleViewController *' <LValueToRValue><br></div>
<div>| |             `-DeclRefExpr 0x7fb8af3f16c0 <col:14><br></div>
<div>'HRiPadArticleViewController *const __strong' lvalue ImplicitParam<br></div>
<div>0x7fb8af3f0dd0 'self' 'HRiPadArticleViewController *const __strong'<br></div>
<div>| |-OpaqueValueExpr 0x7fb8af3f40f0 <col:14,col:19> 'HRBookendedWebView<br></div>
<div>*'<br></div>
<div>| | `-PseudoObjectExpr 0x7fb8af3f17c8 <col:14,col:19><br></div>
<div>'HRBookendedWebView *'<br></div>
<div>| |   |-ObjCPropertyRefExpr 0x7fb8af3f1750 <col:14,col:19><br></div>
<div>'<pseudo-object type>' lvalue objcproperty Kind=PropertyRef<br></div>
<div>Property="articleWebView" Messaging=Getter<br></div>
<div>| |   | `-OpaqueValueExpr 0x7fb8af3f1730 <col:14><br></div>
<div>'HRiPadArticleViewController *'<br></div>
<div>| |   |   `-ImplicitCastExpr 0x7fb8af3f16e8 <col:14><br></div>
<div>'HRiPadArticleViewController *' <LValueToRValue><br></div>
<div>| |   |     `-DeclRefExpr 0x7fb8af3f16c0 <col:14><br></div>
<div>'HRiPadArticleViewController *const __strong' lvalue ImplicitParam<br></div>
<div>0x7fb8af3f0dd0 'self' 'HRiPadArticleViewController *const __strong'<br></div>
<div>| |   |-OpaqueValueExpr 0x7fb8af3f1730 <col:14><br></div>
<div>'HRiPadArticleViewController *'<br></div>
<div>| |   | `-ImplicitCastExpr 0x7fb8af3f16e8 <col:14><br></div>
<div>'HRiPadArticleViewController *' <LValueToRValue><br></div>
<div>| |   |   `-DeclRefExpr 0x7fb8af3f16c0 <col:14><br></div>
<div>'HRiPadArticleViewController *const __strong' lvalue ImplicitParam<br></div>
<div>0x7fb8af3f0dd0 'self' 'HRiPadArticleViewController *const __strong'<br></div>
<div>| |   `-ImplicitCastExpr 0x7fb8af3f17b0 <col:19> 'HRBookendedWebView *'<br></div>
<div><ARCReclaimReturnedObject><br></div>
<div>| |     `-ObjCMessageExpr 0x7fb8af3f1780 <col:19> 'HRBookendedWebView *'<br></div>
<div>selector=articleWebView<br></div>
<div>| |       `-OpaqueValueExpr 0x7fb8af3f1730 <col:14><br></div>
<div>'HRiPadArticleViewController *'<br></div>
<div>| |         `-ImplicitCastExpr 0x7fb8af3f16e8 <col:14><br></div>
<div>'HRiPadArticleViewController *' <LValueToRValue><br></div>
<div>| |           `-DeclRefExpr 0x7fb8af3f16c0 <col:14><br></div>
<div>'HRiPadArticleViewController *const __strong' lvalue ImplicitParam<br></div>
<div>0x7fb8af3f0dd0 'self' 'HRiPadArticleViewController *const __strong'<br></div>
<div>| `-ImplicitCastExpr 0x7fb8af3f4170 <col:34> 'UIWebView *'<br></div>
<div><ARCReclaimReturnedObject><br></div>
<div>|   `-ObjCMessageExpr 0x7fb8af3f4140 <col:34> 'UIWebView *'<br></div>
<div>selector=webview<br></div>
<div>|     `-OpaqueValueExpr 0x7fb8af3f40f0 <col:14,col:19><br></div>
<div>'HRBookendedWebView *'<br></div>
<div>|       `-PseudoObjectExpr 0x7fb8af3f17c8 <col:14,col:19><br></div>
<div>'HRBookendedWebView *'<br></div>
<div>|         |-ObjCPropertyRefExpr 0x7fb8af3f1750 <col:14,col:19><br></div>
<div>'<pseudo-object type>' lvalue objcproperty Kind=PropertyRef<br></div>
<div>Property="articleWebView" Messaging=Getter<br></div>
<div>|         | `-OpaqueValueExpr 0x7fb8af3f1730 <col:14><br></div>
<div>'HRiPadArticleViewController *'<br></div>
<div>|         |   `-ImplicitCastExpr 0x7fb8af3f16e8 <col:14><br></div>
<div>'HRiPadArticleViewController *' <LValueToRValue><br></div>
<div>|         |     `-DeclRefExpr 0x7fb8af3f16c0 <col:14><br></div>
<div>'HRiPadArticleViewController *const __strong' lvalue ImplicitParam<br></div>
<div>0x7fb8af3f0dd0 'self' 'HRiPadArticleViewController *const __strong'<br></div>
<div>|         |-OpaqueValueExpr 0x7fb8af3f1730 <col:14><br></div>
<div>'HRiPadArticleViewController *'<br></div>
<div>|         | `-ImplicitCastExpr 0x7fb8af3f16e8 <col:14><br></div>
<div>'HRiPadArticleViewController *' <LValueToRValue><br></div>
<div>|         |   `-DeclRefExpr 0x7fb8af3f16c0 <col:14><br></div>
<div>'HRiPadArticleViewController *const __strong' lvalue ImplicitParam<br></div>
<div>0x7fb8af3f0dd0 'self' 'HRiPadArticleViewController *const __strong'<br></div>
<div>|         `-ImplicitCastExpr 0x7fb8af3f17b0 <col:19> 'HRBookendedWebView<br></div>
<div>*' <ARCReclaimReturnedObject><br></div>
<div>|           `-ObjCMessageExpr 0x7fb8af3f1780 <col:19> 'HRBookendedWebView<br></div>
<div>*' selector=articleWebView<br></div>
<div>|             `-OpaqueValueExpr 0x7fb8af3f1730 <col:14><br></div>
<div>'HRiPadArticleViewController *'<br></div>
<div>|               `-ImplicitCastExpr 0x7fb8af3f16e8 <col:14><br></div>
<div>'HRiPadArticleViewController *' <LValueToRValue><br></div>
<div>|                 `-DeclRefExpr 0x7fb8af3f16c0 <col:14><br></div>
<div>'HRiPadArticleViewController *const __strong' lvalue ImplicitParam<br></div>
<div>0x7fb8af3f0dd0 'self' 'HRiPadArticleViewController *const __strong'<br></div>
<div>|-ObjCStringLiteral 0x7fb8af3f4058 <col:57,col:58> 'NSString *'<br></div>
<div>| `-StringLiteral 0x7fb8af3f4030 <col:58> 'char [1]' lvalue ""<br></div>
<div>`-ImplicitCastExpr 0x7fb8af3f41b0<br></div>
<div></Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator8.1.sdk/usr/include/sys/_types.h:52:23,<br></div>
<div>col:33> 'NSURL *' <NullToPointer><br></div>
<div>`-ParenExpr 0x7fb8af3f40d0 <col:23,col:33> 'void *'<br></div>
<div>`-CStyleCastExpr 0x7fb8af3f40a8 <col:24,col:32> 'void *' <NullToPointer><br></div>
<div>`-IntegerLiteral 0x7fb8af3f4078 <col:32> 'int' 0<br></div>
<div><u>_______________________________________________</u><br></div>
<div>cfe-dev mailing list<br></div>
<div><a href="mailto:cfe-dev@cs.uiuc.edu">cfe-dev@cs.uiuc.edu</a><br></div>
<div><a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev</a><br></div>
</blockquote><div> </div>
</body>
</html>