[cfe-dev] Help - Matchers for ObjC AST nodes?

Dean Sutherland dfsuther at yahoo-inc.com
Tue Nov 4 16:27:37 PST 2014


I'd like to write a matcher that would find the following ObjectiveC snippet:

[self.externalWebView loadHTMLString:@"" baseURL:nil];

(A dump of the AST for this code snippet is appended at the end of this message.)

If matchers for ObjC AST nodes existed, the matcher I want might look something like this:

objcMessageExpr(hasSelector("loadHTMLString:baseURL:"),
hasArgument(1, ignoringParenImpCasts(integerLiteral(equals(0)))));

How do I go about writing the matchers I need, such as objcMessageExpr
and hasSelector?  I took a whack at the writing objcMessageExpr and
promptly got lost in failed template instantiation errors.

Suggestions or guidance would be most welcome.


Dean
dfsuther at yahoo-inc.com

-----------------------
`-ExprWithCleanups 0x7fb8af3f4210 <line:927:13, col:72> 'void'
`-ObjCMessageExpr 0x7fb8af3f41c8 <col:13, col:72> 'void' selector=loadHTMLString:baseURL:
|-PseudoObjectExpr 0x7fb8af3f4188 <col:14, col:34> 'UIWebView *'
| |-ObjCPropertyRefExpr 0x7fb8af3f4110 <col:14, col:34> '<pseudo-object type>' lvalue objcproperty Kind=PropertyRef Property="webview" Messaging=Getter
| | `-OpaqueValueExpr 0x7fb8af3f40f0 <col:14, col:19> 'HRBookendedWebView *'
| |   `-PseudoObjectExpr 0x7fb8af3f17c8 <col:14, col:19> 'HRBookendedWebView *'
| |     |-ObjCPropertyRefExpr 0x7fb8af3f1750 <col:14, col:19> '<pseudo-object type>' lvalue objcproperty Kind=PropertyRef Property="articleWebView" Messaging=Getter
| |     | `-OpaqueValueExpr 0x7fb8af3f1730 <col:14> 'HRiPadArticleViewController *'
| |     |   `-ImplicitCastExpr 0x7fb8af3f16e8 <col:14> 'HRiPadArticleViewController *' <LValueToRValue>
| |     |     `-DeclRefExpr 0x7fb8af3f16c0 <col:14> 'HRiPadArticleViewController *const __strong' lvalue ImplicitParam 0x7fb8af3f0dd0 'self' 'HRiPadArticleViewController *const __strong'
| |     |-OpaqueValueExpr 0x7fb8af3f1730 <col:14> 'HRiPadArticleViewController *'
| |     | `-ImplicitCastExpr 0x7fb8af3f16e8 <col:14> 'HRiPadArticleViewController *' <LValueToRValue>
| |     |   `-DeclRefExpr 0x7fb8af3f16c0 <col:14> 'HRiPadArticleViewController *const __strong' lvalue ImplicitParam 0x7fb8af3f0dd0 'self' 'HRiPadArticleViewController *const __strong'
| |     `-ImplicitCastExpr 0x7fb8af3f17b0 <col:19> 'HRBookendedWebView *' <ARCReclaimReturnedObject>
| |       `-ObjCMessageExpr 0x7fb8af3f1780 <col:19> 'HRBookendedWebView *' selector=articleWebView
| |         `-OpaqueValueExpr 0x7fb8af3f1730 <col:14> 'HRiPadArticleViewController *'
| |           `-ImplicitCastExpr 0x7fb8af3f16e8 <col:14> 'HRiPadArticleViewController *' <LValueToRValue>
| |             `-DeclRefExpr 0x7fb8af3f16c0 <col:14> 'HRiPadArticleViewController *const __strong' lvalue ImplicitParam 0x7fb8af3f0dd0 'self' 'HRiPadArticleViewController *const __strong'
| |-OpaqueValueExpr 0x7fb8af3f40f0 <col:14, col:19> 'HRBookendedWebView *'
| | `-PseudoObjectExpr 0x7fb8af3f17c8 <col:14, col:19> 'HRBookendedWebView *'
| |   |-ObjCPropertyRefExpr 0x7fb8af3f1750 <col:14, col:19> '<pseudo-object type>' lvalue objcproperty Kind=PropertyRef Property="articleWebView" Messaging=Getter
| |   | `-OpaqueValueExpr 0x7fb8af3f1730 <col:14> 'HRiPadArticleViewController *'
| |   |   `-ImplicitCastExpr 0x7fb8af3f16e8 <col:14> 'HRiPadArticleViewController *' <LValueToRValue>
| |   |     `-DeclRefExpr 0x7fb8af3f16c0 <col:14> 'HRiPadArticleViewController *const __strong' lvalue ImplicitParam 0x7fb8af3f0dd0 'self' 'HRiPadArticleViewController *const __strong'
| |   |-OpaqueValueExpr 0x7fb8af3f1730 <col:14> 'HRiPadArticleViewController *'
| |   | `-ImplicitCastExpr 0x7fb8af3f16e8 <col:14> 'HRiPadArticleViewController *' <LValueToRValue>
| |   |   `-DeclRefExpr 0x7fb8af3f16c0 <col:14> 'HRiPadArticleViewController *const __strong' lvalue ImplicitParam 0x7fb8af3f0dd0 'self' 'HRiPadArticleViewController *const __strong'
| |   `-ImplicitCastExpr 0x7fb8af3f17b0 <col:19> 'HRBookendedWebView *' <ARCReclaimReturnedObject>
| |     `-ObjCMessageExpr 0x7fb8af3f1780 <col:19> 'HRBookendedWebView *' selector=articleWebView
| |       `-OpaqueValueExpr 0x7fb8af3f1730 <col:14> 'HRiPadArticleViewController *'
| |         `-ImplicitCastExpr 0x7fb8af3f16e8 <col:14> 'HRiPadArticleViewController *' <LValueToRValue>
| |           `-DeclRefExpr 0x7fb8af3f16c0 <col:14> 'HRiPadArticleViewController *const __strong' lvalue ImplicitParam 0x7fb8af3f0dd0 'self' 'HRiPadArticleViewController *const __strong'
| `-ImplicitCastExpr 0x7fb8af3f4170 <col:34> 'UIWebView *' <ARCReclaimReturnedObject>
|   `-ObjCMessageExpr 0x7fb8af3f4140 <col:34> 'UIWebView *' selector=webview
|     `-OpaqueValueExpr 0x7fb8af3f40f0 <col:14, col:19> 'HRBookendedWebView *'
|       `-PseudoObjectExpr 0x7fb8af3f17c8 <col:14, col:19> 'HRBookendedWebView *'
|         |-ObjCPropertyRefExpr 0x7fb8af3f1750 <col:14, col:19> '<pseudo-object type>' lvalue objcproperty Kind=PropertyRef Property="articleWebView" Messaging=Getter
|         | `-OpaqueValueExpr 0x7fb8af3f1730 <col:14> 'HRiPadArticleViewController *'
|         |   `-ImplicitCastExpr 0x7fb8af3f16e8 <col:14> 'HRiPadArticleViewController *' <LValueToRValue>
|         |     `-DeclRefExpr 0x7fb8af3f16c0 <col:14> 'HRiPadArticleViewController *const __strong' lvalue ImplicitParam 0x7fb8af3f0dd0 'self' 'HRiPadArticleViewController *const __strong'
|         |-OpaqueValueExpr 0x7fb8af3f1730 <col:14> 'HRiPadArticleViewController *'
|         | `-ImplicitCastExpr 0x7fb8af3f16e8 <col:14> 'HRiPadArticleViewController *' <LValueToRValue>
|         |   `-DeclRefExpr 0x7fb8af3f16c0 <col:14> 'HRiPadArticleViewController *const __strong' lvalue ImplicitParam 0x7fb8af3f0dd0 'self' 'HRiPadArticleViewController *const __strong'
|         `-ImplicitCastExpr 0x7fb8af3f17b0 <col:19> 'HRBookendedWebView *' <ARCReclaimReturnedObject>
|           `-ObjCMessageExpr 0x7fb8af3f1780 <col:19> 'HRBookendedWebView *' selector=articleWebView
|             `-OpaqueValueExpr 0x7fb8af3f1730 <col:14> 'HRiPadArticleViewController *'
|               `-ImplicitCastExpr 0x7fb8af3f16e8 <col:14> 'HRiPadArticleViewController *' <LValueToRValue>
|                 `-DeclRefExpr 0x7fb8af3f16c0 <col:14> 'HRiPadArticleViewController *const __strong' lvalue ImplicitParam 0x7fb8af3f0dd0 'self' 'HRiPadArticleViewController *const __strong'
|-ObjCStringLiteral 0x7fb8af3f4058 <col:57, col:58> 'NSString *'
| `-StringLiteral 0x7fb8af3f4030 <col:58> 'char [1]' lvalue ""
`-ImplicitCastExpr 0x7fb8af3f41b0 </Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator8.1.sdk/usr/include/sys/_types.h:52:23, col:33> 'NSURL *' <NullToPointer>
`-ParenExpr 0x7fb8af3f40d0 <col:23, col:33> 'void *'
`-CStyleCastExpr 0x7fb8af3f40a8 <col:24, col:32> 'void *' <NullToPointer>
`-IntegerLiteral 0x7fb8af3f4078 <col:32> 'int' 0



More information about the cfe-dev mailing list