LibASTMatchersReference.html 231 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192
  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('linkageSpecDecl0')"><a name="linkageSpecDecl0Anchor">linkageSpecDecl</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1LinkageSpecDecl.html">LinkageSpecDecl</a>&gt;...</td></tr>
  193. <tr><td colspan="4" class="doc" id="linkageSpecDecl0"><pre>Matches a declaration of a linkage specification.
  194. Given
  195. extern "C" {}
  196. linkageSpecDecl()
  197. matches "extern "C" {}"
  198. </pre></td></tr>
  199. <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>
  200. <tr><td colspan="4" class="doc" id="methodDecl0"><pre>Matches method declarations.
  201. Example matches y
  202. class X { void y(); };
  203. </pre></td></tr>
  204. <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>
  205. <tr><td colspan="4" class="doc" id="namedDecl0"><pre>Matches a declaration of anything that could have a name.
  206. Example matches X, S, the anonymous union type, i, and U;
  207. typedef int X;
  208. struct S {
  209. union {
  210. int i;
  211. } U;
  212. };
  213. </pre></td></tr>
  214. <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>
  215. <tr><td colspan="4" class="doc" id="namespaceDecl0"><pre>Matches a declaration of a namespace.
  216. Given
  217. namespace {}
  218. namespace test {}
  219. namespaceDecl()
  220. matches "namespace {}" and "namespace test {}"
  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('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>
  223. <tr><td colspan="4" class="doc" id="parmVarDecl0"><pre>Matches parameter variable declarations.
  224. Given
  225. void f(int x);
  226. parmVarDecl()
  227. matches int x.
  228. </pre></td></tr>
  229. <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>
  230. <tr><td colspan="4" class="doc" id="recordDecl0"><pre>Matches C++ class declarations.
  231. Example matches X, Z
  232. class X;
  233. template&lt;class T&gt; class Z {};
  234. </pre></td></tr>
  235. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('translationUnitDecl0')"><a name="translationUnitDecl0Anchor">translationUnitDecl</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TranslationUnitDecl.html">TranslationUnitDecl</a>&gt;...</td></tr>
  236. <tr><td colspan="4" class="doc" id="translationUnitDecl0"><pre>Matches the top declaration context.
  237. Given
  238. int X;
  239. namespace NS {
  240. int Y;
  241. } namespace NS
  242. decl(hasDeclContext(translationUnitDecl()))
  243. matches "int X", but not "int Y".
  244. </pre></td></tr>
  245. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('typedefDecl0')"><a name="typedefDecl0Anchor">typedefDecl</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TypedefDecl.html">TypedefDecl</a>&gt;...</td></tr>
  246. <tr><td colspan="4" class="doc" id="typedefDecl0"><pre>Matches typedef declarations.
  247. Given
  248. typedef int X;
  249. typedefDecl()
  250. matches "typedef int X"
  251. </pre></td></tr>
  252. <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>
  253. <tr><td colspan="4" class="doc" id="unresolvedUsingValueDecl0"><pre>Matches unresolved using value declarations.
  254. Given
  255. template&lt;typename X&gt;
  256. class C : private X {
  257. using X::x;
  258. };
  259. unresolvedUsingValueDecl()
  260. matches using X::x </pre></td></tr>
  261. <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>
  262. <tr><td colspan="4" class="doc" id="usingDecl0"><pre>Matches using declarations.
  263. Given
  264. namespace X { int x; }
  265. using X::x;
  266. usingDecl()
  267. matches using X::x </pre></td></tr>
  268. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('usingDirectiveDecl0')"><a name="usingDirectiveDecl0Anchor">usingDirectiveDecl</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1UsingDirectiveDecl.html">UsingDirectiveDecl</a>&gt;...</td></tr>
  269. <tr><td colspan="4" class="doc" id="usingDirectiveDecl0"><pre>Matches using namespace declarations.
  270. Given
  271. namespace X { int x; }
  272. using namespace X;
  273. usingDirectiveDecl()
  274. matches using namespace X </pre></td></tr>
  275. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('valueDecl0')"><a name="valueDecl0Anchor">valueDecl</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ValueDecl.html">ValueDecl</a>&gt;...</td></tr>
  276. <tr><td colspan="4" class="doc" id="valueDecl0"><pre>Matches any value declaration.
  277. Example matches A, B, C and F
  278. enum X { A, B, C };
  279. void F();
  280. </pre></td></tr>
  281. <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>
  282. <tr><td colspan="4" class="doc" id="varDecl0"><pre>Matches variable declarations.
  283. Note: this does not match declarations of member variables, which are
  284. "field" declarations in Clang parlance.
  285. Example matches a
  286. int a;
  287. </pre></td></tr>
  288. <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>
  289. <tr><td colspan="4" class="doc" id="nestedNameSpecifierLoc0"><pre>Same as nestedNameSpecifier but matches NestedNameSpecifierLoc.
  290. </pre></td></tr>
  291. <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>
  292. <tr><td colspan="4" class="doc" id="nestedNameSpecifier0"><pre>Matches nested name specifiers.
  293. Given
  294. namespace ns {
  295. struct A { static void f(); };
  296. void A::f() {}
  297. void g() { A::f(); }
  298. }
  299. ns::A a;
  300. nestedNameSpecifier()
  301. matches "ns::" and both "A::"
  302. </pre></td></tr>
  303. <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>
  304. <tr><td colspan="4" class="doc" id="qualType0"><pre>Matches QualTypes in the clang AST.
  305. </pre></td></tr>
  306. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('CUDAKernelCallExpr0')"><a name="CUDAKernelCallExpr0Anchor">CUDAKernelCallExpr</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CUDAKernelCallExpr.html">CUDAKernelCallExpr</a>&gt;...</td></tr>
  307. <tr><td colspan="4" class="doc" id="CUDAKernelCallExpr0"><pre>Matches CUDA kernel call expression.
  308. Example matches,
  309. kernel&lt;&lt;&lt;i,j&gt;&gt;&gt;();
  310. </pre></td></tr>
  311. <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>
  312. <tr><td colspan="4" class="doc" id="arraySubscriptExpr0"><pre>Matches array subscript expressions.
  313. Given
  314. int i = a[1];
  315. arraySubscriptExpr()
  316. matches "a[1]"
  317. </pre></td></tr>
  318. <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>
  319. <tr><td colspan="4" class="doc" id="asmStmt0"><pre>Matches asm statements.
  320. int i = 100;
  321. __asm("mov al, 2");
  322. asmStmt()
  323. matches '__asm("mov al, 2")'
  324. </pre></td></tr>
  325. <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>
  326. <tr><td colspan="4" class="doc" id="binaryOperator0"><pre>Matches binary operator expressions.
  327. Example matches a || b
  328. !(a || b)
  329. </pre></td></tr>
  330. <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>
  331. <tr><td colspan="4" class="doc" id="bindTemporaryExpr0"><pre>Matches nodes where temporaries are created.
  332. Example matches FunctionTakesString(GetStringByValue())
  333. (matcher = bindTemporaryExpr())
  334. FunctionTakesString(GetStringByValue());
  335. FunctionTakesStringByPointer(GetStringPointer());
  336. </pre></td></tr>
  337. <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>
  338. <tr><td colspan="4" class="doc" id="boolLiteral0"><pre>Matches bool literals.
  339. Example matches true
  340. true
  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('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>
  343. <tr><td colspan="4" class="doc" id="breakStmt0"><pre>Matches break statements.
  344. Given
  345. while (true) { break; }
  346. breakStmt()
  347. matches 'break'
  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('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>
  350. <tr><td colspan="4" class="doc" id="cStyleCastExpr0"><pre>Matches a C-style cast expression.
  351. Example: Matches (int*) 2.2f in
  352. int i = (int) 2.2f;
  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('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>
  355. <tr><td colspan="4" class="doc" id="callExpr0"><pre>Matches call expressions.
  356. Example matches x.y() and y()
  357. X x;
  358. x.y();
  359. y();
  360. </pre></td></tr>
  361. <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>
  362. <tr><td colspan="4" class="doc" id="caseStmt0"><pre>Matches case statements inside switch statements.
  363. Given
  364. switch(a) { case 42: break; default: break; }
  365. caseStmt()
  366. matches 'case 42: break;'.
  367. </pre></td></tr>
  368. <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>
  369. <tr><td colspan="4" class="doc" id="castExpr0"><pre>Matches any cast nodes of Clang's AST.
  370. Example: castExpr() matches each of the following:
  371. (int) 3;
  372. const_cast&lt;Expr *&gt;(SubExpr);
  373. char c = 0;
  374. but does not match
  375. int i = (0);
  376. int k = 0;
  377. </pre></td></tr>
  378. <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>
  379. <tr><td colspan="4" class="doc" id="catchStmt0"><pre>Matches catch statements.
  380. try {} catch(int i) {}
  381. catchStmt()
  382. matches 'catch(int i)'
  383. </pre></td></tr>
  384. <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>
  385. <tr><td colspan="4" class="doc" id="characterLiteral0"><pre>Matches character literals (also matches wchar_t).
  386. Not matching Hex-encoded chars (e.g. 0x1234, which is a IntegerLiteral),
  387. though.
  388. Example matches 'a', L'a'
  389. char ch = 'a'; wchar_t chw = L'a';
  390. </pre></td></tr>
  391. <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>
  392. <tr><td colspan="4" class="doc" id="compoundLiteralExpr0"><pre>Matches compound (i.e. non-scalar) literals
  393. Example match: {1}, (1, 2)
  394. int array[4] = {1}; vector int myvec = (vector int)(1, 2);
  395. </pre></td></tr>
  396. <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>
  397. <tr><td colspan="4" class="doc" id="compoundStmt0"><pre>Matches compound statements.
  398. Example matches '{}' and '{{}}'in 'for (;;) {{}}'
  399. for (;;) {{}}
  400. </pre></td></tr>
  401. <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>
  402. <tr><td colspan="4" class="doc" id="conditionalOperator0"><pre>Matches conditional operator expressions.
  403. Example matches a ? b : c
  404. (a ? b : c) + 42
  405. </pre></td></tr>
  406. <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>
  407. <tr><td colspan="4" class="doc" id="constCastExpr0"><pre>Matches a const_cast expression.
  408. Example: Matches const_cast&lt;int*&gt;(&amp;r) in
  409. int n = 42;
  410. const int &amp;r(n);
  411. int* p = const_cast&lt;int*&gt;(&amp;r);
  412. </pre></td></tr>
  413. <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>
  414. <tr><td colspan="4" class="doc" id="constructExpr0"><pre>Matches constructor call expressions (including implicit ones).
  415. Example matches string(ptr, n) and ptr within arguments of f
  416. (matcher = constructExpr())
  417. void f(const string &amp;a, const string &amp;b);
  418. char *ptr;
  419. int n;
  420. f(string(ptr, n), ptr);
  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('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>
  423. <tr><td colspan="4" class="doc" id="continueStmt0"><pre>Matches continue statements.
  424. Given
  425. while (true) { continue; }
  426. continueStmt()
  427. matches 'continue'
  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('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>
  430. <tr><td colspan="4" class="doc" id="declRefExpr0"><pre>Matches expressions that refer to declarations.
  431. Example matches x in if (x)
  432. bool x;
  433. if (x) {}
  434. </pre></td></tr>
  435. <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>
  436. <tr><td colspan="4" class="doc" id="declStmt0"><pre>Matches declaration statements.
  437. Given
  438. int a;
  439. declStmt()
  440. matches 'int a'.
  441. </pre></td></tr>
  442. <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>
  443. <tr><td colspan="4" class="doc" id="defaultArgExpr0"><pre>Matches the value of a default argument at the call site.
  444. Example matches the CXXDefaultArgExpr placeholder inserted for the
  445. default value of the second parameter in the call expression f(42)
  446. (matcher = defaultArgExpr())
  447. void f(int x, int y = 0);
  448. f(42);
  449. </pre></td></tr>
  450. <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>
  451. <tr><td colspan="4" class="doc" id="defaultStmt0"><pre>Matches default statements inside switch statements.
  452. Given
  453. switch(a) { case 42: break; default: break; }
  454. defaultStmt()
  455. matches 'default: break;'.
  456. </pre></td></tr>
  457. <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>
  458. <tr><td colspan="4" class="doc" id="deleteExpr0"><pre>Matches delete expressions.
  459. Given
  460. delete X;
  461. deleteExpr()
  462. matches 'delete X'.
  463. </pre></td></tr>
  464. <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>
  465. <tr><td colspan="4" class="doc" id="doStmt0"><pre>Matches do statements.
  466. Given
  467. do {} while (true);
  468. doStmt()
  469. matches 'do {} while(true)'
  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('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>
  472. <tr><td colspan="4" class="doc" id="dynamicCastExpr0"><pre>Matches a dynamic_cast expression.
  473. Example:
  474. dynamicCastExpr()
  475. matches
  476. dynamic_cast&lt;D*&gt;(&amp;b);
  477. in
  478. struct B { virtual ~B() {} }; struct D : B {};
  479. B b;
  480. D* p = dynamic_cast&lt;D*&gt;(&amp;b);
  481. </pre></td></tr>
  482. <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>
  483. <tr><td colspan="4" class="doc" id="explicitCastExpr0"><pre>Matches explicit cast expressions.
  484. Matches any cast expression written in user code, whether it be a
  485. C-style cast, a functional-style cast, or a keyword cast.
  486. Does not match implicit conversions.
  487. Note: the name "explicitCast" is chosen to match Clang's terminology, as
  488. Clang uses the term "cast" to apply to implicit conversions as well as to
  489. actual cast expressions.
  490. hasDestinationType.
  491. Example: matches all five of the casts in
  492. int((int)(reinterpret_cast&lt;int&gt;(static_cast&lt;int&gt;(const_cast&lt;int&gt;(42)))))
  493. but does not match the implicit conversion in
  494. long ell = 42;
  495. </pre></td></tr>
  496. <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>
  497. <tr><td colspan="4" class="doc" id="expr0"><pre>Matches expressions.
  498. Example matches x()
  499. void f() { x(); }
  500. </pre></td></tr>
  501. <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>
  502. <tr><td colspan="4" class="doc" id="exprWithCleanups0"><pre>Matches expressions that introduce cleanups to be run at the end
  503. of the sub-expression's evaluation.
  504. Example matches std::string()
  505. const std::string str = std::string();
  506. </pre></td></tr>
  507. <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>
  508. <tr><td colspan="4" class="doc" id="floatLiteral0"><pre>Matches float literals of all sizes encodings, e.g.
  509. 1.0, 1.0f, 1.0L and 1e10.
  510. Does not match implicit conversions such as
  511. float a = 10;
  512. </pre></td></tr>
  513. <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>
  514. <tr><td colspan="4" class="doc" id="forRangeStmt0"><pre>Matches range-based for statements.
  515. forRangeStmt() matches 'for (auto a : i)'
  516. int i[] = {1, 2, 3}; for (auto a : i);
  517. for(int j = 0; j &lt; 5; ++j);
  518. </pre></td></tr>
  519. <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>
  520. <tr><td colspan="4" class="doc" id="forStmt0"><pre>Matches for statements.
  521. Example matches 'for (;;) {}'
  522. for (;;) {}
  523. int i[] = {1, 2, 3}; for (auto a : i);
  524. </pre></td></tr>
  525. <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>
  526. <tr><td colspan="4" class="doc" id="functionalCastExpr0"><pre>Matches functional cast expressions
  527. Example: Matches Foo(bar);
  528. Foo f = bar;
  529. Foo g = (Foo) bar;
  530. Foo h = Foo(bar);
  531. </pre></td></tr>
  532. <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>
  533. <tr><td colspan="4" class="doc" id="gotoStmt0"><pre>Matches goto statements.
  534. Given
  535. goto FOO;
  536. FOO: bar();
  537. gotoStmt()
  538. matches 'goto FOO'
  539. </pre></td></tr>
  540. <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>
  541. <tr><td colspan="4" class="doc" id="ifStmt0"><pre>Matches if statements.
  542. Example matches 'if (x) {}'
  543. if (x) {}
  544. </pre></td></tr>
  545. <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>
  546. <tr><td colspan="4" class="doc" id="implicitCastExpr0"><pre>Matches the implicit cast nodes of Clang's AST.
  547. This matches many different places, including function call return value
  548. eliding, as well as any type conversions.
  549. </pre></td></tr>
  550. <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>
  551. <tr><td colspan="4" class="doc" id="initListExpr0"><pre>Matches init list expressions.
  552. Given
  553. int a[] = { 1, 2 };
  554. struct B { int x, y; };
  555. B b = { 5, 6 };
  556. initListExpr()
  557. matches "{ 1, 2 }" and "{ 5, 6 }"
  558. </pre></td></tr>
  559. <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>
  560. <tr><td colspan="4" class="doc" id="integerLiteral0"><pre>Matches integer literals of all sizes encodings, e.g.
  561. 1, 1L, 0x1 and 1U.
  562. Does not match character-encoded integers such as L'a'.
  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('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>
  565. <tr><td colspan="4" class="doc" id="labelStmt0"><pre>Matches label statements.
  566. Given
  567. goto FOO;
  568. FOO: bar();
  569. labelStmt()
  570. matches 'FOO:'
  571. </pre></td></tr>
  572. <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>
  573. <tr><td colspan="4" class="doc" id="lambdaExpr0"><pre>Matches lambda expressions.
  574. Example matches [&amp;](){return 5;}
  575. [&amp;](){return 5;}
  576. </pre></td></tr>
  577. <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>
  578. <tr><td colspan="4" class="doc" id="materializeTemporaryExpr0"><pre>Matches nodes where temporaries are materialized.
  579. Example: Given
  580. struct T {void func()};
  581. T f();
  582. void g(T);
  583. materializeTemporaryExpr() matches 'f()' in these statements
  584. T u(f());
  585. g(f());
  586. but does not match
  587. f();
  588. f().func();
  589. </pre></td></tr>
  590. <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>
  591. <tr><td colspan="4" class="doc" id="memberCallExpr0"><pre>Matches member call expressions.
  592. Example matches x.y()
  593. X x;
  594. x.y();
  595. </pre></td></tr>
  596. <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>
  597. <tr><td colspan="4" class="doc" id="memberExpr0"><pre>Matches member expressions.
  598. Given
  599. class Y {
  600. void x() { this-&gt;x(); x(); Y y; y.x(); a; this-&gt;b; Y::b; }
  601. int a; static int b;
  602. };
  603. memberExpr()
  604. matches this-&gt;x, x, y.x, a, this-&gt;b
  605. </pre></td></tr>
  606. <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>
  607. <tr><td colspan="4" class="doc" id="newExpr0"><pre>Matches new expressions.
  608. Given
  609. new X;
  610. newExpr()
  611. matches 'new X'.
  612. </pre></td></tr>
  613. <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>
  614. <tr><td colspan="4" class="doc" id="nullPtrLiteralExpr0"><pre>Matches nullptr literal.
  615. </pre></td></tr>
  616. <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>
  617. <tr><td colspan="4" class="doc" id="nullStmt0"><pre>Matches null statements.
  618. foo();;
  619. nullStmt()
  620. matches the second ';'
  621. </pre></td></tr>
  622. <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>
  623. <tr><td colspan="4" class="doc" id="operatorCallExpr0"><pre>Matches overloaded operator calls.
  624. Note that if an operator isn't overloaded, it won't match. Instead, use
  625. binaryOperator matcher.
  626. Currently it does not match operators such as new delete.
  627. FIXME: figure out why these do not match?
  628. Example matches both operator&lt;&lt;((o &lt;&lt; b), c) and operator&lt;&lt;(o, b)
  629. (matcher = operatorCallExpr())
  630. ostream &amp;operator&lt;&lt; (ostream &amp;out, int i) { };
  631. ostream &amp;o; int b = 1, c = 1;
  632. o &lt;&lt; b &lt;&lt; c;
  633. </pre></td></tr>
  634. <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>
  635. <tr><td colspan="4" class="doc" id="reinterpretCastExpr0"><pre>Matches a reinterpret_cast expression.
  636. Either the source expression or the destination type can be matched
  637. using has(), but hasDestinationType() is more specific and can be
  638. more readable.
  639. Example matches reinterpret_cast&lt;char*&gt;(&amp;p) in
  640. void* p = reinterpret_cast&lt;char*&gt;(&amp;p);
  641. </pre></td></tr>
  642. <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>
  643. <tr><td colspan="4" class="doc" id="returnStmt0"><pre>Matches return statements.
  644. Given
  645. return 1;
  646. returnStmt()
  647. matches 'return 1'
  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('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>
  650. <tr><td colspan="4" class="doc" id="staticCastExpr0"><pre>Matches a C++ static_cast expression.
  651. hasDestinationType
  652. reinterpretCast
  653. Example:
  654. staticCastExpr()
  655. matches
  656. static_cast&lt;long&gt;(8)
  657. in
  658. long eight(static_cast&lt;long&gt;(8));
  659. </pre></td></tr>
  660. <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>
  661. <tr><td colspan="4" class="doc" id="stmt0"><pre>Matches statements.
  662. Given
  663. { ++a; }
  664. stmt()
  665. matches both the compound statement '{ ++a; }' and '++a'.
  666. </pre></td></tr>
  667. <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>
  668. <tr><td colspan="4" class="doc" id="stringLiteral0"><pre>Matches string literals (also matches wide string literals).
  669. Example matches "abcd", L"abcd"
  670. char *s = "abcd"; wchar_t *ws = L"abcd"
  671. </pre></td></tr>
  672. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('substNonTypeTemplateParmExpr0')"><a name="substNonTypeTemplateParmExpr0Anchor">substNonTypeTemplateParmExpr</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1SubstNonTypeTemplateParmExpr.html">SubstNonTypeTemplateParmExpr</a>&gt;...</td></tr>
  673. <tr><td colspan="4" class="doc" id="substNonTypeTemplateParmExpr0"><pre>Matches substitutions of non-type template parameters.
  674. Given
  675. template &lt;int N&gt;
  676. struct A { static const int n = N; };
  677. struct B : public A&lt;42&gt; {};
  678. substNonTypeTemplateParmExpr()
  679. matches "N" in the right-hand side of "static const int n = N;"
  680. </pre></td></tr>
  681. <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>
  682. <tr><td colspan="4" class="doc" id="switchCase0"><pre>Matches case and default statements inside switch statements.
  683. Given
  684. switch(a) { case 42: break; default: break; }
  685. switchCase()
  686. matches 'case 42: break;' and 'default: break;'.
  687. </pre></td></tr>
  688. <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>
  689. <tr><td colspan="4" class="doc" id="switchStmt0"><pre>Matches switch statements.
  690. Given
  691. switch(a) { case 42: break; default: break; }
  692. switchStmt()
  693. matches 'switch(a)'.
  694. </pre></td></tr>
  695. <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>
  696. <tr><td colspan="4" class="doc" id="temporaryObjectExpr0"><pre>Matches functional cast expressions having N != 1 arguments
  697. Example: Matches Foo(bar, bar)
  698. Foo h = Foo(bar, bar);
  699. </pre></td></tr>
  700. <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>
  701. <tr><td colspan="4" class="doc" id="thisExpr0"><pre>Matches implicit and explicit this expressions.
  702. Example matches the implicit this expression in "return i".
  703. (matcher = thisExpr())
  704. struct foo {
  705. int i;
  706. int f() { return i; }
  707. };
  708. </pre></td></tr>
  709. <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>
  710. <tr><td colspan="4" class="doc" id="throwExpr0"><pre>Matches throw expressions.
  711. try { throw 5; } catch(int i) {}
  712. throwExpr()
  713. matches 'throw 5'
  714. </pre></td></tr>
  715. <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>
  716. <tr><td colspan="4" class="doc" id="tryStmt0"><pre>Matches try statements.
  717. try {} catch(int i) {}
  718. tryStmt()
  719. matches 'try {}'
  720. </pre></td></tr>
  721. <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>
  722. <tr><td colspan="4" class="doc" id="unaryExprOrTypeTraitExpr0"><pre>Matches sizeof (C99), alignof (C++11) and vec_step (OpenCL)
  723. Given
  724. Foo x = bar;
  725. int y = sizeof(x) + alignof(x);
  726. unaryExprOrTypeTraitExpr()
  727. matches sizeof(x) and alignof(x)
  728. </pre></td></tr>
  729. <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>
  730. <tr><td colspan="4" class="doc" id="unaryOperator0"><pre>Matches unary operator expressions.
  731. Example matches !a
  732. !a || b
  733. </pre></td></tr>
  734. <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>
  735. <tr><td colspan="4" class="doc" id="unresolvedConstructExpr0"><pre>Matches unresolved constructor call expressions.
  736. Example matches T(t) in return statement of f
  737. (matcher = unresolvedConstructExpr())
  738. template &lt;typename T&gt;
  739. void f(const T&amp; t) { return T(t); }
  740. </pre></td></tr>
  741. <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>
  742. <tr><td colspan="4" class="doc" id="userDefinedLiteral0"><pre>Matches user defined literal operator call.
  743. Example match: "foo"_suffix
  744. </pre></td></tr>
  745. <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>
  746. <tr><td colspan="4" class="doc" id="whileStmt0"><pre>Matches while statements.
  747. Given
  748. while (true) {}
  749. whileStmt()
  750. matches 'while (true) {}'.
  751. </pre></td></tr>
  752. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateArgument.html">TemplateArgument</a>&gt;</td><td class="name" onclick="toggle('templateArgument0')"><a name="templateArgument0Anchor">templateArgument</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateArgument.html">TemplateArgument</a>&gt;...</td></tr>
  753. <tr><td colspan="4" class="doc" id="templateArgument0"><pre>Matches template arguments.
  754. Given
  755. template &lt;typename T&gt; struct C {};
  756. C&lt;int&gt; c;
  757. templateArgument()
  758. matches 'int' in C&lt;int&gt;.
  759. </pre></td></tr>
  760. <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>
  761. <tr><td colspan="4" class="doc" id="typeLoc0"><pre>Matches TypeLocs in the clang AST.
  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('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>
  764. <tr><td colspan="4" class="doc" id="arrayType0"><pre>Matches all kinds of arrays.
  765. Given
  766. int a[] = { 2, 3 };
  767. int b[4];
  768. void f() { int c[a[0]]; }
  769. arrayType()
  770. matches "int a[]", "int b[4]" and "int c[a[0]]";
  771. </pre></td></tr>
  772. <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>
  773. <tr><td colspan="4" class="doc" id="atomicType0"><pre>Matches atomic types.
  774. Given
  775. _Atomic(int) i;
  776. atomicType()
  777. matches "_Atomic(int) i"
  778. </pre></td></tr>
  779. <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>
  780. <tr><td colspan="4" class="doc" id="autoType0"><pre>Matches types nodes representing C++11 auto types.
  781. Given:
  782. auto n = 4;
  783. int v[] = { 2, 3 }
  784. for (auto i : v) { }
  785. autoType()
  786. matches "auto n" and "auto i"
  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('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>
  789. <tr><td colspan="4" class="doc" id="blockPointerType0"><pre>Matches block pointer types, i.e. types syntactically represented as
  790. "void (^)(int)".
  791. The pointee is always required to be a FunctionType.
  792. </pre></td></tr>
  793. <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>
  794. <tr><td colspan="4" class="doc" id="builtinType0"><pre>Matches builtin Types.
  795. Given
  796. struct A {};
  797. A a;
  798. int b;
  799. float c;
  800. bool d;
  801. builtinType()
  802. matches "int b", "float c" and "bool d"
  803. </pre></td></tr>
  804. <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>
  805. <tr><td colspan="4" class="doc" id="complexType0"><pre>Matches C99 complex types.
  806. Given
  807. _Complex float f;
  808. complexType()
  809. matches "_Complex float f"
  810. </pre></td></tr>
  811. <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>
  812. <tr><td colspan="4" class="doc" id="constantArrayType0"><pre>Matches C arrays with a specified constant size.
  813. Given
  814. void() {
  815. int a[2];
  816. int b[] = { 2, 3 };
  817. int c[b[0]];
  818. }
  819. constantArrayType()
  820. matches "int a[2]"
  821. </pre></td></tr>
  822. <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>
  823. <tr><td colspan="4" class="doc" id="dependentSizedArrayType0"><pre>Matches C++ arrays whose size is a value-dependent expression.
  824. Given
  825. template&lt;typename T, int Size&gt;
  826. class array {
  827. T data[Size];
  828. };
  829. dependentSizedArrayType
  830. matches "T data[Size]"
  831. </pre></td></tr>
  832. <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>
  833. <tr><td colspan="4" class="doc" id="elaboratedType0"><pre>Matches types specified with an elaborated type keyword or with a
  834. qualified name.
  835. Given
  836. namespace N {
  837. namespace M {
  838. class D {};
  839. }
  840. }
  841. class C {};
  842. class C c;
  843. N::M::D d;
  844. elaboratedType() matches the type of the variable declarations of both
  845. c and d.
  846. </pre></td></tr>
  847. <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>
  848. <tr><td colspan="4" class="doc" id="functionType0"><pre>Matches FunctionType nodes.
  849. Given
  850. int (*f)(int);
  851. void g();
  852. functionType()
  853. matches "int (*f)(int)" and the type of "g".
  854. </pre></td></tr>
  855. <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>
  856. <tr><td colspan="4" class="doc" id="incompleteArrayType0"><pre>Matches C arrays with unspecified size.
  857. Given
  858. int a[] = { 2, 3 };
  859. int b[42];
  860. void f(int c[]) { int d[a[0]]; };
  861. incompleteArrayType()
  862. matches "int a[]" and "int c[]"
  863. </pre></td></tr>
  864. <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>
  865. <tr><td colspan="4" class="doc" id="lValueReferenceType0"><pre>Matches lvalue reference types.
  866. Given:
  867. int *a;
  868. int &amp;b = *a;
  869. int &amp;&amp;c = 1;
  870. auto &amp;d = b;
  871. auto &amp;&amp;e = c;
  872. auto &amp;&amp;f = 2;
  873. int g = 5;
  874. lValueReferenceType() matches the types of b, d, and e. e is
  875. matched since the type is deduced as int&amp; by reference collapsing rules.
  876. </pre></td></tr>
  877. <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>
  878. <tr><td colspan="4" class="doc" id="memberPointerType0"><pre>Matches member pointer types.
  879. Given
  880. struct A { int i; }
  881. A::* ptr = A::i;
  882. memberPointerType()
  883. matches "A::* ptr"
  884. </pre></td></tr>
  885. <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>
  886. <tr><td colspan="4" class="doc" id="parenType0"><pre>Matches ParenType nodes.
  887. Given
  888. int (*ptr_to_array)[4];
  889. int *array_of_ptrs[4];
  890. varDecl(hasType(pointsTo(parenType()))) matches ptr_to_array but not
  891. array_of_ptrs.
  892. </pre></td></tr>
  893. <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>
  894. <tr><td colspan="4" class="doc" id="pointerType0"><pre>Matches pointer types.
  895. Given
  896. int *a;
  897. int &amp;b = *a;
  898. int c = 5;
  899. pointerType()
  900. matches "int *a"
  901. </pre></td></tr>
  902. <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>
  903. <tr><td colspan="4" class="doc" id="rValueReferenceType0"><pre>Matches rvalue reference types.
  904. Given:
  905. int *a;
  906. int &amp;b = *a;
  907. int &amp;&amp;c = 1;
  908. auto &amp;d = b;
  909. auto &amp;&amp;e = c;
  910. auto &amp;&amp;f = 2;
  911. int g = 5;
  912. rValueReferenceType() matches the types of c and f. e is not
  913. matched as it is deduced to int&amp; by reference collapsing rules.
  914. </pre></td></tr>
  915. <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>
  916. <tr><td colspan="4" class="doc" id="recordType0"><pre>Matches record types (e.g. structs, classes).
  917. Given
  918. class C {};
  919. struct S {};
  920. C c;
  921. S s;
  922. recordType() matches the type of the variable declarations of both c
  923. and s.
  924. </pre></td></tr>
  925. <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>
  926. <tr><td colspan="4" class="doc" id="referenceType0"><pre>Matches both lvalue and rvalue reference types.
  927. Given
  928. int *a;
  929. int &amp;b = *a;
  930. int &amp;&amp;c = 1;
  931. auto &amp;d = b;
  932. auto &amp;&amp;e = c;
  933. auto &amp;&amp;f = 2;
  934. int g = 5;
  935. referenceType() matches the types of b, c, d, e, and f.
  936. </pre></td></tr>
  937. <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>
  938. <tr><td colspan="4" class="doc" id="templateSpecializationType0"><pre>Matches template specialization types.
  939. Given
  940. template &lt;typename T&gt;
  941. class C { };
  942. template class C&lt;int&gt;; A
  943. C&lt;char&gt; var; B
  944. templateSpecializationType() matches the type of the explicit
  945. instantiation in A and the type of the variable declaration in B.
  946. </pre></td></tr>
  947. <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>
  948. <tr><td colspan="4" class="doc" id="type0"><pre>Matches Types in the clang AST.
  949. </pre></td></tr>
  950. <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>
  951. <tr><td colspan="4" class="doc" id="typedefType0"><pre>Matches typedef types.
  952. Given
  953. typedef int X;
  954. typedefType()
  955. matches "typedef int X"
  956. </pre></td></tr>
  957. <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>
  958. <tr><td colspan="4" class="doc" id="unaryTransformType0"><pre>Matches types nodes representing unary type transformations.
  959. Given:
  960. typedef __underlying_type(T) type;
  961. unaryTransformType()
  962. matches "__underlying_type(T)"
  963. </pre></td></tr>
  964. <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>
  965. <tr><td colspan="4" class="doc" id="variableArrayType0"><pre>Matches C arrays with a specified size that is not an
  966. integer-constant-expression.
  967. Given
  968. void f() {
  969. int a[] = { 2, 3 }
  970. int b[42];
  971. int c[a[0]];
  972. }
  973. variableArrayType()
  974. matches "int c[a[0]]"
  975. </pre></td></tr>
  976. <!--END_DECL_MATCHERS -->
  977. </table>
  978. <!-- ======================================================================= -->
  979. <h2 id="narrowing-matchers">Narrowing Matchers</h2>
  980. <!-- ======================================================================= -->
  981. <p>Narrowing matchers match certain attributes on the current node, thus
  982. narrowing down the set of nodes of the current type to match on.</p>
  983. <p>There are special logical narrowing matchers (allOf, anyOf, anything and unless)
  984. which allow users to create more powerful match expressions.</p>
  985. <table>
  986. <tr style="text-align:left"><th>Return type</th><th>Name</th><th>Parameters</th></tr>
  987. <!-- START_NARROWING_MATCHERS -->
  988. <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>
  989. <tr><td colspan="4" class="doc" id="allOf0"><pre>Matches if all given matchers match.
  990. Usable as: Any Matcher
  991. </pre></td></tr>
  992. <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>
  993. <tr><td colspan="4" class="doc" id="anyOf0"><pre>Matches if any of the given matchers matches.
  994. Usable as: Any Matcher
  995. </pre></td></tr>
  996. <tr><td>Matcher&lt;*&gt;</td><td class="name" onclick="toggle('anything0')"><a name="anything0Anchor">anything</a></td><td></td></tr>
  997. <tr><td colspan="4" class="doc" id="anything0"><pre>Matches any node.
  998. Useful when another matcher requires a child matcher, but there's no
  999. additional constraint. This will often be used with an explicit conversion
  1000. to an internal::Matcher&lt;&gt; type such as TypeMatcher.
  1001. Example: DeclarationMatcher(anything()) matches all declarations, e.g.,
  1002. "int* p" and "void f()" in
  1003. int* p;
  1004. void f();
  1005. Usable as: Any Matcher
  1006. </pre></td></tr>
  1007. <tr><td>Matcher&lt;*&gt;</td><td class="name" onclick="toggle('unless0')"><a name="unless0Anchor">unless</a></td><td>Matcher&lt;*&gt;</td></tr>
  1008. <tr><td colspan="4" class="doc" id="unless0"><pre>Matches if the provided matcher does not match.
  1009. Example matches Y (matcher = recordDecl(unless(hasName("X"))))
  1010. class X {};
  1011. class Y {};
  1012. Usable as: Any Matcher
  1013. </pre></td></tr>
  1014. <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>
  1015. <tr><td colspan="4" class="doc" id="hasOperatorName0"><pre>Matches the operator Name of operator expressions (binary or
  1016. unary).
  1017. Example matches a || b (matcher = binaryOperator(hasOperatorName("||")))
  1018. !(a || b)
  1019. </pre></td></tr>
  1020. <tr><td>Matcher&lt;CXXBoolLiteral&gt;</td><td class="name" onclick="toggle('equals2')"><a name="equals2Anchor">equals</a></td><td>ValueT Value</td></tr>
  1021. <tr><td colspan="4" class="doc" id="equals2"><pre>Matches literals that are equal to the given value.
  1022. Example matches true (matcher = boolLiteral(equals(true)))
  1023. true
  1024. Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CharacterLiteral.html">CharacterLiteral</a>&gt;, Matcher&lt;CXXBoolLiteral&gt;,
  1025. 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;
  1026. </pre></td></tr>
  1027. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CXXCatchStmt.html">CXXCatchStmt</a>&gt;</td><td class="name" onclick="toggle('isCatchAll1')"><a name="isCatchAll1Anchor">isCatchAll</a></td><td></td></tr>
  1028. <tr><td colspan="4" class="doc" id="isCatchAll1"><pre>Matches a C++ catch statement that has a handler that catches any exception type.
  1029. Example matches catch(...) (matcher = catchStmt(isCatchAll()))
  1030. try {
  1031. // ...
  1032. } catch(...) {
  1033. }
  1034. </pre></td></tr>
  1035. <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>
  1036. <tr><td colspan="4" class="doc" id="argumentCountIs1"><pre>Checks that a call expression or a constructor call expression has
  1037. a specific number of arguments (including absent default arguments).
  1038. Example matches f(0, 0) (matcher = callExpr(argumentCountIs(2)))
  1039. void f(int x, int y);
  1040. f(0, 0);
  1041. </pre></td></tr>
  1042. <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>
  1043. <tr><td colspan="4" class="doc" id="isListInitialization0"><pre>Matches a constructor call expression which uses list initialization.
  1044. </pre></td></tr>
  1045. <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>
  1046. <tr><td colspan="4" class="doc" id="isWritten0"><pre>Matches a constructor initializer if it is explicitly written in
  1047. code (as opposed to implicitly added by the compiler).
  1048. Given
  1049. struct Foo {
  1050. Foo() { }
  1051. Foo(int) : foo_("A") { }
  1052. string foo_;
  1053. };
  1054. constructorDecl(hasAnyConstructorInitializer(isWritten()))
  1055. will match Foo(int), but not Foo()
  1056. </pre></td></tr>
  1057. <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>
  1058. <tr><td colspan="4" class="doc" id="isConst0"><pre>Matches if the given method declaration is const.
  1059. Given
  1060. struct A {
  1061. void foo() const;
  1062. void bar();
  1063. };
  1064. methodDecl(isConst()) matches A::foo() but not A::bar()
  1065. </pre></td></tr>
  1066. <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>
  1067. <tr><td colspan="4" class="doc" id="isOverride0"><pre>Matches if the given method declaration overrides another method.
  1068. Given
  1069. class A {
  1070. public:
  1071. virtual void x();
  1072. };
  1073. class B : public A {
  1074. public:
  1075. virtual void x();
  1076. };
  1077. matches B::x
  1078. </pre></td></tr>
  1079. <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>
  1080. <tr><td colspan="4" class="doc" id="isPure0"><pre>Matches if the given method declaration is pure.
  1081. Given
  1082. class A {
  1083. public:
  1084. virtual void x() = 0;
  1085. };
  1086. matches A::x
  1087. </pre></td></tr>
  1088. <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>
  1089. <tr><td colspan="4" class="doc" id="isVirtual0"><pre>Matches if the given method declaration is virtual.
  1090. Given
  1091. class A {
  1092. public:
  1093. virtual void x();
  1094. };
  1095. matches A::x
  1096. </pre></td></tr>
  1097. <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>
  1098. <tr><td colspan="4" class="doc" id="hasOverloadedOperatorName1"><pre>Matches overloaded operator names.
  1099. Matches overloaded operator names specified in strings without the
  1100. "operator" prefix: e.g. "&lt;&lt;".
  1101. Given:
  1102. class A { int operator*(); };
  1103. const A &amp;operator&lt;&lt;(const A &amp;a, const A &amp;b);
  1104. A a;
  1105. a &lt;&lt; a; &lt;-- This matches
  1106. operatorCallExpr(hasOverloadedOperatorName("&lt;&lt;"))) matches the specified
  1107. line and recordDecl(hasMethod(hasOverloadedOperatorName("*"))) matches
  1108. the declaration of A.
  1109. 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_1FunctionDecl.html">FunctionDecl</a>&gt;
  1110. </pre></td></tr>
  1111. <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>std::string BaseName</td></tr>
  1112. <tr><td colspan="4" class="doc" id="isDerivedFrom1"><pre>Overloaded method as shortcut for isDerivedFrom(hasName(...)).
  1113. </pre></td></tr>
  1114. <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>
  1115. <tr><td colspan="4" class="doc" id="isExplicitTemplateSpecialization2"><pre>Matches explicit template specializations of function, class, or
  1116. static member variable template instantiations.
  1117. Given
  1118. template&lt;typename T&gt; void A(T t) { }
  1119. template&lt;&gt; void A(int N) { }
  1120. functionDecl(isExplicitTemplateSpecialization())
  1121. matches the specialization A&lt;int&gt;().
  1122. 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;
  1123. </pre></td></tr>
  1124. <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>std::string BaseName</td></tr>
  1125. <tr><td colspan="4" class="doc" id="isSameOrDerivedFrom1"><pre>Overloaded method as shortcut for
  1126. isSameOrDerivedFrom(hasName(...)).
  1127. </pre></td></tr>
  1128. <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>
  1129. <tr><td colspan="4" class="doc" id="isTemplateInstantiation2"><pre>Matches template instantiations of function, class, or static
  1130. member variable template instantiations.
  1131. Given
  1132. template &lt;typename T&gt; class X {}; class A {}; X&lt;A&gt; x;
  1133. or
  1134. template &lt;typename T&gt; class X {}; class A {}; template class X&lt;A&gt;;
  1135. recordDecl(hasName("::X"), isTemplateInstantiation())
  1136. matches the template instantiation of X&lt;A&gt;.
  1137. But given
  1138. template &lt;typename T&gt; class X {}; class A {};
  1139. template &lt;&gt; class X&lt;A&gt; {}; X&lt;A&gt; x;
  1140. recordDecl(hasName("::X"), isTemplateInstantiation())
  1141. does not match, as X&lt;A&gt; is an explicit template specialization.
  1142. 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;
  1143. </pre></td></tr>
  1144. <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>
  1145. <tr><td colspan="4" class="doc" id="argumentCountIs0"><pre>Checks that a call expression or a constructor call expression has
  1146. a specific number of arguments (including absent default arguments).
  1147. Example matches f(0, 0) (matcher = callExpr(argumentCountIs(2)))
  1148. void f(int x, int y);
  1149. f(0, 0);
  1150. </pre></td></tr>
  1151. <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>
  1152. <tr><td colspan="4" class="doc" id="equals3"><pre>Matches literals that are equal to the given value.
  1153. Example matches true (matcher = boolLiteral(equals(true)))
  1154. true
  1155. Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CharacterLiteral.html">CharacterLiteral</a>&gt;, Matcher&lt;CXXBoolLiteral&gt;,
  1156. 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;
  1157. </pre></td></tr>
  1158. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ClassTemplateSpecializationDecl.html">ClassTemplateSpecializationDecl</a>&gt;</td><td class="name" onclick="toggle('templateArgumentCountIs0')"><a name="templateArgumentCountIs0Anchor">templateArgumentCountIs</a></td><td>unsigned N</td></tr>
  1159. <tr><td colspan="4" class="doc" id="templateArgumentCountIs0"><pre>Matches if the number of template arguments equals N.
  1160. Given
  1161. template&lt;typename T&gt; struct C {};
  1162. C&lt;int&gt; c;
  1163. classTemplateSpecializationDecl(templateArgumentCountIs(1))
  1164. matches C&lt;int&gt;.
  1165. </pre></td></tr>
  1166. <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>
  1167. <tr><td colspan="4" class="doc" id="statementCountIs0"><pre>Checks that a compound statement contains a specific number of
  1168. child statements.
  1169. Example: Given
  1170. { for (;;) {} }
  1171. compoundStmt(statementCountIs(0)))
  1172. matches '{}'
  1173. but does not match the outer compound statement.
  1174. </pre></td></tr>
  1175. <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>
  1176. <tr><td colspan="4" class="doc" id="hasSize0"><pre>Matches ConstantArrayType nodes that have the specified size.
  1177. Given
  1178. int a[42];
  1179. int b[2 * 21];
  1180. int c[41], d[43];
  1181. constantArrayType(hasSize(42))
  1182. matches "int a[42]" and "int b[2 * 21]"
  1183. </pre></td></tr>
  1184. <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>
  1185. <tr><td colspan="4" class="doc" id="declCountIs0"><pre>Matches declaration statements that contain a specific number of
  1186. declarations.
  1187. Example: Given
  1188. int a, b;
  1189. int c;
  1190. int d = 2, e;
  1191. declCountIs(2)
  1192. matches 'int a, b;' and 'int d = 2, e;', but not 'int c;'.
  1193. </pre></td></tr>
  1194. <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>
  1195. <tr><td colspan="4" class="doc" id="equalsBoundNode1"><pre>Matches if a node equals a previously bound node.
  1196. Matches a node if it equals the node previously bound to ID.
  1197. Given
  1198. class X { int a; int b; };
  1199. recordDecl(
  1200. has(fieldDecl(hasName("a"), hasType(type().bind("t")))),
  1201. has(fieldDecl(hasName("b"), hasType(type(equalsBoundNode("t"))))))
  1202. matches the class X, as a and b have the same type.
  1203. Note that when multiple matches are involved via forEach* matchers,
  1204. equalsBoundNodes acts as a filter.
  1205. For example:
  1206. compoundStmt(
  1207. forEachDescendant(varDecl().bind("d")),
  1208. forEachDescendant(declRefExpr(to(decl(equalsBoundNode("d"))))))
  1209. will trigger a match for each combination of variable declaration
  1210. and reference to that variable declaration within a compound statement.
  1211. </pre></td></tr>
  1212. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('hasAttr0')"><a name="hasAttr0Anchor">hasAttr</a></td><td>attr::Kind AttrKind</td></tr>
  1213. <tr><td colspan="4" class="doc" id="hasAttr0"><pre>Matches declaration that has a given attribute.
  1214. Given
  1215. __attribute__((device)) void f() { ... }
  1216. decl(hasAttr(clang::attr::CUDADevice)) matches the function declaration of
  1217. f.
  1218. </pre></td></tr>
  1219. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('isExpansionInFileMatching0')"><a name="isExpansionInFileMatching0Anchor">isExpansionInFileMatching</a></td><td>std::string RegExp</td></tr>
  1220. <tr><td colspan="4" class="doc" id="isExpansionInFileMatching0"><pre>Matches AST nodes that were expanded within files whose name is
  1221. partially matching a given regex.
  1222. Example matches Y but not X
  1223. (matcher = recordDecl(isExpansionInFileMatching("AST.*"))
  1224. #include "ASTMatcher.h"
  1225. class X {};
  1226. ASTMatcher.h:
  1227. class Y {};
  1228. Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TypeLoc.html">TypeLoc</a>&gt;
  1229. </pre></td></tr>
  1230. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('isExpansionInMainFile0')"><a name="isExpansionInMainFile0Anchor">isExpansionInMainFile</a></td><td></td></tr>
  1231. <tr><td colspan="4" class="doc" id="isExpansionInMainFile0"><pre>Matches AST nodes that were expanded within the main-file.
  1232. Example matches X but not Y (matcher = recordDecl(isExpansionInMainFile())
  1233. #include &lt;Y.h&gt;
  1234. class X {};
  1235. Y.h:
  1236. class Y {};
  1237. Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TypeLoc.html">TypeLoc</a>&gt;
  1238. </pre></td></tr>
  1239. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('isExpansionInSystemHeader0')"><a name="isExpansionInSystemHeader0Anchor">isExpansionInSystemHeader</a></td><td></td></tr>
  1240. <tr><td colspan="4" class="doc" id="isExpansionInSystemHeader0"><pre>Matches AST nodes that were expanded within system-header-files.
  1241. Example matches Y but not X
  1242. (matcher = recordDecl(isExpansionInSystemHeader())
  1243. #include &lt;SystemHeader.h&gt;
  1244. class X {};
  1245. SystemHeader.h:
  1246. class Y {};
  1247. Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TypeLoc.html">TypeLoc</a>&gt;
  1248. </pre></td></tr>
  1249. <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>
  1250. <tr><td colspan="4" class="doc" id="isImplicit0"><pre>Matches a declaration that has been implicitly added
  1251. by the compiler (eg. implicit defaultcopy constructors).
  1252. </pre></td></tr>
  1253. <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>
  1254. <tr><td colspan="4" class="doc" id="isPrivate0"><pre>Matches private C++ declarations.
  1255. Given
  1256. class C {
  1257. public: int a;
  1258. protected: int b;
  1259. private: int c;
  1260. };
  1261. fieldDecl(isPrivate())
  1262. matches 'int c;'
  1263. </pre></td></tr>
  1264. <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>
  1265. <tr><td colspan="4" class="doc" id="isProtected0"><pre>Matches protected C++ declarations.
  1266. Given
  1267. class C {
  1268. public: int a;
  1269. protected: int b;
  1270. private: int c;
  1271. };
  1272. fieldDecl(isProtected())
  1273. matches 'int b;'
  1274. </pre></td></tr>
  1275. <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>
  1276. <tr><td colspan="4" class="doc" id="isPublic0"><pre>Matches public C++ declarations.
  1277. Given
  1278. class C {
  1279. public: int a;
  1280. protected: int b;
  1281. private: int c;
  1282. };
  1283. fieldDecl(isPublic())
  1284. matches 'int a;'
  1285. </pre></td></tr>
  1286. <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>
  1287. <tr><td colspan="4" class="doc" id="equals1"><pre>Matches literals that are equal to the given value.
  1288. Example matches true (matcher = boolLiteral(equals(true)))
  1289. true
  1290. Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CharacterLiteral.html">CharacterLiteral</a>&gt;, Matcher&lt;CXXBoolLiteral&gt;,
  1291. 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;
  1292. </pre></td></tr>
  1293. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1FunctionDecl.html">FunctionDecl</a>&gt;</td><td class="name" onclick="toggle('hasOverloadedOperatorName0')"><a name="hasOverloadedOperatorName0Anchor">hasOverloadedOperatorName</a></td><td>StringRef Name</td></tr>
  1294. <tr><td colspan="4" class="doc" id="hasOverloadedOperatorName0"><pre>Matches overloaded operator names.
  1295. Matches overloaded operator names specified in strings without the
  1296. "operator" prefix: e.g. "&lt;&lt;".
  1297. Given:
  1298. class A { int operator*(); };
  1299. const A &amp;operator&lt;&lt;(const A &amp;a, const A &amp;b);
  1300. A a;
  1301. a &lt;&lt; a; &lt;-- This matches
  1302. operatorCallExpr(hasOverloadedOperatorName("&lt;&lt;"))) matches the specified
  1303. line and recordDecl(hasMethod(hasOverloadedOperatorName("*"))) matches
  1304. the declaration of A.
  1305. 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_1FunctionDecl.html">FunctionDecl</a>&gt;
  1306. </pre></td></tr>
  1307. <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>
  1308. <tr><td colspan="4" class="doc" id="isDefinition2"><pre>Matches if a declaration has a body attached.
  1309. Example matches A, va, fa
  1310. class A {};
  1311. class B; Doesn't match, as it has no body.
  1312. int va;
  1313. extern int vb; Doesn't match, as it doesn't define the variable.
  1314. void fa() {}
  1315. void fb(); Doesn't match, as it has no body.
  1316. 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;
  1317. </pre></td></tr>
  1318. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1FunctionDecl.html">FunctionDecl</a>&gt;</td><td class="name" onclick="toggle('isDeleted0')"><a name="isDeleted0Anchor">isDeleted</a></td><td></td></tr>
  1319. <tr><td colspan="4" class="doc" id="isDeleted0"><pre>Matches deleted function declarations.
  1320. Given:
  1321. void Func();
  1322. void DeletedFunc() = delete;
  1323. functionDecl(isDeleted())
  1324. matches the declaration of DeletedFunc, but not Func.
  1325. </pre></td></tr>
  1326. <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>
  1327. <tr><td colspan="4" class="doc" id="isExplicitTemplateSpecialization0"><pre>Matches explicit template specializations of function, class, or
  1328. static member variable template instantiations.
  1329. Given
  1330. template&lt;typename T&gt; void A(T t) { }
  1331. template&lt;&gt; void A(int N) { }
  1332. functionDecl(isExplicitTemplateSpecialization())
  1333. matches the specialization A&lt;int&gt;().
  1334. 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;
  1335. </pre></td></tr>
  1336. <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>
  1337. <tr><td colspan="4" class="doc" id="isExternC0"><pre>Matches extern "C" function declarations.
  1338. Given:
  1339. extern "C" void f() {}
  1340. extern "C" { void g() {} }
  1341. void h() {}
  1342. functionDecl(isExternC())
  1343. matches the declaration of f and g, but not the declaration h
  1344. </pre></td></tr>
  1345. <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>
  1346. <tr><td colspan="4" class="doc" id="isTemplateInstantiation0"><pre>Matches template instantiations of function, class, or static
  1347. member variable template instantiations.
  1348. Given
  1349. template &lt;typename T&gt; class X {}; class A {}; X&lt;A&gt; x;
  1350. or
  1351. template &lt;typename T&gt; class X {}; class A {}; template class X&lt;A&gt;;
  1352. recordDecl(hasName("::X"), isTemplateInstantiation())
  1353. matches the template instantiation of X&lt;A&gt;.
  1354. But given
  1355. template &lt;typename T&gt; class X {}; class A {};
  1356. template &lt;&gt; class X&lt;A&gt; {}; X&lt;A&gt; x;
  1357. recordDecl(hasName("::X"), isTemplateInstantiation())
  1358. does not match, as X&lt;A&gt; is an explicit template specialization.
  1359. 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;
  1360. </pre></td></tr>
  1361. <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>
  1362. <tr><td colspan="4" class="doc" id="parameterCountIs0"><pre>Matches FunctionDecls that have a specific parameter count.
  1363. Given
  1364. void f(int i) {}
  1365. void g(int i, int j) {}
  1366. functionDecl(parameterCountIs(2))
  1367. matches g(int i, int j) {}
  1368. </pre></td></tr>
  1369. <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>
  1370. <tr><td colspan="4" class="doc" id="equals0"><pre>Matches literals that are equal to the given value.
  1371. Example matches true (matcher = boolLiteral(equals(true)))
  1372. true
  1373. Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1CharacterLiteral.html">CharacterLiteral</a>&gt;, Matcher&lt;CXXBoolLiteral&gt;,
  1374. 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;
  1375. </pre></td></tr>
  1376. <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>
  1377. <tr><td colspan="4" class="doc" id="isArrow0"><pre>Matches member expressions that are called with '-&gt;' as opposed
  1378. to '.'.
  1379. Member calls on the implicit this pointer match as called with '-&gt;'.
  1380. Given
  1381. class Y {
  1382. void x() { this-&gt;x(); x(); Y y; y.x(); a; this-&gt;b; Y::b; }
  1383. int a;
  1384. static int b;
  1385. };
  1386. memberExpr(isArrow())
  1387. matches this-&gt;x, x, y.x, a, this-&gt;b
  1388. </pre></td></tr>
  1389. <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>
  1390. <tr><td colspan="4" class="doc" id="hasName0"><pre>Matches NamedDecl nodes that have the specified name.
  1391. Supports specifying enclosing namespaces or classes by prefixing the name
  1392. with '&lt;enclosing&gt;::'.
  1393. Does not match typedefs of an underlying type with the given name.
  1394. Example matches X (Name == "X")
  1395. class X;
  1396. Example matches X (Name is one of "::a::b::X", "a::b::X", "b::X", "X")
  1397. namespace a { namespace b { class X; } }
  1398. </pre></td></tr>
  1399. <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>
  1400. <tr><td colspan="4" class="doc" id="matchesName0"><pre>Matches NamedDecl nodes whose fully qualified names contain
  1401. a substring matched by the given RegExp.
  1402. Supports specifying enclosing namespaces or classes by
  1403. prefixing the name with '&lt;enclosing&gt;::'. Does not match typedefs
  1404. of an underlying type with the given name.
  1405. Example matches X (regexp == "::X")
  1406. class X;
  1407. Example matches X (regexp is one of "::X", "^foo::.*X", among others)
  1408. namespace foo { namespace bar { class X; } }
  1409. </pre></td></tr>
  1410. <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>
  1411. <tr><td colspan="4" class="doc" id="asString0"><pre>Matches if the matched type is represented by the given string.
  1412. Given
  1413. class Y { public: void x(); };
  1414. void z() { Y* y; y-&gt;x(); }
  1415. callExpr(on(hasType(asString("class Y *"))))
  1416. matches y-&gt;x()
  1417. </pre></td></tr>
  1418. <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>
  1419. <tr><td colspan="4" class="doc" id="equalsBoundNode3"><pre>Matches if a node equals a previously bound node.
  1420. Matches a node if it equals the node previously bound to ID.
  1421. Given
  1422. class X { int a; int b; };
  1423. recordDecl(
  1424. has(fieldDecl(hasName("a"), hasType(type().bind("t")))),
  1425. has(fieldDecl(hasName("b"), hasType(type(equalsBoundNode("t"))))))
  1426. matches the class X, as a and b have the same type.
  1427. Note that when multiple matches are involved via forEach* matchers,
  1428. equalsBoundNodes acts as a filter.
  1429. For example:
  1430. compoundStmt(
  1431. forEachDescendant(varDecl().bind("d")),
  1432. forEachDescendant(declRefExpr(to(decl(equalsBoundNode("d"))))))
  1433. will trigger a match for each combination of variable declaration
  1434. and reference to that variable declaration within a compound statement.
  1435. </pre></td></tr>
  1436. <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>
  1437. <tr><td colspan="4" class="doc" id="hasLocalQualifiers0"><pre>Matches QualType nodes that have local CV-qualifiers attached to
  1438. the node, not hidden within a typedef.
  1439. Given
  1440. typedef const int const_int;
  1441. const_int i;
  1442. int *const j;
  1443. int *volatile k;
  1444. int m;
  1445. varDecl(hasType(hasLocalQualifiers())) matches only j and k.
  1446. i is const-qualified but the qualifier is not local.
  1447. </pre></td></tr>
  1448. <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>
  1449. <tr><td colspan="4" class="doc" id="isConstQualified0"><pre>Matches QualType nodes that are const-qualified, i.e., that
  1450. include "top-level" const.
  1451. Given
  1452. void a(int);
  1453. void b(int const);
  1454. void c(const int);
  1455. void d(const int*);
  1456. void e(int const) {};
  1457. functionDecl(hasAnyParameter(hasType(isConstQualified())))
  1458. matches "void b(int const)", "void c(const int)" and
  1459. "void e(int const) {}". It does not match d as there
  1460. is no top-level const on the parameter type "const int *".
  1461. </pre></td></tr>
  1462. <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>
  1463. <tr><td colspan="4" class="doc" id="isInteger0"><pre>Matches QualType nodes that are of integer type.
  1464. Given
  1465. void a(int);
  1466. void b(long);
  1467. void c(double);
  1468. functionDecl(hasAnyParameter(hasType(isInteger())))
  1469. matches "a(int)", "b(long)", but not "c(double)".
  1470. </pre></td></tr>
  1471. <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>
  1472. <tr><td colspan="4" class="doc" id="equalsBoundNode0"><pre>Matches if a node equals a previously bound node.
  1473. Matches a node if it equals the node previously bound to ID.
  1474. Given
  1475. class X { int a; int b; };
  1476. recordDecl(
  1477. has(fieldDecl(hasName("a"), hasType(type().bind("t")))),
  1478. has(fieldDecl(hasName("b"), hasType(type(equalsBoundNode("t"))))))
  1479. matches the class X, as a and b have the same type.
  1480. Note that when multiple matches are involved via forEach* matchers,
  1481. equalsBoundNodes acts as a filter.
  1482. For example:
  1483. compoundStmt(
  1484. forEachDescendant(varDecl().bind("d")),
  1485. forEachDescendant(declRefExpr(to(decl(equalsBoundNode("d"))))))
  1486. will trigger a match for each combination of variable declaration
  1487. and reference to that variable declaration within a compound statement.
  1488. </pre></td></tr>
  1489. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('isExpansionInFileMatching1')"><a name="isExpansionInFileMatching1Anchor">isExpansionInFileMatching</a></td><td>std::string RegExp</td></tr>
  1490. <tr><td colspan="4" class="doc" id="isExpansionInFileMatching1"><pre>Matches AST nodes that were expanded within files whose name is
  1491. partially matching a given regex.
  1492. Example matches Y but not X
  1493. (matcher = recordDecl(isExpansionInFileMatching("AST.*"))
  1494. #include "ASTMatcher.h"
  1495. class X {};
  1496. ASTMatcher.h:
  1497. class Y {};
  1498. Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TypeLoc.html">TypeLoc</a>&gt;
  1499. </pre></td></tr>
  1500. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('isExpansionInMainFile1')"><a name="isExpansionInMainFile1Anchor">isExpansionInMainFile</a></td><td></td></tr>
  1501. <tr><td colspan="4" class="doc" id="isExpansionInMainFile1"><pre>Matches AST nodes that were expanded within the main-file.
  1502. Example matches X but not Y (matcher = recordDecl(isExpansionInMainFile())
  1503. #include &lt;Y.h&gt;
  1504. class X {};
  1505. Y.h:
  1506. class Y {};
  1507. Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TypeLoc.html">TypeLoc</a>&gt;
  1508. </pre></td></tr>
  1509. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;</td><td class="name" onclick="toggle('isExpansionInSystemHeader1')"><a name="isExpansionInSystemHeader1Anchor">isExpansionInSystemHeader</a></td><td></td></tr>
  1510. <tr><td colspan="4" class="doc" id="isExpansionInSystemHeader1"><pre>Matches AST nodes that were expanded within system-header-files.
  1511. Example matches Y but not X
  1512. (matcher = recordDecl(isExpansionInSystemHeader())
  1513. #include &lt;SystemHeader.h&gt;
  1514. class X {};
  1515. SystemHeader.h:
  1516. class Y {};
  1517. Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TypeLoc.html">TypeLoc</a>&gt;
  1518. </pre></td></tr>
  1519. <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>
  1520. <tr><td colspan="4" class="doc" id="isDefinition0"><pre>Matches if a declaration has a body attached.
  1521. Example matches A, va, fa
  1522. class A {};
  1523. class B; Doesn't match, as it has no body.
  1524. int va;
  1525. extern int vb; Doesn't match, as it doesn't define the variable.
  1526. void fa() {}
  1527. void fb(); Doesn't match, as it has no body.
  1528. 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;
  1529. </pre></td></tr>
  1530. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateArgument.html">TemplateArgument</a>&gt;</td><td class="name" onclick="toggle('equalsIntegralValue0')"><a name="equalsIntegralValue0Anchor">equalsIntegralValue</a></td><td>std::string Value</td></tr>
  1531. <tr><td colspan="4" class="doc" id="equalsIntegralValue0"><pre>Matches a TemplateArgument of integral type with a given value.
  1532. Note that 'Value' is a string as the template argument's value is
  1533. an arbitrary precision integer. 'Value' must be euqal to the canonical
  1534. representation of that integral value in base 10.
  1535. Given
  1536. template&lt;int T&gt; struct A {};
  1537. C&lt;42&gt; c;
  1538. classTemplateSpecializationDecl(
  1539. hasAnyTemplateArgument(equalsIntegralValue("42")))
  1540. matches the implicit instantiation of C in C&lt;42&gt;.
  1541. </pre></td></tr>
  1542. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateArgument.html">TemplateArgument</a>&gt;</td><td class="name" onclick="toggle('isIntegral0')"><a name="isIntegral0Anchor">isIntegral</a></td><td></td></tr>
  1543. <tr><td colspan="4" class="doc" id="isIntegral0"><pre>Matches a TemplateArgument that is an integral value.
  1544. Given
  1545. template&lt;int T&gt; struct A {};
  1546. C&lt;42&gt; c;
  1547. classTemplateSpecializationDecl(
  1548. hasAnyTemplateArgument(isIntegral()))
  1549. matches the implicit instantiation of C in C&lt;42&gt;
  1550. with isIntegral() matching 42.
  1551. </pre></td></tr>
  1552. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateSpecializationType.html">TemplateSpecializationType</a>&gt;</td><td class="name" onclick="toggle('templateArgumentCountIs1')"><a name="templateArgumentCountIs1Anchor">templateArgumentCountIs</a></td><td>unsigned N</td></tr>
  1553. <tr><td colspan="4" class="doc" id="templateArgumentCountIs1"><pre>Matches if the number of template arguments equals N.
  1554. Given
  1555. template&lt;typename T&gt; struct C {};
  1556. C&lt;int&gt; c;
  1557. classTemplateSpecializationDecl(templateArgumentCountIs(1))
  1558. matches C&lt;int&gt;.
  1559. </pre></td></tr>
  1560. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TypeLoc.html">TypeLoc</a>&gt;</td><td class="name" onclick="toggle('isExpansionInFileMatching2')"><a name="isExpansionInFileMatching2Anchor">isExpansionInFileMatching</a></td><td>std::string RegExp</td></tr>
  1561. <tr><td colspan="4" class="doc" id="isExpansionInFileMatching2"><pre>Matches AST nodes that were expanded within files whose name is
  1562. partially matching a given regex.
  1563. Example matches Y but not X
  1564. (matcher = recordDecl(isExpansionInFileMatching("AST.*"))
  1565. #include "ASTMatcher.h"
  1566. class X {};
  1567. ASTMatcher.h:
  1568. class Y {};
  1569. Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TypeLoc.html">TypeLoc</a>&gt;
  1570. </pre></td></tr>
  1571. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TypeLoc.html">TypeLoc</a>&gt;</td><td class="name" onclick="toggle('isExpansionInMainFile2')"><a name="isExpansionInMainFile2Anchor">isExpansionInMainFile</a></td><td></td></tr>
  1572. <tr><td colspan="4" class="doc" id="isExpansionInMainFile2"><pre>Matches AST nodes that were expanded within the main-file.
  1573. Example matches X but not Y (matcher = recordDecl(isExpansionInMainFile())
  1574. #include &lt;Y.h&gt;
  1575. class X {};
  1576. Y.h:
  1577. class Y {};
  1578. Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TypeLoc.html">TypeLoc</a>&gt;
  1579. </pre></td></tr>
  1580. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TypeLoc.html">TypeLoc</a>&gt;</td><td class="name" onclick="toggle('isExpansionInSystemHeader2')"><a name="isExpansionInSystemHeader2Anchor">isExpansionInSystemHeader</a></td><td></td></tr>
  1581. <tr><td colspan="4" class="doc" id="isExpansionInSystemHeader2"><pre>Matches AST nodes that were expanded within system-header-files.
  1582. Example matches Y but not X
  1583. (matcher = recordDecl(isExpansionInSystemHeader())
  1584. #include &lt;SystemHeader.h&gt;
  1585. class X {};
  1586. SystemHeader.h:
  1587. class Y {};
  1588. Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;, Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TypeLoc.html">TypeLoc</a>&gt;
  1589. </pre></td></tr>
  1590. <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>
  1591. <tr><td colspan="4" class="doc" id="equalsBoundNode2"><pre>Matches if a node equals a previously bound node.
  1592. Matches a node if it equals the node previously bound to ID.
  1593. Given
  1594. class X { int a; int b; };
  1595. recordDecl(
  1596. has(fieldDecl(hasName("a"), hasType(type().bind("t")))),
  1597. has(fieldDecl(hasName("b"), hasType(type(equalsBoundNode("t"))))))
  1598. matches the class X, as a and b have the same type.
  1599. Note that when multiple matches are involved via forEach* matchers,
  1600. equalsBoundNodes acts as a filter.
  1601. For example:
  1602. compoundStmt(
  1603. forEachDescendant(varDecl().bind("d")),
  1604. forEachDescendant(declRefExpr(to(decl(equalsBoundNode("d"))))))
  1605. will trigger a match for each combination of variable declaration
  1606. and reference to that variable declaration within a compound statement.
  1607. </pre></td></tr>
  1608. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Type.html">Type</a>&gt;</td><td class="name" onclick="toggle('voidType0')"><a name="voidType0Anchor">voidType</a></td><td></td></tr>
  1609. <tr><td colspan="4" class="doc" id="voidType0"><pre>Matches type void.
  1610. Given
  1611. struct S { void func(); };
  1612. functionDecl(returns(voidType()))
  1613. matches "void func();"
  1614. </pre></td></tr>
  1615. <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>
  1616. <tr><td colspan="4" class="doc" id="ofKind0"><pre>Matches unary expressions of a certain kind.
  1617. Given
  1618. int x;
  1619. int s = sizeof(x) + alignof(x)
  1620. unaryExprOrTypeTraitExpr(ofKind(UETT_SizeOf))
  1621. matches sizeof(x)
  1622. </pre></td></tr>
  1623. <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>
  1624. <tr><td colspan="4" class="doc" id="hasOperatorName1"><pre>Matches the operator Name of operator expressions (binary or
  1625. unary).
  1626. Example matches a || b (matcher = binaryOperator(hasOperatorName("||")))
  1627. !(a || b)
  1628. </pre></td></tr>
  1629. <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>
  1630. <tr><td colspan="4" class="doc" id="hasGlobalStorage0"><pre>Matches a variable declaration that does not have local storage.
  1631. Example matches y and z (matcher = varDecl(hasGlobalStorage())
  1632. void f() {
  1633. int x;
  1634. static int y;
  1635. }
  1636. int z;
  1637. </pre></td></tr>
  1638. <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>
  1639. <tr><td colspan="4" class="doc" id="hasLocalStorage0"><pre>Matches a variable declaration that has function scope and is a
  1640. non-static local variable.
  1641. Example matches x (matcher = varDecl(hasLocalStorage())
  1642. void f() {
  1643. int x;
  1644. static int y;
  1645. }
  1646. int z;
  1647. </pre></td></tr>
  1648. <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>
  1649. <tr><td colspan="4" class="doc" id="isDefinition1"><pre>Matches if a declaration has a body attached.
  1650. Example matches A, va, fa
  1651. class A {};
  1652. class B; Doesn't match, as it has no body.
  1653. int va;
  1654. extern int vb; Doesn't match, as it doesn't define the variable.
  1655. void fa() {}
  1656. void fb(); Doesn't match, as it has no body.
  1657. 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;
  1658. </pre></td></tr>
  1659. <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>
  1660. <tr><td colspan="4" class="doc" id="isExplicitTemplateSpecialization1"><pre>Matches explicit template specializations of function, class, or
  1661. static member variable template instantiations.
  1662. Given
  1663. template&lt;typename T&gt; void A(T t) { }
  1664. template&lt;&gt; void A(int N) { }
  1665. functionDecl(isExplicitTemplateSpecialization())
  1666. matches the specialization A&lt;int&gt;().
  1667. 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;
  1668. </pre></td></tr>
  1669. <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>
  1670. <tr><td colspan="4" class="doc" id="isTemplateInstantiation1"><pre>Matches template instantiations of function, class, or static
  1671. member variable template instantiations.
  1672. Given
  1673. template &lt;typename T&gt; class X {}; class A {}; X&lt;A&gt; x;
  1674. or
  1675. template &lt;typename T&gt; class X {}; class A {}; template class X&lt;A&gt;;
  1676. recordDecl(hasName("::X"), isTemplateInstantiation())
  1677. matches the template instantiation of X&lt;A&gt;.
  1678. But given
  1679. template &lt;typename T&gt; class X {}; class A {};
  1680. template &lt;&gt; class X&lt;A&gt; {}; X&lt;A&gt; x;
  1681. recordDecl(hasName("::X"), isTemplateInstantiation())
  1682. does not match, as X&lt;A&gt; is an explicit template specialization.
  1683. 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;
  1684. </pre></td></tr>
  1685. <tr><td>Matcher&lt;internal::Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;&gt;</td><td class="name" onclick="toggle('isInstantiated0')"><a name="isInstantiated0Anchor">isInstantiated</a></td><td></td></tr>
  1686. <tr><td colspan="4" class="doc" id="isInstantiated0"><pre>Matches declarations that are template instantiations or are inside
  1687. template instantiations.
  1688. Given
  1689. template&lt;typename T&gt; void A(T t) { T i; }
  1690. A(0);
  1691. A(0U);
  1692. functionDecl(isInstantiated())
  1693. matches 'A(int) {...};' and 'A(unsigned) {...}'.
  1694. </pre></td></tr>
  1695. <tr><td>Matcher&lt;internal::Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>&gt;&gt;</td><td class="name" onclick="toggle('isInTemplateInstantiation0')"><a name="isInTemplateInstantiation0Anchor">isInTemplateInstantiation</a></td><td></td></tr>
  1696. <tr><td colspan="4" class="doc" id="isInTemplateInstantiation0"><pre>Matches statements inside of a template instantiation.
  1697. Given
  1698. int j;
  1699. template&lt;typename T&gt; void A(T t) { T i; j += 42;}
  1700. A(0);
  1701. A(0U);
  1702. declStmt(isInTemplateInstantiation())
  1703. matches 'int i;' and 'unsigned i'.
  1704. unless(stmt(isInTemplateInstantiation()))
  1705. will NOT match j += 42; as it's shared between the template definition and
  1706. instantiation.
  1707. </pre></td></tr>
  1708. <!--END_NARROWING_MATCHERS -->
  1709. </table>
  1710. <!-- ======================================================================= -->
  1711. <h2 id="traversal-matchers">AST Traversal Matchers</h2>
  1712. <!-- ======================================================================= -->
  1713. <p>Traversal matchers specify the relationship to other nodes that are
  1714. reachable from the current node.</p>
  1715. <p>Note that there are special traversal matchers (has, hasDescendant, forEach and
  1716. forEachDescendant) which work on all nodes and allow users to write more generic
  1717. match expressions.</p>
  1718. <table>
  1719. <tr style="text-align:left"><th>Return type</th><th>Name</th><th>Parameters</th></tr>
  1720. <!-- START_TRAVERSAL_MATCHERS -->
  1721. <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>
  1722. <tr><td colspan="4" class="doc" id="eachOf0"><pre>Matches if any of the given matchers matches.
  1723. Unlike anyOf, eachOf will generate a match result for each
  1724. matching submatcher.
  1725. For example, in:
  1726. class A { int a; int b; };
  1727. The matcher:
  1728. recordDecl(eachOf(has(fieldDecl(hasName("a")).bind("v")),
  1729. has(fieldDecl(hasName("b")).bind("v"))))
  1730. will generate two results binding "v", the first of which binds
  1731. the field declaration of a, the second the field declaration of
  1732. b.
  1733. Usable as: Any Matcher
  1734. </pre></td></tr>
  1735. <tr><td>Matcher&lt;*&gt;</td><td class="name" onclick="toggle('forEachDescendant0')"><a name="forEachDescendant0Anchor">forEachDescendant</a></td><td>Matcher&lt;*&gt;</td></tr>
  1736. <tr><td colspan="4" class="doc" id="forEachDescendant0"><pre>Matches AST nodes that have descendant AST nodes that match the
  1737. provided matcher.
  1738. Example matches X, A, B, C
  1739. (matcher = recordDecl(forEachDescendant(recordDecl(hasName("X")))))
  1740. class X {}; Matches X, because X::X is a class of name X inside X.
  1741. class A { class X {}; };
  1742. class B { class C { class X {}; }; };
  1743. DescendantT must be an AST base type.
  1744. As opposed to 'hasDescendant', 'forEachDescendant' will cause a match for
  1745. each result that matches instead of only on the first one.
  1746. Note: Recursively combined ForEachDescendant can cause many matches:
  1747. recordDecl(forEachDescendant(recordDecl(forEachDescendant(recordDecl()))))
  1748. will match 10 times (plus injected class name matches) on:
  1749. class A { class B { class C { class D { class E {}; }; }; }; };
  1750. Usable as: Any Matcher
  1751. </pre></td></tr>
  1752. <tr><td>Matcher&lt;*&gt;</td><td class="name" onclick="toggle('forEach0')"><a name="forEach0Anchor">forEach</a></td><td>Matcher&lt;*&gt;</td></tr>
  1753. <tr><td colspan="4" class="doc" id="forEach0"><pre>Matches AST nodes that have child AST nodes that match the
  1754. provided matcher.
  1755. Example matches X, Y (matcher = recordDecl(forEach(recordDecl(hasName("X")))
  1756. class X {}; Matches X, because X::X is a class of name X inside X.
  1757. class Y { class X {}; };
  1758. class Z { class Y { class X {}; }; }; Does not match Z.
  1759. ChildT must be an AST base type.
  1760. As opposed to 'has', 'forEach' will cause a match for each result that
  1761. matches instead of only on the first one.
  1762. Usable as: Any Matcher
  1763. </pre></td></tr>
  1764. <tr><td>Matcher&lt;*&gt;</td><td class="name" onclick="toggle('hasAncestor0')"><a name="hasAncestor0Anchor">hasAncestor</a></td><td>Matcher&lt;*&gt;</td></tr>
  1765. <tr><td colspan="4" class="doc" id="hasAncestor0"><pre>Matches AST nodes that have an ancestor that matches the provided
  1766. matcher.
  1767. Given
  1768. void f() { if (true) { int x = 42; } }
  1769. void g() { for (;;) { int x = 43; } }
  1770. expr(integerLiteral(hasAncestor(ifStmt()))) matches 42, but not 43.
  1771. Usable as: Any Matcher
  1772. </pre></td></tr>
  1773. <tr><td>Matcher&lt;*&gt;</td><td class="name" onclick="toggle('hasDescendant0')"><a name="hasDescendant0Anchor">hasDescendant</a></td><td>Matcher&lt;*&gt;</td></tr>
  1774. <tr><td colspan="4" class="doc" id="hasDescendant0"><pre>Matches AST nodes that have descendant AST nodes that match the
  1775. provided matcher.
  1776. Example matches X, Y, Z
  1777. (matcher = recordDecl(hasDescendant(recordDecl(hasName("X")))))
  1778. class X {}; Matches X, because X::X is a class of name X inside X.
  1779. class Y { class X {}; };
  1780. class Z { class Y { class X {}; }; };
  1781. DescendantT must be an AST base type.
  1782. Usable as: Any Matcher
  1783. </pre></td></tr>
  1784. <tr><td>Matcher&lt;*&gt;</td><td class="name" onclick="toggle('has0')"><a name="has0Anchor">has</a></td><td>Matcher&lt;*&gt;</td></tr>
  1785. <tr><td colspan="4" class="doc" id="has0"><pre>Matches AST nodes that have child AST nodes that match the
  1786. provided matcher.
  1787. Example matches X, Y (matcher = recordDecl(has(recordDecl(hasName("X")))
  1788. class X {}; Matches X, because X::X is a class of name X inside X.
  1789. class Y { class X {}; };
  1790. class Z { class Y { class X {}; }; }; Does not match Z.
  1791. ChildT must be an AST base type.
  1792. Usable as: Any Matcher
  1793. </pre></td></tr>
  1794. <tr><td>Matcher&lt;*&gt;</td><td class="name" onclick="toggle('hasParent0')"><a name="hasParent0Anchor">hasParent</a></td><td>Matcher&lt;*&gt;</td></tr>
  1795. <tr><td colspan="4" class="doc" id="hasParent0"><pre>Matches AST nodes that have a parent that matches the provided
  1796. matcher.
  1797. Given
  1798. void f() { for (;;) { int x = 42; if (true) { int x = 43; } } }
  1799. compoundStmt(hasParent(ifStmt())) matches "{ int x = 43; }".
  1800. Usable as: Any Matcher
  1801. </pre></td></tr>
  1802. <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>
  1803. <tr><td colspan="4" class="doc" id="hasBase0"><pre>Matches the base expression of an array subscript expression.
  1804. Given
  1805. int i[5];
  1806. void f() { i[1] = 42; }
  1807. arraySubscriptExpression(hasBase(implicitCastExpr(
  1808. hasSourceExpression(declRefExpr()))))
  1809. matches i[1] with the declRefExpr() matching i
  1810. </pre></td></tr>
  1811. <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>
  1812. <tr><td colspan="4" class="doc" id="hasIndex0"><pre>Matches the index expression of an array subscript expression.
  1813. Given
  1814. int i[5];
  1815. void f() { i[1] = 42; }
  1816. arraySubscriptExpression(hasIndex(integerLiteral()))
  1817. matches i[1] with the integerLiteral() matching 1
  1818. </pre></td></tr>
  1819. <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>
  1820. <tr><td colspan="4" class="doc" id="hasElementTypeLoc0"><pre>Matches arrays and C99 complex types that have a specific element
  1821. type.
  1822. Given
  1823. struct A {};
  1824. A a[7];
  1825. int b[7];
  1826. arrayType(hasElementType(builtinType()))
  1827. matches "int b[7]"
  1828. 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;
  1829. </pre></td></tr>
  1830. <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>
  1831. <tr><td colspan="4" class="doc" id="hasElementType0"><pre>Matches arrays and C99 complex types that have a specific element
  1832. type.
  1833. Given
  1834. struct A {};
  1835. A a[7];
  1836. int b[7];
  1837. arrayType(hasElementType(builtinType()))
  1838. matches "int b[7]"
  1839. 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;
  1840. </pre></td></tr>
  1841. <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>
  1842. <tr><td colspan="4" class="doc" id="hasValueTypeLoc0"><pre>Matches atomic types with a specific value type.
  1843. Given
  1844. _Atomic(int) i;
  1845. _Atomic(float) f;
  1846. atomicType(hasValueType(isInteger()))
  1847. matches "_Atomic(int) i"
  1848. Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1AtomicType.html">AtomicType</a>&gt;
  1849. </pre></td></tr>
  1850. <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>
  1851. <tr><td colspan="4" class="doc" id="hasValueType0"><pre>Matches atomic types with a specific value type.
  1852. Given
  1853. _Atomic(int) i;
  1854. _Atomic(float) f;
  1855. atomicType(hasValueType(isInteger()))
  1856. matches "_Atomic(int) i"
  1857. Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1AtomicType.html">AtomicType</a>&gt;
  1858. </pre></td></tr>
  1859. <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>
  1860. <tr><td colspan="4" class="doc" id="hasDeducedType0"><pre>Matches AutoType nodes where the deduced type is a specific type.
  1861. Note: There is no TypeLoc for the deduced type and thus no
  1862. getDeducedLoc() matcher.
  1863. Given
  1864. auto a = 1;
  1865. auto b = 2.0;
  1866. autoType(hasDeducedType(isInteger()))
  1867. matches "auto a"
  1868. Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1AutoType.html">AutoType</a>&gt;
  1869. </pre></td></tr>
  1870. <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>
  1871. <tr><td colspan="4" class="doc" id="hasEitherOperand0"><pre>Matches if either the left hand side or the right hand side of a
  1872. binary operator matches.
  1873. </pre></td></tr>
  1874. <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>
  1875. <tr><td colspan="4" class="doc" id="hasLHS0"><pre>Matches the left hand side of binary operator expressions.
  1876. Example matches a (matcher = binaryOperator(hasLHS()))
  1877. a || b
  1878. </pre></td></tr>
  1879. <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>
  1880. <tr><td colspan="4" class="doc" id="hasRHS0"><pre>Matches the right hand side of binary operator expressions.
  1881. Example matches b (matcher = binaryOperator(hasRHS()))
  1882. a || b
  1883. </pre></td></tr>
  1884. <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>
  1885. <tr><td colspan="4" class="doc" id="pointeeLoc0"><pre>Narrows PointerType (and similar) matchers to those where the
  1886. pointee matches a given matcher.
  1887. Given
  1888. int *a;
  1889. int const *b;
  1890. float const *f;
  1891. pointerType(pointee(isConstQualified(), isInteger()))
  1892. matches "int const *b"
  1893. 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;,
  1894. 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;
  1895. </pre></td></tr>
  1896. <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>
  1897. <tr><td colspan="4" class="doc" id="pointee0"><pre>Narrows PointerType (and similar) matchers to those where the
  1898. pointee matches a given matcher.
  1899. Given
  1900. int *a;
  1901. int const *b;
  1902. float const *f;
  1903. pointerType(pointee(isConstQualified(), isInteger()))
  1904. matches "int const *b"
  1905. 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;,
  1906. 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;
  1907. </pre></td></tr>
  1908. <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>
  1909. <tr><td colspan="4" class="doc" id="hasAnyArgument1"><pre>Matches any argument of a call expression or a constructor call
  1910. expression.
  1911. Given
  1912. void x(int, int, int) { int y; x(1, y, 42); }
  1913. callExpr(hasAnyArgument(declRefExpr()))
  1914. matches x(1, y, 42)
  1915. with hasAnyArgument(...)
  1916. matching y
  1917. FIXME: Currently this will ignore parentheses and implicit casts on
  1918. the argument before applying the inner matcher. We'll want to remove
  1919. this to allow for greater control by the user once ignoreImplicit()
  1920. has been implemented.
  1921. </pre></td></tr>
  1922. <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>
  1923. <tr><td colspan="4" class="doc" id="hasArgument1"><pre>Matches the n'th argument of a call expression or a constructor
  1924. call expression.
  1925. Example matches y in x(y)
  1926. (matcher = callExpr(hasArgument(0, declRefExpr())))
  1927. void x(int) { int y; x(y); }
  1928. </pre></td></tr>
  1929. <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>
  1930. <tr><td colspan="4" class="doc" id="hasDeclaration12"><pre>Matches a node if the declaration associated with that node
  1931. matches the given matcher.
  1932. The associated declaration is:
  1933. - for type nodes, the declaration of the underlying type
  1934. - for CallExpr, the declaration of the callee
  1935. - for MemberExpr, the declaration of the referenced member
  1936. - for CXXConstructExpr, the declaration of the constructor
  1937. Also usable as Matcher&lt;T&gt; for any T supporting the getDecl() member
  1938. function. e.g. various subtypes of clang::Type and various expressions.
  1939. 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;,
  1940. 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;,
  1941. 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;,
  1942. 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;,
  1943. 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;,
  1944. 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;
  1945. </pre></td></tr>
  1946. <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>
  1947. <tr><td colspan="4" class="doc" id="forEachConstructorInitializer0"><pre>Matches each constructor initializer in a constructor definition.
  1948. Given
  1949. class A { A() : i(42), j(42) {} int i; int j; };
  1950. constructorDecl(forEachConstructorInitializer(forField(decl().bind("x"))))
  1951. will trigger two matches, binding for 'i' and 'j' respectively.
  1952. </pre></td></tr>
  1953. <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>
  1954. <tr><td colspan="4" class="doc" id="hasAnyConstructorInitializer0"><pre>Matches a constructor initializer.
  1955. Given
  1956. struct Foo {
  1957. Foo() : foo_(1) { }
  1958. int foo_;
  1959. };
  1960. recordDecl(has(constructorDecl(hasAnyConstructorInitializer(anything()))))
  1961. record matches Foo, hasAnyConstructorInitializer matches foo_(1)
  1962. </pre></td></tr>
  1963. <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>
  1964. <tr><td colspan="4" class="doc" id="forField0"><pre>Matches the field declaration of a constructor initializer.
  1965. Given
  1966. struct Foo {
  1967. Foo() : foo_(1) { }
  1968. int foo_;
  1969. };
  1970. recordDecl(has(constructorDecl(hasAnyConstructorInitializer(
  1971. forField(hasName("foo_"))))))
  1972. matches Foo
  1973. with forField matching foo_
  1974. </pre></td></tr>
  1975. <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>
  1976. <tr><td colspan="4" class="doc" id="withInitializer0"><pre>Matches the initializer expression of a constructor initializer.
  1977. Given
  1978. struct Foo {
  1979. Foo() : foo_(1) { }
  1980. int foo_;
  1981. };
  1982. recordDecl(has(constructorDecl(hasAnyConstructorInitializer(
  1983. withInitializer(integerLiteral(equals(1)))))))
  1984. matches Foo
  1985. with withInitializer matching (1)
  1986. </pre></td></tr>
  1987. <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>
  1988. <tr><td colspan="4" class="doc" id="hasBody3"><pre>Matches a 'for', 'while', or 'do while' statement that has
  1989. a given body.
  1990. Given
  1991. for (;;) {}
  1992. hasBody(compoundStmt())
  1993. matches 'for (;;) {}'
  1994. with compoundStmt()
  1995. matching '{}'
  1996. </pre></td></tr>
  1997. <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>
  1998. <tr><td colspan="4" class="doc" id="hasLoopVariable0"><pre>Matches the initialization statement of a for loop.
  1999. Example:
  2000. forStmt(hasLoopVariable(anything()))
  2001. matches 'int x' in
  2002. for (int x : a) { }
  2003. </pre></td></tr>
  2004. <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>
  2005. <tr><td colspan="4" class="doc" id="hasRangeInit0"><pre>Matches the range initialization statement of a for loop.
  2006. Example:
  2007. forStmt(hasRangeInit(anything()))
  2008. matches 'a' in
  2009. for (int x : a) { }
  2010. </pre></td></tr>
  2011. <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>
  2012. <tr><td colspan="4" class="doc" id="onImplicitObjectArgument0"><pre></pre></td></tr>
  2013. <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>
  2014. <tr><td colspan="4" class="doc" id="on0"><pre>Matches on the implicit object argument of a member call expression.
  2015. Example matches y.x() (matcher = callExpr(on(hasType(recordDecl(hasName("Y"))))))
  2016. class Y { public: void x(); };
  2017. void z() { Y y; y.x(); }",
  2018. FIXME: Overload to allow directly matching types?
  2019. </pre></td></tr>
  2020. <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>
  2021. <tr><td colspan="4" class="doc" id="thisPointerType1"><pre>Overloaded to match the type's declaration.
  2022. </pre></td></tr>
  2023. <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>
  2024. <tr><td colspan="4" class="doc" id="thisPointerType0"><pre>Matches if the expression's type either matches the specified
  2025. matcher, or is a pointer to a type that matches the InnerMatcher.
  2026. </pre></td></tr>
  2027. <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>
  2028. <tr><td colspan="4" class="doc" id="ofClass0"><pre>Matches the class declaration that the given method declaration
  2029. belongs to.
  2030. FIXME: Generalize this for other kinds of declarations.
  2031. FIXME: What other kind of declarations would we need to generalize
  2032. this to?
  2033. Example matches A() in the last line
  2034. (matcher = constructExpr(hasDeclaration(methodDecl(
  2035. ofClass(hasName("A"))))))
  2036. class A {
  2037. public:
  2038. A();
  2039. };
  2040. A a = A();
  2041. </pre></td></tr>
  2042. <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>
  2043. <tr><td colspan="4" class="doc" id="hasMethod0"><pre>Matches the first method of a class or struct that satisfies InnerMatcher.
  2044. Given:
  2045. class A { void func(); };
  2046. class B { void member(); };
  2047. recordDecl(hasMethod(hasName("func"))) matches the declaration of A
  2048. but not B.
  2049. </pre></td></tr>
  2050. <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>
  2051. <tr><td colspan="4" class="doc" id="isDerivedFrom0"><pre>Matches C++ classes that are directly or indirectly derived from
  2052. a class matching Base.
  2053. Note that a class is not considered to be derived from itself.
  2054. Example matches Y, Z, C (Base == hasName("X"))
  2055. class X;
  2056. class Y : public X {}; directly derived
  2057. class Z : public Y {}; indirectly derived
  2058. typedef X A;
  2059. typedef A B;
  2060. class C : public B {}; derived from a typedef of X
  2061. In the following example, Bar matches isDerivedFrom(hasName("X")):
  2062. class Foo;
  2063. typedef Foo X;
  2064. class Bar : public Foo {}; derived from a type that X is a typedef of
  2065. </pre></td></tr>
  2066. <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>
  2067. <tr><td colspan="4" class="doc" id="isSameOrDerivedFrom0"><pre>Similar to isDerivedFrom(), but also matches classes that directly
  2068. match Base.
  2069. </pre></td></tr>
  2070. <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>
  2071. <tr><td colspan="4" class="doc" id="callee1"><pre>Matches if the call expression's callee's declaration matches the
  2072. given matcher.
  2073. Example matches y.x() (matcher = callExpr(callee(methodDecl(hasName("x")))))
  2074. class Y { public: void x(); };
  2075. void z() { Y y; y.x(); }
  2076. </pre></td></tr>
  2077. <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>
  2078. <tr><td colspan="4" class="doc" id="callee0"><pre>Matches if the call expression's callee expression matches.
  2079. Given
  2080. class Y { void x() { this-&gt;x(); x(); Y y; y.x(); } };
  2081. void f() { f(); }
  2082. callExpr(callee(expr()))
  2083. matches this-&gt;x(), x(), y.x(), f()
  2084. with callee(...)
  2085. matching this-&gt;x, x, y.x, f respectively
  2086. Note: Callee cannot take the more general internal::Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Expr.html">Expr</a>&gt;
  2087. because this introduces ambiguous overloads with calls to Callee taking a
  2088. internal::Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;, as the matcher hierarchy is purely
  2089. implemented in terms of implicit casts.
  2090. </pre></td></tr>
  2091. <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>
  2092. <tr><td colspan="4" class="doc" id="hasAnyArgument0"><pre>Matches any argument of a call expression or a constructor call
  2093. expression.
  2094. Given
  2095. void x(int, int, int) { int y; x(1, y, 42); }
  2096. callExpr(hasAnyArgument(declRefExpr()))
  2097. matches x(1, y, 42)
  2098. with hasAnyArgument(...)
  2099. matching y
  2100. FIXME: Currently this will ignore parentheses and implicit casts on
  2101. the argument before applying the inner matcher. We'll want to remove
  2102. this to allow for greater control by the user once ignoreImplicit()
  2103. has been implemented.
  2104. </pre></td></tr>
  2105. <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>
  2106. <tr><td colspan="4" class="doc" id="hasArgument0"><pre>Matches the n'th argument of a call expression or a constructor
  2107. call expression.
  2108. Example matches y in x(y)
  2109. (matcher = callExpr(hasArgument(0, declRefExpr())))
  2110. void x(int) { int y; x(y); }
  2111. </pre></td></tr>
  2112. <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>
  2113. <tr><td colspan="4" class="doc" id="hasDeclaration13"><pre>Matches a node if the declaration associated with that node
  2114. matches the given matcher.
  2115. The associated declaration is:
  2116. - for type nodes, the declaration of the underlying type
  2117. - for CallExpr, the declaration of the callee
  2118. - for MemberExpr, the declaration of the referenced member
  2119. - for CXXConstructExpr, the declaration of the constructor
  2120. Also usable as Matcher&lt;T&gt; for any T supporting the getDecl() member
  2121. function. e.g. various subtypes of clang::Type and various expressions.
  2122. 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;,
  2123. 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;,
  2124. 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;,
  2125. 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;,
  2126. 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;,
  2127. 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;
  2128. </pre></td></tr>
  2129. <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>
  2130. <tr><td colspan="4" class="doc" id="hasCaseConstant0"><pre>If the given case statement does not use the GNU case range
  2131. extension, matches the constant given in the statement.
  2132. Given
  2133. switch (1) { case 1: case 1+1: case 3 ... 4: ; }
  2134. caseStmt(hasCaseConstant(integerLiteral()))
  2135. matches "case 1:"
  2136. </pre></td></tr>
  2137. <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>
  2138. <tr><td colspan="4" class="doc" id="hasSourceExpression0"><pre>Matches if the cast's source expression matches the given matcher.
  2139. Example: matches "a string" (matcher =
  2140. hasSourceExpression(constructExpr()))
  2141. class URL { URL(string); };
  2142. URL url = "a string";
  2143. </pre></td></tr>
  2144. <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>
  2145. <tr><td colspan="4" class="doc" id="hasAnyTemplateArgument0"><pre>Matches classTemplateSpecializations that have at least one
  2146. TemplateArgument matching the given InnerMatcher.
  2147. Given
  2148. template&lt;typename T&gt; class A {};
  2149. template&lt;&gt; class A&lt;double&gt; {};
  2150. A&lt;int&gt; a;
  2151. classTemplateSpecializationDecl(hasAnyTemplateArgument(
  2152. refersToType(asString("int"))))
  2153. matches the specialization A&lt;int&gt;
  2154. </pre></td></tr>
  2155. <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>
  2156. <tr><td colspan="4" class="doc" id="hasTemplateArgument0"><pre>Matches classTemplateSpecializations where the n'th TemplateArgument
  2157. matches the given InnerMatcher.
  2158. Given
  2159. template&lt;typename T, typename U&gt; class A {};
  2160. A&lt;bool, int&gt; b;
  2161. A&lt;int, bool&gt; c;
  2162. classTemplateSpecializationDecl(hasTemplateArgument(
  2163. 1, refersToType(asString("int"))))
  2164. matches the specialization A&lt;bool, int&gt;
  2165. </pre></td></tr>
  2166. <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>
  2167. <tr><td colspan="4" class="doc" id="hasElementTypeLoc1"><pre>Matches arrays and C99 complex types that have a specific element
  2168. type.
  2169. Given
  2170. struct A {};
  2171. A a[7];
  2172. int b[7];
  2173. arrayType(hasElementType(builtinType()))
  2174. matches "int b[7]"
  2175. 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;
  2176. </pre></td></tr>
  2177. <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>
  2178. <tr><td colspan="4" class="doc" id="hasElementType1"><pre>Matches arrays and C99 complex types that have a specific element
  2179. type.
  2180. Given
  2181. struct A {};
  2182. A a[7];
  2183. int b[7];
  2184. arrayType(hasElementType(builtinType()))
  2185. matches "int b[7]"
  2186. 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;
  2187. </pre></td></tr>
  2188. <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>
  2189. <tr><td colspan="4" class="doc" id="hasAnySubstatement0"><pre>Matches compound statements where at least one substatement matches
  2190. a given matcher.
  2191. Given
  2192. { {}; 1+2; }
  2193. hasAnySubstatement(compoundStmt())
  2194. matches '{ {}; 1+2; }'
  2195. with compoundStmt()
  2196. matching '{}'
  2197. </pre></td></tr>
  2198. <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>
  2199. <tr><td colspan="4" class="doc" id="hasCondition4"><pre>Matches the condition expression of an if statement, for loop,
  2200. or conditional operator.
  2201. Example matches true (matcher = hasCondition(boolLiteral(equals(true))))
  2202. if (true) {}
  2203. </pre></td></tr>
  2204. <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>
  2205. <tr><td colspan="4" class="doc" id="hasFalseExpression0"><pre>Matches the false branch expression of a conditional operator.
  2206. Example matches b
  2207. condition ? a : b
  2208. </pre></td></tr>
  2209. <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>
  2210. <tr><td colspan="4" class="doc" id="hasTrueExpression0"><pre>Matches the true branch expression of a conditional operator.
  2211. Example matches a
  2212. condition ? a : b
  2213. </pre></td></tr>
  2214. <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>
  2215. <tr><td colspan="4" class="doc" id="hasDeclaration11"><pre>Matches a node if the declaration associated with that node
  2216. matches the given matcher.
  2217. The associated declaration is:
  2218. - for type nodes, the declaration of the underlying type
  2219. - for CallExpr, the declaration of the callee
  2220. - for MemberExpr, the declaration of the referenced member
  2221. - for CXXConstructExpr, the declaration of the constructor
  2222. Also usable as Matcher&lt;T&gt; for any T supporting the getDecl() member
  2223. function. e.g. various subtypes of clang::Type and various expressions.
  2224. 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;,
  2225. 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;,
  2226. 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;,
  2227. 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;,
  2228. 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;,
  2229. 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;
  2230. </pre></td></tr>
  2231. <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>
  2232. <tr><td colspan="4" class="doc" id="throughUsingDecl0"><pre>Matches a DeclRefExpr that refers to a declaration through a
  2233. specific using shadow declaration.
  2234. FIXME: This currently only works for functions. Fix.
  2235. Given
  2236. namespace a { void f() {} }
  2237. using a::f;
  2238. void g() {
  2239. f(); Matches this ..
  2240. a::f(); .. but not this.
  2241. }
  2242. declRefExpr(throughUsingDeclaration(anything()))
  2243. matches f()
  2244. </pre></td></tr>
  2245. <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>
  2246. <tr><td colspan="4" class="doc" id="to0"><pre>Matches a DeclRefExpr that refers to a declaration that matches the
  2247. specified matcher.
  2248. Example matches x in if(x)
  2249. (matcher = declRefExpr(to(varDecl(hasName("x")))))
  2250. bool x;
  2251. if (x) {}
  2252. </pre></td></tr>
  2253. <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>
  2254. <tr><td colspan="4" class="doc" id="containsDeclaration0"><pre>Matches the n'th declaration of a declaration statement.
  2255. Note that this does not work for global declarations because the AST
  2256. breaks up multiple-declaration DeclStmt's into multiple single-declaration
  2257. DeclStmt's.
  2258. Example: Given non-global declarations
  2259. int a, b = 0;
  2260. int c;
  2261. int d = 2, e;
  2262. declStmt(containsDeclaration(
  2263. 0, varDecl(hasInitializer(anything()))))
  2264. matches only 'int d = 2, e;', and
  2265. declStmt(containsDeclaration(1, varDecl()))
  2266. matches 'int a, b = 0' as well as 'int d = 2, e;'
  2267. but 'int c;' is not matched.
  2268. </pre></td></tr>
  2269. <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>
  2270. <tr><td colspan="4" class="doc" id="hasSingleDecl0"><pre>Matches the Decl of a DeclStmt which has a single declaration.
  2271. Given
  2272. int a, b;
  2273. int c;
  2274. declStmt(hasSingleDecl(anything()))
  2275. matches 'int c;' but not 'int a, b;'.
  2276. </pre></td></tr>
  2277. <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>
  2278. <tr><td colspan="4" class="doc" id="hasTypeLoc0"><pre>Matches if the type location of the declarator decl's type matches
  2279. the inner matcher.
  2280. Given
  2281. int x;
  2282. declaratorDecl(hasTypeLoc(loc(asString("int"))))
  2283. matches int x
  2284. </pre></td></tr>
  2285. <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>
  2286. <tr><td colspan="4" class="doc" id="hasDeclContext0"><pre>Matches declarations whose declaration context, interpreted as a
  2287. Decl, matches InnerMatcher.
  2288. Given
  2289. namespace N {
  2290. namespace M {
  2291. class D {};
  2292. }
  2293. }
  2294. recordDecl(hasDeclContext(namedDecl(hasName("M")))) matches the
  2295. declaration of class D.
  2296. </pre></td></tr>
  2297. <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>
  2298. <tr><td colspan="4" class="doc" id="hasBody0"><pre>Matches a 'for', 'while', or 'do while' statement that has
  2299. a given body.
  2300. Given
  2301. for (;;) {}
  2302. hasBody(compoundStmt())
  2303. matches 'for (;;) {}'
  2304. with compoundStmt()
  2305. matching '{}'
  2306. </pre></td></tr>
  2307. <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>
  2308. <tr><td colspan="4" class="doc" id="hasCondition3"><pre>Matches the condition expression of an if statement, for loop,
  2309. or conditional operator.
  2310. Example matches true (matcher = hasCondition(boolLiteral(equals(true))))
  2311. if (true) {}
  2312. </pre></td></tr>
  2313. <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>
  2314. <tr><td colspan="4" class="doc" id="hasQualifier0"><pre>Matches ElaboratedTypes whose qualifier, a NestedNameSpecifier,
  2315. matches InnerMatcher if the qualifier exists.
  2316. Given
  2317. namespace N {
  2318. namespace M {
  2319. class D {};
  2320. }
  2321. }
  2322. N::M::D d;
  2323. elaboratedType(hasQualifier(hasPrefix(specifiesNamespace(hasName("N"))))
  2324. matches the type of the variable declaration of d.
  2325. </pre></td></tr>
  2326. <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>
  2327. <tr><td colspan="4" class="doc" id="namesType0"><pre>Matches ElaboratedTypes whose named type matches InnerMatcher.
  2328. Given
  2329. namespace N {
  2330. namespace M {
  2331. class D {};
  2332. }
  2333. }
  2334. N::M::D d;
  2335. elaboratedType(namesType(recordType(
  2336. hasDeclaration(namedDecl(hasName("D")))))) matches the type of the variable
  2337. declaration of d.
  2338. </pre></td></tr>
  2339. <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>
  2340. <tr><td colspan="4" class="doc" id="hasDeclaration10"><pre>Matches a node if the declaration associated with that node
  2341. matches the given matcher.
  2342. The associated declaration is:
  2343. - for type nodes, the declaration of the underlying type
  2344. - for CallExpr, the declaration of the callee
  2345. - for MemberExpr, the declaration of the referenced member
  2346. - for CXXConstructExpr, the declaration of the constructor
  2347. Also usable as Matcher&lt;T&gt; for any T supporting the getDecl() member
  2348. function. e.g. various subtypes of clang::Type and various expressions.
  2349. 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;,
  2350. 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;,
  2351. 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;,
  2352. 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;,
  2353. 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;,
  2354. 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;
  2355. </pre></td></tr>
  2356. <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>
  2357. <tr><td colspan="4" class="doc" id="hasDestinationType0"><pre>Matches casts whose destination type matches a given matcher.
  2358. (Note: Clang's AST refers to other conversions as "casts" too, and calls
  2359. actual casts "explicit" casts.)
  2360. </pre></td></tr>
  2361. <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>
  2362. <tr><td colspan="4" class="doc" id="hasType2"><pre>Overloaded to match the declaration of the expression's or value
  2363. declaration's type.
  2364. In case of a value declaration (for example a variable declaration),
  2365. this resolves one layer of indirection. For example, in the value
  2366. declaration "X x;", recordDecl(hasName("X")) matches the declaration of X,
  2367. while varDecl(hasType(recordDecl(hasName("X")))) matches the declaration
  2368. of x."
  2369. Example matches x (matcher = expr(hasType(recordDecl(hasName("X")))))
  2370. and z (matcher = varDecl(hasType(recordDecl(hasName("X")))))
  2371. class X {};
  2372. void y(X &amp;x) { x; X z; }
  2373. 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;
  2374. </pre></td></tr>
  2375. <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>
  2376. <tr><td colspan="4" class="doc" id="hasType0"><pre>Matches if the expression's or declaration's type matches a type
  2377. matcher.
  2378. Example matches x (matcher = expr(hasType(recordDecl(hasName("X")))))
  2379. and z (matcher = varDecl(hasType(recordDecl(hasName("X")))))
  2380. class X {};
  2381. void y(X &amp;x) { x; X z; }
  2382. </pre></td></tr>
  2383. <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>
  2384. <tr><td colspan="4" class="doc" id="ignoringImpCasts0"><pre>Matches expressions that match InnerMatcher after any implicit casts
  2385. are stripped off.
  2386. Parentheses and explicit casts are not discarded.
  2387. Given
  2388. int arr[5];
  2389. int a = 0;
  2390. char b = 0;
  2391. const int c = a;
  2392. int *d = arr;
  2393. long e = (long) 0l;
  2394. The matchers
  2395. varDecl(hasInitializer(ignoringImpCasts(integerLiteral())))
  2396. varDecl(hasInitializer(ignoringImpCasts(declRefExpr())))
  2397. would match the declarations for a, b, c, and d, but not e.
  2398. While
  2399. varDecl(hasInitializer(integerLiteral()))
  2400. varDecl(hasInitializer(declRefExpr()))
  2401. only match the declarations for b, c, and d.
  2402. </pre></td></tr>
  2403. <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>
  2404. <tr><td colspan="4" class="doc" id="ignoringParenCasts0"><pre>Matches expressions that match InnerMatcher after parentheses and
  2405. casts are stripped off.
  2406. Implicit and non-C Style casts are also discarded.
  2407. Given
  2408. int a = 0;
  2409. char b = (0);
  2410. void* c = reinterpret_cast&lt;char*&gt;(0);
  2411. char d = char(0);
  2412. The matcher
  2413. varDecl(hasInitializer(ignoringParenCasts(integerLiteral())))
  2414. would match the declarations for a, b, c, and d.
  2415. while
  2416. varDecl(hasInitializer(integerLiteral()))
  2417. only match the declaration for a.
  2418. </pre></td></tr>
  2419. <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>
  2420. <tr><td colspan="4" class="doc" id="ignoringParenImpCasts0"><pre>Matches expressions that match InnerMatcher after implicit casts and
  2421. parentheses are stripped off.
  2422. Explicit casts are not discarded.
  2423. Given
  2424. int arr[5];
  2425. int a = 0;
  2426. char b = (0);
  2427. const int c = a;
  2428. int *d = (arr);
  2429. long e = ((long) 0l);
  2430. The matchers
  2431. varDecl(hasInitializer(ignoringParenImpCasts(integerLiteral())))
  2432. varDecl(hasInitializer(ignoringParenImpCasts(declRefExpr())))
  2433. would match the declarations for a, b, c, and d, but not e.
  2434. while
  2435. varDecl(hasInitializer(integerLiteral()))
  2436. varDecl(hasInitializer(declRefExpr()))
  2437. would only match the declaration for a.
  2438. </pre></td></tr>
  2439. <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>
  2440. <tr><td colspan="4" class="doc" id="hasBody1"><pre>Matches a 'for', 'while', or 'do while' statement that has
  2441. a given body.
  2442. Given
  2443. for (;;) {}
  2444. hasBody(compoundStmt())
  2445. matches 'for (;;) {}'
  2446. with compoundStmt()
  2447. matching '{}'
  2448. </pre></td></tr>
  2449. <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>
  2450. <tr><td colspan="4" class="doc" id="hasCondition1"><pre>Matches the condition expression of an if statement, for loop,
  2451. or conditional operator.
  2452. Example matches true (matcher = hasCondition(boolLiteral(equals(true))))
  2453. if (true) {}
  2454. </pre></td></tr>
  2455. <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>
  2456. <tr><td colspan="4" class="doc" id="hasIncrement0"><pre>Matches the increment statement of a for loop.
  2457. Example:
  2458. forStmt(hasIncrement(unaryOperator(hasOperatorName("++"))))
  2459. matches '++x' in
  2460. for (x; x &lt; N; ++x) { }
  2461. </pre></td></tr>
  2462. <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>
  2463. <tr><td colspan="4" class="doc" id="hasLoopInit0"><pre>Matches the initialization statement of a for loop.
  2464. Example:
  2465. forStmt(hasLoopInit(declStmt()))
  2466. matches 'int x = 0' in
  2467. for (int x = 0; x &lt; N; ++x) { }
  2468. </pre></td></tr>
  2469. <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>
  2470. <tr><td colspan="4" class="doc" id="hasAnyParameter0"><pre>Matches any parameter of a function declaration.
  2471. Does not match the 'this' parameter of a method.
  2472. Given
  2473. class X { void f(int x, int y, int z) {} };
  2474. methodDecl(hasAnyParameter(hasName("y")))
  2475. matches f(int x, int y, int z) {}
  2476. with hasAnyParameter(...)
  2477. matching int y
  2478. </pre></td></tr>
  2479. <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>
  2480. <tr><td colspan="4" class="doc" id="hasParameter0"><pre>Matches the n'th parameter of a function declaration.
  2481. Given
  2482. class X { void f(int x) {} };
  2483. methodDecl(hasParameter(0, hasType(varDecl())))
  2484. matches f(int x) {}
  2485. with hasParameter(...)
  2486. matching int x
  2487. </pre></td></tr>
  2488. <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>
  2489. <tr><td colspan="4" class="doc" id="returns0"><pre>Matches the return type of a function declaration.
  2490. Given:
  2491. class X { int f() { return 1; } };
  2492. methodDecl(returns(asString("int")))
  2493. matches int f() { return 1; }
  2494. </pre></td></tr>
  2495. <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>
  2496. <tr><td colspan="4" class="doc" id="hasCondition0"><pre>Matches the condition expression of an if statement, for loop,
  2497. or conditional operator.
  2498. Example matches true (matcher = hasCondition(boolLiteral(equals(true))))
  2499. if (true) {}
  2500. </pre></td></tr>
  2501. <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>
  2502. <tr><td colspan="4" class="doc" id="hasConditionVariableStatement0"><pre>Matches the condition variable statement in an if statement.
  2503. Given
  2504. if (A* a = GetAPointer()) {}
  2505. hasConditionVariableStatement(...)
  2506. matches 'A* a = GetAPointer()'.
  2507. </pre></td></tr>
  2508. <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>
  2509. <tr><td colspan="4" class="doc" id="hasElse0"><pre>Matches the else-statement of an if statement.
  2510. Examples matches the if statement
  2511. (matcher = ifStmt(hasElse(boolLiteral(equals(true)))))
  2512. if (false) false; else true;
  2513. </pre></td></tr>
  2514. <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>
  2515. <tr><td colspan="4" class="doc" id="hasThen0"><pre>Matches the then-statement of an if statement.
  2516. Examples matches the if statement
  2517. (matcher = ifStmt(hasThen(boolLiteral(equals(true)))))
  2518. if (false) true; else false;
  2519. </pre></td></tr>
  2520. <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>
  2521. <tr><td colspan="4" class="doc" id="hasImplicitDestinationType0"><pre>Matches implicit casts whose destination type matches a given
  2522. matcher.
  2523. FIXME: Unit test this matcher
  2524. </pre></td></tr>
  2525. <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>
  2526. <tr><td colspan="4" class="doc" id="hasDeclaration9"><pre>Matches a node if the declaration associated with that node
  2527. matches the given matcher.
  2528. The associated declaration is:
  2529. - for type nodes, the declaration of the underlying type
  2530. - for CallExpr, the declaration of the callee
  2531. - for MemberExpr, the declaration of the referenced member
  2532. - for CXXConstructExpr, the declaration of the constructor
  2533. Also usable as Matcher&lt;T&gt; for any T supporting the getDecl() member
  2534. function. e.g. various subtypes of clang::Type and various expressions.
  2535. 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;,
  2536. 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;,
  2537. 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;,
  2538. 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;,
  2539. 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;,
  2540. 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;
  2541. </pre></td></tr>
  2542. <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>
  2543. <tr><td colspan="4" class="doc" id="hasDeclaration8"><pre>Matches a node if the declaration associated with that node
  2544. matches the given matcher.
  2545. The associated declaration is:
  2546. - for type nodes, the declaration of the underlying type
  2547. - for CallExpr, the declaration of the callee
  2548. - for MemberExpr, the declaration of the referenced member
  2549. - for CXXConstructExpr, the declaration of the constructor
  2550. Also usable as Matcher&lt;T&gt; for any T supporting the getDecl() member
  2551. function. e.g. various subtypes of clang::Type and various expressions.
  2552. 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;,
  2553. 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;,
  2554. 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;,
  2555. 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;,
  2556. 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;,
  2557. 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;
  2558. </pre></td></tr>
  2559. <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>
  2560. <tr><td colspan="4" class="doc" id="hasDeclaration7"><pre>Matches a node if the declaration associated with that node
  2561. matches the given matcher.
  2562. The associated declaration is:
  2563. - for type nodes, the declaration of the underlying type
  2564. - for CallExpr, the declaration of the callee
  2565. - for MemberExpr, the declaration of the referenced member
  2566. - for CXXConstructExpr, the declaration of the constructor
  2567. Also usable as Matcher&lt;T&gt; for any T supporting the getDecl() member
  2568. function. e.g. various subtypes of clang::Type and various expressions.
  2569. 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;,
  2570. 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;,
  2571. 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;,
  2572. 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;,
  2573. 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;,
  2574. 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;
  2575. </pre></td></tr>
  2576. <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>
  2577. <tr><td colspan="4" class="doc" id="hasObjectExpression0"><pre>Matches a member expression where the object expression is
  2578. matched by a given matcher.
  2579. Given
  2580. struct X { int m; };
  2581. void f(X x) { x.m; m; }
  2582. memberExpr(hasObjectExpression(hasType(recordDecl(hasName("X")))))))
  2583. matches "x.m" and "m"
  2584. with hasObjectExpression(...)
  2585. matching "x" and the implicit object expression of "m" which has type X*.
  2586. </pre></td></tr>
  2587. <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>
  2588. <tr><td colspan="4" class="doc" id="member0"><pre>Matches a member expression where the member is matched by a
  2589. given matcher.
  2590. Given
  2591. struct { int first, second; } first, second;
  2592. int i(second.first);
  2593. int j(first.second);
  2594. memberExpr(member(hasName("first")))
  2595. matches second.first
  2596. but not first.second (because the member name there is "second").
  2597. </pre></td></tr>
  2598. <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>
  2599. <tr><td colspan="4" class="doc" id="pointeeLoc1"><pre>Narrows PointerType (and similar) matchers to those where the
  2600. pointee matches a given matcher.
  2601. Given
  2602. int *a;
  2603. int const *b;
  2604. float const *f;
  2605. pointerType(pointee(isConstQualified(), isInteger()))
  2606. matches "int const *b"
  2607. 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;,
  2608. 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;
  2609. </pre></td></tr>
  2610. <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>
  2611. <tr><td colspan="4" class="doc" id="pointee1"><pre>Narrows PointerType (and similar) matchers to those where the
  2612. pointee matches a given matcher.
  2613. Given
  2614. int *a;
  2615. int const *b;
  2616. float const *f;
  2617. pointerType(pointee(isConstQualified(), isInteger()))
  2618. matches "int const *b"
  2619. 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;,
  2620. 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;
  2621. </pre></td></tr>
  2622. <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>
  2623. <tr><td colspan="4" class="doc" id="hasPrefix1"><pre>Matches on the prefix of a NestedNameSpecifierLoc.
  2624. Given
  2625. struct A { struct B { struct C {}; }; };
  2626. A::B::C c;
  2627. nestedNameSpecifierLoc(hasPrefix(loc(specifiesType(asString("struct A")))))
  2628. matches "A::"
  2629. </pre></td></tr>
  2630. <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>
  2631. <tr><td colspan="4" class="doc" id="specifiesTypeLoc0"><pre>Matches nested name specifier locs that specify a type matching the
  2632. given TypeLoc.
  2633. Given
  2634. struct A { struct B { struct C {}; }; };
  2635. A::B::C c;
  2636. nestedNameSpecifierLoc(specifiesTypeLoc(loc(type(
  2637. hasDeclaration(recordDecl(hasName("A")))))))
  2638. matches "A::"
  2639. </pre></td></tr>
  2640. <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>
  2641. <tr><td colspan="4" class="doc" id="hasPrefix0"><pre>Matches on the prefix of a NestedNameSpecifier.
  2642. Given
  2643. struct A { struct B { struct C {}; }; };
  2644. A::B::C c;
  2645. nestedNameSpecifier(hasPrefix(specifiesType(asString("struct A")))) and
  2646. matches "A::"
  2647. </pre></td></tr>
  2648. <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>
  2649. <tr><td colspan="4" class="doc" id="specifiesNamespace0"><pre>Matches nested name specifiers that specify a namespace matching the
  2650. given namespace matcher.
  2651. Given
  2652. namespace ns { struct A {}; }
  2653. ns::A a;
  2654. nestedNameSpecifier(specifiesNamespace(hasName("ns")))
  2655. matches "ns::"
  2656. </pre></td></tr>
  2657. <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>
  2658. <tr><td colspan="4" class="doc" id="specifiesType0"><pre>Matches nested name specifiers that specify a type matching the
  2659. given QualType matcher without qualifiers.
  2660. Given
  2661. struct A { struct B { struct C {}; }; };
  2662. A::B::C c;
  2663. nestedNameSpecifier(specifiesType(hasDeclaration(recordDecl(hasName("A")))))
  2664. matches "A::"
  2665. </pre></td></tr>
  2666. <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>
  2667. <tr><td colspan="4" class="doc" id="innerType0"><pre>Matches ParenType nodes where the inner type is a specific type.
  2668. Given
  2669. int (*ptr_to_array)[4];
  2670. int (*ptr_to_func)(int);
  2671. varDecl(hasType(pointsTo(parenType(innerType(functionType()))))) matches
  2672. ptr_to_func but not ptr_to_array.
  2673. Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ParenType.html">ParenType</a>&gt;
  2674. </pre></td></tr>
  2675. <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>
  2676. <tr><td colspan="4" class="doc" id="pointeeLoc2"><pre>Narrows PointerType (and similar) matchers to those where the
  2677. pointee matches a given matcher.
  2678. Given
  2679. int *a;
  2680. int const *b;
  2681. float const *f;
  2682. pointerType(pointee(isConstQualified(), isInteger()))
  2683. matches "int const *b"
  2684. 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;,
  2685. 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;
  2686. </pre></td></tr>
  2687. <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>
  2688. <tr><td colspan="4" class="doc" id="pointee2"><pre>Narrows PointerType (and similar) matchers to those where the
  2689. pointee matches a given matcher.
  2690. Given
  2691. int *a;
  2692. int const *b;
  2693. float const *f;
  2694. pointerType(pointee(isConstQualified(), isInteger()))
  2695. matches "int const *b"
  2696. 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;,
  2697. 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;
  2698. </pre></td></tr>
  2699. <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>
  2700. <tr><td colspan="4" class="doc" id="hasCanonicalType0"><pre>Matches QualTypes whose canonical type matches InnerMatcher.
  2701. Given:
  2702. typedef int &amp;int_ref;
  2703. int a;
  2704. int_ref b = a;
  2705. varDecl(hasType(qualType(referenceType()))))) will not match the
  2706. declaration of b but varDecl(hasType(qualType(hasCanonicalType(referenceType())))))) does.
  2707. </pre></td></tr>
  2708. <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>
  2709. <tr><td colspan="4" class="doc" id="hasDeclaration6"><pre>Matches a node if the declaration associated with that node
  2710. matches the given matcher.
  2711. The associated declaration is:
  2712. - for type nodes, the declaration of the underlying type
  2713. - for CallExpr, the declaration of the callee
  2714. - for MemberExpr, the declaration of the referenced member
  2715. - for CXXConstructExpr, the declaration of the constructor
  2716. Also usable as Matcher&lt;T&gt; for any T supporting the getDecl() member
  2717. function. e.g. various subtypes of clang::Type and various expressions.
  2718. 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;,
  2719. 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;,
  2720. 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;,
  2721. 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;,
  2722. 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;,
  2723. 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;
  2724. </pre></td></tr>
  2725. <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>
  2726. <tr><td colspan="4" class="doc" id="pointsTo1"><pre>Overloaded to match the pointee type's declaration.
  2727. </pre></td></tr>
  2728. <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>
  2729. <tr><td colspan="4" class="doc" id="pointsTo0"><pre>Matches if the matched type is a pointer type and the pointee type
  2730. matches the specified matcher.
  2731. Example matches y-&gt;x()
  2732. (matcher = callExpr(on(hasType(pointsTo(recordDecl(hasName("Y")))))))
  2733. class Y { public: void x(); };
  2734. void z() { Y *y; y-&gt;x(); }
  2735. </pre></td></tr>
  2736. <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>
  2737. <tr><td colspan="4" class="doc" id="references1"><pre>Overloaded to match the referenced type's declaration.
  2738. </pre></td></tr>
  2739. <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>
  2740. <tr><td colspan="4" class="doc" id="references0"><pre>Matches if the matched type is a reference type and the referenced
  2741. type matches the specified matcher.
  2742. Example matches X &amp;x and const X &amp;y
  2743. (matcher = varDecl(hasType(references(recordDecl(hasName("X"))))))
  2744. class X {
  2745. void a(X b) {
  2746. X &amp;x = b;
  2747. const X &amp;y = b;
  2748. }
  2749. };
  2750. </pre></td></tr>
  2751. <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>
  2752. <tr><td colspan="4" class="doc" id="hasDeclaration5"><pre>Matches a node if the declaration associated with that node
  2753. matches the given matcher.
  2754. The associated declaration is:
  2755. - for type nodes, the declaration of the underlying type
  2756. - for CallExpr, the declaration of the callee
  2757. - for MemberExpr, the declaration of the referenced member
  2758. - for CXXConstructExpr, the declaration of the constructor
  2759. Also usable as Matcher&lt;T&gt; for any T supporting the getDecl() member
  2760. function. e.g. various subtypes of clang::Type and various expressions.
  2761. 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;,
  2762. 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;,
  2763. 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;,
  2764. 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;,
  2765. 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;,
  2766. 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;
  2767. </pre></td></tr>
  2768. <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>
  2769. <tr><td colspan="4" class="doc" id="pointeeLoc3"><pre>Narrows PointerType (and similar) matchers to those where the
  2770. pointee matches a given matcher.
  2771. Given
  2772. int *a;
  2773. int const *b;
  2774. float const *f;
  2775. pointerType(pointee(isConstQualified(), isInteger()))
  2776. matches "int const *b"
  2777. 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;,
  2778. 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;
  2779. </pre></td></tr>
  2780. <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>
  2781. <tr><td colspan="4" class="doc" id="pointee3"><pre>Narrows PointerType (and similar) matchers to those where the
  2782. pointee matches a given matcher.
  2783. Given
  2784. int *a;
  2785. int const *b;
  2786. float const *f;
  2787. pointerType(pointee(isConstQualified(), isInteger()))
  2788. matches "int const *b"
  2789. 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;,
  2790. 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;
  2791. </pre></td></tr>
  2792. <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>
  2793. <tr><td colspan="4" class="doc" id="alignOfExpr0"><pre>Same as unaryExprOrTypeTraitExpr, but only matching
  2794. alignof.
  2795. </pre></td></tr>
  2796. <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>
  2797. <tr><td colspan="4" class="doc" id="sizeOfExpr0"><pre>Same as unaryExprOrTypeTraitExpr, but only matching
  2798. sizeof.
  2799. </pre></td></tr>
  2800. <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>
  2801. <tr><td colspan="4" class="doc" id="forEachSwitchCase0"><pre>Matches each case or default statement belonging to the given switch
  2802. statement. This matcher may produce multiple matches.
  2803. Given
  2804. switch (1) { case 1: case 2: default: switch (2) { case 3: case 4: ; } }
  2805. switchStmt(forEachSwitchCase(caseStmt().bind("c"))).bind("s")
  2806. matches four times, with "c" binding each of "case 1:", "case 2:",
  2807. "case 3:" and "case 4:", and "s" respectively binding "switch (1)",
  2808. "switch (1)", "switch (2)" and "switch (2)".
  2809. </pre></td></tr>
  2810. <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>
  2811. <tr><td colspan="4" class="doc" id="hasDeclaration4"><pre>Matches a node if the declaration associated with that node
  2812. matches the given matcher.
  2813. The associated declaration is:
  2814. - for type nodes, the declaration of the underlying type
  2815. - for CallExpr, the declaration of the callee
  2816. - for MemberExpr, the declaration of the referenced member
  2817. - for CXXConstructExpr, the declaration of the constructor
  2818. Also usable as Matcher&lt;T&gt; for any T supporting the getDecl() member
  2819. function. e.g. various subtypes of clang::Type and various expressions.
  2820. 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;,
  2821. 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;,
  2822. 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;,
  2823. 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;,
  2824. 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;,
  2825. 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;
  2826. </pre></td></tr>
  2827. <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>
  2828. <tr><td colspan="4" class="doc" id="isExpr0"><pre>Matches a sugar TemplateArgument that refers to a certain expression.
  2829. Given
  2830. template&lt;typename T&gt; struct A {};
  2831. struct B { B* next; };
  2832. A&lt;&amp;B::next&gt; a;
  2833. templateSpecializationType(hasAnyTemplateArgument(
  2834. isExpr(hasDescendant(declRefExpr(to(fieldDecl(hasName("next"))))))))
  2835. matches the specialization A&lt;&amp;B::next&gt; with fieldDecl(...) matching
  2836. B::next
  2837. </pre></td></tr>
  2838. <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>
  2839. <tr><td colspan="4" class="doc" id="refersToDeclaration0"><pre>Matches a canonical TemplateArgument that refers to a certain
  2840. declaration.
  2841. Given
  2842. template&lt;typename T&gt; struct A {};
  2843. struct B { B* next; };
  2844. A&lt;&amp;B::next&gt; a;
  2845. classTemplateSpecializationDecl(hasAnyTemplateArgument(
  2846. refersToDeclaration(fieldDecl(hasName("next"))))
  2847. matches the specialization A&lt;&amp;B::next&gt; with fieldDecl(...) matching
  2848. B::next
  2849. </pre></td></tr>
  2850. <tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1TemplateArgument.html">TemplateArgument</a>&gt;</td><td class="name" onclick="toggle('refersToIntegralType0')"><a name="refersToIntegralType0Anchor">refersToIntegralType</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>&gt; InnerMatcher</td></tr>
  2851. <tr><td colspan="4" class="doc" id="refersToIntegralType0"><pre>Matches a TemplateArgument that referes to an integral type.
  2852. Given
  2853. template&lt;int T&gt; struct A {};
  2854. C&lt;42&gt; c;
  2855. classTemplateSpecializationDecl(
  2856. hasAnyTemplateArgument(refersToIntegralType(asString("int"))))
  2857. matches the implicit instantiation of C in C&lt;42&gt;.
  2858. </pre></td></tr>
  2859. <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>
  2860. <tr><td colspan="4" class="doc" id="refersToType0"><pre>Matches a TemplateArgument that refers to a certain type.
  2861. Given
  2862. struct X {};
  2863. template&lt;typename T&gt; struct A {};
  2864. A&lt;X&gt; a;
  2865. classTemplateSpecializationDecl(hasAnyTemplateArgument(
  2866. refersToType(class(hasName("X")))))
  2867. matches the specialization A&lt;X&gt;
  2868. </pre></td></tr>
  2869. <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>
  2870. <tr><td colspan="4" class="doc" id="hasAnyTemplateArgument1"><pre>Matches classTemplateSpecializations that have at least one
  2871. TemplateArgument matching the given InnerMatcher.
  2872. Given
  2873. template&lt;typename T&gt; class A {};
  2874. template&lt;&gt; class A&lt;double&gt; {};
  2875. A&lt;int&gt; a;
  2876. classTemplateSpecializationDecl(hasAnyTemplateArgument(
  2877. refersToType(asString("int"))))
  2878. matches the specialization A&lt;int&gt;
  2879. </pre></td></tr>
  2880. <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>
  2881. <tr><td colspan="4" class="doc" id="hasDeclaration3"><pre>Matches a node if the declaration associated with that node
  2882. matches the given matcher.
  2883. The associated declaration is:
  2884. - for type nodes, the declaration of the underlying type
  2885. - for CallExpr, the declaration of the callee
  2886. - for MemberExpr, the declaration of the referenced member
  2887. - for CXXConstructExpr, the declaration of the constructor
  2888. Also usable as Matcher&lt;T&gt; for any T supporting the getDecl() member
  2889. function. e.g. various subtypes of clang::Type and various expressions.
  2890. 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;,
  2891. 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;,
  2892. 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;,
  2893. 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;,
  2894. 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;,
  2895. 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;
  2896. </pre></td></tr>
  2897. <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>
  2898. <tr><td colspan="4" class="doc" id="hasTemplateArgument1"><pre>Matches classTemplateSpecializations where the n'th TemplateArgument
  2899. matches the given InnerMatcher.
  2900. Given
  2901. template&lt;typename T, typename U&gt; class A {};
  2902. A&lt;bool, int&gt; b;
  2903. A&lt;int, bool&gt; c;
  2904. classTemplateSpecializationDecl(hasTemplateArgument(
  2905. 1, refersToType(asString("int"))))
  2906. matches the specialization A&lt;bool, int&gt;
  2907. </pre></td></tr>
  2908. <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>
  2909. <tr><td colspan="4" class="doc" id="hasDeclaration2"><pre>Matches a node if the declaration associated with that node
  2910. matches the given matcher.
  2911. The associated declaration is:
  2912. - for type nodes, the declaration of the underlying type
  2913. - for CallExpr, the declaration of the callee
  2914. - for MemberExpr, the declaration of the referenced member
  2915. - for CXXConstructExpr, the declaration of the constructor
  2916. Also usable as Matcher&lt;T&gt; for any T supporting the getDecl() member
  2917. function. e.g. various subtypes of clang::Type and various expressions.
  2918. 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;,
  2919. 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;,
  2920. 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;,
  2921. 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;,
  2922. 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;,
  2923. 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;
  2924. </pre></td></tr>
  2925. <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>
  2926. <tr><td colspan="4" class="doc" id="findAll0"><pre>Matches if the node or any descendant matches.
  2927. Generates results for each match.
  2928. For example, in:
  2929. class A { class B {}; class C {}; };
  2930. The matcher:
  2931. recordDecl(hasName("::A"), findAll(recordDecl(isDefinition()).bind("m")))
  2932. will generate results for A, B and C.
  2933. Usable as: Any Matcher
  2934. </pre></td></tr>
  2935. <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>
  2936. <tr><td colspan="4" class="doc" id="hasDeclaration1"><pre>Matches a node if the declaration associated with that node
  2937. matches the given matcher.
  2938. The associated declaration is:
  2939. - for type nodes, the declaration of the underlying type
  2940. - for CallExpr, the declaration of the callee
  2941. - for MemberExpr, the declaration of the referenced member
  2942. - for CXXConstructExpr, the declaration of the constructor
  2943. Also usable as Matcher&lt;T&gt; for any T supporting the getDecl() member
  2944. function. e.g. various subtypes of clang::Type and various expressions.
  2945. 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;,
  2946. 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;,
  2947. 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;,
  2948. 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;,
  2949. 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;,
  2950. 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;
  2951. </pre></td></tr>
  2952. <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>
  2953. <tr><td colspan="4" class="doc" id="hasArgumentOfType0"><pre>Matches unary expressions that have a specific type of argument.
  2954. Given
  2955. int a, c; float b; int s = sizeof(a) + sizeof(b) + alignof(c);
  2956. unaryExprOrTypeTraitExpr(hasArgumentOfType(asString("int"))
  2957. matches sizeof(a) and alignof(c)
  2958. </pre></td></tr>
  2959. <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>
  2960. <tr><td colspan="4" class="doc" id="hasUnaryOperand0"><pre>Matches if the operand of a unary operator matches.
  2961. Example matches true (matcher = hasUnaryOperand(boolLiteral(equals(true))))
  2962. !true
  2963. </pre></td></tr>
  2964. <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>
  2965. <tr><td colspan="4" class="doc" id="hasDeclaration0"><pre>Matches a node if the declaration associated with that node
  2966. matches the given matcher.
  2967. The associated declaration is:
  2968. - for type nodes, the declaration of the underlying type
  2969. - for CallExpr, the declaration of the callee
  2970. - for MemberExpr, the declaration of the referenced member
  2971. - for CXXConstructExpr, the declaration of the constructor
  2972. Also usable as Matcher&lt;T&gt; for any T supporting the getDecl() member
  2973. function. e.g. various subtypes of clang::Type and various expressions.
  2974. 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;,
  2975. 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;,
  2976. 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;,
  2977. 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;,
  2978. 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;,
  2979. 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;
  2980. </pre></td></tr>
  2981. <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>
  2982. <tr><td colspan="4" class="doc" id="hasAnyUsingShadowDecl0"><pre>Matches any using shadow declaration.
  2983. Given
  2984. namespace X { void b(); }
  2985. using X::b;
  2986. usingDecl(hasAnyUsingShadowDecl(hasName("b"))))
  2987. matches using X::b </pre></td></tr>
  2988. <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>
  2989. <tr><td colspan="4" class="doc" id="hasTargetDecl0"><pre>Matches a using shadow declaration where the target declaration is
  2990. matched by the given matcher.
  2991. Given
  2992. namespace X { int a; void b(); }
  2993. using X::a;
  2994. using X::b;
  2995. usingDecl(hasAnyUsingShadowDecl(hasTargetDecl(functionDecl())))
  2996. matches using X::b but not using X::a </pre></td></tr>
  2997. <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>
  2998. <tr><td colspan="4" class="doc" id="hasType3"><pre>Overloaded to match the declaration of the expression's or value
  2999. declaration's type.
  3000. In case of a value declaration (for example a variable declaration),
  3001. this resolves one layer of indirection. For example, in the value
  3002. declaration "X x;", recordDecl(hasName("X")) matches the declaration of X,
  3003. while varDecl(hasType(recordDecl(hasName("X")))) matches the declaration
  3004. of x."
  3005. Example matches x (matcher = expr(hasType(recordDecl(hasName("X")))))
  3006. and z (matcher = varDecl(hasType(recordDecl(hasName("X")))))
  3007. class X {};
  3008. void y(X &amp;x) { x; X z; }
  3009. 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;
  3010. </pre></td></tr>
  3011. <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>
  3012. <tr><td colspan="4" class="doc" id="hasType1"><pre>Matches if the expression's or declaration's type matches a type
  3013. matcher.
  3014. Example matches x (matcher = expr(hasType(recordDecl(hasName("X")))))
  3015. and z (matcher = varDecl(hasType(recordDecl(hasName("X")))))
  3016. class X {};
  3017. void y(X &amp;x) { x; X z; }
  3018. </pre></td></tr>
  3019. <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>
  3020. <tr><td colspan="4" class="doc" id="hasInitializer0"><pre>Matches a variable declaration that has an initializer expression
  3021. that matches the given matcher.
  3022. Example matches x (matcher = varDecl(hasInitializer(callExpr())))
  3023. bool y() { return true; }
  3024. bool x = y();
  3025. </pre></td></tr>
  3026. <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>
  3027. <tr><td colspan="4" class="doc" id="hasSizeExpr0"><pre>Matches VariableArrayType nodes that have a specific size
  3028. expression.
  3029. Given
  3030. void f(int b) {
  3031. int a[b];
  3032. }
  3033. variableArrayType(hasSizeExpr(ignoringImpCasts(declRefExpr(to(
  3034. varDecl(hasName("b")))))))
  3035. matches "int a[b]"
  3036. </pre></td></tr>
  3037. <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>
  3038. <tr><td colspan="4" class="doc" id="hasBody2"><pre>Matches a 'for', 'while', or 'do while' statement that has
  3039. a given body.
  3040. Given
  3041. for (;;) {}
  3042. hasBody(compoundStmt())
  3043. matches 'for (;;) {}'
  3044. with compoundStmt()
  3045. matching '{}'
  3046. </pre></td></tr>
  3047. <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>
  3048. <tr><td colspan="4" class="doc" id="hasCondition2"><pre>Matches the condition expression of an if statement, for loop,
  3049. or conditional operator.
  3050. Example matches true (matcher = hasCondition(boolLiteral(equals(true))))
  3051. if (true) {}
  3052. </pre></td></tr>
  3053. <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>
  3054. <tr><td colspan="4" class="doc" id="loc1"><pre>Matches NestedNameSpecifierLocs for which the given inner
  3055. NestedNameSpecifier-matcher matches.
  3056. </pre></td></tr>
  3057. <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>
  3058. <tr><td colspan="4" class="doc" id="loc0"><pre>Matches TypeLocs for which the given inner
  3059. QualType-matcher matches.
  3060. </pre></td></tr>
  3061. <!--END_TRAVERSAL_MATCHERS -->
  3062. </table>
  3063. </div>
  3064. </body>
  3065. </html>