LibASTMatchersReference.html 214 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710371137123713371437153716371737183719372037213722372337243725372637273728372937303731373237333734373537363737373837393740374137423743374437453746374737483749375037513752375337543755375637573758375937603761376237633764376537663767376837693770377137723773377437753776377737783779378037813782378337843785378637873788378937903791379237933794379537963797379837993800380138023803380438053806380738083809381038113812381338143815381638173818381938203821382238233824382538263827382838293830383138323833383438353836383738383839384038413842384338443845384638473848384938503851385238533854385538563857385838593860386138623863
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
  2. "http://www.w3.org/TR/html4/strict.dtd">
  3. <html>
  4. <head>
  5. <title>AST Matcher Reference</title>
  6. <link type="text/css" rel="stylesheet" href="../menu.css" />
  7. <link type="text/css" rel="stylesheet" href="../content.css" />
  8. <style type="text/css">
  9. td {
  10. padding: .33em;
  11. }
  12. td.doc {
  13. display: none;
  14. border-bottom: 1px solid black;
  15. }
  16. td.name:hover {
  17. color: blue;
  18. cursor: pointer;
  19. }
  20. </style>
  21. <script type="text/javascript">
  22. function toggle(id) {
  23. if (!id) return;
  24. row = document.getElementById(id);
  25. if (row.style.display != 'table-cell')
  26. row.style.display = 'table-cell';
  27. else
  28. row.style.display = 'none';
  29. }
  30. </script>
  31. </head>
  32. <body onLoad="toggle(location.hash.substring(1, location.hash.length - 6))">
  33. <!--#include virtual="../menu.html.incl"-->
  34. <div id="content">
  35. <h1>AST Matcher Reference</h1>
  36. <p>This document shows all currently implemented matchers. The matchers are grouped
  37. by category and node type they match. You can click on matcher names to show the
  38. matcher's source documentation.</p>
  39. <p>There are three different basic categories of matchers:
  40. <ul>
  41. <li><a href="#decl-matchers">Node Matchers:</a> Matchers that match a specific type of AST node.</li>
  42. <li><a href="#narrowing-matchers">Narrowing Matchers:</a> Matchers that match attributes on AST nodes.</li>
  43. <li><a href="#traversal-matchers">Traversal Matchers:</a> Matchers that allow traversal between AST nodes.</li>
  44. </ul>
  45. </p>
  46. <p>Within each category the matchers are ordered by node type they match on.
  47. Note that if a matcher can match multiple node types, it will it will appear
  48. multiple times. This means that by searching for Matcher&lt;Stmt&gt; you can
  49. find all matchers that can be used to match on Stmt nodes.</p>
  50. <p>The exception to that rule are matchers that can match on any node. Those
  51. are marked with a * and are listed in the beginning of each category.</p>
  52. <p>Note that the categorization of matchers is a great help when you combine
  53. them into matcher expressions. You will usually want to form matcher expressions
  54. that read like english sentences by alternating between node matchers and
  55. narrowing or traversal matchers, like this:
  56. <pre>
  57. recordDecl(hasDescendant(
  58. ifStmt(hasTrueExpression(
  59. expr(hasDescendant(
  60. ifStmt()))))))
  61. </pre>
  62. </p>
  63. <!-- ======================================================================= -->
  64. <h2 id="decl-matchers">Node Matchers</h2>
  65. <!-- ======================================================================= -->
  66. <p>Node matchers are at the core of matcher expressions - they specify the type
  67. of node that is expected. Every match expression starts with a node matcher,
  68. which can then be further refined with a narrowing or traversal matcher. All
  69. traversal matchers take node matchers as their arguments.</p>
  70. <p>For convenience, all node matchers take an arbitrary number of arguments
  71. and implicitly act as allOf matchers.</p>
  72. <p>Node matchers are the only matchers that support the bind("id") call to
  73. bind the matched node to the given string, to be later retrieved from the
  74. match callback.</p>
  75. <p>It is important to remember that the arguments to node matchers are
  76. predicates on the same node, just with additional information about the type.
  77. This is often useful to make matcher expression more readable by inlining bind
  78. calls into redundant node matchers inside another node matcher:
  79. <pre>
  80. // This binds the CXXRecordDecl to "id", as the decl() matcher will stay on
  81. // the same node.
  82. recordDecl(decl().bind("id"), hasName("::MyClass"))
  83. </pre>
  84. </p>
  85. <table>
  86. <tr style="text-align:left"><th>Return type</th><th>Name</th><th>Parameters</th></tr>
  87. <!-- START_DECL_MATCHERS -->
  88. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXCtorInitializer.html">CXXCtorInitializer</a>&gt;</td><td class="name" onclick="toggle('ctorInitializer0')"><a name="ctorInitializer0Anchor">ctorInitializer</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXCtorInitializer.html">CXXCtorInitializer</a>&gt;...</td></tr>
  89. <tr><td colspan="4" class="doc" id="ctorInitializer0"><pre>Matches constructor initializers.
  90. Examples matches i(42).
  91. class C {
  92. C() : i(42) {}
  93. int i;
  94. };
  95. </pre></td></tr>
  96. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('accessSpecDecl0')"><a name="accessSpecDecl0Anchor">accessSpecDecl</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1AccessSpecDecl.html">AccessSpecDecl</a>&gt;...</td></tr>
  97. <tr><td colspan="4" class="doc" id="accessSpecDecl0"><pre>Matches C++ access specifier declarations.
  98. Given
  99. class C {
  100. public:
  101. int a;
  102. };
  103. accessSpecDecl()
  104. matches 'public:'
  105. </pre></td></tr>
  106. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('classTemplateDecl0')"><a name="classTemplateDecl0Anchor">classTemplateDecl</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ClassTemplateDecl.html">ClassTemplateDecl</a>&gt;...</td></tr>
  107. <tr><td colspan="4" class="doc" id="classTemplateDecl0"><pre>Matches C++ class template declarations.
  108. Example matches Z
  109. template&lt;class T&gt; class Z {};
  110. </pre></td></tr>
  111. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('classTemplateSpecializationDecl0')"><a name="classTemplateSpecializationDecl0Anchor">classTemplateSpecializationDecl</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ClassTemplateSpecializationDecl.html">ClassTemplateSpecializationDecl</a>&gt;...</td></tr>
  112. <tr><td colspan="4" class="doc" id="classTemplateSpecializationDecl0"><pre>Matches C++ class template specializations.
  113. Given
  114. template&lt;typename T&gt; class A {};
  115. template&lt;&gt; class A&lt;double&gt; {};
  116. A&lt;int&gt; a;
  117. classTemplateSpecializationDecl()
  118. matches the specializations A&lt;int&gt; and A&lt;double&gt;
  119. </pre></td></tr>
  120. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('constructorDecl0')"><a name="constructorDecl0Anchor">constructorDecl</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXConstructorDecl.html">CXXConstructorDecl</a>&gt;...</td></tr>
  121. <tr><td colspan="4" class="doc" id="constructorDecl0"><pre>Matches C++ constructor declarations.
  122. Example matches Foo::Foo() and Foo::Foo(int)
  123. class Foo {
  124. public:
  125. Foo();
  126. Foo(int);
  127. int DoSomething();
  128. };
  129. </pre></td></tr>
  130. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('decl0')"><a name="decl0Anchor">decl</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;...</td></tr>
  131. <tr><td colspan="4" class="doc" id="decl0"><pre>Matches declarations.
  132. Examples matches X, C, and the friend declaration inside C;
  133. void X();
  134. class C {
  135. friend X;
  136. };
  137. </pre></td></tr>
  138. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('declaratorDecl0')"><a name="declaratorDecl0Anchor">declaratorDecl</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1DeclaratorDecl.html">DeclaratorDecl</a>&gt;...</td></tr>
  139. <tr><td colspan="4" class="doc" id="declaratorDecl0"><pre>Matches declarator declarations (field, variable, function
  140. and non-type template parameter declarations).
  141. Given
  142. class X { int y; };
  143. declaratorDecl()
  144. matches int y.
  145. </pre></td></tr>
  146. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('destructorDecl0')"><a name="destructorDecl0Anchor">destructorDecl</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXDestructorDecl.html">CXXDestructorDecl</a>&gt;...</td></tr>
  147. <tr><td colspan="4" class="doc" id="destructorDecl0"><pre>Matches explicit C++ destructor declarations.
  148. Example matches Foo::~Foo()
  149. class Foo {
  150. public:
  151. virtual ~Foo();
  152. };
  153. </pre></td></tr>
  154. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('enumConstantDecl0')"><a name="enumConstantDecl0Anchor">enumConstantDecl</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1EnumConstantDecl.html">EnumConstantDecl</a>&gt;...</td></tr>
  155. <tr><td colspan="4" class="doc" id="enumConstantDecl0"><pre>Matches enum constants.
  156. Example matches A, B, C
  157. enum X {
  158. A, B, C
  159. };
  160. </pre></td></tr>
  161. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('enumDecl0')"><a name="enumDecl0Anchor">enumDecl</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1EnumDecl.html">EnumDecl</a>&gt;...</td></tr>
  162. <tr><td colspan="4" class="doc" id="enumDecl0"><pre>Matches enum declarations.
  163. Example matches X
  164. enum X {
  165. A, B, C
  166. };
  167. </pre></td></tr>
  168. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('fieldDecl0')"><a name="fieldDecl0Anchor">fieldDecl</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1FieldDecl.html">FieldDecl</a>&gt;...</td></tr>
  169. <tr><td colspan="4" class="doc" id="fieldDecl0"><pre>Matches field declarations.
  170. Given
  171. class X { int m; };
  172. fieldDecl()
  173. matches 'm'.
  174. </pre></td></tr>
  175. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('friendDecl0')"><a name="friendDecl0Anchor">friendDecl</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1FriendDecl.html">FriendDecl</a>&gt;...</td></tr>
  176. <tr><td colspan="4" class="doc" id="friendDecl0"><pre>Matches friend declarations.
  177. Given
  178. class X { friend void foo(); };
  179. friendDecl()
  180. matches 'friend void foo()'.
  181. </pre></td></tr>
  182. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('functionDecl0')"><a name="functionDecl0Anchor">functionDecl</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1FunctionDecl.html">FunctionDecl</a>&gt;...</td></tr>
  183. <tr><td colspan="4" class="doc" id="functionDecl0"><pre>Matches function declarations.
  184. Example matches f
  185. void f();
  186. </pre></td></tr>
  187. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('functionTemplateDecl0')"><a name="functionTemplateDecl0Anchor">functionTemplateDecl</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1FunctionTemplateDecl.html">FunctionTemplateDecl</a>&gt;...</td></tr>
  188. <tr><td colspan="4" class="doc" id="functionTemplateDecl0"><pre>Matches C++ function template declarations.
  189. Example matches f
  190. template&lt;class T&gt; void f(T t) {}
  191. </pre></td></tr>
  192. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('methodDecl0')"><a name="methodDecl0Anchor">methodDecl</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXMethodDecl.html">CXXMethodDecl</a>&gt;...</td></tr>
  193. <tr><td colspan="4" class="doc" id="methodDecl0"><pre>Matches method declarations.
  194. Example matches y
  195. class X { void y(); };
  196. </pre></td></tr>
  197. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('namedDecl0')"><a name="namedDecl0Anchor">namedDecl</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1NamedDecl.html">NamedDecl</a>&gt;...</td></tr>
  198. <tr><td colspan="4" class="doc" id="namedDecl0"><pre>Matches a declaration of anything that could have a name.
  199. Example matches X, S, the anonymous union type, i, and U;
  200. typedef int X;
  201. struct S {
  202. union {
  203. int i;
  204. } U;
  205. };
  206. </pre></td></tr>
  207. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('namespaceDecl0')"><a name="namespaceDecl0Anchor">namespaceDecl</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1NamespaceDecl.html">NamespaceDecl</a>&gt;...</td></tr>
  208. <tr><td colspan="4" class="doc" id="namespaceDecl0"><pre>Matches a declaration of a namespace.
  209. Given
  210. namespace {}
  211. namespace test {}
  212. namespaceDecl()
  213. matches "namespace {}" and "namespace test {}"
  214. </pre></td></tr>
  215. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('parmVarDecl0')"><a name="parmVarDecl0Anchor">parmVarDecl</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ParmVarDecl.html">ParmVarDecl</a>&gt;...</td></tr>
  216. <tr><td colspan="4" class="doc" id="parmVarDecl0"><pre>Matches parameter variable declarations.
  217. Given
  218. void f(int x);
  219. parmVarDecl()
  220. matches int x.
  221. </pre></td></tr>
  222. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('recordDecl0')"><a name="recordDecl0Anchor">recordDecl</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXRecordDecl.html">CXXRecordDecl</a>&gt;...</td></tr>
  223. <tr><td colspan="4" class="doc" id="recordDecl0"><pre>Matches C++ class declarations.
  224. Example matches X, Z
  225. class X;
  226. template&lt;class T&gt; class Z {};
  227. </pre></td></tr>
  228. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('unresolvedUsingValueDecl0')"><a name="unresolvedUsingValueDecl0Anchor">unresolvedUsingValueDecl</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1UnresolvedUsingValueDecl.html">UnresolvedUsingValueDecl</a>&gt;...</td></tr>
  229. <tr><td colspan="4" class="doc" id="unresolvedUsingValueDecl0"><pre>Matches unresolved using value declarations.
  230. Given
  231. template&lt;typename X&gt;
  232. class C : private X {
  233. using X::x;
  234. };
  235. unresolvedUsingValueDecl()
  236. matches using X::x </pre></td></tr>
  237. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('usingDecl0')"><a name="usingDecl0Anchor">usingDecl</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1UsingDecl.html">UsingDecl</a>&gt;...</td></tr>
  238. <tr><td colspan="4" class="doc" id="usingDecl0"><pre>Matches using declarations.
  239. Given
  240. namespace X { int x; }
  241. using X::x;
  242. usingDecl()
  243. matches using X::x </pre></td></tr>
  244. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('varDecl0')"><a name="varDecl0Anchor">varDecl</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1VarDecl.html">VarDecl</a>&gt;...</td></tr>
  245. <tr><td colspan="4" class="doc" id="varDecl0"><pre>Matches variable declarations.
  246. Note: this does not match declarations of member variables, which are
  247. "field" declarations in Clang parlance.
  248. Example matches a
  249. int a;
  250. </pre></td></tr>
  251. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1NestedNameSpecifierLoc.html">NestedNameSpecifierLoc</a>&gt;</td><td class="name" onclick="toggle('nestedNameSpecifierLoc0')"><a name="nestedNameSpecifierLoc0Anchor">nestedNameSpecifierLoc</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1NestedNameSpecifierLoc.html">NestedNameSpecifierLoc</a>&gt;...</td></tr>
  252. <tr><td colspan="4" class="doc" id="nestedNameSpecifierLoc0"><pre>Same as nestedNameSpecifier but matches NestedNameSpecifierLoc.
  253. </pre></td></tr>
  254. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1NestedNameSpecifier.html">NestedNameSpecifier</a>&gt;</td><td class="name" onclick="toggle('nestedNameSpecifier0')"><a name="nestedNameSpecifier0Anchor">nestedNameSpecifier</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1NestedNameSpecifier.html">NestedNameSpecifier</a>&gt;...</td></tr>
  255. <tr><td colspan="4" class="doc" id="nestedNameSpecifier0"><pre>Matches nested name specifiers.
  256. Given
  257. namespace ns {
  258. struct A { static void f(); };
  259. void A::f() {}
  260. void g() { A::f(); }
  261. }
  262. ns::A a;
  263. nestedNameSpecifier()
  264. matches "ns::" and both "A::"
  265. </pre></td></tr>
  266. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt;</td><td class="name" onclick="toggle('qualType0')"><a name="qualType0Anchor">qualType</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt;...</td></tr>
  267. <tr><td colspan="4" class="doc" id="qualType0"><pre>Matches QualTypes in the clang AST.
  268. </pre></td></tr>
  269. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('arraySubscriptExpr0')"><a name="arraySubscriptExpr0Anchor">arraySubscriptExpr</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ArraySubscriptExpr.html">ArraySubscriptExpr</a>&gt;...</td></tr>
  270. <tr><td colspan="4" class="doc" id="arraySubscriptExpr0"><pre>Matches array subscript expressions.
  271. Given
  272. int i = a[1];
  273. arraySubscriptExpr()
  274. matches "a[1]"
  275. </pre></td></tr>
  276. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('asmStmt0')"><a name="asmStmt0Anchor">asmStmt</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1AsmStmt.html">AsmStmt</a>&gt;...</td></tr>
  277. <tr><td colspan="4" class="doc" id="asmStmt0"><pre>Matches asm statements.
  278. int i = 100;
  279. __asm("mov al, 2");
  280. asmStmt()
  281. matches '__asm("mov al, 2")'
  282. </pre></td></tr>
  283. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('binaryOperator0')"><a name="binaryOperator0Anchor">binaryOperator</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1BinaryOperator.html">BinaryOperator</a>&gt;...</td></tr>
  284. <tr><td colspan="4" class="doc" id="binaryOperator0"><pre>Matches binary operator expressions.
  285. Example matches a || b
  286. !(a || b)
  287. </pre></td></tr>
  288. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('bindTemporaryExpr0')"><a name="bindTemporaryExpr0Anchor">bindTemporaryExpr</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXBindTemporaryExpr.html">CXXBindTemporaryExpr</a>&gt;...</td></tr>
  289. <tr><td colspan="4" class="doc" id="bindTemporaryExpr0"><pre>Matches nodes where temporaries are created.
  290. Example matches FunctionTakesString(GetStringByValue())
  291. (matcher = bindTemporaryExpr())
  292. FunctionTakesString(GetStringByValue());
  293. FunctionTakesStringByPointer(GetStringPointer());
  294. </pre></td></tr>
  295. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('boolLiteral0')"><a name="boolLiteral0Anchor">boolLiteral</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXBoolLiteralExpr.html">CXXBoolLiteralExpr</a>&gt;...</td></tr>
  296. <tr><td colspan="4" class="doc" id="boolLiteral0"><pre>Matches bool literals.
  297. Example matches true
  298. true
  299. </pre></td></tr>
  300. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('breakStmt0')"><a name="breakStmt0Anchor">breakStmt</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1BreakStmt.html">BreakStmt</a>&gt;...</td></tr>
  301. <tr><td colspan="4" class="doc" id="breakStmt0"><pre>Matches break statements.
  302. Given
  303. while (true) { break; }
  304. breakStmt()
  305. matches 'break'
  306. </pre></td></tr>
  307. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('cStyleCastExpr0')"><a name="cStyleCastExpr0Anchor">cStyleCastExpr</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CStyleCastExpr.html">CStyleCastExpr</a>&gt;...</td></tr>
  308. <tr><td colspan="4" class="doc" id="cStyleCastExpr0"><pre>Matches a C-style cast expression.
  309. Example: Matches (int*) 2.2f in
  310. int i = (int) 2.2f;
  311. </pre></td></tr>
  312. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('callExpr0')"><a name="callExpr0Anchor">callExpr</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CallExpr.html">CallExpr</a>&gt;...</td></tr>
  313. <tr><td colspan="4" class="doc" id="callExpr0"><pre>Matches call expressions.
  314. Example matches x.y() and y()
  315. X x;
  316. x.y();
  317. y();
  318. </pre></td></tr>
  319. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('caseStmt0')"><a name="caseStmt0Anchor">caseStmt</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CaseStmt.html">CaseStmt</a>&gt;...</td></tr>
  320. <tr><td colspan="4" class="doc" id="caseStmt0"><pre>Matches case statements inside switch statements.
  321. Given
  322. switch(a) { case 42: break; default: break; }
  323. caseStmt()
  324. matches 'case 42: break;'.
  325. </pre></td></tr>
  326. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('castExpr0')"><a name="castExpr0Anchor">castExpr</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CastExpr.html">CastExpr</a>&gt;...</td></tr>
  327. <tr><td colspan="4" class="doc" id="castExpr0"><pre>Matches any cast nodes of Clang's AST.
  328. Example: castExpr() matches each of the following:
  329. (int) 3;
  330. const_cast&lt;Expr *&gt;(SubExpr);
  331. char c = 0;
  332. but does not match
  333. int i = (0);
  334. int k = 0;
  335. </pre></td></tr>
  336. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('catchStmt0')"><a name="catchStmt0Anchor">catchStmt</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXCatchStmt.html">CXXCatchStmt</a>&gt;...</td></tr>
  337. <tr><td colspan="4" class="doc" id="catchStmt0"><pre>Matches catch statements.
  338. try {} catch(int i) {}
  339. catchStmt()
  340. matches 'catch(int i)'
  341. </pre></td></tr>
  342. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('characterLiteral0')"><a name="characterLiteral0Anchor">characterLiteral</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CharacterLiteral.html">CharacterLiteral</a>&gt;...</td></tr>
  343. <tr><td colspan="4" class="doc" id="characterLiteral0"><pre>Matches character literals (also matches wchar_t).
  344. Not matching Hex-encoded chars (e.g. 0x1234, which is a IntegerLiteral),
  345. though.
  346. Example matches 'a', L'a'
  347. char ch = 'a'; wchar_t chw = L'a';
  348. </pre></td></tr>
  349. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('compoundLiteralExpr0')"><a name="compoundLiteralExpr0Anchor">compoundLiteralExpr</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CompoundLiteralExpr.html">CompoundLiteralExpr</a>&gt;...</td></tr>
  350. <tr><td colspan="4" class="doc" id="compoundLiteralExpr0"><pre>Matches compound (i.e. non-scalar) literals
  351. Example match: {1}, (1, 2)
  352. int array[4] = {1}; vector int myvec = (vector int)(1, 2);
  353. </pre></td></tr>
  354. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('compoundStmt0')"><a name="compoundStmt0Anchor">compoundStmt</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CompoundStmt.html">CompoundStmt</a>&gt;...</td></tr>
  355. <tr><td colspan="4" class="doc" id="compoundStmt0"><pre>Matches compound statements.
  356. Example matches '{}' and '{{}}'in 'for (;;) {{}}'
  357. for (;;) {{}}
  358. </pre></td></tr>
  359. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('conditionalOperator0')"><a name="conditionalOperator0Anchor">conditionalOperator</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ConditionalOperator.html">ConditionalOperator</a>&gt;...</td></tr>
  360. <tr><td colspan="4" class="doc" id="conditionalOperator0"><pre>Matches conditional operator expressions.
  361. Example matches a ? b : c
  362. (a ? b : c) + 42
  363. </pre></td></tr>
  364. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('constCastExpr0')"><a name="constCastExpr0Anchor">constCastExpr</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXConstCastExpr.html">CXXConstCastExpr</a>&gt;...</td></tr>
  365. <tr><td colspan="4" class="doc" id="constCastExpr0"><pre>Matches a const_cast expression.
  366. Example: Matches const_cast&lt;int*&gt;(&amp;r) in
  367. int n = 42;
  368. const int &amp;r(n);
  369. int* p = const_cast&lt;int*&gt;(&amp;r);
  370. </pre></td></tr>
  371. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('constructExpr0')"><a name="constructExpr0Anchor">constructExpr</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXConstructExpr.html">CXXConstructExpr</a>&gt;...</td></tr>
  372. <tr><td colspan="4" class="doc" id="constructExpr0"><pre>Matches constructor call expressions (including implicit ones).
  373. Example matches string(ptr, n) and ptr within arguments of f
  374. (matcher = constructExpr())
  375. void f(const string &amp;a, const string &amp;b);
  376. char *ptr;
  377. int n;
  378. f(string(ptr, n), ptr);
  379. </pre></td></tr>
  380. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('continueStmt0')"><a name="continueStmt0Anchor">continueStmt</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ContinueStmt.html">ContinueStmt</a>&gt;...</td></tr>
  381. <tr><td colspan="4" class="doc" id="continueStmt0"><pre>Matches continue statements.
  382. Given
  383. while (true) { continue; }
  384. continueStmt()
  385. matches 'continue'
  386. </pre></td></tr>
  387. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('declRefExpr0')"><a name="declRefExpr0Anchor">declRefExpr</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1DeclRefExpr.html">DeclRefExpr</a>&gt;...</td></tr>
  388. <tr><td colspan="4" class="doc" id="declRefExpr0"><pre>Matches expressions that refer to declarations.
  389. Example matches x in if (x)
  390. bool x;
  391. if (x) {}
  392. </pre></td></tr>
  393. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('declStmt0')"><a name="declStmt0Anchor">declStmt</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1DeclStmt.html">DeclStmt</a>&gt;...</td></tr>
  394. <tr><td colspan="4" class="doc" id="declStmt0"><pre>Matches declaration statements.
  395. Given
  396. int a;
  397. declStmt()
  398. matches 'int a'.
  399. </pre></td></tr>
  400. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('defaultArgExpr0')"><a name="defaultArgExpr0Anchor">defaultArgExpr</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXDefaultArgExpr.html">CXXDefaultArgExpr</a>&gt;...</td></tr>
  401. <tr><td colspan="4" class="doc" id="defaultArgExpr0"><pre>Matches the value of a default argument at the call site.
  402. Example matches the CXXDefaultArgExpr placeholder inserted for the
  403. default value of the second parameter in the call expression f(42)
  404. (matcher = defaultArgExpr())
  405. void f(int x, int y = 0);
  406. f(42);
  407. </pre></td></tr>
  408. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('defaultStmt0')"><a name="defaultStmt0Anchor">defaultStmt</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1DefaultStmt.html">DefaultStmt</a>&gt;...</td></tr>
  409. <tr><td colspan="4" class="doc" id="defaultStmt0"><pre>Matches default statements inside switch statements.
  410. Given
  411. switch(a) { case 42: break; default: break; }
  412. defaultStmt()
  413. matches 'default: break;'.
  414. </pre></td></tr>
  415. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('deleteExpr0')"><a name="deleteExpr0Anchor">deleteExpr</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXDeleteExpr.html">CXXDeleteExpr</a>&gt;...</td></tr>
  416. <tr><td colspan="4" class="doc" id="deleteExpr0"><pre>Matches delete expressions.
  417. Given
  418. delete X;
  419. deleteExpr()
  420. matches 'delete X'.
  421. </pre></td></tr>
  422. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('doStmt0')"><a name="doStmt0Anchor">doStmt</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1DoStmt.html">DoStmt</a>&gt;...</td></tr>
  423. <tr><td colspan="4" class="doc" id="doStmt0"><pre>Matches do statements.
  424. Given
  425. do {} while (true);
  426. doStmt()
  427. matches 'do {} while(true)'
  428. </pre></td></tr>
  429. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('dynamicCastExpr0')"><a name="dynamicCastExpr0Anchor">dynamicCastExpr</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXDynamicCastExpr.html">CXXDynamicCastExpr</a>&gt;...</td></tr>
  430. <tr><td colspan="4" class="doc" id="dynamicCastExpr0"><pre>Matches a dynamic_cast expression.
  431. Example:
  432. dynamicCastExpr()
  433. matches
  434. dynamic_cast&lt;D*&gt;(&amp;b);
  435. in
  436. struct B { virtual ~B() {} }; struct D : B {};
  437. B b;
  438. D* p = dynamic_cast&lt;D*&gt;(&amp;b);
  439. </pre></td></tr>
  440. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('explicitCastExpr0')"><a name="explicitCastExpr0Anchor">explicitCastExpr</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ExplicitCastExpr.html">ExplicitCastExpr</a>&gt;...</td></tr>
  441. <tr><td colspan="4" class="doc" id="explicitCastExpr0"><pre>Matches explicit cast expressions.
  442. Matches any cast expression written in user code, whether it be a
  443. C-style cast, a functional-style cast, or a keyword cast.
  444. Does not match implicit conversions.
  445. Note: the name "explicitCast" is chosen to match Clang's terminology, as
  446. Clang uses the term "cast" to apply to implicit conversions as well as to
  447. actual cast expressions.
  448. hasDestinationType.
  449. Example: matches all five of the casts in
  450. int((int)(reinterpret_cast&lt;int&gt;(static_cast&lt;int&gt;(const_cast&lt;int&gt;(42)))))
  451. but does not match the implicit conversion in
  452. long ell = 42;
  453. </pre></td></tr>
  454. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('expr0')"><a name="expr0Anchor">expr</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt;...</td></tr>
  455. <tr><td colspan="4" class="doc" id="expr0"><pre>Matches expressions.
  456. Example matches x()
  457. void f() { x(); }
  458. </pre></td></tr>
  459. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('exprWithCleanups0')"><a name="exprWithCleanups0Anchor">exprWithCleanups</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ExprWithCleanups.html">ExprWithCleanups</a>&gt;...</td></tr>
  460. <tr><td colspan="4" class="doc" id="exprWithCleanups0"><pre>Matches expressions that introduce cleanups to be run at the end
  461. of the sub-expression's evaluation.
  462. Example matches std::string()
  463. const std::string str = std::string();
  464. </pre></td></tr>
  465. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('floatLiteral0')"><a name="floatLiteral0Anchor">floatLiteral</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1FloatingLiteral.html">FloatingLiteral</a>&gt;...</td></tr>
  466. <tr><td colspan="4" class="doc" id="floatLiteral0"><pre>Matches float literals of all sizes encodings, e.g.
  467. 1.0, 1.0f, 1.0L and 1e10.
  468. Does not match implicit conversions such as
  469. float a = 10;
  470. </pre></td></tr>
  471. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('forRangeStmt0')"><a name="forRangeStmt0Anchor">forRangeStmt</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXForRangeStmt.html">CXXForRangeStmt</a>&gt;...</td></tr>
  472. <tr><td colspan="4" class="doc" id="forRangeStmt0"><pre>Matches range-based for statements.
  473. forRangeStmt() matches 'for (auto a : i)'
  474. int i[] = {1, 2, 3}; for (auto a : i);
  475. for(int j = 0; j &lt; 5; ++j);
  476. </pre></td></tr>
  477. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('forStmt0')"><a name="forStmt0Anchor">forStmt</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ForStmt.html">ForStmt</a>&gt;...</td></tr>
  478. <tr><td colspan="4" class="doc" id="forStmt0"><pre>Matches for statements.
  479. Example matches 'for (;;) {}'
  480. for (;;) {}
  481. int i[] = {1, 2, 3}; for (auto a : i);
  482. </pre></td></tr>
  483. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('functionalCastExpr0')"><a name="functionalCastExpr0Anchor">functionalCastExpr</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXFunctionalCastExpr.html">CXXFunctionalCastExpr</a>&gt;...</td></tr>
  484. <tr><td colspan="4" class="doc" id="functionalCastExpr0"><pre>Matches functional cast expressions
  485. Example: Matches Foo(bar);
  486. Foo f = bar;
  487. Foo g = (Foo) bar;
  488. Foo h = Foo(bar);
  489. </pre></td></tr>
  490. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('gotoStmt0')"><a name="gotoStmt0Anchor">gotoStmt</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1GotoStmt.html">GotoStmt</a>&gt;...</td></tr>
  491. <tr><td colspan="4" class="doc" id="gotoStmt0"><pre>Matches goto statements.
  492. Given
  493. goto FOO;
  494. FOO: bar();
  495. gotoStmt()
  496. matches 'goto FOO'
  497. </pre></td></tr>
  498. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('ifStmt0')"><a name="ifStmt0Anchor">ifStmt</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1IfStmt.html">IfStmt</a>&gt;...</td></tr>
  499. <tr><td colspan="4" class="doc" id="ifStmt0"><pre>Matches if statements.
  500. Example matches 'if (x) {}'
  501. if (x) {}
  502. </pre></td></tr>
  503. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('implicitCastExpr0')"><a name="implicitCastExpr0Anchor">implicitCastExpr</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ImplicitCastExpr.html">ImplicitCastExpr</a>&gt;...</td></tr>
  504. <tr><td colspan="4" class="doc" id="implicitCastExpr0"><pre>Matches the implicit cast nodes of Clang's AST.
  505. This matches many different places, including function call return value
  506. eliding, as well as any type conversions.
  507. </pre></td></tr>
  508. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('initListExpr0')"><a name="initListExpr0Anchor">initListExpr</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1InitListExpr.html">InitListExpr</a>&gt;...</td></tr>
  509. <tr><td colspan="4" class="doc" id="initListExpr0"><pre>Matches init list expressions.
  510. Given
  511. int a[] = { 1, 2 };
  512. struct B { int x, y; };
  513. B b = { 5, 6 };
  514. initList()
  515. matches "{ 1, 2 }" and "{ 5, 6 }"
  516. </pre></td></tr>
  517. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('integerLiteral0')"><a name="integerLiteral0Anchor">integerLiteral</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1IntegerLiteral.html">IntegerLiteral</a>&gt;...</td></tr>
  518. <tr><td colspan="4" class="doc" id="integerLiteral0"><pre>Matches integer literals of all sizes encodings, e.g.
  519. 1, 1L, 0x1 and 1U.
  520. Does not match character-encoded integers such as L'a'.
  521. </pre></td></tr>
  522. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('labelStmt0')"><a name="labelStmt0Anchor">labelStmt</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1LabelStmt.html">LabelStmt</a>&gt;...</td></tr>
  523. <tr><td colspan="4" class="doc" id="labelStmt0"><pre>Matches label statements.
  524. Given
  525. goto FOO;
  526. FOO: bar();
  527. labelStmt()
  528. matches 'FOO:'
  529. </pre></td></tr>
  530. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('lambdaExpr0')"><a name="lambdaExpr0Anchor">lambdaExpr</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1LambdaExpr.html">LambdaExpr</a>&gt;...</td></tr>
  531. <tr><td colspan="4" class="doc" id="lambdaExpr0"><pre>Matches lambda expressions.
  532. Example matches [&amp;](){return 5;}
  533. [&amp;](){return 5;}
  534. </pre></td></tr>
  535. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('materializeTemporaryExpr0')"><a name="materializeTemporaryExpr0Anchor">materializeTemporaryExpr</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1MaterializeTemporaryExpr.html">MaterializeTemporaryExpr</a>&gt;...</td></tr>
  536. <tr><td colspan="4" class="doc" id="materializeTemporaryExpr0"><pre>Matches nodes where temporaries are materialized.
  537. Example: Given
  538. struct T {void func()};
  539. T f();
  540. void g(T);
  541. materializeTemporaryExpr() matches 'f()' in these statements
  542. T u(f());
  543. g(f());
  544. but does not match
  545. f();
  546. f().func();
  547. </pre></td></tr>
  548. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('memberCallExpr0')"><a name="memberCallExpr0Anchor">memberCallExpr</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXMemberCallExpr.html">CXXMemberCallExpr</a>&gt;...</td></tr>
  549. <tr><td colspan="4" class="doc" id="memberCallExpr0"><pre>Matches member call expressions.
  550. Example matches x.y()
  551. X x;
  552. x.y();
  553. </pre></td></tr>
  554. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('memberExpr0')"><a name="memberExpr0Anchor">memberExpr</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberExpr.html">MemberExpr</a>&gt;...</td></tr>
  555. <tr><td colspan="4" class="doc" id="memberExpr0"><pre>Matches member expressions.
  556. Given
  557. class Y {
  558. void x() { this-&gt;x(); x(); Y y; y.x(); a; this-&gt;b; Y::b; }
  559. int a; static int b;
  560. };
  561. memberExpr()
  562. matches this-&gt;x, x, y.x, a, this-&gt;b
  563. </pre></td></tr>
  564. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('newExpr0')"><a name="newExpr0Anchor">newExpr</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXNewExpr.html">CXXNewExpr</a>&gt;...</td></tr>
  565. <tr><td colspan="4" class="doc" id="newExpr0"><pre>Matches new expressions.
  566. Given
  567. new X;
  568. newExpr()
  569. matches 'new X'.
  570. </pre></td></tr>
  571. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('nullPtrLiteralExpr0')"><a name="nullPtrLiteralExpr0Anchor">nullPtrLiteralExpr</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXNullPtrLiteralExpr.html">CXXNullPtrLiteralExpr</a>&gt;...</td></tr>
  572. <tr><td colspan="4" class="doc" id="nullPtrLiteralExpr0"><pre>Matches nullptr literal.
  573. </pre></td></tr>
  574. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('nullStmt0')"><a name="nullStmt0Anchor">nullStmt</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1NullStmt.html">NullStmt</a>&gt;...</td></tr>
  575. <tr><td colspan="4" class="doc" id="nullStmt0"><pre>Matches null statements.
  576. foo();;
  577. nullStmt()
  578. matches the second ';'
  579. </pre></td></tr>
  580. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('operatorCallExpr0')"><a name="operatorCallExpr0Anchor">operatorCallExpr</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXOperatorCallExpr.html">CXXOperatorCallExpr</a>&gt;...</td></tr>
  581. <tr><td colspan="4" class="doc" id="operatorCallExpr0"><pre>Matches overloaded operator calls.
  582. Note that if an operator isn't overloaded, it won't match. Instead, use
  583. binaryOperator matcher.
  584. Currently it does not match operators such as new delete.
  585. FIXME: figure out why these do not match?
  586. Example matches both operator&lt;&lt;((o &lt;&lt; b), c) and operator&lt;&lt;(o, b)
  587. (matcher = operatorCallExpr())
  588. ostream &amp;operator&lt;&lt; (ostream &amp;out, int i) { };
  589. ostream &amp;o; int b = 1, c = 1;
  590. o &lt;&lt; b &lt;&lt; c;
  591. </pre></td></tr>
  592. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('reinterpretCastExpr0')"><a name="reinterpretCastExpr0Anchor">reinterpretCastExpr</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXReinterpretCastExpr.html">CXXReinterpretCastExpr</a>&gt;...</td></tr>
  593. <tr><td colspan="4" class="doc" id="reinterpretCastExpr0"><pre>Matches a reinterpret_cast expression.
  594. Either the source expression or the destination type can be matched
  595. using has(), but hasDestinationType() is more specific and can be
  596. more readable.
  597. Example matches reinterpret_cast&lt;char*&gt;(&amp;p) in
  598. void* p = reinterpret_cast&lt;char*&gt;(&amp;p);
  599. </pre></td></tr>
  600. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('returnStmt0')"><a name="returnStmt0Anchor">returnStmt</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ReturnStmt.html">ReturnStmt</a>&gt;...</td></tr>
  601. <tr><td colspan="4" class="doc" id="returnStmt0"><pre>Matches return statements.
  602. Given
  603. return 1;
  604. returnStmt()
  605. matches 'return 1'
  606. </pre></td></tr>
  607. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('staticCastExpr0')"><a name="staticCastExpr0Anchor">staticCastExpr</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXStaticCastExpr.html">CXXStaticCastExpr</a>&gt;...</td></tr>
  608. <tr><td colspan="4" class="doc" id="staticCastExpr0"><pre>Matches a C++ static_cast expression.
  609. hasDestinationType
  610. reinterpretCast
  611. Example:
  612. staticCastExpr()
  613. matches
  614. static_cast&lt;long&gt;(8)
  615. in
  616. long eight(static_cast&lt;long&gt;(8));
  617. </pre></td></tr>
  618. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('stmt0')"><a name="stmt0Anchor">stmt</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;...</td></tr>
  619. <tr><td colspan="4" class="doc" id="stmt0"><pre>Matches statements.
  620. Given
  621. { ++a; }
  622. stmt()
  623. matches both the compound statement '{ ++a; }' and '++a'.
  624. </pre></td></tr>
  625. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('stringLiteral0')"><a name="stringLiteral0Anchor">stringLiteral</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1StringLiteral.html">StringLiteral</a>&gt;...</td></tr>
  626. <tr><td colspan="4" class="doc" id="stringLiteral0"><pre>Matches string literals (also matches wide string literals).
  627. Example matches "abcd", L"abcd"
  628. char *s = "abcd"; wchar_t *ws = L"abcd"
  629. </pre></td></tr>
  630. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('switchCase0')"><a name="switchCase0Anchor">switchCase</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1SwitchCase.html">SwitchCase</a>&gt;...</td></tr>
  631. <tr><td colspan="4" class="doc" id="switchCase0"><pre>Matches case and default statements inside switch statements.
  632. Given
  633. switch(a) { case 42: break; default: break; }
  634. switchCase()
  635. matches 'case 42: break;' and 'default: break;'.
  636. </pre></td></tr>
  637. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('switchStmt0')"><a name="switchStmt0Anchor">switchStmt</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1SwitchStmt.html">SwitchStmt</a>&gt;...</td></tr>
  638. <tr><td colspan="4" class="doc" id="switchStmt0"><pre>Matches switch statements.
  639. Given
  640. switch(a) { case 42: break; default: break; }
  641. switchStmt()
  642. matches 'switch(a)'.
  643. </pre></td></tr>
  644. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('temporaryObjectExpr0')"><a name="temporaryObjectExpr0Anchor">temporaryObjectExpr</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXTemporaryObjectExpr.html">CXXTemporaryObjectExpr</a>&gt;...</td></tr>
  645. <tr><td colspan="4" class="doc" id="temporaryObjectExpr0"><pre>Matches functional cast expressions having N != 1 arguments
  646. Example: Matches Foo(bar, bar)
  647. Foo h = Foo(bar, bar);
  648. </pre></td></tr>
  649. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('thisExpr0')"><a name="thisExpr0Anchor">thisExpr</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXThisExpr.html">CXXThisExpr</a>&gt;...</td></tr>
  650. <tr><td colspan="4" class="doc" id="thisExpr0"><pre>Matches implicit and explicit this expressions.
  651. Example matches the implicit this expression in "return i".
  652. (matcher = thisExpr())
  653. struct foo {
  654. int i;
  655. int f() { return i; }
  656. };
  657. </pre></td></tr>
  658. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('throwExpr0')"><a name="throwExpr0Anchor">throwExpr</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXThrowExpr.html">CXXThrowExpr</a>&gt;...</td></tr>
  659. <tr><td colspan="4" class="doc" id="throwExpr0"><pre>Matches throw expressions.
  660. try { throw 5; } catch(int i) {}
  661. throwExpr()
  662. matches 'throw 5'
  663. </pre></td></tr>
  664. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('tryStmt0')"><a name="tryStmt0Anchor">tryStmt</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXTryStmt.html">CXXTryStmt</a>&gt;...</td></tr>
  665. <tr><td colspan="4" class="doc" id="tryStmt0"><pre>Matches try statements.
  666. try {} catch(int i) {}
  667. tryStmt()
  668. matches 'try {}'
  669. </pre></td></tr>
  670. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('unaryExprOrTypeTraitExpr0')"><a name="unaryExprOrTypeTraitExpr0Anchor">unaryExprOrTypeTraitExpr</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1UnaryExprOrTypeTraitExpr.html">UnaryExprOrTypeTraitExpr</a>&gt;...</td></tr>
  671. <tr><td colspan="4" class="doc" id="unaryExprOrTypeTraitExpr0"><pre>Matches sizeof (C99), alignof (C++11) and vec_step (OpenCL)
  672. Given
  673. Foo x = bar;
  674. int y = sizeof(x) + alignof(x);
  675. unaryExprOrTypeTraitExpr()
  676. matches sizeof(x) and alignof(x)
  677. </pre></td></tr>
  678. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('unaryOperator0')"><a name="unaryOperator0Anchor">unaryOperator</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1UnaryOperator.html">UnaryOperator</a>&gt;...</td></tr>
  679. <tr><td colspan="4" class="doc" id="unaryOperator0"><pre>Matches unary operator expressions.
  680. Example matches !a
  681. !a || b
  682. </pre></td></tr>
  683. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('unresolvedConstructExpr0')"><a name="unresolvedConstructExpr0Anchor">unresolvedConstructExpr</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXUnresolvedConstructExpr.html">CXXUnresolvedConstructExpr</a>&gt;...</td></tr>
  684. <tr><td colspan="4" class="doc" id="unresolvedConstructExpr0"><pre>Matches unresolved constructor call expressions.
  685. Example matches T(t) in return statement of f
  686. (matcher = unresolvedConstructExpr())
  687. template &lt;typename T&gt;
  688. void f(const T&amp; t) { return T(t); }
  689. </pre></td></tr>
  690. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('userDefinedLiteral0')"><a name="userDefinedLiteral0Anchor">userDefinedLiteral</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1UserDefinedLiteral.html">UserDefinedLiteral</a>&gt;...</td></tr>
  691. <tr><td colspan="4" class="doc" id="userDefinedLiteral0"><pre>Matches user defined literal operator call.
  692. Example match: "foo"_suffix
  693. </pre></td></tr>
  694. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('whileStmt0')"><a name="whileStmt0Anchor">whileStmt</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1WhileStmt.html">WhileStmt</a>&gt;...</td></tr>
  695. <tr><td colspan="4" class="doc" id="whileStmt0"><pre>Matches while statements.
  696. Given
  697. while (true) {}
  698. whileStmt()
  699. matches 'while (true) {}'.
  700. </pre></td></tr>
  701. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TypeLoc.html">TypeLoc</a>&gt;</td><td class="name" onclick="toggle('typeLoc0')"><a name="typeLoc0Anchor">typeLoc</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TypeLoc.html">TypeLoc</a>&gt;...</td></tr>
  702. <tr><td colspan="4" class="doc" id="typeLoc0"><pre>Matches TypeLocs in the clang AST.
  703. </pre></td></tr>
  704. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td><td class="name" onclick="toggle('arrayType0')"><a name="arrayType0Anchor">arrayType</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ArrayType.html">ArrayType</a>&gt;...</td></tr>
  705. <tr><td colspan="4" class="doc" id="arrayType0"><pre>Matches all kinds of arrays.
  706. Given
  707. int a[] = { 2, 3 };
  708. int b[4];
  709. void f() { int c[a[0]]; }
  710. arrayType()
  711. matches "int a[]", "int b[4]" and "int c[a[0]]";
  712. </pre></td></tr>
  713. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td><td class="name" onclick="toggle('atomicType0')"><a name="atomicType0Anchor">atomicType</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1AtomicType.html">AtomicType</a>&gt;...</td></tr>
  714. <tr><td colspan="4" class="doc" id="atomicType0"><pre>Matches atomic types.
  715. Given
  716. _Atomic(int) i;
  717. atomicType()
  718. matches "_Atomic(int) i"
  719. </pre></td></tr>
  720. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td><td class="name" onclick="toggle('autoType0')"><a name="autoType0Anchor">autoType</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1AutoType.html">AutoType</a>&gt;...</td></tr>
  721. <tr><td colspan="4" class="doc" id="autoType0"><pre>Matches types nodes representing C++11 auto types.
  722. Given:
  723. auto n = 4;
  724. int v[] = { 2, 3 }
  725. for (auto i : v) { }
  726. autoType()
  727. matches "auto n" and "auto i"
  728. </pre></td></tr>
  729. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td><td class="name" onclick="toggle('blockPointerType0')"><a name="blockPointerType0Anchor">blockPointerType</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1BlockPointerType.html">BlockPointerType</a>&gt;...</td></tr>
  730. <tr><td colspan="4" class="doc" id="blockPointerType0"><pre>Matches block pointer types, i.e. types syntactically represented as
  731. "void (^)(int)".
  732. The pointee is always required to be a FunctionType.
  733. </pre></td></tr>
  734. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td><td class="name" onclick="toggle('builtinType0')"><a name="builtinType0Anchor">builtinType</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1BuiltinType.html">BuiltinType</a>&gt;...</td></tr>
  735. <tr><td colspan="4" class="doc" id="builtinType0"><pre>Matches builtin Types.
  736. Given
  737. struct A {};
  738. A a;
  739. int b;
  740. float c;
  741. bool d;
  742. builtinType()
  743. matches "int b", "float c" and "bool d"
  744. </pre></td></tr>
  745. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td><td class="name" onclick="toggle('complexType0')"><a name="complexType0Anchor">complexType</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ComplexType.html">ComplexType</a>&gt;...</td></tr>
  746. <tr><td colspan="4" class="doc" id="complexType0"><pre>Matches C99 complex types.
  747. Given
  748. _Complex float f;
  749. complexType()
  750. matches "_Complex float f"
  751. </pre></td></tr>
  752. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td><td class="name" onclick="toggle('constantArrayType0')"><a name="constantArrayType0Anchor">constantArrayType</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ConstantArrayType.html">ConstantArrayType</a>&gt;...</td></tr>
  753. <tr><td colspan="4" class="doc" id="constantArrayType0"><pre>Matches C arrays with a specified constant size.
  754. Given
  755. void() {
  756. int a[2];
  757. int b[] = { 2, 3 };
  758. int c[b[0]];
  759. }
  760. constantArrayType()
  761. matches "int a[2]"
  762. </pre></td></tr>
  763. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td><td class="name" onclick="toggle('dependentSizedArrayType0')"><a name="dependentSizedArrayType0Anchor">dependentSizedArrayType</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1DependentSizedArrayType.html">DependentSizedArrayType</a>&gt;...</td></tr>
  764. <tr><td colspan="4" class="doc" id="dependentSizedArrayType0"><pre>Matches C++ arrays whose size is a value-dependent expression.
  765. Given
  766. template&lt;typename T, int Size&gt;
  767. class array {
  768. T data[Size];
  769. };
  770. dependentSizedArrayType
  771. matches "T data[Size]"
  772. </pre></td></tr>
  773. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td><td class="name" onclick="toggle('elaboratedType0')"><a name="elaboratedType0Anchor">elaboratedType</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ElaboratedType.html">ElaboratedType</a>&gt;...</td></tr>
  774. <tr><td colspan="4" class="doc" id="elaboratedType0"><pre>Matches types specified with an elaborated type keyword or with a
  775. qualified name.
  776. Given
  777. namespace N {
  778. namespace M {
  779. class D {};
  780. }
  781. }
  782. class C {};
  783. class C c;
  784. N::M::D d;
  785. elaboratedType() matches the type of the variable declarations of both
  786. c and d.
  787. </pre></td></tr>
  788. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td><td class="name" onclick="toggle('functionType0')"><a name="functionType0Anchor">functionType</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1FunctionType.html">FunctionType</a>&gt;...</td></tr>
  789. <tr><td colspan="4" class="doc" id="functionType0"><pre>Matches FunctionType nodes.
  790. Given
  791. int (*f)(int);
  792. void g();
  793. functionType()
  794. matches "int (*f)(int)" and the type of "g".
  795. </pre></td></tr>
  796. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td><td class="name" onclick="toggle('incompleteArrayType0')"><a name="incompleteArrayType0Anchor">incompleteArrayType</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1IncompleteArrayType.html">IncompleteArrayType</a>&gt;...</td></tr>
  797. <tr><td colspan="4" class="doc" id="incompleteArrayType0"><pre>Matches C arrays with unspecified size.
  798. Given
  799. int a[] = { 2, 3 };
  800. int b[42];
  801. void f(int c[]) { int d[a[0]]; };
  802. incompleteArrayType()
  803. matches "int a[]" and "int c[]"
  804. </pre></td></tr>
  805. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td><td class="name" onclick="toggle('lValueReferenceType0')"><a name="lValueReferenceType0Anchor">lValueReferenceType</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1LValueReferenceType.html">LValueReferenceType</a>&gt;...</td></tr>
  806. <tr><td colspan="4" class="doc" id="lValueReferenceType0"><pre>Matches lvalue reference types.
  807. Given:
  808. int *a;
  809. int &amp;b = *a;
  810. int &amp;&amp;c = 1;
  811. auto &amp;d = b;
  812. auto &amp;&amp;e = c;
  813. auto &amp;&amp;f = 2;
  814. int g = 5;
  815. lValueReferenceType() matches the types of b, d, and e. e is
  816. matched since the type is deduced as int&amp; by reference collapsing rules.
  817. </pre></td></tr>
  818. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td><td class="name" onclick="toggle('memberPointerType0')"><a name="memberPointerType0Anchor">memberPointerType</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberPointerType.html">MemberPointerType</a>&gt;...</td></tr>
  819. <tr><td colspan="4" class="doc" id="memberPointerType0"><pre>Matches member pointer types.
  820. Given
  821. struct A { int i; }
  822. A::* ptr = A::i;
  823. memberPointerType()
  824. matches "A::* ptr"
  825. </pre></td></tr>
  826. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td><td class="name" onclick="toggle('parenType0')"><a name="parenType0Anchor">parenType</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ParenType.html">ParenType</a>&gt;...</td></tr>
  827. <tr><td colspan="4" class="doc" id="parenType0"><pre>Matches ParenType nodes.
  828. Given
  829. int (*ptr_to_array)[4];
  830. int *array_of_ptrs[4];
  831. varDecl(hasType(pointsTo(parenType()))) matches ptr_to_array but not
  832. array_of_ptrs.
  833. </pre></td></tr>
  834. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td><td class="name" onclick="toggle('pointerType0')"><a name="pointerType0Anchor">pointerType</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1PointerType.html">PointerType</a>&gt;...</td></tr>
  835. <tr><td colspan="4" class="doc" id="pointerType0"><pre>Matches pointer types.
  836. Given
  837. int *a;
  838. int &amp;b = *a;
  839. int c = 5;
  840. pointerType()
  841. matches "int *a"
  842. </pre></td></tr>
  843. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td><td class="name" onclick="toggle('rValueReferenceType0')"><a name="rValueReferenceType0Anchor">rValueReferenceType</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1RValueReferenceType.html">RValueReferenceType</a>&gt;...</td></tr>
  844. <tr><td colspan="4" class="doc" id="rValueReferenceType0"><pre>Matches rvalue reference types.
  845. Given:
  846. int *a;
  847. int &amp;b = *a;
  848. int &amp;&amp;c = 1;
  849. auto &amp;d = b;
  850. auto &amp;&amp;e = c;
  851. auto &amp;&amp;f = 2;
  852. int g = 5;
  853. rValueReferenceType() matches the types of c and f. e is not
  854. matched as it is deduced to int&amp; by reference collapsing rules.
  855. </pre></td></tr>
  856. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td><td class="name" onclick="toggle('recordType0')"><a name="recordType0Anchor">recordType</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1RecordType.html">RecordType</a>&gt;...</td></tr>
  857. <tr><td colspan="4" class="doc" id="recordType0"><pre>Matches record types (e.g. structs, classes).
  858. Given
  859. class C {};
  860. struct S {};
  861. C c;
  862. S s;
  863. recordType() matches the type of the variable declarations of both c
  864. and s.
  865. </pre></td></tr>
  866. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td><td class="name" onclick="toggle('referenceType0')"><a name="referenceType0Anchor">referenceType</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ReferenceType.html">ReferenceType</a>&gt;...</td></tr>
  867. <tr><td colspan="4" class="doc" id="referenceType0"><pre>Matches both lvalue and rvalue reference types.
  868. Given
  869. int *a;
  870. int &amp;b = *a;
  871. int &amp;&amp;c = 1;
  872. auto &amp;d = b;
  873. auto &amp;&amp;e = c;
  874. auto &amp;&amp;f = 2;
  875. int g = 5;
  876. referenceType() matches the types of b, c, d, e, and f.
  877. </pre></td></tr>
  878. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td><td class="name" onclick="toggle('templateSpecializationType0')"><a name="templateSpecializationType0Anchor">templateSpecializationType</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateSpecializationType.html">TemplateSpecializationType</a>&gt;...</td></tr>
  879. <tr><td colspan="4" class="doc" id="templateSpecializationType0"><pre>Matches template specialization types.
  880. Given
  881. template &lt;typename T&gt;
  882. class C { };
  883. template class C&lt;int&gt;; A
  884. C&lt;char&gt; var; B
  885. templateSpecializationType() matches the type of the explicit
  886. instantiation in A and the type of the variable declaration in B.
  887. </pre></td></tr>
  888. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td><td class="name" onclick="toggle('type0')"><a name="type0Anchor">type</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;...</td></tr>
  889. <tr><td colspan="4" class="doc" id="type0"><pre>Matches Types in the clang AST.
  890. </pre></td></tr>
  891. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td><td class="name" onclick="toggle('typedefType0')"><a name="typedefType0Anchor">typedefType</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TypedefType.html">TypedefType</a>&gt;...</td></tr>
  892. <tr><td colspan="4" class="doc" id="typedefType0"><pre>Matches typedef types.
  893. Given
  894. typedef int X;
  895. typedefType()
  896. matches "typedef int X"
  897. </pre></td></tr>
  898. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td><td class="name" onclick="toggle('unaryTransformType0')"><a name="unaryTransformType0Anchor">unaryTransformType</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1UnaryTransformType.html">UnaryTransformType</a>&gt;...</td></tr>
  899. <tr><td colspan="4" class="doc" id="unaryTransformType0"><pre>Matches types nodes representing unary type transformations.
  900. Given:
  901. typedef __underlying_type(T) type;
  902. unaryTransformType()
  903. matches "__underlying_type(T)"
  904. </pre></td></tr>
  905. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td><td class="name" onclick="toggle('variableArrayType0')"><a name="variableArrayType0Anchor">variableArrayType</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1VariableArrayType.html">VariableArrayType</a>&gt;...</td></tr>
  906. <tr><td colspan="4" class="doc" id="variableArrayType0"><pre>Matches C arrays with a specified size that is not an
  907. integer-constant-expression.
  908. Given
  909. void f() {
  910. int a[] = { 2, 3 }
  911. int b[42];
  912. int c[a[0]];
  913. variableArrayType()
  914. matches "int c[a[0]]"
  915. </pre></td></tr>
  916. <!--END_DECL_MATCHERS -->
  917. </table>
  918. <!-- ======================================================================= -->
  919. <h2 id="narrowing-matchers">Narrowing Matchers</h2>
  920. <!-- ======================================================================= -->
  921. <p>Narrowing matchers match certain attributes on the current node, thus
  922. narrowing down the set of nodes of the current type to match on.</p>
  923. <p>There are special logical narrowing matchers (allOf, anyOf, anything and unless)
  924. which allow users to create more powerful match expressions.</p>
  925. <table>
  926. <tr style="text-align:left"><th>Return type</th><th>Name</th><th>Parameters</th></tr>
  927. <!-- START_NARROWING_MATCHERS -->
  928. <tr><td>Matcher&lt;*&gt;</td><td class="name" onclick="toggle('allOf0')"><a name="allOf0Anchor">allOf</a></td><td>Matcher&lt;*&gt;, ..., Matcher&lt;*&gt;</td></tr>
  929. <tr><td colspan="4" class="doc" id="allOf0"><pre>Matches if all given matchers match.
  930. Usable as: Any Matcher
  931. </pre></td></tr>
  932. <tr><td>Matcher&lt;*&gt;</td><td class="name" onclick="toggle('anyOf0')"><a name="anyOf0Anchor">anyOf</a></td><td>Matcher&lt;*&gt;, ..., Matcher&lt;*&gt;</td></tr>
  933. <tr><td colspan="4" class="doc" id="anyOf0"><pre>Matches if any of the given matchers matches.
  934. Usable as: Any Matcher
  935. </pre></td></tr>
  936. <tr><td>Matcher&lt;*&gt;</td><td class="name" onclick="toggle('anything0')"><a name="anything0Anchor">anything</a></td><td></td></tr>
  937. <tr><td colspan="4" class="doc" id="anything0"><pre>Matches any node.
  938. Useful when another matcher requires a child matcher, but there's no
  939. additional constraint. This will often be used with an explicit conversion
  940. to an internal::Matcher&lt;&gt; type such as TypeMatcher.
  941. Example: DeclarationMatcher(anything()) matches all declarations, e.g.,
  942. "int* p" and "void f()" in
  943. int* p;
  944. void f();
  945. Usable as: Any Matcher
  946. </pre></td></tr>
  947. <tr><td>Matcher&lt;*&gt;</td><td class="name" onclick="toggle('unless0')"><a name="unless0Anchor">unless</a></td><td>Matcher&lt;*&gt;</td></tr>
  948. <tr><td colspan="4" class="doc" id="unless0"><pre>Matches if the provided matcher does not match.
  949. Example matches Y (matcher = recordDecl(unless(hasName("X"))))
  950. class X {};
  951. class Y {};
  952. Usable as: Any Matcher
  953. </pre></td></tr>
  954. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1BinaryOperator.html">BinaryOperator</a>&gt;</td><td class="name" onclick="toggle('hasOperatorName0')"><a name="hasOperatorName0Anchor">hasOperatorName</a></td><td>std::string Name</td></tr>
  955. <tr><td colspan="4" class="doc" id="hasOperatorName0"><pre>Matches the operator Name of operator expressions (binary or
  956. unary).
  957. Example matches a || b (matcher = binaryOperator(hasOperatorName("||")))
  958. !(a || b)
  959. </pre></td></tr>
  960. <tr><td>Matcher&lt;CXXBoolLiteral&gt;</td><td class="name" onclick="toggle('equals2')"><a name="equals2Anchor">equals</a></td><td>ValueT Value</td></tr>
  961. <tr><td colspan="4" class="doc" id="equals2"><pre>Matches literals that are equal to the given value.
  962. Example matches true (matcher = boolLiteral(equals(true)))
  963. true
  964. Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CharacterLiteral.html">CharacterLiteral</a>&gt;, Matcher&lt;CXXBoolLiteral&gt;,
  965. Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1FloatingLiteral.html">FloatingLiteral</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1IntegerLiteral.html">IntegerLiteral</a>&gt;
  966. </pre></td></tr>
  967. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXConstructExpr.html">CXXConstructExpr</a>&gt;</td><td class="name" onclick="toggle('argumentCountIs1')"><a name="argumentCountIs1Anchor">argumentCountIs</a></td><td>unsigned N</td></tr>
  968. <tr><td colspan="4" class="doc" id="argumentCountIs1"><pre>Checks that a call expression or a constructor call expression has
  969. a specific number of arguments (including absent default arguments).
  970. Example matches f(0, 0) (matcher = callExpr(argumentCountIs(2)))
  971. void f(int x, int y);
  972. f(0, 0);
  973. </pre></td></tr>
  974. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXConstructExpr.html">CXXConstructExpr</a>&gt;</td><td class="name" onclick="toggle('isListInitialization0')"><a name="isListInitialization0Anchor">isListInitialization</a></td><td></td></tr>
  975. <tr><td colspan="4" class="doc" id="isListInitialization0"><pre>Matches a constructor call expression which uses list initialization.
  976. </pre></td></tr>
  977. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXCtorInitializer.html">CXXCtorInitializer</a>&gt;</td><td class="name" onclick="toggle('isWritten0')"><a name="isWritten0Anchor">isWritten</a></td><td></td></tr>
  978. <tr><td colspan="4" class="doc" id="isWritten0"><pre>Matches a constructor initializer if it is explicitly written in
  979. code (as opposed to implicitly added by the compiler).
  980. Given
  981. struct Foo {
  982. Foo() { }
  983. Foo(int) : foo_("A") { }
  984. string foo_;
  985. };
  986. constructorDecl(hasAnyConstructorInitializer(isWritten()))
  987. will match Foo(int), but not Foo()
  988. </pre></td></tr>
  989. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXMethodDecl.html">CXXMethodDecl</a>&gt;</td><td class="name" onclick="toggle('hasOverloadedOperatorName0')"><a name="hasOverloadedOperatorName0Anchor">hasOverloadedOperatorName</a></td><td>StringRef Name</td></tr>
  990. <tr><td colspan="4" class="doc" id="hasOverloadedOperatorName0"><pre>Matches overloaded operator names.
  991. Matches overloaded operator names specified in strings without the
  992. "operator" prefix: e.g. "&lt;&lt;".
  993. Given:
  994. class A { int operator*(); };
  995. const A &amp;operator&lt;&lt;(const A &amp;a, const A &amp;b);
  996. A a;
  997. a &lt;&lt; a; &lt;-- This matches
  998. operatorCallExpr(hasOverloadedOperatorName("&lt;&lt;"))) matches the specified
  999. line and recordDecl(hasMethod(hasOverloadedOperatorName("*"))) matches
  1000. the declaration of A.
  1001. Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXOperatorCallExpr.html">CXXOperatorCallExpr</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXMethodDecl.html">CXXMethodDecl</a>&gt;
  1002. </pre></td></tr>
  1003. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXMethodDecl.html">CXXMethodDecl</a>&gt;</td><td class="name" onclick="toggle('isConst0')"><a name="isConst0Anchor">isConst</a></td><td></td></tr>
  1004. <tr><td colspan="4" class="doc" id="isConst0"><pre>Matches if the given method declaration is const.
  1005. Given
  1006. struct A {
  1007. void foo() const;
  1008. void bar();
  1009. };
  1010. methodDecl(isConst()) matches A::foo() but not A::bar()
  1011. </pre></td></tr>
  1012. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXMethodDecl.html">CXXMethodDecl</a>&gt;</td><td class="name" onclick="toggle('isOverride0')"><a name="isOverride0Anchor">isOverride</a></td><td></td></tr>
  1013. <tr><td colspan="4" class="doc" id="isOverride0"><pre>Matches if the given method declaration overrides another method.
  1014. Given
  1015. class A {
  1016. public:
  1017. virtual void x();
  1018. };
  1019. class B : public A {
  1020. public:
  1021. virtual void x();
  1022. };
  1023. matches B::x
  1024. </pre></td></tr>
  1025. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXMethodDecl.html">CXXMethodDecl</a>&gt;</td><td class="name" onclick="toggle('isPure0')"><a name="isPure0Anchor">isPure</a></td><td></td></tr>
  1026. <tr><td colspan="4" class="doc" id="isPure0"><pre>Matches if the given method declaration is pure.
  1027. Given
  1028. class A {
  1029. public:
  1030. virtual void x() = 0;
  1031. };
  1032. matches A::x
  1033. </pre></td></tr>
  1034. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXMethodDecl.html">CXXMethodDecl</a>&gt;</td><td class="name" onclick="toggle('isVirtual0')"><a name="isVirtual0Anchor">isVirtual</a></td><td></td></tr>
  1035. <tr><td colspan="4" class="doc" id="isVirtual0"><pre>Matches if the given method declaration is virtual.
  1036. Given
  1037. class A {
  1038. public:
  1039. virtual void x();
  1040. };
  1041. matches A::x
  1042. </pre></td></tr>
  1043. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXOperatorCallExpr.html">CXXOperatorCallExpr</a>&gt;</td><td class="name" onclick="toggle('hasOverloadedOperatorName1')"><a name="hasOverloadedOperatorName1Anchor">hasOverloadedOperatorName</a></td><td>StringRef Name</td></tr>
  1044. <tr><td colspan="4" class="doc" id="hasOverloadedOperatorName1"><pre>Matches overloaded operator names.
  1045. Matches overloaded operator names specified in strings without the
  1046. "operator" prefix: e.g. "&lt;&lt;".
  1047. Given:
  1048. class A { int operator*(); };
  1049. const A &amp;operator&lt;&lt;(const A &amp;a, const A &amp;b);
  1050. A a;
  1051. a &lt;&lt; a; &lt;-- This matches
  1052. operatorCallExpr(hasOverloadedOperatorName("&lt;&lt;"))) matches the specified
  1053. line and recordDecl(hasMethod(hasOverloadedOperatorName("*"))) matches
  1054. the declaration of A.
  1055. Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXOperatorCallExpr.html">CXXOperatorCallExpr</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXMethodDecl.html">CXXMethodDecl</a>&gt;
  1056. </pre></td></tr>
  1057. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXRecordDecl.html">CXXRecordDecl</a>&gt;</td><td class="name" onclick="toggle('isDerivedFrom1')"><a name="isDerivedFrom1Anchor">isDerivedFrom</a></td><td>StringRef BaseName</td></tr>
  1058. <tr><td colspan="4" class="doc" id="isDerivedFrom1"><pre>Overloaded method as shortcut for isDerivedFrom(hasName(...)).
  1059. </pre></td></tr>
  1060. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXRecordDecl.html">CXXRecordDecl</a>&gt;</td><td class="name" onclick="toggle('isExplicitTemplateSpecialization2')"><a name="isExplicitTemplateSpecialization2Anchor">isExplicitTemplateSpecialization</a></td><td></td></tr>
  1061. <tr><td colspan="4" class="doc" id="isExplicitTemplateSpecialization2"><pre>Matches explicit template specializations of function, class, or
  1062. static member variable template instantiations.
  1063. Given
  1064. template&lt;typename T&gt; void A(T t) { }
  1065. template&lt;&gt; void A(int N) { }
  1066. functionDecl(isExplicitTemplateSpecialization())
  1067. matches the specialization A&lt;int&gt;().
  1068. Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1FunctionDecl.html">FunctionDecl</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1VarDecl.html">VarDecl</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXRecordDecl.html">CXXRecordDecl</a>&gt;
  1069. </pre></td></tr>
  1070. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXRecordDecl.html">CXXRecordDecl</a>&gt;</td><td class="name" onclick="toggle('isSameOrDerivedFrom1')"><a name="isSameOrDerivedFrom1Anchor">isSameOrDerivedFrom</a></td><td>StringRef BaseName</td></tr>
  1071. <tr><td colspan="4" class="doc" id="isSameOrDerivedFrom1"><pre>Overloaded method as shortcut for
  1072. isSameOrDerivedFrom(hasName(...)).
  1073. </pre></td></tr>
  1074. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXRecordDecl.html">CXXRecordDecl</a>&gt;</td><td class="name" onclick="toggle('isTemplateInstantiation2')"><a name="isTemplateInstantiation2Anchor">isTemplateInstantiation</a></td><td></td></tr>
  1075. <tr><td colspan="4" class="doc" id="isTemplateInstantiation2"><pre>Matches template instantiations of function, class, or static
  1076. member variable template instantiations.
  1077. Given
  1078. template &lt;typename T&gt; class X {}; class A {}; X&lt;A&gt; x;
  1079. or
  1080. template &lt;typename T&gt; class X {}; class A {}; template class X&lt;A&gt;;
  1081. recordDecl(hasName("::X"), isTemplateInstantiation())
  1082. matches the template instantiation of X&lt;A&gt;.
  1083. But given
  1084. template &lt;typename T&gt; class X {}; class A {};
  1085. template &lt;&gt; class X&lt;A&gt; {}; X&lt;A&gt; x;
  1086. recordDecl(hasName("::X"), isTemplateInstantiation())
  1087. does not match, as X&lt;A&gt; is an explicit template specialization.
  1088. Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1FunctionDecl.html">FunctionDecl</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1VarDecl.html">VarDecl</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXRecordDecl.html">CXXRecordDecl</a>&gt;
  1089. </pre></td></tr>
  1090. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CallExpr.html">CallExpr</a>&gt;</td><td class="name" onclick="toggle('argumentCountIs0')"><a name="argumentCountIs0Anchor">argumentCountIs</a></td><td>unsigned N</td></tr>
  1091. <tr><td colspan="4" class="doc" id="argumentCountIs0"><pre>Checks that a call expression or a constructor call expression has
  1092. a specific number of arguments (including absent default arguments).
  1093. Example matches f(0, 0) (matcher = callExpr(argumentCountIs(2)))
  1094. void f(int x, int y);
  1095. f(0, 0);
  1096. </pre></td></tr>
  1097. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CharacterLiteral.html">CharacterLiteral</a>&gt;</td><td class="name" onclick="toggle('equals3')"><a name="equals3Anchor">equals</a></td><td>ValueT Value</td></tr>
  1098. <tr><td colspan="4" class="doc" id="equals3"><pre>Matches literals that are equal to the given value.
  1099. Example matches true (matcher = boolLiteral(equals(true)))
  1100. true
  1101. Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CharacterLiteral.html">CharacterLiteral</a>&gt;, Matcher&lt;CXXBoolLiteral&gt;,
  1102. Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1FloatingLiteral.html">FloatingLiteral</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1IntegerLiteral.html">IntegerLiteral</a>&gt;
  1103. </pre></td></tr>
  1104. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CompoundStmt.html">CompoundStmt</a>&gt;</td><td class="name" onclick="toggle('statementCountIs0')"><a name="statementCountIs0Anchor">statementCountIs</a></td><td>unsigned N</td></tr>
  1105. <tr><td colspan="4" class="doc" id="statementCountIs0"><pre>Checks that a compound statement contains a specific number of
  1106. child statements.
  1107. Example: Given
  1108. { for (;;) {} }
  1109. compoundStmt(statementCountIs(0)))
  1110. matches '{}'
  1111. but does not match the outer compound statement.
  1112. </pre></td></tr>
  1113. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ConstantArrayType.html">ConstantArrayType</a>&gt;</td><td class="name" onclick="toggle('hasSize0')"><a name="hasSize0Anchor">hasSize</a></td><td>unsigned N</td></tr>
  1114. <tr><td colspan="4" class="doc" id="hasSize0"><pre>Matches ConstantArrayType nodes that have the specified size.
  1115. Given
  1116. int a[42];
  1117. int b[2 * 21];
  1118. int c[41], d[43];
  1119. constantArrayType(hasSize(42))
  1120. matches "int a[42]" and "int b[2 * 21]"
  1121. </pre></td></tr>
  1122. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1DeclStmt.html">DeclStmt</a>&gt;</td><td class="name" onclick="toggle('declCountIs0')"><a name="declCountIs0Anchor">declCountIs</a></td><td>unsigned N</td></tr>
  1123. <tr><td colspan="4" class="doc" id="declCountIs0"><pre>Matches declaration statements that contain a specific number of
  1124. declarations.
  1125. Example: Given
  1126. int a, b;
  1127. int c;
  1128. int d = 2, e;
  1129. declCountIs(2)
  1130. matches 'int a, b;' and 'int d = 2, e;', but not 'int c;'.
  1131. </pre></td></tr>
  1132. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('equalsBoundNode1')"><a name="equalsBoundNode1Anchor">equalsBoundNode</a></td><td>std::string ID</td></tr>
  1133. <tr><td colspan="4" class="doc" id="equalsBoundNode1"><pre>Matches if a node equals a previously bound node.
  1134. Matches a node if it equals the node previously bound to ID.
  1135. Given
  1136. class X { int a; int b; };
  1137. recordDecl(
  1138. has(fieldDecl(hasName("a"), hasType(type().bind("t")))),
  1139. has(fieldDecl(hasName("b"), hasType(type(equalsBoundNode("t"))))))
  1140. matches the class X, as a and b have the same type.
  1141. Note that when multiple matches are involved via forEach* matchers,
  1142. equalsBoundNodes acts as a filter.
  1143. For example:
  1144. compoundStmt(
  1145. forEachDescendant(varDecl().bind("d")),
  1146. forEachDescendant(declRefExpr(to(decl(equalsBoundNode("d"))))))
  1147. will trigger a match for each combination of variable declaration
  1148. and reference to that variable declaration within a compound statement.
  1149. </pre></td></tr>
  1150. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('equalsNode0')"><a name="equalsNode0Anchor">equalsNode</a></td><td>Decl *Node</td></tr>
  1151. <tr><td colspan="4" class="doc" id="equalsNode0"><pre>Matches if a node equals another node.
  1152. Decl has pointer identity in the AST.
  1153. </pre></td></tr>
  1154. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('isImplicit0')"><a name="isImplicit0Anchor">isImplicit</a></td><td></td></tr>
  1155. <tr><td colspan="4" class="doc" id="isImplicit0"><pre>Matches a declaration that has been implicitly added
  1156. by the compiler (eg. implicit defaultcopy constructors).
  1157. </pre></td></tr>
  1158. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('isPrivate0')"><a name="isPrivate0Anchor">isPrivate</a></td><td></td></tr>
  1159. <tr><td colspan="4" class="doc" id="isPrivate0"><pre>Matches private C++ declarations.
  1160. Given
  1161. class C {
  1162. public: int a;
  1163. protected: int b;
  1164. private: int c;
  1165. };
  1166. fieldDecl(isPrivate())
  1167. matches 'int c;'
  1168. </pre></td></tr>
  1169. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('isProtected0')"><a name="isProtected0Anchor">isProtected</a></td><td></td></tr>
  1170. <tr><td colspan="4" class="doc" id="isProtected0"><pre>Matches protected C++ declarations.
  1171. Given
  1172. class C {
  1173. public: int a;
  1174. protected: int b;
  1175. private: int c;
  1176. };
  1177. fieldDecl(isProtected())
  1178. matches 'int b;'
  1179. </pre></td></tr>
  1180. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('isPublic0')"><a name="isPublic0Anchor">isPublic</a></td><td></td></tr>
  1181. <tr><td colspan="4" class="doc" id="isPublic0"><pre>Matches public C++ declarations.
  1182. Given
  1183. class C {
  1184. public: int a;
  1185. protected: int b;
  1186. private: int c;
  1187. };
  1188. fieldDecl(isPublic())
  1189. matches 'int a;'
  1190. </pre></td></tr>
  1191. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1FloatingLiteral.html">FloatingLiteral</a>&gt;</td><td class="name" onclick="toggle('equals1')"><a name="equals1Anchor">equals</a></td><td>ValueT Value</td></tr>
  1192. <tr><td colspan="4" class="doc" id="equals1"><pre>Matches literals that are equal to the given value.
  1193. Example matches true (matcher = boolLiteral(equals(true)))
  1194. true
  1195. Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CharacterLiteral.html">CharacterLiteral</a>&gt;, Matcher&lt;CXXBoolLiteral&gt;,
  1196. Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1FloatingLiteral.html">FloatingLiteral</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1IntegerLiteral.html">IntegerLiteral</a>&gt;
  1197. </pre></td></tr>
  1198. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1FunctionDecl.html">FunctionDecl</a>&gt;</td><td class="name" onclick="toggle('isDefinition2')"><a name="isDefinition2Anchor">isDefinition</a></td><td></td></tr>
  1199. <tr><td colspan="4" class="doc" id="isDefinition2"><pre>Matches if a declaration has a body attached.
  1200. Example matches A, va, fa
  1201. class A {};
  1202. class B; Doesn't match, as it has no body.
  1203. int va;
  1204. extern int vb; Doesn't match, as it doesn't define the variable.
  1205. void fa() {}
  1206. void fb(); Doesn't match, as it has no body.
  1207. Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TagDecl.html">TagDecl</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1VarDecl.html">VarDecl</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1FunctionDecl.html">FunctionDecl</a>&gt;
  1208. </pre></td></tr>
  1209. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1FunctionDecl.html">FunctionDecl</a>&gt;</td><td class="name" onclick="toggle('isExplicitTemplateSpecialization0')"><a name="isExplicitTemplateSpecialization0Anchor">isExplicitTemplateSpecialization</a></td><td></td></tr>
  1210. <tr><td colspan="4" class="doc" id="isExplicitTemplateSpecialization0"><pre>Matches explicit template specializations of function, class, or
  1211. static member variable template instantiations.
  1212. Given
  1213. template&lt;typename T&gt; void A(T t) { }
  1214. template&lt;&gt; void A(int N) { }
  1215. functionDecl(isExplicitTemplateSpecialization())
  1216. matches the specialization A&lt;int&gt;().
  1217. Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1FunctionDecl.html">FunctionDecl</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1VarDecl.html">VarDecl</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXRecordDecl.html">CXXRecordDecl</a>&gt;
  1218. </pre></td></tr>
  1219. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1FunctionDecl.html">FunctionDecl</a>&gt;</td><td class="name" onclick="toggle('isExternC0')"><a name="isExternC0Anchor">isExternC</a></td><td></td></tr>
  1220. <tr><td colspan="4" class="doc" id="isExternC0"><pre>Matches extern "C" function declarations.
  1221. Given:
  1222. extern "C" void f() {}
  1223. extern "C" { void g() {} }
  1224. void h() {}
  1225. functionDecl(isExternC())
  1226. matches the declaration of f and g, but not the declaration h
  1227. </pre></td></tr>
  1228. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1FunctionDecl.html">FunctionDecl</a>&gt;</td><td class="name" onclick="toggle('isTemplateInstantiation0')"><a name="isTemplateInstantiation0Anchor">isTemplateInstantiation</a></td><td></td></tr>
  1229. <tr><td colspan="4" class="doc" id="isTemplateInstantiation0"><pre>Matches template instantiations of function, class, or static
  1230. member variable template instantiations.
  1231. Given
  1232. template &lt;typename T&gt; class X {}; class A {}; X&lt;A&gt; x;
  1233. or
  1234. template &lt;typename T&gt; class X {}; class A {}; template class X&lt;A&gt;;
  1235. recordDecl(hasName("::X"), isTemplateInstantiation())
  1236. matches the template instantiation of X&lt;A&gt;.
  1237. But given
  1238. template &lt;typename T&gt; class X {}; class A {};
  1239. template &lt;&gt; class X&lt;A&gt; {}; X&lt;A&gt; x;
  1240. recordDecl(hasName("::X"), isTemplateInstantiation())
  1241. does not match, as X&lt;A&gt; is an explicit template specialization.
  1242. Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1FunctionDecl.html">FunctionDecl</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1VarDecl.html">VarDecl</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXRecordDecl.html">CXXRecordDecl</a>&gt;
  1243. </pre></td></tr>
  1244. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1FunctionDecl.html">FunctionDecl</a>&gt;</td><td class="name" onclick="toggle('parameterCountIs0')"><a name="parameterCountIs0Anchor">parameterCountIs</a></td><td>unsigned N</td></tr>
  1245. <tr><td colspan="4" class="doc" id="parameterCountIs0"><pre>Matches FunctionDecls that have a specific parameter count.
  1246. Given
  1247. void f(int i) {}
  1248. void g(int i, int j) {}
  1249. functionDecl(parameterCountIs(2))
  1250. matches g(int i, int j) {}
  1251. </pre></td></tr>
  1252. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1IntegerLiteral.html">IntegerLiteral</a>&gt;</td><td class="name" onclick="toggle('equals0')"><a name="equals0Anchor">equals</a></td><td>ValueT Value</td></tr>
  1253. <tr><td colspan="4" class="doc" id="equals0"><pre>Matches literals that are equal to the given value.
  1254. Example matches true (matcher = boolLiteral(equals(true)))
  1255. true
  1256. Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CharacterLiteral.html">CharacterLiteral</a>&gt;, Matcher&lt;CXXBoolLiteral&gt;,
  1257. Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1FloatingLiteral.html">FloatingLiteral</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1IntegerLiteral.html">IntegerLiteral</a>&gt;
  1258. </pre></td></tr>
  1259. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberExpr.html">MemberExpr</a>&gt;</td><td class="name" onclick="toggle('isArrow0')"><a name="isArrow0Anchor">isArrow</a></td><td></td></tr>
  1260. <tr><td colspan="4" class="doc" id="isArrow0"><pre>Matches member expressions that are called with '-&gt;' as opposed
  1261. to '.'.
  1262. Member calls on the implicit this pointer match as called with '-&gt;'.
  1263. Given
  1264. class Y {
  1265. void x() { this-&gt;x(); x(); Y y; y.x(); a; this-&gt;b; Y::b; }
  1266. int a;
  1267. static int b;
  1268. };
  1269. memberExpr(isArrow())
  1270. matches this-&gt;x, x, y.x, a, this-&gt;b
  1271. </pre></td></tr>
  1272. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1NamedDecl.html">NamedDecl</a>&gt;</td><td class="name" onclick="toggle('hasName0')"><a name="hasName0Anchor">hasName</a></td><td>std::string Name</td></tr>
  1273. <tr><td colspan="4" class="doc" id="hasName0"><pre>Matches NamedDecl nodes that have the specified name.
  1274. Supports specifying enclosing namespaces or classes by prefixing the name
  1275. with '&lt;enclosing&gt;::'.
  1276. Does not match typedefs of an underlying type with the given name.
  1277. Example matches X (Name == "X")
  1278. class X;
  1279. Example matches X (Name is one of "::a::b::X", "a::b::X", "b::X", "X")
  1280. namespace a { namespace b { class X; } }
  1281. </pre></td></tr>
  1282. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1NamedDecl.html">NamedDecl</a>&gt;</td><td class="name" onclick="toggle('matchesName0')"><a name="matchesName0Anchor">matchesName</a></td><td>std::string RegExp</td></tr>
  1283. <tr><td colspan="4" class="doc" id="matchesName0"><pre>Matches NamedDecl nodes whose fully qualified names contain
  1284. a substring matched by the given RegExp.
  1285. Supports specifying enclosing namespaces or classes by
  1286. prefixing the name with '&lt;enclosing&gt;::'. Does not match typedefs
  1287. of an underlying type with the given name.
  1288. Example matches X (regexp == "::X")
  1289. class X;
  1290. Example matches X (regexp is one of "::X", "^foo::.*X", among others)
  1291. namespace foo { namespace bar { class X; } }
  1292. </pre></td></tr>
  1293. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt;</td><td class="name" onclick="toggle('asString0')"><a name="asString0Anchor">asString</a></td><td>std::string Name</td></tr>
  1294. <tr><td colspan="4" class="doc" id="asString0"><pre>Matches if the matched type is represented by the given string.
  1295. Given
  1296. class Y { public: void x(); };
  1297. void z() { Y* y; y-&gt;x(); }
  1298. callExpr(on(hasType(asString("class Y *"))))
  1299. matches y-&gt;x()
  1300. </pre></td></tr>
  1301. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt;</td><td class="name" onclick="toggle('equalsBoundNode3')"><a name="equalsBoundNode3Anchor">equalsBoundNode</a></td><td>std::string ID</td></tr>
  1302. <tr><td colspan="4" class="doc" id="equalsBoundNode3"><pre>Matches if a node equals a previously bound node.
  1303. Matches a node if it equals the node previously bound to ID.
  1304. Given
  1305. class X { int a; int b; };
  1306. recordDecl(
  1307. has(fieldDecl(hasName("a"), hasType(type().bind("t")))),
  1308. has(fieldDecl(hasName("b"), hasType(type(equalsBoundNode("t"))))))
  1309. matches the class X, as a and b have the same type.
  1310. Note that when multiple matches are involved via forEach* matchers,
  1311. equalsBoundNodes acts as a filter.
  1312. For example:
  1313. compoundStmt(
  1314. forEachDescendant(varDecl().bind("d")),
  1315. forEachDescendant(declRefExpr(to(decl(equalsBoundNode("d"))))))
  1316. will trigger a match for each combination of variable declaration
  1317. and reference to that variable declaration within a compound statement.
  1318. </pre></td></tr>
  1319. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt;</td><td class="name" onclick="toggle('hasLocalQualifiers0')"><a name="hasLocalQualifiers0Anchor">hasLocalQualifiers</a></td><td></td></tr>
  1320. <tr><td colspan="4" class="doc" id="hasLocalQualifiers0"><pre>Matches QualType nodes that have local CV-qualifiers attached to
  1321. the node, not hidden within a typedef.
  1322. Given
  1323. typedef const int const_int;
  1324. const_int i;
  1325. int *const j;
  1326. int *volatile k;
  1327. int m;
  1328. varDecl(hasType(hasLocalQualifiers())) matches only j and k.
  1329. i is const-qualified but the qualifier is not local.
  1330. </pre></td></tr>
  1331. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt;</td><td class="name" onclick="toggle('isConstQualified0')"><a name="isConstQualified0Anchor">isConstQualified</a></td><td></td></tr>
  1332. <tr><td colspan="4" class="doc" id="isConstQualified0"><pre>Matches QualType nodes that are const-qualified, i.e., that
  1333. include "top-level" const.
  1334. Given
  1335. void a(int);
  1336. void b(int const);
  1337. void c(const int);
  1338. void d(const int*);
  1339. void e(int const) {};
  1340. functionDecl(hasAnyParameter(hasType(isConstQualified())))
  1341. matches "void b(int const)", "void c(const int)" and
  1342. "void e(int const) {}". It does not match d as there
  1343. is no top-level const on the parameter type "const int *".
  1344. </pre></td></tr>
  1345. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt;</td><td class="name" onclick="toggle('isInteger0')"><a name="isInteger0Anchor">isInteger</a></td><td></td></tr>
  1346. <tr><td colspan="4" class="doc" id="isInteger0"><pre>Matches QualType nodes that are of integer type.
  1347. Given
  1348. void a(int);
  1349. void b(long);
  1350. void c(double);
  1351. functionDecl(hasAnyParameter(hasType(isInteger())))
  1352. matches "a(int)", "b(long)", but not "c(double)".
  1353. </pre></td></tr>
  1354. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('equalsBoundNode0')"><a name="equalsBoundNode0Anchor">equalsBoundNode</a></td><td>std::string ID</td></tr>
  1355. <tr><td colspan="4" class="doc" id="equalsBoundNode0"><pre>Matches if a node equals a previously bound node.
  1356. Matches a node if it equals the node previously bound to ID.
  1357. Given
  1358. class X { int a; int b; };
  1359. recordDecl(
  1360. has(fieldDecl(hasName("a"), hasType(type().bind("t")))),
  1361. has(fieldDecl(hasName("b"), hasType(type(equalsBoundNode("t"))))))
  1362. matches the class X, as a and b have the same type.
  1363. Note that when multiple matches are involved via forEach* matchers,
  1364. equalsBoundNodes acts as a filter.
  1365. For example:
  1366. compoundStmt(
  1367. forEachDescendant(varDecl().bind("d")),
  1368. forEachDescendant(declRefExpr(to(decl(equalsBoundNode("d"))))))
  1369. will trigger a match for each combination of variable declaration
  1370. and reference to that variable declaration within a compound statement.
  1371. </pre></td></tr>
  1372. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('equalsNode1')"><a name="equalsNode1Anchor">equalsNode</a></td><td>Stmt *Node</td></tr>
  1373. <tr><td colspan="4" class="doc" id="equalsNode1"><pre>Matches if a node equals another node.
  1374. Stmt has pointer identity in the AST.
  1375. </pre></td></tr>
  1376. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TagDecl.html">TagDecl</a>&gt;</td><td class="name" onclick="toggle('isDefinition0')"><a name="isDefinition0Anchor">isDefinition</a></td><td></td></tr>
  1377. <tr><td colspan="4" class="doc" id="isDefinition0"><pre>Matches if a declaration has a body attached.
  1378. Example matches A, va, fa
  1379. class A {};
  1380. class B; Doesn't match, as it has no body.
  1381. int va;
  1382. extern int vb; Doesn't match, as it doesn't define the variable.
  1383. void fa() {}
  1384. void fb(); Doesn't match, as it has no body.
  1385. Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TagDecl.html">TagDecl</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1VarDecl.html">VarDecl</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1FunctionDecl.html">FunctionDecl</a>&gt;
  1386. </pre></td></tr>
  1387. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td><td class="name" onclick="toggle('equalsBoundNode2')"><a name="equalsBoundNode2Anchor">equalsBoundNode</a></td><td>std::string ID</td></tr>
  1388. <tr><td colspan="4" class="doc" id="equalsBoundNode2"><pre>Matches if a node equals a previously bound node.
  1389. Matches a node if it equals the node previously bound to ID.
  1390. Given
  1391. class X { int a; int b; };
  1392. recordDecl(
  1393. has(fieldDecl(hasName("a"), hasType(type().bind("t")))),
  1394. has(fieldDecl(hasName("b"), hasType(type(equalsBoundNode("t"))))))
  1395. matches the class X, as a and b have the same type.
  1396. Note that when multiple matches are involved via forEach* matchers,
  1397. equalsBoundNodes acts as a filter.
  1398. For example:
  1399. compoundStmt(
  1400. forEachDescendant(varDecl().bind("d")),
  1401. forEachDescendant(declRefExpr(to(decl(equalsBoundNode("d"))))))
  1402. will trigger a match for each combination of variable declaration
  1403. and reference to that variable declaration within a compound statement.
  1404. </pre></td></tr>
  1405. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1UnaryExprOrTypeTraitExpr.html">UnaryExprOrTypeTraitExpr</a>&gt;</td><td class="name" onclick="toggle('ofKind0')"><a name="ofKind0Anchor">ofKind</a></td><td>UnaryExprOrTypeTrait Kind</td></tr>
  1406. <tr><td colspan="4" class="doc" id="ofKind0"><pre>Matches unary expressions of a certain kind.
  1407. Given
  1408. int x;
  1409. int s = sizeof(x) + alignof(x)
  1410. unaryExprOrTypeTraitExpr(ofKind(UETT_SizeOf))
  1411. matches sizeof(x)
  1412. </pre></td></tr>
  1413. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1UnaryOperator.html">UnaryOperator</a>&gt;</td><td class="name" onclick="toggle('hasOperatorName1')"><a name="hasOperatorName1Anchor">hasOperatorName</a></td><td>std::string Name</td></tr>
  1414. <tr><td colspan="4" class="doc" id="hasOperatorName1"><pre>Matches the operator Name of operator expressions (binary or
  1415. unary).
  1416. Example matches a || b (matcher = binaryOperator(hasOperatorName("||")))
  1417. !(a || b)
  1418. </pre></td></tr>
  1419. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1VarDecl.html">VarDecl</a>&gt;</td><td class="name" onclick="toggle('hasGlobalStorage0')"><a name="hasGlobalStorage0Anchor">hasGlobalStorage</a></td><td></td></tr>
  1420. <tr><td colspan="4" class="doc" id="hasGlobalStorage0"><pre>Matches a variable declaration that does not have local storage.
  1421. Example matches y and z (matcher = varDecl(hasGlobalStorage())
  1422. void f() {
  1423. int x;
  1424. static int y;
  1425. }
  1426. int z;
  1427. </pre></td></tr>
  1428. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1VarDecl.html">VarDecl</a>&gt;</td><td class="name" onclick="toggle('hasLocalStorage0')"><a name="hasLocalStorage0Anchor">hasLocalStorage</a></td><td></td></tr>
  1429. <tr><td colspan="4" class="doc" id="hasLocalStorage0"><pre>Matches a variable declaration that has function scope and is a
  1430. non-static local variable.
  1431. Example matches x (matcher = varDecl(hasLocalStorage())
  1432. void f() {
  1433. int x;
  1434. static int y;
  1435. }
  1436. int z;
  1437. </pre></td></tr>
  1438. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1VarDecl.html">VarDecl</a>&gt;</td><td class="name" onclick="toggle('isDefinition1')"><a name="isDefinition1Anchor">isDefinition</a></td><td></td></tr>
  1439. <tr><td colspan="4" class="doc" id="isDefinition1"><pre>Matches if a declaration has a body attached.
  1440. Example matches A, va, fa
  1441. class A {};
  1442. class B; Doesn't match, as it has no body.
  1443. int va;
  1444. extern int vb; Doesn't match, as it doesn't define the variable.
  1445. void fa() {}
  1446. void fb(); Doesn't match, as it has no body.
  1447. Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TagDecl.html">TagDecl</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1VarDecl.html">VarDecl</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1FunctionDecl.html">FunctionDecl</a>&gt;
  1448. </pre></td></tr>
  1449. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1VarDecl.html">VarDecl</a>&gt;</td><td class="name" onclick="toggle('isExplicitTemplateSpecialization1')"><a name="isExplicitTemplateSpecialization1Anchor">isExplicitTemplateSpecialization</a></td><td></td></tr>
  1450. <tr><td colspan="4" class="doc" id="isExplicitTemplateSpecialization1"><pre>Matches explicit template specializations of function, class, or
  1451. static member variable template instantiations.
  1452. Given
  1453. template&lt;typename T&gt; void A(T t) { }
  1454. template&lt;&gt; void A(int N) { }
  1455. functionDecl(isExplicitTemplateSpecialization())
  1456. matches the specialization A&lt;int&gt;().
  1457. Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1FunctionDecl.html">FunctionDecl</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1VarDecl.html">VarDecl</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXRecordDecl.html">CXXRecordDecl</a>&gt;
  1458. </pre></td></tr>
  1459. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1VarDecl.html">VarDecl</a>&gt;</td><td class="name" onclick="toggle('isTemplateInstantiation1')"><a name="isTemplateInstantiation1Anchor">isTemplateInstantiation</a></td><td></td></tr>
  1460. <tr><td colspan="4" class="doc" id="isTemplateInstantiation1"><pre>Matches template instantiations of function, class, or static
  1461. member variable template instantiations.
  1462. Given
  1463. template &lt;typename T&gt; class X {}; class A {}; X&lt;A&gt; x;
  1464. or
  1465. template &lt;typename T&gt; class X {}; class A {}; template class X&lt;A&gt;;
  1466. recordDecl(hasName("::X"), isTemplateInstantiation())
  1467. matches the template instantiation of X&lt;A&gt;.
  1468. But given
  1469. template &lt;typename T&gt; class X {}; class A {};
  1470. template &lt;&gt; class X&lt;A&gt; {}; X&lt;A&gt; x;
  1471. recordDecl(hasName("::X"), isTemplateInstantiation())
  1472. does not match, as X&lt;A&gt; is an explicit template specialization.
  1473. Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1FunctionDecl.html">FunctionDecl</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1VarDecl.html">VarDecl</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXRecordDecl.html">CXXRecordDecl</a>&gt;
  1474. </pre></td></tr>
  1475. <!--END_NARROWING_MATCHERS -->
  1476. </table>
  1477. <!-- ======================================================================= -->
  1478. <h2 id="traversal-matchers">AST Traversal Matchers</h2>
  1479. <!-- ======================================================================= -->
  1480. <p>Traversal matchers specify the relationship to other nodes that are
  1481. reachable from the current node.</p>
  1482. <p>Note that there are special traversal matchers (has, hasDescendant, forEach and
  1483. forEachDescendant) which work on all nodes and allow users to write more generic
  1484. match expressions.</p>
  1485. <table>
  1486. <tr style="text-align:left"><th>Return type</th><th>Name</th><th>Parameters</th></tr>
  1487. <!-- START_TRAVERSAL_MATCHERS -->
  1488. <tr><td>Matcher&lt;*&gt;</td><td class="name" onclick="toggle('eachOf0')"><a name="eachOf0Anchor">eachOf</a></td><td>Matcher&lt;*&gt;, ..., Matcher&lt;*&gt;</td></tr>
  1489. <tr><td colspan="4" class="doc" id="eachOf0"><pre>Matches if any of the given matchers matches.
  1490. Unlike anyOf, eachOf will generate a match result for each
  1491. matching submatcher.
  1492. For example, in:
  1493. class A { int a; int b; };
  1494. The matcher:
  1495. recordDecl(eachOf(has(fieldDecl(hasName("a")).bind("v")),
  1496. has(fieldDecl(hasName("b")).bind("v"))))
  1497. will generate two results binding "v", the first of which binds
  1498. the field declaration of a, the second the field declaration of
  1499. b.
  1500. Usable as: Any Matcher
  1501. </pre></td></tr>
  1502. <tr><td>Matcher&lt;*&gt;</td><td class="name" onclick="toggle('forEachDescendant0')"><a name="forEachDescendant0Anchor">forEachDescendant</a></td><td>Matcher&lt;*&gt;</td></tr>
  1503. <tr><td colspan="4" class="doc" id="forEachDescendant0"><pre>Matches AST nodes that have descendant AST nodes that match the
  1504. provided matcher.
  1505. Example matches X, A, B, C
  1506. (matcher = recordDecl(forEachDescendant(recordDecl(hasName("X")))))
  1507. class X {}; Matches X, because X::X is a class of name X inside X.
  1508. class A { class X {}; };
  1509. class B { class C { class X {}; }; };
  1510. DescendantT must be an AST base type.
  1511. As opposed to 'hasDescendant', 'forEachDescendant' will cause a match for
  1512. each result that matches instead of only on the first one.
  1513. Note: Recursively combined ForEachDescendant can cause many matches:
  1514. recordDecl(forEachDescendant(recordDecl(forEachDescendant(recordDecl()))))
  1515. will match 10 times (plus injected class name matches) on:
  1516. class A { class B { class C { class D { class E {}; }; }; }; };
  1517. Usable as: Any Matcher
  1518. </pre></td></tr>
  1519. <tr><td>Matcher&lt;*&gt;</td><td class="name" onclick="toggle('forEach0')"><a name="forEach0Anchor">forEach</a></td><td>Matcher&lt;*&gt;</td></tr>
  1520. <tr><td colspan="4" class="doc" id="forEach0"><pre>Matches AST nodes that have child AST nodes that match the
  1521. provided matcher.
  1522. Example matches X, Y (matcher = recordDecl(forEach(recordDecl(hasName("X")))
  1523. class X {}; Matches X, because X::X is a class of name X inside X.
  1524. class Y { class X {}; };
  1525. class Z { class Y { class X {}; }; }; Does not match Z.
  1526. ChildT must be an AST base type.
  1527. As opposed to 'has', 'forEach' will cause a match for each result that
  1528. matches instead of only on the first one.
  1529. Usable as: Any Matcher
  1530. </pre></td></tr>
  1531. <tr><td>Matcher&lt;*&gt;</td><td class="name" onclick="toggle('hasAncestor0')"><a name="hasAncestor0Anchor">hasAncestor</a></td><td>Matcher&lt;*&gt;</td></tr>
  1532. <tr><td colspan="4" class="doc" id="hasAncestor0"><pre>Matches AST nodes that have an ancestor that matches the provided
  1533. matcher.
  1534. Given
  1535. void f() { if (true) { int x = 42; } }
  1536. void g() { for (;;) { int x = 43; } }
  1537. expr(integerLiteral(hasAncestor(ifStmt()))) matches 42, but not 43.
  1538. Usable as: Any Matcher
  1539. </pre></td></tr>
  1540. <tr><td>Matcher&lt;*&gt;</td><td class="name" onclick="toggle('hasDescendant0')"><a name="hasDescendant0Anchor">hasDescendant</a></td><td>Matcher&lt;*&gt;</td></tr>
  1541. <tr><td colspan="4" class="doc" id="hasDescendant0"><pre>Matches AST nodes that have descendant AST nodes that match the
  1542. provided matcher.
  1543. Example matches X, Y, Z
  1544. (matcher = recordDecl(hasDescendant(recordDecl(hasName("X")))))
  1545. class X {}; Matches X, because X::X is a class of name X inside X.
  1546. class Y { class X {}; };
  1547. class Z { class Y { class X {}; }; };
  1548. DescendantT must be an AST base type.
  1549. Usable as: Any Matcher
  1550. </pre></td></tr>
  1551. <tr><td>Matcher&lt;*&gt;</td><td class="name" onclick="toggle('has0')"><a name="has0Anchor">has</a></td><td>Matcher&lt;*&gt;</td></tr>
  1552. <tr><td colspan="4" class="doc" id="has0"><pre>Matches AST nodes that have child AST nodes that match the
  1553. provided matcher.
  1554. Example matches X, Y (matcher = recordDecl(has(recordDecl(hasName("X")))
  1555. class X {}; Matches X, because X::X is a class of name X inside X.
  1556. class Y { class X {}; };
  1557. class Z { class Y { class X {}; }; }; Does not match Z.
  1558. ChildT must be an AST base type.
  1559. Usable as: Any Matcher
  1560. </pre></td></tr>
  1561. <tr><td>Matcher&lt;*&gt;</td><td class="name" onclick="toggle('hasParent0')"><a name="hasParent0Anchor">hasParent</a></td><td>Matcher&lt;*&gt;</td></tr>
  1562. <tr><td colspan="4" class="doc" id="hasParent0"><pre>Matches AST nodes that have a parent that matches the provided
  1563. matcher.
  1564. Given
  1565. void f() { for (;;) { int x = 42; if (true) { int x = 43; } } }
  1566. compoundStmt(hasParent(ifStmt())) matches "{ int x = 43; }".
  1567. Usable as: Any Matcher
  1568. </pre></td></tr>
  1569. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ArraySubscriptExpr.html">ArraySubscriptExpr</a>&gt;</td><td class="name" onclick="toggle('hasBase0')"><a name="hasBase0Anchor">hasBase</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt; InnerMatcher</td></tr>
  1570. <tr><td colspan="4" class="doc" id="hasBase0"><pre>Matches the base expression of an array subscript expression.
  1571. Given
  1572. int i[5];
  1573. void f() { i[1] = 42; }
  1574. arraySubscriptExpression(hasBase(implicitCastExpr(
  1575. hasSourceExpression(declRefExpr()))))
  1576. matches i[1] with the declRefExpr() matching i
  1577. </pre></td></tr>
  1578. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ArraySubscriptExpr.html">ArraySubscriptExpr</a>&gt;</td><td class="name" onclick="toggle('hasIndex0')"><a name="hasIndex0Anchor">hasIndex</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt; InnerMatcher</td></tr>
  1579. <tr><td colspan="4" class="doc" id="hasIndex0"><pre>Matches the index expression of an array subscript expression.
  1580. Given
  1581. int i[5];
  1582. void f() { i[1] = 42; }
  1583. arraySubscriptExpression(hasIndex(integerLiteral()))
  1584. matches i[1] with the integerLiteral() matching 1
  1585. </pre></td></tr>
  1586. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ArrayTypeLoc.html">ArrayTypeLoc</a>&gt;</td><td class="name" onclick="toggle('hasElementTypeLoc0')"><a name="hasElementTypeLoc0Anchor">hasElementTypeLoc</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TypeLoc.html">TypeLoc</a>&gt;</td></tr>
  1587. <tr><td colspan="4" class="doc" id="hasElementTypeLoc0"><pre>Matches arrays and C99 complex types that have a specific element
  1588. type.
  1589. Given
  1590. struct A {};
  1591. A a[7];
  1592. int b[7];
  1593. arrayType(hasElementType(builtinType()))
  1594. matches "int b[7]"
  1595. Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ArrayType.html">ArrayType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ComplexType.html">ComplexType</a>&gt;
  1596. </pre></td></tr>
  1597. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ArrayType.html">ArrayType</a>&gt;</td><td class="name" onclick="toggle('hasElementType0')"><a name="hasElementType0Anchor">hasElementType</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td></tr>
  1598. <tr><td colspan="4" class="doc" id="hasElementType0"><pre>Matches arrays and C99 complex types that have a specific element
  1599. type.
  1600. Given
  1601. struct A {};
  1602. A a[7];
  1603. int b[7];
  1604. arrayType(hasElementType(builtinType()))
  1605. matches "int b[7]"
  1606. Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ArrayType.html">ArrayType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ComplexType.html">ComplexType</a>&gt;
  1607. </pre></td></tr>
  1608. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1AtomicTypeLoc.html">AtomicTypeLoc</a>&gt;</td><td class="name" onclick="toggle('hasValueTypeLoc0')"><a name="hasValueTypeLoc0Anchor">hasValueTypeLoc</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TypeLoc.html">TypeLoc</a>&gt;</td></tr>
  1609. <tr><td colspan="4" class="doc" id="hasValueTypeLoc0"><pre>Matches atomic types with a specific value type.
  1610. Given
  1611. _Atomic(int) i;
  1612. _Atomic(float) f;
  1613. atomicType(hasValueType(isInteger()))
  1614. matches "_Atomic(int) i"
  1615. Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1AtomicType.html">AtomicType</a>&gt;
  1616. </pre></td></tr>
  1617. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1AtomicType.html">AtomicType</a>&gt;</td><td class="name" onclick="toggle('hasValueType0')"><a name="hasValueType0Anchor">hasValueType</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td></tr>
  1618. <tr><td colspan="4" class="doc" id="hasValueType0"><pre>Matches atomic types with a specific value type.
  1619. Given
  1620. _Atomic(int) i;
  1621. _Atomic(float) f;
  1622. atomicType(hasValueType(isInteger()))
  1623. matches "_Atomic(int) i"
  1624. Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1AtomicType.html">AtomicType</a>&gt;
  1625. </pre></td></tr>
  1626. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1AutoType.html">AutoType</a>&gt;</td><td class="name" onclick="toggle('hasDeducedType0')"><a name="hasDeducedType0Anchor">hasDeducedType</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td></tr>
  1627. <tr><td colspan="4" class="doc" id="hasDeducedType0"><pre>Matches AutoType nodes where the deduced type is a specific type.
  1628. Note: There is no TypeLoc for the deduced type and thus no
  1629. getDeducedLoc() matcher.
  1630. Given
  1631. auto a = 1;
  1632. auto b = 2.0;
  1633. autoType(hasDeducedType(isInteger()))
  1634. matches "auto a"
  1635. Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1AutoType.html">AutoType</a>&gt;
  1636. </pre></td></tr>
  1637. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1BinaryOperator.html">BinaryOperator</a>&gt;</td><td class="name" onclick="toggle('hasEitherOperand0')"><a name="hasEitherOperand0Anchor">hasEitherOperand</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt; InnerMatcher</td></tr>
  1638. <tr><td colspan="4" class="doc" id="hasEitherOperand0"><pre>Matches if either the left hand side or the right hand side of a
  1639. binary operator matches.
  1640. </pre></td></tr>
  1641. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1BinaryOperator.html">BinaryOperator</a>&gt;</td><td class="name" onclick="toggle('hasLHS0')"><a name="hasLHS0Anchor">hasLHS</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt; InnerMatcher</td></tr>
  1642. <tr><td colspan="4" class="doc" id="hasLHS0"><pre>Matches the left hand side of binary operator expressions.
  1643. Example matches a (matcher = binaryOperator(hasLHS()))
  1644. a || b
  1645. </pre></td></tr>
  1646. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1BinaryOperator.html">BinaryOperator</a>&gt;</td><td class="name" onclick="toggle('hasRHS0')"><a name="hasRHS0Anchor">hasRHS</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt; InnerMatcher</td></tr>
  1647. <tr><td colspan="4" class="doc" id="hasRHS0"><pre>Matches the right hand side of binary operator expressions.
  1648. Example matches b (matcher = binaryOperator(hasRHS()))
  1649. a || b
  1650. </pre></td></tr>
  1651. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1BlockPointerTypeLoc.html">BlockPointerTypeLoc</a>&gt;</td><td class="name" onclick="toggle('pointeeLoc0')"><a name="pointeeLoc0Anchor">pointeeLoc</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TypeLoc.html">TypeLoc</a>&gt;</td></tr>
  1652. <tr><td colspan="4" class="doc" id="pointeeLoc0"><pre>Narrows PointerType (and similar) matchers to those where the
  1653. pointee matches a given matcher.
  1654. Given
  1655. int *a;
  1656. int const *b;
  1657. float const *f;
  1658. pointerType(pointee(isConstQualified(), isInteger()))
  1659. matches "int const *b"
  1660. Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1BlockPointerType.html">BlockPointerType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberPointerType.html">MemberPointerType</a>&gt;,
  1661. Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1PointerType.html">PointerType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ReferenceType.html">ReferenceType</a>&gt;
  1662. </pre></td></tr>
  1663. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1BlockPointerType.html">BlockPointerType</a>&gt;</td><td class="name" onclick="toggle('pointee0')"><a name="pointee0Anchor">pointee</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td></tr>
  1664. <tr><td colspan="4" class="doc" id="pointee0"><pre>Narrows PointerType (and similar) matchers to those where the
  1665. pointee matches a given matcher.
  1666. Given
  1667. int *a;
  1668. int const *b;
  1669. float const *f;
  1670. pointerType(pointee(isConstQualified(), isInteger()))
  1671. matches "int const *b"
  1672. Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1BlockPointerType.html">BlockPointerType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberPointerType.html">MemberPointerType</a>&gt;,
  1673. Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1PointerType.html">PointerType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ReferenceType.html">ReferenceType</a>&gt;
  1674. </pre></td></tr>
  1675. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXConstructExpr.html">CXXConstructExpr</a>&gt;</td><td class="name" onclick="toggle('hasAnyArgument1')"><a name="hasAnyArgument1Anchor">hasAnyArgument</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt; InnerMatcher</td></tr>
  1676. <tr><td colspan="4" class="doc" id="hasAnyArgument1"><pre>Matches any argument of a call expression or a constructor call
  1677. expression.
  1678. Given
  1679. void x(int, int, int) { int y; x(1, y, 42); }
  1680. callExpr(hasAnyArgument(declRefExpr()))
  1681. matches x(1, y, 42)
  1682. with hasAnyArgument(...)
  1683. matching y
  1684. FIXME: Currently this will ignore parentheses and implicit casts on
  1685. the argument before applying the inner matcher. We'll want to remove
  1686. this to allow for greater control by the user once ignoreImplicit()
  1687. has been implemented.
  1688. </pre></td></tr>
  1689. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXConstructExpr.html">CXXConstructExpr</a>&gt;</td><td class="name" onclick="toggle('hasArgument1')"><a name="hasArgument1Anchor">hasArgument</a></td><td>unsigned N, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt; InnerMatcher</td></tr>
  1690. <tr><td colspan="4" class="doc" id="hasArgument1"><pre>Matches the n'th argument of a call expression or a constructor
  1691. call expression.
  1692. Example matches y in x(y)
  1693. (matcher = callExpr(hasArgument(0, declRefExpr())))
  1694. void x(int) { int y; x(y); }
  1695. </pre></td></tr>
  1696. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXConstructExpr.html">CXXConstructExpr</a>&gt;</td><td class="name" onclick="toggle('hasDeclaration12')"><a name="hasDeclaration12Anchor">hasDeclaration</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt; InnerMatcher</td></tr>
  1697. <tr><td colspan="4" class="doc" id="hasDeclaration12"><pre>Matches a node if the declaration associated with that node
  1698. matches the given matcher.
  1699. The associated declaration is:
  1700. - for type nodes, the declaration of the underlying type
  1701. - for CallExpr, the declaration of the callee
  1702. - for MemberExpr, the declaration of the referenced member
  1703. - for CXXConstructExpr, the declaration of the constructor
  1704. Also usable as Matcher&lt;T&gt; for any T supporting the getDecl() member
  1705. function. e.g. various subtypes of clang::Type and various expressions.
  1706. Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CallExpr.html">CallExpr</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXConstructExpr.html">CXXConstructExpr</a>&gt;,
  1707. Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1DeclRefExpr.html">DeclRefExpr</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1EnumType.html">EnumType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1InjectedClassNameType.html">InjectedClassNameType</a>&gt;,
  1708. Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1LabelStmt.html">LabelStmt</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberExpr.html">MemberExpr</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt;,
  1709. Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1RecordType.html">RecordType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TagType.html">TagType</a>&gt;,
  1710. Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateSpecializationType.html">TemplateSpecializationType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateTypeParmType.html">TemplateTypeParmType</a>&gt;,
  1711. Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TypedefType.html">TypedefType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1UnresolvedUsingType.html">UnresolvedUsingType</a>&gt;
  1712. </pre></td></tr>
  1713. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXConstructorDecl.html">CXXConstructorDecl</a>&gt;</td><td class="name" onclick="toggle('forEachConstructorInitializer0')"><a name="forEachConstructorInitializer0Anchor">forEachConstructorInitializer</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXCtorInitializer.html">CXXCtorInitializer</a>&gt; InnerMatcher</td></tr>
  1714. <tr><td colspan="4" class="doc" id="forEachConstructorInitializer0"><pre>Matches each constructor initializer in a constructor definition.
  1715. Given
  1716. class A { A() : i(42), j(42) {} int i; int j; };
  1717. constructorDecl(forEachConstructorInitializer(forField(decl().bind("x"))))
  1718. will trigger two matches, binding for 'i' and 'j' respectively.
  1719. </pre></td></tr>
  1720. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXConstructorDecl.html">CXXConstructorDecl</a>&gt;</td><td class="name" onclick="toggle('hasAnyConstructorInitializer0')"><a name="hasAnyConstructorInitializer0Anchor">hasAnyConstructorInitializer</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXCtorInitializer.html">CXXCtorInitializer</a>&gt; InnerMatcher</td></tr>
  1721. <tr><td colspan="4" class="doc" id="hasAnyConstructorInitializer0"><pre>Matches a constructor initializer.
  1722. Given
  1723. struct Foo {
  1724. Foo() : foo_(1) { }
  1725. int foo_;
  1726. };
  1727. recordDecl(has(constructorDecl(hasAnyConstructorInitializer(anything()))))
  1728. record matches Foo, hasAnyConstructorInitializer matches foo_(1)
  1729. </pre></td></tr>
  1730. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXCtorInitializer.html">CXXCtorInitializer</a>&gt;</td><td class="name" onclick="toggle('forField0')"><a name="forField0Anchor">forField</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1FieldDecl.html">FieldDecl</a>&gt; InnerMatcher</td></tr>
  1731. <tr><td colspan="4" class="doc" id="forField0"><pre>Matches the field declaration of a constructor initializer.
  1732. Given
  1733. struct Foo {
  1734. Foo() : foo_(1) { }
  1735. int foo_;
  1736. };
  1737. recordDecl(has(constructorDecl(hasAnyConstructorInitializer(
  1738. forField(hasName("foo_"))))))
  1739. matches Foo
  1740. with forField matching foo_
  1741. </pre></td></tr>
  1742. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXCtorInitializer.html">CXXCtorInitializer</a>&gt;</td><td class="name" onclick="toggle('withInitializer0')"><a name="withInitializer0Anchor">withInitializer</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt; InnerMatcher</td></tr>
  1743. <tr><td colspan="4" class="doc" id="withInitializer0"><pre>Matches the initializer expression of a constructor initializer.
  1744. Given
  1745. struct Foo {
  1746. Foo() : foo_(1) { }
  1747. int foo_;
  1748. };
  1749. recordDecl(has(constructorDecl(hasAnyConstructorInitializer(
  1750. withInitializer(integerLiteral(equals(1)))))))
  1751. matches Foo
  1752. with withInitializer matching (1)
  1753. </pre></td></tr>
  1754. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXForRangeStmt.html">CXXForRangeStmt</a>&gt;</td><td class="name" onclick="toggle('hasBody3')"><a name="hasBody3Anchor">hasBody</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt; InnerMatcher</td></tr>
  1755. <tr><td colspan="4" class="doc" id="hasBody3"><pre>Matches a 'for', 'while', or 'do while' statement that has
  1756. a given body.
  1757. Given
  1758. for (;;) {}
  1759. hasBody(compoundStmt())
  1760. matches 'for (;;) {}'
  1761. with compoundStmt()
  1762. matching '{}'
  1763. </pre></td></tr>
  1764. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXForRangeStmt.html">CXXForRangeStmt</a>&gt;</td><td class="name" onclick="toggle('hasLoopVariable0')"><a name="hasLoopVariable0Anchor">hasLoopVariable</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1VarDecl.html">VarDecl</a>&gt; InnerMatcher</td></tr>
  1765. <tr><td colspan="4" class="doc" id="hasLoopVariable0"><pre>Matches the initialization statement of a for loop.
  1766. Example:
  1767. forStmt(hasLoopVariable(anything()))
  1768. matches 'int x' in
  1769. for (int x : a) { }
  1770. </pre></td></tr>
  1771. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXForRangeStmt.html">CXXForRangeStmt</a>&gt;</td><td class="name" onclick="toggle('hasRangeInit0')"><a name="hasRangeInit0Anchor">hasRangeInit</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt; InnerMatcher</td></tr>
  1772. <tr><td colspan="4" class="doc" id="hasRangeInit0"><pre>Matches the range initialization statement of a for loop.
  1773. Example:
  1774. forStmt(hasRangeInit(anything()))
  1775. matches 'a' in
  1776. for (int x : a) { }
  1777. </pre></td></tr>
  1778. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXMemberCallExpr.html">CXXMemberCallExpr</a>&gt;</td><td class="name" onclick="toggle('onImplicitObjectArgument0')"><a name="onImplicitObjectArgument0Anchor">onImplicitObjectArgument</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt; InnerMatcher</td></tr>
  1779. <tr><td colspan="4" class="doc" id="onImplicitObjectArgument0"><pre></pre></td></tr>
  1780. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXMemberCallExpr.html">CXXMemberCallExpr</a>&gt;</td><td class="name" onclick="toggle('on0')"><a name="on0Anchor">on</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt; InnerMatcher</td></tr>
  1781. <tr><td colspan="4" class="doc" id="on0"><pre>Matches on the implicit object argument of a member call expression.
  1782. Example matches y.x() (matcher = callExpr(on(hasType(recordDecl(hasName("Y"))))))
  1783. class Y { public: void x(); };
  1784. void z() { Y y; y.x(); }",
  1785. FIXME: Overload to allow directly matching types?
  1786. </pre></td></tr>
  1787. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXMemberCallExpr.html">CXXMemberCallExpr</a>&gt;</td><td class="name" onclick="toggle('thisPointerType1')"><a name="thisPointerType1Anchor">thisPointerType</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt; InnerMatcher</td></tr>
  1788. <tr><td colspan="4" class="doc" id="thisPointerType1"><pre>Overloaded to match the type's declaration.
  1789. </pre></td></tr>
  1790. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXMemberCallExpr.html">CXXMemberCallExpr</a>&gt;</td><td class="name" onclick="toggle('thisPointerType0')"><a name="thisPointerType0Anchor">thisPointerType</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt; InnerMatcher</td></tr>
  1791. <tr><td colspan="4" class="doc" id="thisPointerType0"><pre>Matches if the expression's type either matches the specified
  1792. matcher, or is a pointer to a type that matches the InnerMatcher.
  1793. </pre></td></tr>
  1794. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXMethodDecl.html">CXXMethodDecl</a>&gt;</td><td class="name" onclick="toggle('ofClass0')"><a name="ofClass0Anchor">ofClass</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXRecordDecl.html">CXXRecordDecl</a>&gt; InnerMatcher</td></tr>
  1795. <tr><td colspan="4" class="doc" id="ofClass0"><pre>Matches the class declaration that the given method declaration
  1796. belongs to.
  1797. FIXME: Generalize this for other kinds of declarations.
  1798. FIXME: What other kind of declarations would we need to generalize
  1799. this to?
  1800. Example matches A() in the last line
  1801. (matcher = constructExpr(hasDeclaration(methodDecl(
  1802. ofClass(hasName("A"))))))
  1803. class A {
  1804. public:
  1805. A();
  1806. };
  1807. A a = A();
  1808. </pre></td></tr>
  1809. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXRecordDecl.html">CXXRecordDecl</a>&gt;</td><td class="name" onclick="toggle('hasMethod0')"><a name="hasMethod0Anchor">hasMethod</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXMethodDecl.html">CXXMethodDecl</a>&gt; InnerMatcher</td></tr>
  1810. <tr><td colspan="4" class="doc" id="hasMethod0"><pre>Matches the first method of a class or struct that satisfies InnerMatcher.
  1811. Given:
  1812. class A { void func(); };
  1813. class B { void member(); };
  1814. recordDecl(hasMethod(hasName("func"))) matches the declaration of A
  1815. but not B.
  1816. </pre></td></tr>
  1817. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXRecordDecl.html">CXXRecordDecl</a>&gt;</td><td class="name" onclick="toggle('isDerivedFrom0')"><a name="isDerivedFrom0Anchor">isDerivedFrom</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1NamedDecl.html">NamedDecl</a>&gt; Base</td></tr>
  1818. <tr><td colspan="4" class="doc" id="isDerivedFrom0"><pre>Matches C++ classes that are directly or indirectly derived from
  1819. a class matching Base.
  1820. Note that a class is not considered to be derived from itself.
  1821. Example matches Y, Z, C (Base == hasName("X"))
  1822. class X;
  1823. class Y : public X {}; directly derived
  1824. class Z : public Y {}; indirectly derived
  1825. typedef X A;
  1826. typedef A B;
  1827. class C : public B {}; derived from a typedef of X
  1828. In the following example, Bar matches isDerivedFrom(hasName("X")):
  1829. class Foo;
  1830. typedef Foo X;
  1831. class Bar : public Foo {}; derived from a type that X is a typedef of
  1832. </pre></td></tr>
  1833. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXRecordDecl.html">CXXRecordDecl</a>&gt;</td><td class="name" onclick="toggle('isSameOrDerivedFrom0')"><a name="isSameOrDerivedFrom0Anchor">isSameOrDerivedFrom</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1NamedDecl.html">NamedDecl</a>&gt; Base</td></tr>
  1834. <tr><td colspan="4" class="doc" id="isSameOrDerivedFrom0"><pre>Similar to isDerivedFrom(), but also matches classes that directly
  1835. match Base.
  1836. </pre></td></tr>
  1837. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CallExpr.html">CallExpr</a>&gt;</td><td class="name" onclick="toggle('callee1')"><a name="callee1Anchor">callee</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt; InnerMatcher</td></tr>
  1838. <tr><td colspan="4" class="doc" id="callee1"><pre>Matches if the call expression's callee's declaration matches the
  1839. given matcher.
  1840. Example matches y.x() (matcher = callExpr(callee(methodDecl(hasName("x")))))
  1841. class Y { public: void x(); };
  1842. void z() { Y y; y.x();
  1843. </pre></td></tr>
  1844. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CallExpr.html">CallExpr</a>&gt;</td><td class="name" onclick="toggle('callee0')"><a name="callee0Anchor">callee</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt; InnerMatcher</td></tr>
  1845. <tr><td colspan="4" class="doc" id="callee0"><pre>Matches if the call expression's callee expression matches.
  1846. Given
  1847. class Y { void x() { this-&gt;x(); x(); Y y; y.x(); } };
  1848. void f() { f(); }
  1849. callExpr(callee(expr()))
  1850. matches this-&gt;x(), x(), y.x(), f()
  1851. with callee(...)
  1852. matching this-&gt;x, x, y.x, f respectively
  1853. Note: Callee cannot take the more general internal::Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt;
  1854. because this introduces ambiguous overloads with calls to Callee taking a
  1855. internal::Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;, as the matcher hierarchy is purely
  1856. implemented in terms of implicit casts.
  1857. </pre></td></tr>
  1858. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CallExpr.html">CallExpr</a>&gt;</td><td class="name" onclick="toggle('hasAnyArgument0')"><a name="hasAnyArgument0Anchor">hasAnyArgument</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt; InnerMatcher</td></tr>
  1859. <tr><td colspan="4" class="doc" id="hasAnyArgument0"><pre>Matches any argument of a call expression or a constructor call
  1860. expression.
  1861. Given
  1862. void x(int, int, int) { int y; x(1, y, 42); }
  1863. callExpr(hasAnyArgument(declRefExpr()))
  1864. matches x(1, y, 42)
  1865. with hasAnyArgument(...)
  1866. matching y
  1867. FIXME: Currently this will ignore parentheses and implicit casts on
  1868. the argument before applying the inner matcher. We'll want to remove
  1869. this to allow for greater control by the user once ignoreImplicit()
  1870. has been implemented.
  1871. </pre></td></tr>
  1872. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CallExpr.html">CallExpr</a>&gt;</td><td class="name" onclick="toggle('hasArgument0')"><a name="hasArgument0Anchor">hasArgument</a></td><td>unsigned N, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt; InnerMatcher</td></tr>
  1873. <tr><td colspan="4" class="doc" id="hasArgument0"><pre>Matches the n'th argument of a call expression or a constructor
  1874. call expression.
  1875. Example matches y in x(y)
  1876. (matcher = callExpr(hasArgument(0, declRefExpr())))
  1877. void x(int) { int y; x(y); }
  1878. </pre></td></tr>
  1879. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CallExpr.html">CallExpr</a>&gt;</td><td class="name" onclick="toggle('hasDeclaration13')"><a name="hasDeclaration13Anchor">hasDeclaration</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt; InnerMatcher</td></tr>
  1880. <tr><td colspan="4" class="doc" id="hasDeclaration13"><pre>Matches a node if the declaration associated with that node
  1881. matches the given matcher.
  1882. The associated declaration is:
  1883. - for type nodes, the declaration of the underlying type
  1884. - for CallExpr, the declaration of the callee
  1885. - for MemberExpr, the declaration of the referenced member
  1886. - for CXXConstructExpr, the declaration of the constructor
  1887. Also usable as Matcher&lt;T&gt; for any T supporting the getDecl() member
  1888. function. e.g. various subtypes of clang::Type and various expressions.
  1889. Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CallExpr.html">CallExpr</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXConstructExpr.html">CXXConstructExpr</a>&gt;,
  1890. Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1DeclRefExpr.html">DeclRefExpr</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1EnumType.html">EnumType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1InjectedClassNameType.html">InjectedClassNameType</a>&gt;,
  1891. Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1LabelStmt.html">LabelStmt</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberExpr.html">MemberExpr</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt;,
  1892. Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1RecordType.html">RecordType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TagType.html">TagType</a>&gt;,
  1893. Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateSpecializationType.html">TemplateSpecializationType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateTypeParmType.html">TemplateTypeParmType</a>&gt;,
  1894. Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TypedefType.html">TypedefType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1UnresolvedUsingType.html">UnresolvedUsingType</a>&gt;
  1895. </pre></td></tr>
  1896. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CaseStmt.html">CaseStmt</a>&gt;</td><td class="name" onclick="toggle('hasCaseConstant0')"><a name="hasCaseConstant0Anchor">hasCaseConstant</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt; InnerMatcher</td></tr>
  1897. <tr><td colspan="4" class="doc" id="hasCaseConstant0"><pre>If the given case statement does not use the GNU case range
  1898. extension, matches the constant given in the statement.
  1899. Given
  1900. switch (1) { case 1: case 1+1: case 3 ... 4: ; }
  1901. caseStmt(hasCaseConstant(integerLiteral()))
  1902. matches "case 1:"
  1903. </pre></td></tr>
  1904. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CastExpr.html">CastExpr</a>&gt;</td><td class="name" onclick="toggle('hasSourceExpression0')"><a name="hasSourceExpression0Anchor">hasSourceExpression</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt; InnerMatcher</td></tr>
  1905. <tr><td colspan="4" class="doc" id="hasSourceExpression0"><pre>Matches if the cast's source expression matches the given matcher.
  1906. Example: matches "a string" (matcher =
  1907. hasSourceExpression(constructExpr()))
  1908. class URL { URL(string); };
  1909. URL url = "a string";
  1910. </pre></td></tr>
  1911. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ClassTemplateSpecializationDecl.html">ClassTemplateSpecializationDecl</a>&gt;</td><td class="name" onclick="toggle('hasAnyTemplateArgument0')"><a name="hasAnyTemplateArgument0Anchor">hasAnyTemplateArgument</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateArgument.html">TemplateArgument</a>&gt; InnerMatcher</td></tr>
  1912. <tr><td colspan="4" class="doc" id="hasAnyTemplateArgument0"><pre>Matches classTemplateSpecializations that have at least one
  1913. TemplateArgument matching the given InnerMatcher.
  1914. Given
  1915. template&lt;typename T&gt; class A {};
  1916. template&lt;&gt; class A&lt;double&gt; {};
  1917. A&lt;int&gt; a;
  1918. classTemplateSpecializationDecl(hasAnyTemplateArgument(
  1919. refersToType(asString("int"))))
  1920. matches the specialization A&lt;int&gt;
  1921. </pre></td></tr>
  1922. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ClassTemplateSpecializationDecl.html">ClassTemplateSpecializationDecl</a>&gt;</td><td class="name" onclick="toggle('hasTemplateArgument0')"><a name="hasTemplateArgument0Anchor">hasTemplateArgument</a></td><td>unsigned N, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateArgument.html">TemplateArgument</a>&gt; InnerMatcher</td></tr>
  1923. <tr><td colspan="4" class="doc" id="hasTemplateArgument0"><pre>Matches classTemplateSpecializations where the n'th TemplateArgument
  1924. matches the given InnerMatcher.
  1925. Given
  1926. template&lt;typename T, typename U&gt; class A {};
  1927. A&lt;bool, int&gt; b;
  1928. A&lt;int, bool&gt; c;
  1929. classTemplateSpecializationDecl(hasTemplateArgument(
  1930. 1, refersToType(asString("int"))))
  1931. matches the specialization A&lt;bool, int&gt;
  1932. </pre></td></tr>
  1933. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ComplexTypeLoc.html">ComplexTypeLoc</a>&gt;</td><td class="name" onclick="toggle('hasElementTypeLoc1')"><a name="hasElementTypeLoc1Anchor">hasElementTypeLoc</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TypeLoc.html">TypeLoc</a>&gt;</td></tr>
  1934. <tr><td colspan="4" class="doc" id="hasElementTypeLoc1"><pre>Matches arrays and C99 complex types that have a specific element
  1935. type.
  1936. Given
  1937. struct A {};
  1938. A a[7];
  1939. int b[7];
  1940. arrayType(hasElementType(builtinType()))
  1941. matches "int b[7]"
  1942. Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ArrayType.html">ArrayType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ComplexType.html">ComplexType</a>&gt;
  1943. </pre></td></tr>
  1944. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ComplexType.html">ComplexType</a>&gt;</td><td class="name" onclick="toggle('hasElementType1')"><a name="hasElementType1Anchor">hasElementType</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td></tr>
  1945. <tr><td colspan="4" class="doc" id="hasElementType1"><pre>Matches arrays and C99 complex types that have a specific element
  1946. type.
  1947. Given
  1948. struct A {};
  1949. A a[7];
  1950. int b[7];
  1951. arrayType(hasElementType(builtinType()))
  1952. matches "int b[7]"
  1953. Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ArrayType.html">ArrayType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ComplexType.html">ComplexType</a>&gt;
  1954. </pre></td></tr>
  1955. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CompoundStmt.html">CompoundStmt</a>&gt;</td><td class="name" onclick="toggle('hasAnySubstatement0')"><a name="hasAnySubstatement0Anchor">hasAnySubstatement</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt; InnerMatcher</td></tr>
  1956. <tr><td colspan="4" class="doc" id="hasAnySubstatement0"><pre>Matches compound statements where at least one substatement matches
  1957. a given matcher.
  1958. Given
  1959. { {}; 1+2; }
  1960. hasAnySubstatement(compoundStmt())
  1961. matches '{ {}; 1+2; }'
  1962. with compoundStmt()
  1963. matching '{}'
  1964. </pre></td></tr>
  1965. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ConditionalOperator.html">ConditionalOperator</a>&gt;</td><td class="name" onclick="toggle('hasCondition4')"><a name="hasCondition4Anchor">hasCondition</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt; InnerMatcher</td></tr>
  1966. <tr><td colspan="4" class="doc" id="hasCondition4"><pre>Matches the condition expression of an if statement, for loop,
  1967. or conditional operator.
  1968. Example matches true (matcher = hasCondition(boolLiteral(equals(true))))
  1969. if (true) {}
  1970. </pre></td></tr>
  1971. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ConditionalOperator.html">ConditionalOperator</a>&gt;</td><td class="name" onclick="toggle('hasFalseExpression0')"><a name="hasFalseExpression0Anchor">hasFalseExpression</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt; InnerMatcher</td></tr>
  1972. <tr><td colspan="4" class="doc" id="hasFalseExpression0"><pre>Matches the false branch expression of a conditional operator.
  1973. Example matches b
  1974. condition ? a : b
  1975. </pre></td></tr>
  1976. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ConditionalOperator.html">ConditionalOperator</a>&gt;</td><td class="name" onclick="toggle('hasTrueExpression0')"><a name="hasTrueExpression0Anchor">hasTrueExpression</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt; InnerMatcher</td></tr>
  1977. <tr><td colspan="4" class="doc" id="hasTrueExpression0"><pre>Matches the true branch expression of a conditional operator.
  1978. Example matches a
  1979. condition ? a : b
  1980. </pre></td></tr>
  1981. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1DeclRefExpr.html">DeclRefExpr</a>&gt;</td><td class="name" onclick="toggle('hasDeclaration11')"><a name="hasDeclaration11Anchor">hasDeclaration</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt; InnerMatcher</td></tr>
  1982. <tr><td colspan="4" class="doc" id="hasDeclaration11"><pre>Matches a node if the declaration associated with that node
  1983. matches the given matcher.
  1984. The associated declaration is:
  1985. - for type nodes, the declaration of the underlying type
  1986. - for CallExpr, the declaration of the callee
  1987. - for MemberExpr, the declaration of the referenced member
  1988. - for CXXConstructExpr, the declaration of the constructor
  1989. Also usable as Matcher&lt;T&gt; for any T supporting the getDecl() member
  1990. function. e.g. various subtypes of clang::Type and various expressions.
  1991. Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CallExpr.html">CallExpr</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXConstructExpr.html">CXXConstructExpr</a>&gt;,
  1992. Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1DeclRefExpr.html">DeclRefExpr</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1EnumType.html">EnumType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1InjectedClassNameType.html">InjectedClassNameType</a>&gt;,
  1993. Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1LabelStmt.html">LabelStmt</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberExpr.html">MemberExpr</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt;,
  1994. Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1RecordType.html">RecordType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TagType.html">TagType</a>&gt;,
  1995. Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateSpecializationType.html">TemplateSpecializationType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateTypeParmType.html">TemplateTypeParmType</a>&gt;,
  1996. Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TypedefType.html">TypedefType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1UnresolvedUsingType.html">UnresolvedUsingType</a>&gt;
  1997. </pre></td></tr>
  1998. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1DeclRefExpr.html">DeclRefExpr</a>&gt;</td><td class="name" onclick="toggle('throughUsingDecl0')"><a name="throughUsingDecl0Anchor">throughUsingDecl</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1UsingShadowDecl.html">UsingShadowDecl</a>&gt; InnerMatcher</td></tr>
  1999. <tr><td colspan="4" class="doc" id="throughUsingDecl0"><pre>Matches a DeclRefExpr that refers to a declaration through a
  2000. specific using shadow declaration.
  2001. FIXME: This currently only works for functions. Fix.
  2002. Given
  2003. namespace a { void f() {} }
  2004. using a::f;
  2005. void g() {
  2006. f(); Matches this ..
  2007. a::f(); .. but not this.
  2008. }
  2009. declRefExpr(throughUsingDeclaration(anything()))
  2010. matches f()
  2011. </pre></td></tr>
  2012. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1DeclRefExpr.html">DeclRefExpr</a>&gt;</td><td class="name" onclick="toggle('to0')"><a name="to0Anchor">to</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt; InnerMatcher</td></tr>
  2013. <tr><td colspan="4" class="doc" id="to0"><pre>Matches a DeclRefExpr that refers to a declaration that matches the
  2014. specified matcher.
  2015. Example matches x in if(x)
  2016. (matcher = declRefExpr(to(varDecl(hasName("x")))))
  2017. bool x;
  2018. if (x) {}
  2019. </pre></td></tr>
  2020. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1DeclStmt.html">DeclStmt</a>&gt;</td><td class="name" onclick="toggle('containsDeclaration0')"><a name="containsDeclaration0Anchor">containsDeclaration</a></td><td>unsigned N, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt; InnerMatcher</td></tr>
  2021. <tr><td colspan="4" class="doc" id="containsDeclaration0"><pre>Matches the n'th declaration of a declaration statement.
  2022. Note that this does not work for global declarations because the AST
  2023. breaks up multiple-declaration DeclStmt's into multiple single-declaration
  2024. DeclStmt's.
  2025. Example: Given non-global declarations
  2026. int a, b = 0;
  2027. int c;
  2028. int d = 2, e;
  2029. declStmt(containsDeclaration(
  2030. 0, varDecl(hasInitializer(anything()))))
  2031. matches only 'int d = 2, e;', and
  2032. declStmt(containsDeclaration(1, varDecl()))
  2033. matches 'int a, b = 0' as well as 'int d = 2, e;'
  2034. but 'int c;' is not matched.
  2035. </pre></td></tr>
  2036. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1DeclStmt.html">DeclStmt</a>&gt;</td><td class="name" onclick="toggle('hasSingleDecl0')"><a name="hasSingleDecl0Anchor">hasSingleDecl</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt; InnerMatcher</td></tr>
  2037. <tr><td colspan="4" class="doc" id="hasSingleDecl0"><pre>Matches the Decl of a DeclStmt which has a single declaration.
  2038. Given
  2039. int a, b;
  2040. int c;
  2041. declStmt(hasSingleDecl(anything()))
  2042. matches 'int c;' but not 'int a, b;'.
  2043. </pre></td></tr>
  2044. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1DeclaratorDecl.html">DeclaratorDecl</a>&gt;</td><td class="name" onclick="toggle('hasTypeLoc0')"><a name="hasTypeLoc0Anchor">hasTypeLoc</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TypeLoc.html">TypeLoc</a>&gt; Inner</td></tr>
  2045. <tr><td colspan="4" class="doc" id="hasTypeLoc0"><pre>Matches if the type location of the declarator decl's type matches
  2046. the inner matcher.
  2047. Given
  2048. int x;
  2049. declaratorDecl(hasTypeLoc(loc(asString("int"))))
  2050. matches int x
  2051. </pre></td></tr>
  2052. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('hasDeclContext0')"><a name="hasDeclContext0Anchor">hasDeclContext</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt; InnerMatcher</td></tr>
  2053. <tr><td colspan="4" class="doc" id="hasDeclContext0"><pre>Matches declarations whose declaration context, interpreted as a
  2054. Decl, matches InnerMatcher.
  2055. Given
  2056. namespace N {
  2057. namespace M {
  2058. class D {};
  2059. }
  2060. }
  2061. recordDecl(hasDeclContext(namedDecl(hasName("M")))) matches the
  2062. declaration of class D.
  2063. </pre></td></tr>
  2064. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1DoStmt.html">DoStmt</a>&gt;</td><td class="name" onclick="toggle('hasBody0')"><a name="hasBody0Anchor">hasBody</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt; InnerMatcher</td></tr>
  2065. <tr><td colspan="4" class="doc" id="hasBody0"><pre>Matches a 'for', 'while', or 'do while' statement that has
  2066. a given body.
  2067. Given
  2068. for (;;) {}
  2069. hasBody(compoundStmt())
  2070. matches 'for (;;) {}'
  2071. with compoundStmt()
  2072. matching '{}'
  2073. </pre></td></tr>
  2074. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1DoStmt.html">DoStmt</a>&gt;</td><td class="name" onclick="toggle('hasCondition3')"><a name="hasCondition3Anchor">hasCondition</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt; InnerMatcher</td></tr>
  2075. <tr><td colspan="4" class="doc" id="hasCondition3"><pre>Matches the condition expression of an if statement, for loop,
  2076. or conditional operator.
  2077. Example matches true (matcher = hasCondition(boolLiteral(equals(true))))
  2078. if (true) {}
  2079. </pre></td></tr>
  2080. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ElaboratedType.html">ElaboratedType</a>&gt;</td><td class="name" onclick="toggle('hasQualifier0')"><a name="hasQualifier0Anchor">hasQualifier</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1NestedNameSpecifier.html">NestedNameSpecifier</a>&gt; InnerMatcher</td></tr>
  2081. <tr><td colspan="4" class="doc" id="hasQualifier0"><pre>Matches ElaboratedTypes whose qualifier, a NestedNameSpecifier,
  2082. matches InnerMatcher if the qualifier exists.
  2083. Given
  2084. namespace N {
  2085. namespace M {
  2086. class D {};
  2087. }
  2088. }
  2089. N::M::D d;
  2090. elaboratedType(hasQualifier(hasPrefix(specifiesNamespace(hasName("N"))))
  2091. matches the type of the variable declaration of d.
  2092. </pre></td></tr>
  2093. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ElaboratedType.html">ElaboratedType</a>&gt;</td><td class="name" onclick="toggle('namesType0')"><a name="namesType0Anchor">namesType</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt; InnerMatcher</td></tr>
  2094. <tr><td colspan="4" class="doc" id="namesType0"><pre>Matches ElaboratedTypes whose named type matches InnerMatcher.
  2095. Given
  2096. namespace N {
  2097. namespace M {
  2098. class D {};
  2099. }
  2100. }
  2101. N::M::D d;
  2102. elaboratedType(namesType(recordType(
  2103. hasDeclaration(namedDecl(hasName("D")))))) matches the type of the variable
  2104. declaration of d.
  2105. </pre></td></tr>
  2106. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1EnumType.html">EnumType</a>&gt;</td><td class="name" onclick="toggle('hasDeclaration10')"><a name="hasDeclaration10Anchor">hasDeclaration</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt; InnerMatcher</td></tr>
  2107. <tr><td colspan="4" class="doc" id="hasDeclaration10"><pre>Matches a node if the declaration associated with that node
  2108. matches the given matcher.
  2109. The associated declaration is:
  2110. - for type nodes, the declaration of the underlying type
  2111. - for CallExpr, the declaration of the callee
  2112. - for MemberExpr, the declaration of the referenced member
  2113. - for CXXConstructExpr, the declaration of the constructor
  2114. Also usable as Matcher&lt;T&gt; for any T supporting the getDecl() member
  2115. function. e.g. various subtypes of clang::Type and various expressions.
  2116. Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CallExpr.html">CallExpr</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXConstructExpr.html">CXXConstructExpr</a>&gt;,
  2117. Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1DeclRefExpr.html">DeclRefExpr</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1EnumType.html">EnumType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1InjectedClassNameType.html">InjectedClassNameType</a>&gt;,
  2118. Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1LabelStmt.html">LabelStmt</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberExpr.html">MemberExpr</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt;,
  2119. Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1RecordType.html">RecordType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TagType.html">TagType</a>&gt;,
  2120. Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateSpecializationType.html">TemplateSpecializationType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateTypeParmType.html">TemplateTypeParmType</a>&gt;,
  2121. Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TypedefType.html">TypedefType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1UnresolvedUsingType.html">UnresolvedUsingType</a>&gt;
  2122. </pre></td></tr>
  2123. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ExplicitCastExpr.html">ExplicitCastExpr</a>&gt;</td><td class="name" onclick="toggle('hasDestinationType0')"><a name="hasDestinationType0Anchor">hasDestinationType</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt; InnerMatcher</td></tr>
  2124. <tr><td colspan="4" class="doc" id="hasDestinationType0"><pre>Matches casts whose destination type matches a given matcher.
  2125. (Note: Clang's AST refers to other conversions as "casts" too, and calls
  2126. actual casts "explicit" casts.)
  2127. </pre></td></tr>
  2128. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt;</td><td class="name" onclick="toggle('hasType2')"><a name="hasType2Anchor">hasType</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt; InnerMatcher</td></tr>
  2129. <tr><td colspan="4" class="doc" id="hasType2"><pre>Overloaded to match the declaration of the expression's or value
  2130. declaration's type.
  2131. In case of a value declaration (for example a variable declaration),
  2132. this resolves one layer of indirection. For example, in the value
  2133. declaration "X x;", recordDecl(hasName("X")) matches the declaration of X,
  2134. while varDecl(hasType(recordDecl(hasName("X")))) matches the declaration
  2135. of x."
  2136. Example matches x (matcher = expr(hasType(recordDecl(hasName("X")))))
  2137. and z (matcher = varDecl(hasType(recordDecl(hasName("X")))))
  2138. class X {};
  2139. void y(X &amp;x) { x; X z; }
  2140. Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ValueDecl.html">ValueDecl</a>&gt;
  2141. </pre></td></tr>
  2142. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt;</td><td class="name" onclick="toggle('hasType0')"><a name="hasType0Anchor">hasType</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt; InnerMatcher</td></tr>
  2143. <tr><td colspan="4" class="doc" id="hasType0"><pre>Matches if the expression's or declaration's type matches a type
  2144. matcher.
  2145. Example matches x (matcher = expr(hasType(recordDecl(hasName("X")))))
  2146. and z (matcher = varDecl(hasType(recordDecl(hasName("X")))))
  2147. class X {};
  2148. void y(X &amp;x) { x; X z; }
  2149. </pre></td></tr>
  2150. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt;</td><td class="name" onclick="toggle('ignoringImpCasts0')"><a name="ignoringImpCasts0Anchor">ignoringImpCasts</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt; InnerMatcher</td></tr>
  2151. <tr><td colspan="4" class="doc" id="ignoringImpCasts0"><pre>Matches expressions that match InnerMatcher after any implicit casts
  2152. are stripped off.
  2153. Parentheses and explicit casts are not discarded.
  2154. Given
  2155. int arr[5];
  2156. int a = 0;
  2157. char b = 0;
  2158. const int c = a;
  2159. int *d = arr;
  2160. long e = (long) 0l;
  2161. The matchers
  2162. varDecl(hasInitializer(ignoringImpCasts(integerLiteral())))
  2163. varDecl(hasInitializer(ignoringImpCasts(declRefExpr())))
  2164. would match the declarations for a, b, c, and d, but not e.
  2165. While
  2166. varDecl(hasInitializer(integerLiteral()))
  2167. varDecl(hasInitializer(declRefExpr()))
  2168. only match the declarations for b, c, and d.
  2169. </pre></td></tr>
  2170. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt;</td><td class="name" onclick="toggle('ignoringParenCasts0')"><a name="ignoringParenCasts0Anchor">ignoringParenCasts</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt; InnerMatcher</td></tr>
  2171. <tr><td colspan="4" class="doc" id="ignoringParenCasts0"><pre>Matches expressions that match InnerMatcher after parentheses and
  2172. casts are stripped off.
  2173. Implicit and non-C Style casts are also discarded.
  2174. Given
  2175. int a = 0;
  2176. char b = (0);
  2177. void* c = reinterpret_cast&lt;char*&gt;(0);
  2178. char d = char(0);
  2179. The matcher
  2180. varDecl(hasInitializer(ignoringParenCasts(integerLiteral())))
  2181. would match the declarations for a, b, c, and d.
  2182. while
  2183. varDecl(hasInitializer(integerLiteral()))
  2184. only match the declaration for a.
  2185. </pre></td></tr>
  2186. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt;</td><td class="name" onclick="toggle('ignoringParenImpCasts0')"><a name="ignoringParenImpCasts0Anchor">ignoringParenImpCasts</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt; InnerMatcher</td></tr>
  2187. <tr><td colspan="4" class="doc" id="ignoringParenImpCasts0"><pre>Matches expressions that match InnerMatcher after implicit casts and
  2188. parentheses are stripped off.
  2189. Explicit casts are not discarded.
  2190. Given
  2191. int arr[5];
  2192. int a = 0;
  2193. char b = (0);
  2194. const int c = a;
  2195. int *d = (arr);
  2196. long e = ((long) 0l);
  2197. The matchers
  2198. varDecl(hasInitializer(ignoringParenImpCasts(integerLiteral())))
  2199. varDecl(hasInitializer(ignoringParenImpCasts(declRefExpr())))
  2200. would match the declarations for a, b, c, and d, but not e.
  2201. while
  2202. varDecl(hasInitializer(integerLiteral()))
  2203. varDecl(hasInitializer(declRefExpr()))
  2204. would only match the declaration for a.
  2205. </pre></td></tr>
  2206. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ForStmt.html">ForStmt</a>&gt;</td><td class="name" onclick="toggle('hasBody1')"><a name="hasBody1Anchor">hasBody</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt; InnerMatcher</td></tr>
  2207. <tr><td colspan="4" class="doc" id="hasBody1"><pre>Matches a 'for', 'while', or 'do while' statement that has
  2208. a given body.
  2209. Given
  2210. for (;;) {}
  2211. hasBody(compoundStmt())
  2212. matches 'for (;;) {}'
  2213. with compoundStmt()
  2214. matching '{}'
  2215. </pre></td></tr>
  2216. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ForStmt.html">ForStmt</a>&gt;</td><td class="name" onclick="toggle('hasCondition1')"><a name="hasCondition1Anchor">hasCondition</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt; InnerMatcher</td></tr>
  2217. <tr><td colspan="4" class="doc" id="hasCondition1"><pre>Matches the condition expression of an if statement, for loop,
  2218. or conditional operator.
  2219. Example matches true (matcher = hasCondition(boolLiteral(equals(true))))
  2220. if (true) {}
  2221. </pre></td></tr>
  2222. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ForStmt.html">ForStmt</a>&gt;</td><td class="name" onclick="toggle('hasIncrement0')"><a name="hasIncrement0Anchor">hasIncrement</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt; InnerMatcher</td></tr>
  2223. <tr><td colspan="4" class="doc" id="hasIncrement0"><pre>Matches the increment statement of a for loop.
  2224. Example:
  2225. forStmt(hasIncrement(unaryOperator(hasOperatorName("++"))))
  2226. matches '++x' in
  2227. for (x; x &lt; N; ++x) { }
  2228. </pre></td></tr>
  2229. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ForStmt.html">ForStmt</a>&gt;</td><td class="name" onclick="toggle('hasLoopInit0')"><a name="hasLoopInit0Anchor">hasLoopInit</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt; InnerMatcher</td></tr>
  2230. <tr><td colspan="4" class="doc" id="hasLoopInit0"><pre>Matches the initialization statement of a for loop.
  2231. Example:
  2232. forStmt(hasLoopInit(declStmt()))
  2233. matches 'int x = 0' in
  2234. for (int x = 0; x &lt; N; ++x) { }
  2235. </pre></td></tr>
  2236. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1FunctionDecl.html">FunctionDecl</a>&gt;</td><td class="name" onclick="toggle('hasAnyParameter0')"><a name="hasAnyParameter0Anchor">hasAnyParameter</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ParmVarDecl.html">ParmVarDecl</a>&gt; InnerMatcher</td></tr>
  2237. <tr><td colspan="4" class="doc" id="hasAnyParameter0"><pre>Matches any parameter of a function declaration.
  2238. Does not match the 'this' parameter of a method.
  2239. Given
  2240. class X { void f(int x, int y, int z) {} };
  2241. methodDecl(hasAnyParameter(hasName("y")))
  2242. matches f(int x, int y, int z) {}
  2243. with hasAnyParameter(...)
  2244. matching int y
  2245. </pre></td></tr>
  2246. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1FunctionDecl.html">FunctionDecl</a>&gt;</td><td class="name" onclick="toggle('hasParameter0')"><a name="hasParameter0Anchor">hasParameter</a></td><td>unsigned N, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ParmVarDecl.html">ParmVarDecl</a>&gt; InnerMatcher</td></tr>
  2247. <tr><td colspan="4" class="doc" id="hasParameter0"><pre>Matches the n'th parameter of a function declaration.
  2248. Given
  2249. class X { void f(int x) {} };
  2250. methodDecl(hasParameter(0, hasType(varDecl())))
  2251. matches f(int x) {}
  2252. with hasParameter(...)
  2253. matching int x
  2254. </pre></td></tr>
  2255. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1FunctionDecl.html">FunctionDecl</a>&gt;</td><td class="name" onclick="toggle('returns0')"><a name="returns0Anchor">returns</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt; InnerMatcher</td></tr>
  2256. <tr><td colspan="4" class="doc" id="returns0"><pre>Matches the return type of a function declaration.
  2257. Given:
  2258. class X { int f() { return 1; } };
  2259. methodDecl(returns(asString("int")))
  2260. matches int f() { return 1; }
  2261. </pre></td></tr>
  2262. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1IfStmt.html">IfStmt</a>&gt;</td><td class="name" onclick="toggle('hasCondition0')"><a name="hasCondition0Anchor">hasCondition</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt; InnerMatcher</td></tr>
  2263. <tr><td colspan="4" class="doc" id="hasCondition0"><pre>Matches the condition expression of an if statement, for loop,
  2264. or conditional operator.
  2265. Example matches true (matcher = hasCondition(boolLiteral(equals(true))))
  2266. if (true) {}
  2267. </pre></td></tr>
  2268. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1IfStmt.html">IfStmt</a>&gt;</td><td class="name" onclick="toggle('hasConditionVariableStatement0')"><a name="hasConditionVariableStatement0Anchor">hasConditionVariableStatement</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1DeclStmt.html">DeclStmt</a>&gt; InnerMatcher</td></tr>
  2269. <tr><td colspan="4" class="doc" id="hasConditionVariableStatement0"><pre>Matches the condition variable statement in an if statement.
  2270. Given
  2271. if (A* a = GetAPointer()) {}
  2272. hasConditionVariableStatement(...)
  2273. matches 'A* a = GetAPointer()'.
  2274. </pre></td></tr>
  2275. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1IfStmt.html">IfStmt</a>&gt;</td><td class="name" onclick="toggle('hasElse0')"><a name="hasElse0Anchor">hasElse</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt; InnerMatcher</td></tr>
  2276. <tr><td colspan="4" class="doc" id="hasElse0"><pre>Matches the else-statement of an if statement.
  2277. Examples matches the if statement
  2278. (matcher = ifStmt(hasElse(boolLiteral(equals(true)))))
  2279. if (false) false; else true;
  2280. </pre></td></tr>
  2281. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1IfStmt.html">IfStmt</a>&gt;</td><td class="name" onclick="toggle('hasThen0')"><a name="hasThen0Anchor">hasThen</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt; InnerMatcher</td></tr>
  2282. <tr><td colspan="4" class="doc" id="hasThen0"><pre>Matches the then-statement of an if statement.
  2283. Examples matches the if statement
  2284. (matcher = ifStmt(hasThen(boolLiteral(equals(true)))))
  2285. if (false) true; else false;
  2286. </pre></td></tr>
  2287. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ImplicitCastExpr.html">ImplicitCastExpr</a>&gt;</td><td class="name" onclick="toggle('hasImplicitDestinationType0')"><a name="hasImplicitDestinationType0Anchor">hasImplicitDestinationType</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt; InnerMatcher</td></tr>
  2288. <tr><td colspan="4" class="doc" id="hasImplicitDestinationType0"><pre>Matches implicit casts whose destination type matches a given
  2289. matcher.
  2290. FIXME: Unit test this matcher
  2291. </pre></td></tr>
  2292. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1InjectedClassNameType.html">InjectedClassNameType</a>&gt;</td><td class="name" onclick="toggle('hasDeclaration9')"><a name="hasDeclaration9Anchor">hasDeclaration</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt; InnerMatcher</td></tr>
  2293. <tr><td colspan="4" class="doc" id="hasDeclaration9"><pre>Matches a node if the declaration associated with that node
  2294. matches the given matcher.
  2295. The associated declaration is:
  2296. - for type nodes, the declaration of the underlying type
  2297. - for CallExpr, the declaration of the callee
  2298. - for MemberExpr, the declaration of the referenced member
  2299. - for CXXConstructExpr, the declaration of the constructor
  2300. Also usable as Matcher&lt;T&gt; for any T supporting the getDecl() member
  2301. function. e.g. various subtypes of clang::Type and various expressions.
  2302. Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CallExpr.html">CallExpr</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXConstructExpr.html">CXXConstructExpr</a>&gt;,
  2303. Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1DeclRefExpr.html">DeclRefExpr</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1EnumType.html">EnumType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1InjectedClassNameType.html">InjectedClassNameType</a>&gt;,
  2304. Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1LabelStmt.html">LabelStmt</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberExpr.html">MemberExpr</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt;,
  2305. Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1RecordType.html">RecordType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TagType.html">TagType</a>&gt;,
  2306. Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateSpecializationType.html">TemplateSpecializationType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateTypeParmType.html">TemplateTypeParmType</a>&gt;,
  2307. Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TypedefType.html">TypedefType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1UnresolvedUsingType.html">UnresolvedUsingType</a>&gt;
  2308. </pre></td></tr>
  2309. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1LabelStmt.html">LabelStmt</a>&gt;</td><td class="name" onclick="toggle('hasDeclaration8')"><a name="hasDeclaration8Anchor">hasDeclaration</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt; InnerMatcher</td></tr>
  2310. <tr><td colspan="4" class="doc" id="hasDeclaration8"><pre>Matches a node if the declaration associated with that node
  2311. matches the given matcher.
  2312. The associated declaration is:
  2313. - for type nodes, the declaration of the underlying type
  2314. - for CallExpr, the declaration of the callee
  2315. - for MemberExpr, the declaration of the referenced member
  2316. - for CXXConstructExpr, the declaration of the constructor
  2317. Also usable as Matcher&lt;T&gt; for any T supporting the getDecl() member
  2318. function. e.g. various subtypes of clang::Type and various expressions.
  2319. Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CallExpr.html">CallExpr</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXConstructExpr.html">CXXConstructExpr</a>&gt;,
  2320. Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1DeclRefExpr.html">DeclRefExpr</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1EnumType.html">EnumType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1InjectedClassNameType.html">InjectedClassNameType</a>&gt;,
  2321. Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1LabelStmt.html">LabelStmt</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberExpr.html">MemberExpr</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt;,
  2322. Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1RecordType.html">RecordType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TagType.html">TagType</a>&gt;,
  2323. Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateSpecializationType.html">TemplateSpecializationType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateTypeParmType.html">TemplateTypeParmType</a>&gt;,
  2324. Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TypedefType.html">TypedefType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1UnresolvedUsingType.html">UnresolvedUsingType</a>&gt;
  2325. </pre></td></tr>
  2326. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberExpr.html">MemberExpr</a>&gt;</td><td class="name" onclick="toggle('hasDeclaration7')"><a name="hasDeclaration7Anchor">hasDeclaration</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt; InnerMatcher</td></tr>
  2327. <tr><td colspan="4" class="doc" id="hasDeclaration7"><pre>Matches a node if the declaration associated with that node
  2328. matches the given matcher.
  2329. The associated declaration is:
  2330. - for type nodes, the declaration of the underlying type
  2331. - for CallExpr, the declaration of the callee
  2332. - for MemberExpr, the declaration of the referenced member
  2333. - for CXXConstructExpr, the declaration of the constructor
  2334. Also usable as Matcher&lt;T&gt; for any T supporting the getDecl() member
  2335. function. e.g. various subtypes of clang::Type and various expressions.
  2336. Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CallExpr.html">CallExpr</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXConstructExpr.html">CXXConstructExpr</a>&gt;,
  2337. Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1DeclRefExpr.html">DeclRefExpr</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1EnumType.html">EnumType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1InjectedClassNameType.html">InjectedClassNameType</a>&gt;,
  2338. Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1LabelStmt.html">LabelStmt</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberExpr.html">MemberExpr</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt;,
  2339. Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1RecordType.html">RecordType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TagType.html">TagType</a>&gt;,
  2340. Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateSpecializationType.html">TemplateSpecializationType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateTypeParmType.html">TemplateTypeParmType</a>&gt;,
  2341. Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TypedefType.html">TypedefType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1UnresolvedUsingType.html">UnresolvedUsingType</a>&gt;
  2342. </pre></td></tr>
  2343. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberExpr.html">MemberExpr</a>&gt;</td><td class="name" onclick="toggle('hasObjectExpression0')"><a name="hasObjectExpression0Anchor">hasObjectExpression</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt; InnerMatcher</td></tr>
  2344. <tr><td colspan="4" class="doc" id="hasObjectExpression0"><pre>Matches a member expression where the object expression is
  2345. matched by a given matcher.
  2346. Given
  2347. struct X { int m; };
  2348. void f(X x) { x.m; m; }
  2349. memberExpr(hasObjectExpression(hasType(recordDecl(hasName("X")))))))
  2350. matches "x.m" and "m"
  2351. with hasObjectExpression(...)
  2352. matching "x" and the implicit object expression of "m" which has type X*.
  2353. </pre></td></tr>
  2354. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberExpr.html">MemberExpr</a>&gt;</td><td class="name" onclick="toggle('member0')"><a name="member0Anchor">member</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ValueDecl.html">ValueDecl</a>&gt; InnerMatcher</td></tr>
  2355. <tr><td colspan="4" class="doc" id="member0"><pre>Matches a member expression where the member is matched by a
  2356. given matcher.
  2357. Given
  2358. struct { int first, second; } first, second;
  2359. int i(second.first);
  2360. int j(first.second);
  2361. memberExpr(member(hasName("first")))
  2362. matches second.first
  2363. but not first.second (because the member name there is "second").
  2364. </pre></td></tr>
  2365. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberPointerTypeLoc.html">MemberPointerTypeLoc</a>&gt;</td><td class="name" onclick="toggle('pointeeLoc1')"><a name="pointeeLoc1Anchor">pointeeLoc</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TypeLoc.html">TypeLoc</a>&gt;</td></tr>
  2366. <tr><td colspan="4" class="doc" id="pointeeLoc1"><pre>Narrows PointerType (and similar) matchers to those where the
  2367. pointee matches a given matcher.
  2368. Given
  2369. int *a;
  2370. int const *b;
  2371. float const *f;
  2372. pointerType(pointee(isConstQualified(), isInteger()))
  2373. matches "int const *b"
  2374. Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1BlockPointerType.html">BlockPointerType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberPointerType.html">MemberPointerType</a>&gt;,
  2375. Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1PointerType.html">PointerType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ReferenceType.html">ReferenceType</a>&gt;
  2376. </pre></td></tr>
  2377. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberPointerType.html">MemberPointerType</a>&gt;</td><td class="name" onclick="toggle('pointee1')"><a name="pointee1Anchor">pointee</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td></tr>
  2378. <tr><td colspan="4" class="doc" id="pointee1"><pre>Narrows PointerType (and similar) matchers to those where the
  2379. pointee matches a given matcher.
  2380. Given
  2381. int *a;
  2382. int const *b;
  2383. float const *f;
  2384. pointerType(pointee(isConstQualified(), isInteger()))
  2385. matches "int const *b"
  2386. Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1BlockPointerType.html">BlockPointerType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberPointerType.html">MemberPointerType</a>&gt;,
  2387. Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1PointerType.html">PointerType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ReferenceType.html">ReferenceType</a>&gt;
  2388. </pre></td></tr>
  2389. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1NestedNameSpecifierLoc.html">NestedNameSpecifierLoc</a>&gt;</td><td class="name" onclick="toggle('hasPrefix1')"><a name="hasPrefix1Anchor">hasPrefix</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1NestedNameSpecifierLoc.html">NestedNameSpecifierLoc</a>&gt; InnerMatcher</td></tr>
  2390. <tr><td colspan="4" class="doc" id="hasPrefix1"><pre>Matches on the prefix of a NestedNameSpecifierLoc.
  2391. Given
  2392. struct A { struct B { struct C {}; }; };
  2393. A::B::C c;
  2394. nestedNameSpecifierLoc(hasPrefix(loc(specifiesType(asString("struct A")))))
  2395. matches "A::"
  2396. </pre></td></tr>
  2397. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1NestedNameSpecifierLoc.html">NestedNameSpecifierLoc</a>&gt;</td><td class="name" onclick="toggle('specifiesTypeLoc0')"><a name="specifiesTypeLoc0Anchor">specifiesTypeLoc</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TypeLoc.html">TypeLoc</a>&gt; InnerMatcher</td></tr>
  2398. <tr><td colspan="4" class="doc" id="specifiesTypeLoc0"><pre>Matches nested name specifier locs that specify a type matching the
  2399. given TypeLoc.
  2400. Given
  2401. struct A { struct B { struct C {}; }; };
  2402. A::B::C c;
  2403. nestedNameSpecifierLoc(specifiesTypeLoc(loc(type(
  2404. hasDeclaration(recordDecl(hasName("A")))))))
  2405. matches "A::"
  2406. </pre></td></tr>
  2407. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1NestedNameSpecifier.html">NestedNameSpecifier</a>&gt;</td><td class="name" onclick="toggle('hasPrefix0')"><a name="hasPrefix0Anchor">hasPrefix</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1NestedNameSpecifier.html">NestedNameSpecifier</a>&gt; InnerMatcher</td></tr>
  2408. <tr><td colspan="4" class="doc" id="hasPrefix0"><pre>Matches on the prefix of a NestedNameSpecifier.
  2409. Given
  2410. struct A { struct B { struct C {}; }; };
  2411. A::B::C c;
  2412. nestedNameSpecifier(hasPrefix(specifiesType(asString("struct A")))) and
  2413. matches "A::"
  2414. </pre></td></tr>
  2415. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1NestedNameSpecifier.html">NestedNameSpecifier</a>&gt;</td><td class="name" onclick="toggle('specifiesNamespace0')"><a name="specifiesNamespace0Anchor">specifiesNamespace</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1NamespaceDecl.html">NamespaceDecl</a>&gt; InnerMatcher</td></tr>
  2416. <tr><td colspan="4" class="doc" id="specifiesNamespace0"><pre>Matches nested name specifiers that specify a namespace matching the
  2417. given namespace matcher.
  2418. Given
  2419. namespace ns { struct A {}; }
  2420. ns::A a;
  2421. nestedNameSpecifier(specifiesNamespace(hasName("ns")))
  2422. matches "ns::"
  2423. </pre></td></tr>
  2424. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1NestedNameSpecifier.html">NestedNameSpecifier</a>&gt;</td><td class="name" onclick="toggle('specifiesType0')"><a name="specifiesType0Anchor">specifiesType</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt; InnerMatcher</td></tr>
  2425. <tr><td colspan="4" class="doc" id="specifiesType0"><pre>Matches nested name specifiers that specify a type matching the
  2426. given QualType matcher without qualifiers.
  2427. Given
  2428. struct A { struct B { struct C {}; }; };
  2429. A::B::C c;
  2430. nestedNameSpecifier(specifiesType(hasDeclaration(recordDecl(hasName("A")))))
  2431. matches "A::"
  2432. </pre></td></tr>
  2433. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ParenType.html">ParenType</a>&gt;</td><td class="name" onclick="toggle('innerType0')"><a name="innerType0Anchor">innerType</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td></tr>
  2434. <tr><td colspan="4" class="doc" id="innerType0"><pre>Matches ParenType nodes where the inner type is a specific type.
  2435. Given
  2436. int (*ptr_to_array)[4];
  2437. int (*ptr_to_func)(int);
  2438. varDecl(hasType(pointsTo(parenType(innerType(functionType()))))) matches
  2439. ptr_to_func but not ptr_to_array.
  2440. Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ParenType.html">ParenType</a>&gt;
  2441. </pre></td></tr>
  2442. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1PointerTypeLoc.html">PointerTypeLoc</a>&gt;</td><td class="name" onclick="toggle('pointeeLoc2')"><a name="pointeeLoc2Anchor">pointeeLoc</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TypeLoc.html">TypeLoc</a>&gt;</td></tr>
  2443. <tr><td colspan="4" class="doc" id="pointeeLoc2"><pre>Narrows PointerType (and similar) matchers to those where the
  2444. pointee matches a given matcher.
  2445. Given
  2446. int *a;
  2447. int const *b;
  2448. float const *f;
  2449. pointerType(pointee(isConstQualified(), isInteger()))
  2450. matches "int const *b"
  2451. Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1BlockPointerType.html">BlockPointerType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberPointerType.html">MemberPointerType</a>&gt;,
  2452. Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1PointerType.html">PointerType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ReferenceType.html">ReferenceType</a>&gt;
  2453. </pre></td></tr>
  2454. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1PointerType.html">PointerType</a>&gt;</td><td class="name" onclick="toggle('pointee2')"><a name="pointee2Anchor">pointee</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td></tr>
  2455. <tr><td colspan="4" class="doc" id="pointee2"><pre>Narrows PointerType (and similar) matchers to those where the
  2456. pointee matches a given matcher.
  2457. Given
  2458. int *a;
  2459. int const *b;
  2460. float const *f;
  2461. pointerType(pointee(isConstQualified(), isInteger()))
  2462. matches "int const *b"
  2463. Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1BlockPointerType.html">BlockPointerType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberPointerType.html">MemberPointerType</a>&gt;,
  2464. Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1PointerType.html">PointerType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ReferenceType.html">ReferenceType</a>&gt;
  2465. </pre></td></tr>
  2466. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt;</td><td class="name" onclick="toggle('hasCanonicalType0')"><a name="hasCanonicalType0Anchor">hasCanonicalType</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt; InnerMatcher</td></tr>
  2467. <tr><td colspan="4" class="doc" id="hasCanonicalType0"><pre>Matches QualTypes whose canonical type matches InnerMatcher.
  2468. Given:
  2469. typedef int &amp;int_ref;
  2470. int a;
  2471. int_ref b = a;
  2472. varDecl(hasType(qualType(referenceType()))))) will not match the
  2473. declaration of b but varDecl(hasType(qualType(hasCanonicalType(referenceType())))))) does.
  2474. </pre></td></tr>
  2475. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt;</td><td class="name" onclick="toggle('hasDeclaration6')"><a name="hasDeclaration6Anchor">hasDeclaration</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt; InnerMatcher</td></tr>
  2476. <tr><td colspan="4" class="doc" id="hasDeclaration6"><pre>Matches a node if the declaration associated with that node
  2477. matches the given matcher.
  2478. The associated declaration is:
  2479. - for type nodes, the declaration of the underlying type
  2480. - for CallExpr, the declaration of the callee
  2481. - for MemberExpr, the declaration of the referenced member
  2482. - for CXXConstructExpr, the declaration of the constructor
  2483. Also usable as Matcher&lt;T&gt; for any T supporting the getDecl() member
  2484. function. e.g. various subtypes of clang::Type and various expressions.
  2485. Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CallExpr.html">CallExpr</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXConstructExpr.html">CXXConstructExpr</a>&gt;,
  2486. Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1DeclRefExpr.html">DeclRefExpr</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1EnumType.html">EnumType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1InjectedClassNameType.html">InjectedClassNameType</a>&gt;,
  2487. Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1LabelStmt.html">LabelStmt</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberExpr.html">MemberExpr</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt;,
  2488. Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1RecordType.html">RecordType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TagType.html">TagType</a>&gt;,
  2489. Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateSpecializationType.html">TemplateSpecializationType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateTypeParmType.html">TemplateTypeParmType</a>&gt;,
  2490. Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TypedefType.html">TypedefType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1UnresolvedUsingType.html">UnresolvedUsingType</a>&gt;
  2491. </pre></td></tr>
  2492. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt;</td><td class="name" onclick="toggle('pointsTo1')"><a name="pointsTo1Anchor">pointsTo</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt; InnerMatcher</td></tr>
  2493. <tr><td colspan="4" class="doc" id="pointsTo1"><pre>Overloaded to match the pointee type's declaration.
  2494. </pre></td></tr>
  2495. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt;</td><td class="name" onclick="toggle('pointsTo0')"><a name="pointsTo0Anchor">pointsTo</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt; InnerMatcher</td></tr>
  2496. <tr><td colspan="4" class="doc" id="pointsTo0"><pre>Matches if the matched type is a pointer type and the pointee type
  2497. matches the specified matcher.
  2498. Example matches y-&gt;x()
  2499. (matcher = callExpr(on(hasType(pointsTo(recordDecl(hasName("Y")))))))
  2500. class Y { public: void x(); };
  2501. void z() { Y *y; y-&gt;x(); }
  2502. </pre></td></tr>
  2503. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt;</td><td class="name" onclick="toggle('references1')"><a name="references1Anchor">references</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt; InnerMatcher</td></tr>
  2504. <tr><td colspan="4" class="doc" id="references1"><pre>Overloaded to match the referenced type's declaration.
  2505. </pre></td></tr>
  2506. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt;</td><td class="name" onclick="toggle('references0')"><a name="references0Anchor">references</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt; InnerMatcher</td></tr>
  2507. <tr><td colspan="4" class="doc" id="references0"><pre>Matches if the matched type is a reference type and the referenced
  2508. type matches the specified matcher.
  2509. Example matches X &amp;x and const X &amp;y
  2510. (matcher = varDecl(hasType(references(recordDecl(hasName("X"))))))
  2511. class X {
  2512. void a(X b) {
  2513. X &amp;x = b;
  2514. const X &amp;y = b;
  2515. };
  2516. </pre></td></tr>
  2517. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1RecordType.html">RecordType</a>&gt;</td><td class="name" onclick="toggle('hasDeclaration5')"><a name="hasDeclaration5Anchor">hasDeclaration</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt; InnerMatcher</td></tr>
  2518. <tr><td colspan="4" class="doc" id="hasDeclaration5"><pre>Matches a node if the declaration associated with that node
  2519. matches the given matcher.
  2520. The associated declaration is:
  2521. - for type nodes, the declaration of the underlying type
  2522. - for CallExpr, the declaration of the callee
  2523. - for MemberExpr, the declaration of the referenced member
  2524. - for CXXConstructExpr, the declaration of the constructor
  2525. Also usable as Matcher&lt;T&gt; for any T supporting the getDecl() member
  2526. function. e.g. various subtypes of clang::Type and various expressions.
  2527. Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CallExpr.html">CallExpr</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXConstructExpr.html">CXXConstructExpr</a>&gt;,
  2528. Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1DeclRefExpr.html">DeclRefExpr</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1EnumType.html">EnumType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1InjectedClassNameType.html">InjectedClassNameType</a>&gt;,
  2529. Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1LabelStmt.html">LabelStmt</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberExpr.html">MemberExpr</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt;,
  2530. Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1RecordType.html">RecordType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TagType.html">TagType</a>&gt;,
  2531. Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateSpecializationType.html">TemplateSpecializationType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateTypeParmType.html">TemplateTypeParmType</a>&gt;,
  2532. Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TypedefType.html">TypedefType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1UnresolvedUsingType.html">UnresolvedUsingType</a>&gt;
  2533. </pre></td></tr>
  2534. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ReferenceTypeLoc.html">ReferenceTypeLoc</a>&gt;</td><td class="name" onclick="toggle('pointeeLoc3')"><a name="pointeeLoc3Anchor">pointeeLoc</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TypeLoc.html">TypeLoc</a>&gt;</td></tr>
  2535. <tr><td colspan="4" class="doc" id="pointeeLoc3"><pre>Narrows PointerType (and similar) matchers to those where the
  2536. pointee matches a given matcher.
  2537. Given
  2538. int *a;
  2539. int const *b;
  2540. float const *f;
  2541. pointerType(pointee(isConstQualified(), isInteger()))
  2542. matches "int const *b"
  2543. Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1BlockPointerType.html">BlockPointerType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberPointerType.html">MemberPointerType</a>&gt;,
  2544. Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1PointerType.html">PointerType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ReferenceType.html">ReferenceType</a>&gt;
  2545. </pre></td></tr>
  2546. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ReferenceType.html">ReferenceType</a>&gt;</td><td class="name" onclick="toggle('pointee3')"><a name="pointee3Anchor">pointee</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td></tr>
  2547. <tr><td colspan="4" class="doc" id="pointee3"><pre>Narrows PointerType (and similar) matchers to those where the
  2548. pointee matches a given matcher.
  2549. Given
  2550. int *a;
  2551. int const *b;
  2552. float const *f;
  2553. pointerType(pointee(isConstQualified(), isInteger()))
  2554. matches "int const *b"
  2555. Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1BlockPointerType.html">BlockPointerType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberPointerType.html">MemberPointerType</a>&gt;,
  2556. Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1PointerType.html">PointerType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ReferenceType.html">ReferenceType</a>&gt;
  2557. </pre></td></tr>
  2558. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('alignOfExpr0')"><a name="alignOfExpr0Anchor">alignOfExpr</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1UnaryExprOrTypeTraitExpr.html">UnaryExprOrTypeTraitExpr</a>&gt; InnerMatcher</td></tr>
  2559. <tr><td colspan="4" class="doc" id="alignOfExpr0"><pre>Same as unaryExprOrTypeTraitExpr, but only matching
  2560. alignof.
  2561. </pre></td></tr>
  2562. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('sizeOfExpr0')"><a name="sizeOfExpr0Anchor">sizeOfExpr</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1UnaryExprOrTypeTraitExpr.html">UnaryExprOrTypeTraitExpr</a>&gt; InnerMatcher</td></tr>
  2563. <tr><td colspan="4" class="doc" id="sizeOfExpr0"><pre>Same as unaryExprOrTypeTraitExpr, but only matching
  2564. sizeof.
  2565. </pre></td></tr>
  2566. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1SwitchStmt.html">SwitchStmt</a>&gt;</td><td class="name" onclick="toggle('forEachSwitchCase0')"><a name="forEachSwitchCase0Anchor">forEachSwitchCase</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1SwitchCase.html">SwitchCase</a>&gt; InnerMatcher</td></tr>
  2567. <tr><td colspan="4" class="doc" id="forEachSwitchCase0"><pre>Matches each case or default statement belonging to the given switch
  2568. statement. This matcher may produce multiple matches.
  2569. Given
  2570. switch (1) { case 1: case 2: default: switch (2) { case 3: case 4: ; } }
  2571. switchStmt(forEachSwitchCase(caseStmt().bind("c"))).bind("s")
  2572. matches four times, with "c" binding each of "case 1:", "case 2:",
  2573. "case 3:" and "case 4:", and "s" respectively binding "switch (1)",
  2574. "switch (1)", "switch (2)" and "switch (2)".
  2575. </pre></td></tr>
  2576. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TagType.html">TagType</a>&gt;</td><td class="name" onclick="toggle('hasDeclaration4')"><a name="hasDeclaration4Anchor">hasDeclaration</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt; InnerMatcher</td></tr>
  2577. <tr><td colspan="4" class="doc" id="hasDeclaration4"><pre>Matches a node if the declaration associated with that node
  2578. matches the given matcher.
  2579. The associated declaration is:
  2580. - for type nodes, the declaration of the underlying type
  2581. - for CallExpr, the declaration of the callee
  2582. - for MemberExpr, the declaration of the referenced member
  2583. - for CXXConstructExpr, the declaration of the constructor
  2584. Also usable as Matcher&lt;T&gt; for any T supporting the getDecl() member
  2585. function. e.g. various subtypes of clang::Type and various expressions.
  2586. Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CallExpr.html">CallExpr</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXConstructExpr.html">CXXConstructExpr</a>&gt;,
  2587. Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1DeclRefExpr.html">DeclRefExpr</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1EnumType.html">EnumType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1InjectedClassNameType.html">InjectedClassNameType</a>&gt;,
  2588. Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1LabelStmt.html">LabelStmt</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberExpr.html">MemberExpr</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt;,
  2589. Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1RecordType.html">RecordType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TagType.html">TagType</a>&gt;,
  2590. Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateSpecializationType.html">TemplateSpecializationType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateTypeParmType.html">TemplateTypeParmType</a>&gt;,
  2591. Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TypedefType.html">TypedefType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1UnresolvedUsingType.html">UnresolvedUsingType</a>&gt;
  2592. </pre></td></tr>
  2593. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateArgument.html">TemplateArgument</a>&gt;</td><td class="name" onclick="toggle('isExpr0')"><a name="isExpr0Anchor">isExpr</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt; InnerMatcher</td></tr>
  2594. <tr><td colspan="4" class="doc" id="isExpr0"><pre>Matches a sugar TemplateArgument that refers to a certain expression.
  2595. Given
  2596. template&lt;typename T&gt; struct A {};
  2597. struct B { B* next; };
  2598. A&lt;&amp;B::next&gt; a;
  2599. templateSpecializationType(hasAnyTemplateArgument(
  2600. isExpr(hasDescendant(declRefExpr(to(fieldDecl(hasName("next"))))))))
  2601. matches the specialization A&lt;&amp;B::next&gt; with fieldDecl(...) matching
  2602. B::next
  2603. </pre></td></tr>
  2604. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateArgument.html">TemplateArgument</a>&gt;</td><td class="name" onclick="toggle('refersToDeclaration0')"><a name="refersToDeclaration0Anchor">refersToDeclaration</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt; InnerMatcher</td></tr>
  2605. <tr><td colspan="4" class="doc" id="refersToDeclaration0"><pre>Matches a canonical TemplateArgument that refers to a certain
  2606. declaration.
  2607. Given
  2608. template&lt;typename T&gt; struct A {};
  2609. struct B { B* next; };
  2610. A&lt;&amp;B::next&gt; a;
  2611. classTemplateSpecializationDecl(hasAnyTemplateArgument(
  2612. refersToDeclaration(fieldDecl(hasName("next"))))
  2613. matches the specialization A&lt;&amp;B::next&gt; with fieldDecl(...) matching
  2614. B::next
  2615. </pre></td></tr>
  2616. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateArgument.html">TemplateArgument</a>&gt;</td><td class="name" onclick="toggle('refersToType0')"><a name="refersToType0Anchor">refersToType</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt; InnerMatcher</td></tr>
  2617. <tr><td colspan="4" class="doc" id="refersToType0"><pre>Matches a TemplateArgument that refers to a certain type.
  2618. Given
  2619. struct X {};
  2620. template&lt;typename T&gt; struct A {};
  2621. A&lt;X&gt; a;
  2622. classTemplateSpecializationDecl(hasAnyTemplateArgument(
  2623. refersToType(class(hasName("X")))))
  2624. matches the specialization A&lt;X&gt;
  2625. </pre></td></tr>
  2626. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateSpecializationType.html">TemplateSpecializationType</a>&gt;</td><td class="name" onclick="toggle('hasAnyTemplateArgument1')"><a name="hasAnyTemplateArgument1Anchor">hasAnyTemplateArgument</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateArgument.html">TemplateArgument</a>&gt; InnerMatcher</td></tr>
  2627. <tr><td colspan="4" class="doc" id="hasAnyTemplateArgument1"><pre>Matches classTemplateSpecializations that have at least one
  2628. TemplateArgument matching the given InnerMatcher.
  2629. Given
  2630. template&lt;typename T&gt; class A {};
  2631. template&lt;&gt; class A&lt;double&gt; {};
  2632. A&lt;int&gt; a;
  2633. classTemplateSpecializationDecl(hasAnyTemplateArgument(
  2634. refersToType(asString("int"))))
  2635. matches the specialization A&lt;int&gt;
  2636. </pre></td></tr>
  2637. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateSpecializationType.html">TemplateSpecializationType</a>&gt;</td><td class="name" onclick="toggle('hasDeclaration3')"><a name="hasDeclaration3Anchor">hasDeclaration</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt; InnerMatcher</td></tr>
  2638. <tr><td colspan="4" class="doc" id="hasDeclaration3"><pre>Matches a node if the declaration associated with that node
  2639. matches the given matcher.
  2640. The associated declaration is:
  2641. - for type nodes, the declaration of the underlying type
  2642. - for CallExpr, the declaration of the callee
  2643. - for MemberExpr, the declaration of the referenced member
  2644. - for CXXConstructExpr, the declaration of the constructor
  2645. Also usable as Matcher&lt;T&gt; for any T supporting the getDecl() member
  2646. function. e.g. various subtypes of clang::Type and various expressions.
  2647. Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CallExpr.html">CallExpr</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXConstructExpr.html">CXXConstructExpr</a>&gt;,
  2648. Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1DeclRefExpr.html">DeclRefExpr</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1EnumType.html">EnumType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1InjectedClassNameType.html">InjectedClassNameType</a>&gt;,
  2649. Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1LabelStmt.html">LabelStmt</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberExpr.html">MemberExpr</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt;,
  2650. Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1RecordType.html">RecordType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TagType.html">TagType</a>&gt;,
  2651. Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateSpecializationType.html">TemplateSpecializationType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateTypeParmType.html">TemplateTypeParmType</a>&gt;,
  2652. Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TypedefType.html">TypedefType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1UnresolvedUsingType.html">UnresolvedUsingType</a>&gt;
  2653. </pre></td></tr>
  2654. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateSpecializationType.html">TemplateSpecializationType</a>&gt;</td><td class="name" onclick="toggle('hasTemplateArgument1')"><a name="hasTemplateArgument1Anchor">hasTemplateArgument</a></td><td>unsigned N, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateArgument.html">TemplateArgument</a>&gt; InnerMatcher</td></tr>
  2655. <tr><td colspan="4" class="doc" id="hasTemplateArgument1"><pre>Matches classTemplateSpecializations where the n'th TemplateArgument
  2656. matches the given InnerMatcher.
  2657. Given
  2658. template&lt;typename T, typename U&gt; class A {};
  2659. A&lt;bool, int&gt; b;
  2660. A&lt;int, bool&gt; c;
  2661. classTemplateSpecializationDecl(hasTemplateArgument(
  2662. 1, refersToType(asString("int"))))
  2663. matches the specialization A&lt;bool, int&gt;
  2664. </pre></td></tr>
  2665. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateTypeParmType.html">TemplateTypeParmType</a>&gt;</td><td class="name" onclick="toggle('hasDeclaration2')"><a name="hasDeclaration2Anchor">hasDeclaration</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt; InnerMatcher</td></tr>
  2666. <tr><td colspan="4" class="doc" id="hasDeclaration2"><pre>Matches a node if the declaration associated with that node
  2667. matches the given matcher.
  2668. The associated declaration is:
  2669. - for type nodes, the declaration of the underlying type
  2670. - for CallExpr, the declaration of the callee
  2671. - for MemberExpr, the declaration of the referenced member
  2672. - for CXXConstructExpr, the declaration of the constructor
  2673. Also usable as Matcher&lt;T&gt; for any T supporting the getDecl() member
  2674. function. e.g. various subtypes of clang::Type and various expressions.
  2675. Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CallExpr.html">CallExpr</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXConstructExpr.html">CXXConstructExpr</a>&gt;,
  2676. Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1DeclRefExpr.html">DeclRefExpr</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1EnumType.html">EnumType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1InjectedClassNameType.html">InjectedClassNameType</a>&gt;,
  2677. Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1LabelStmt.html">LabelStmt</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberExpr.html">MemberExpr</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt;,
  2678. Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1RecordType.html">RecordType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TagType.html">TagType</a>&gt;,
  2679. Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateSpecializationType.html">TemplateSpecializationType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateTypeParmType.html">TemplateTypeParmType</a>&gt;,
  2680. Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TypedefType.html">TypedefType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1UnresolvedUsingType.html">UnresolvedUsingType</a>&gt;
  2681. </pre></td></tr>
  2682. <tr><td>Matcher&lt;T&gt;</td><td class="name" onclick="toggle('findAll0')"><a name="findAll0Anchor">findAll</a></td><td>Matcher&lt;T&gt; Matcher</td></tr>
  2683. <tr><td colspan="4" class="doc" id="findAll0"><pre>Matches if the node or any descendant matches.
  2684. Generates results for each match.
  2685. For example, in:
  2686. class A { class B {}; class C {}; };
  2687. The matcher:
  2688. recordDecl(hasName("::A"), findAll(recordDecl(isDefinition()).bind("m")))
  2689. will generate results for A, B and C.
  2690. Usable as: Any Matcher
  2691. </pre></td></tr>
  2692. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TypedefType.html">TypedefType</a>&gt;</td><td class="name" onclick="toggle('hasDeclaration1')"><a name="hasDeclaration1Anchor">hasDeclaration</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt; InnerMatcher</td></tr>
  2693. <tr><td colspan="4" class="doc" id="hasDeclaration1"><pre>Matches a node if the declaration associated with that node
  2694. matches the given matcher.
  2695. The associated declaration is:
  2696. - for type nodes, the declaration of the underlying type
  2697. - for CallExpr, the declaration of the callee
  2698. - for MemberExpr, the declaration of the referenced member
  2699. - for CXXConstructExpr, the declaration of the constructor
  2700. Also usable as Matcher&lt;T&gt; for any T supporting the getDecl() member
  2701. function. e.g. various subtypes of clang::Type and various expressions.
  2702. Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CallExpr.html">CallExpr</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXConstructExpr.html">CXXConstructExpr</a>&gt;,
  2703. Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1DeclRefExpr.html">DeclRefExpr</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1EnumType.html">EnumType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1InjectedClassNameType.html">InjectedClassNameType</a>&gt;,
  2704. Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1LabelStmt.html">LabelStmt</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberExpr.html">MemberExpr</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt;,
  2705. Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1RecordType.html">RecordType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TagType.html">TagType</a>&gt;,
  2706. Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateSpecializationType.html">TemplateSpecializationType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateTypeParmType.html">TemplateTypeParmType</a>&gt;,
  2707. Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TypedefType.html">TypedefType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1UnresolvedUsingType.html">UnresolvedUsingType</a>&gt;
  2708. </pre></td></tr>
  2709. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1UnaryExprOrTypeTraitExpr.html">UnaryExprOrTypeTraitExpr</a>&gt;</td><td class="name" onclick="toggle('hasArgumentOfType0')"><a name="hasArgumentOfType0Anchor">hasArgumentOfType</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt; InnerMatcher</td></tr>
  2710. <tr><td colspan="4" class="doc" id="hasArgumentOfType0"><pre>Matches unary expressions that have a specific type of argument.
  2711. Given
  2712. int a, c; float b; int s = sizeof(a) + sizeof(b) + alignof(c);
  2713. unaryExprOrTypeTraitExpr(hasArgumentOfType(asString("int"))
  2714. matches sizeof(a) and alignof(c)
  2715. </pre></td></tr>
  2716. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1UnaryOperator.html">UnaryOperator</a>&gt;</td><td class="name" onclick="toggle('hasUnaryOperand0')"><a name="hasUnaryOperand0Anchor">hasUnaryOperand</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt; InnerMatcher</td></tr>
  2717. <tr><td colspan="4" class="doc" id="hasUnaryOperand0"><pre>Matches if the operand of a unary operator matches.
  2718. Example matches true (matcher = hasUnaryOperand(boolLiteral(equals(true))))
  2719. !true
  2720. </pre></td></tr>
  2721. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1UnresolvedUsingType.html">UnresolvedUsingType</a>&gt;</td><td class="name" onclick="toggle('hasDeclaration0')"><a name="hasDeclaration0Anchor">hasDeclaration</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt; InnerMatcher</td></tr>
  2722. <tr><td colspan="4" class="doc" id="hasDeclaration0"><pre>Matches a node if the declaration associated with that node
  2723. matches the given matcher.
  2724. The associated declaration is:
  2725. - for type nodes, the declaration of the underlying type
  2726. - for CallExpr, the declaration of the callee
  2727. - for MemberExpr, the declaration of the referenced member
  2728. - for CXXConstructExpr, the declaration of the constructor
  2729. Also usable as Matcher&lt;T&gt; for any T supporting the getDecl() member
  2730. function. e.g. various subtypes of clang::Type and various expressions.
  2731. Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CallExpr.html">CallExpr</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXConstructExpr.html">CXXConstructExpr</a>&gt;,
  2732. Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1DeclRefExpr.html">DeclRefExpr</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1EnumType.html">EnumType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1InjectedClassNameType.html">InjectedClassNameType</a>&gt;,
  2733. Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1LabelStmt.html">LabelStmt</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1MemberExpr.html">MemberExpr</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt;,
  2734. Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1RecordType.html">RecordType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TagType.html">TagType</a>&gt;,
  2735. Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateSpecializationType.html">TemplateSpecializationType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateTypeParmType.html">TemplateTypeParmType</a>&gt;,
  2736. Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TypedefType.html">TypedefType</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1UnresolvedUsingType.html">UnresolvedUsingType</a>&gt;
  2737. </pre></td></tr>
  2738. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1UsingDecl.html">UsingDecl</a>&gt;</td><td class="name" onclick="toggle('hasAnyUsingShadowDecl0')"><a name="hasAnyUsingShadowDecl0Anchor">hasAnyUsingShadowDecl</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1UsingShadowDecl.html">UsingShadowDecl</a>&gt; InnerMatcher</td></tr>
  2739. <tr><td colspan="4" class="doc" id="hasAnyUsingShadowDecl0"><pre>Matches any using shadow declaration.
  2740. Given
  2741. namespace X { void b(); }
  2742. using X::b;
  2743. usingDecl(hasAnyUsingShadowDecl(hasName("b"))))
  2744. matches using X::b </pre></td></tr>
  2745. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1UsingShadowDecl.html">UsingShadowDecl</a>&gt;</td><td class="name" onclick="toggle('hasTargetDecl0')"><a name="hasTargetDecl0Anchor">hasTargetDecl</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1NamedDecl.html">NamedDecl</a>&gt; InnerMatcher</td></tr>
  2746. <tr><td colspan="4" class="doc" id="hasTargetDecl0"><pre>Matches a using shadow declaration where the target declaration is
  2747. matched by the given matcher.
  2748. Given
  2749. namespace X { int a; void b(); }
  2750. using X::a;
  2751. using X::b;
  2752. usingDecl(hasAnyUsingShadowDecl(hasTargetDecl(functionDecl())))
  2753. matches using X::b but not using X::a </pre></td></tr>
  2754. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ValueDecl.html">ValueDecl</a>&gt;</td><td class="name" onclick="toggle('hasType3')"><a name="hasType3Anchor">hasType</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt; InnerMatcher</td></tr>
  2755. <tr><td colspan="4" class="doc" id="hasType3"><pre>Overloaded to match the declaration of the expression's or value
  2756. declaration's type.
  2757. In case of a value declaration (for example a variable declaration),
  2758. this resolves one layer of indirection. For example, in the value
  2759. declaration "X x;", recordDecl(hasName("X")) matches the declaration of X,
  2760. while varDecl(hasType(recordDecl(hasName("X")))) matches the declaration
  2761. of x."
  2762. Example matches x (matcher = expr(hasType(recordDecl(hasName("X")))))
  2763. and z (matcher = varDecl(hasType(recordDecl(hasName("X")))))
  2764. class X {};
  2765. void y(X &amp;x) { x; X z; }
  2766. Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ValueDecl.html">ValueDecl</a>&gt;
  2767. </pre></td></tr>
  2768. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ValueDecl.html">ValueDecl</a>&gt;</td><td class="name" onclick="toggle('hasType1')"><a name="hasType1Anchor">hasType</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt; InnerMatcher</td></tr>
  2769. <tr><td colspan="4" class="doc" id="hasType1"><pre>Matches if the expression's or declaration's type matches a type
  2770. matcher.
  2771. Example matches x (matcher = expr(hasType(recordDecl(hasName("X")))))
  2772. and z (matcher = varDecl(hasType(recordDecl(hasName("X")))))
  2773. class X {};
  2774. void y(X &amp;x) { x; X z; }
  2775. </pre></td></tr>
  2776. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1VarDecl.html">VarDecl</a>&gt;</td><td class="name" onclick="toggle('hasInitializer0')"><a name="hasInitializer0Anchor">hasInitializer</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt; InnerMatcher</td></tr>
  2777. <tr><td colspan="4" class="doc" id="hasInitializer0"><pre>Matches a variable declaration that has an initializer expression
  2778. that matches the given matcher.
  2779. Example matches x (matcher = varDecl(hasInitializer(callExpr())))
  2780. bool y() { return true; }
  2781. bool x = y();
  2782. </pre></td></tr>
  2783. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1VariableArrayType.html">VariableArrayType</a>&gt;</td><td class="name" onclick="toggle('hasSizeExpr0')"><a name="hasSizeExpr0Anchor">hasSizeExpr</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt; InnerMatcher</td></tr>
  2784. <tr><td colspan="4" class="doc" id="hasSizeExpr0"><pre>Matches VariableArrayType nodes that have a specific size
  2785. expression.
  2786. Given
  2787. void f(int b) {
  2788. int a[b];
  2789. }
  2790. variableArrayType(hasSizeExpr(ignoringImpCasts(declRefExpr(to(
  2791. varDecl(hasName("b")))))))
  2792. matches "int a[b]"
  2793. </pre></td></tr>
  2794. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1WhileStmt.html">WhileStmt</a>&gt;</td><td class="name" onclick="toggle('hasBody2')"><a name="hasBody2Anchor">hasBody</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt; InnerMatcher</td></tr>
  2795. <tr><td colspan="4" class="doc" id="hasBody2"><pre>Matches a 'for', 'while', or 'do while' statement that has
  2796. a given body.
  2797. Given
  2798. for (;;) {}
  2799. hasBody(compoundStmt())
  2800. matches 'for (;;) {}'
  2801. with compoundStmt()
  2802. matching '{}'
  2803. </pre></td></tr>
  2804. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1WhileStmt.html">WhileStmt</a>&gt;</td><td class="name" onclick="toggle('hasCondition2')"><a name="hasCondition2Anchor">hasCondition</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt; InnerMatcher</td></tr>
  2805. <tr><td colspan="4" class="doc" id="hasCondition2"><pre>Matches the condition expression of an if statement, for loop,
  2806. or conditional operator.
  2807. Example matches true (matcher = hasCondition(boolLiteral(equals(true))))
  2808. if (true) {}
  2809. </pre></td></tr>
  2810. <tr><td>Matcher&lt;internal::BindableMatcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1NestedNameSpecifierLoc.html">NestedNameSpecifierLoc</a>&gt;&gt;</td><td class="name" onclick="toggle('loc1')"><a name="loc1Anchor">loc</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1NestedNameSpecifier.html">NestedNameSpecifier</a>&gt; InnerMatcher</td></tr>
  2811. <tr><td colspan="4" class="doc" id="loc1"><pre>Matches NestedNameSpecifierLocs for which the given inner
  2812. NestedNameSpecifier-matcher matches.
  2813. </pre></td></tr>
  2814. <tr><td>Matcher&lt;internal::BindableMatcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TypeLoc.html">TypeLoc</a>&gt;&gt;</td><td class="name" onclick="toggle('loc0')"><a name="loc0Anchor">loc</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt; InnerMatcher</td></tr>
  2815. <tr><td colspan="4" class="doc" id="loc0"><pre>Matches TypeLocs for which the given inner
  2816. QualType-matcher matches.
  2817. </pre></td></tr>
  2818. <!--END_TRAVERSAL_MATCHERS -->
  2819. </table>
  2820. </div>
  2821. </body>
  2822. </html>