AST.h 117 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665
  1. // Copyright (c) 2008 Roberto Raggi <[email protected]>
  2. //
  3. // Permission is hereby granted, free of charge, to any person obtaining a copy
  4. // of this software and associated documentation files (the "Software"), to deal
  5. // in the Software without restriction, including without limitation the rights
  6. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  7. // copies of the Software, and to permit persons to whom the Software is
  8. // furnished to do so, subject to the following conditions:
  9. //
  10. // The above copyright notice and this permission notice shall be included in
  11. // all copies or substantial portions of the Software.
  12. //
  13. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  14. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  15. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  16. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  17. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  18. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  19. // THE SOFTWARE.
  20. #ifndef CPLUSPLUS_AST_H
  21. #define CPLUSPLUS_AST_H
  22. #include "CPlusPlusForwardDeclarations.h"
  23. #include "ASTfwd.h"
  24. #include "MemoryPool.h"
  25. namespace CPlusPlus {
  26. template <typename Tptr>
  27. class CPLUSPLUS_EXPORT List: public Managed
  28. {
  29. List(const List &other);
  30. void operator =(const List &other);
  31. public:
  32. List()
  33. : value(Tptr()), next(0)
  34. { }
  35. List(const Tptr &value)
  36. : value(value), next(0)
  37. { }
  38. unsigned firstToken() const
  39. {
  40. if (value)
  41. return value->firstToken();
  42. // ### CPP_CHECK(0);
  43. return 0;
  44. }
  45. unsigned lastToken() const
  46. {
  47. Tptr lv = lastValue();
  48. if (lv)
  49. return lv->lastToken();
  50. // ### CPP_CHECK(0);
  51. return 0;
  52. }
  53. Tptr lastValue() const
  54. {
  55. Tptr lastValue = 0;
  56. for (const List *it = this; it; it = it->next) {
  57. if (it->value)
  58. lastValue = it->value;
  59. }
  60. return lastValue;
  61. }
  62. Tptr value;
  63. List *next;
  64. };
  65. class CPLUSPLUS_EXPORT AST: public Managed
  66. {
  67. AST(const AST &other);
  68. void operator =(const AST &other);
  69. public:
  70. AST();
  71. virtual ~AST();
  72. void accept(ASTVisitor *visitor);
  73. static void accept(AST *ast, ASTVisitor *visitor)
  74. { if (ast) ast->accept(visitor); }
  75. template <typename Tptr>
  76. static void accept(List<Tptr> *it, ASTVisitor *visitor)
  77. {
  78. for (; it; it = it->next)
  79. accept(it->value, visitor);
  80. }
  81. static bool match(AST *ast, AST *pattern, ASTMatcher *matcher);
  82. bool match(AST *pattern, ASTMatcher *matcher);
  83. template <typename Tptr>
  84. static bool match(List<Tptr> *it, List<Tptr> *patternIt, ASTMatcher *matcher)
  85. {
  86. while (it && patternIt) {
  87. if (! match(it->value, patternIt->value, matcher))
  88. return false;
  89. it = it->next;
  90. patternIt = patternIt->next;
  91. }
  92. if (! it && ! patternIt)
  93. return true;
  94. return false;
  95. }
  96. virtual unsigned firstToken() const = 0;
  97. virtual unsigned lastToken() const = 0;
  98. virtual AST *clone(MemoryPool *pool) const = 0;
  99. virtual AccessDeclarationAST *asAccessDeclaration() { return 0; }
  100. virtual AliasDeclarationAST *asAliasDeclaration() { return 0; }
  101. virtual AlignmentSpecifierAST *asAlignmentSpecifier() { return 0; }
  102. virtual AlignofExpressionAST *asAlignofExpression() { return 0; }
  103. virtual AnonymousNameAST *asAnonymousName() { return 0; }
  104. virtual ArrayAccessAST *asArrayAccess() { return 0; }
  105. virtual ArrayDeclaratorAST *asArrayDeclarator() { return 0; }
  106. virtual ArrayInitializerAST *asArrayInitializer() { return 0; }
  107. virtual AsmDefinitionAST *asAsmDefinition() { return 0; }
  108. virtual AttributeSpecifierAST *asAttributeSpecifier() { return 0; }
  109. virtual BaseSpecifierAST *asBaseSpecifier() { return 0; }
  110. virtual BinaryExpressionAST *asBinaryExpression() { return 0; }
  111. virtual BoolLiteralAST *asBoolLiteral() { return 0; }
  112. virtual BracedInitializerAST *asBracedInitializer() { return 0; }
  113. virtual BracketDesignatorAST *asBracketDesignator() { return 0; }
  114. virtual BreakStatementAST *asBreakStatement() { return 0; }
  115. virtual CallAST *asCall() { return 0; }
  116. virtual CaptureAST *asCapture() { return 0; }
  117. virtual CaseStatementAST *asCaseStatement() { return 0; }
  118. virtual CastExpressionAST *asCastExpression() { return 0; }
  119. virtual CatchClauseAST *asCatchClause() { return 0; }
  120. virtual ClassSpecifierAST *asClassSpecifier() { return 0; }
  121. virtual CompoundExpressionAST *asCompoundExpression() { return 0; }
  122. virtual CompoundLiteralAST *asCompoundLiteral() { return 0; }
  123. virtual CompoundStatementAST *asCompoundStatement() { return 0; }
  124. virtual ConditionAST *asCondition() { return 0; }
  125. virtual ConditionalExpressionAST *asConditionalExpression() { return 0; }
  126. virtual ContinueStatementAST *asContinueStatement() { return 0; }
  127. virtual ConversionFunctionIdAST *asConversionFunctionId() { return 0; }
  128. virtual CoreDeclaratorAST *asCoreDeclarator() { return 0; }
  129. virtual CppCastExpressionAST *asCppCastExpression() { return 0; }
  130. virtual CtorInitializerAST *asCtorInitializer() { return 0; }
  131. virtual DeclarationAST *asDeclaration() { return 0; }
  132. virtual DeclarationStatementAST *asDeclarationStatement() { return 0; }
  133. virtual DeclaratorAST *asDeclarator() { return 0; }
  134. virtual DeclaratorIdAST *asDeclaratorId() { return 0; }
  135. virtual DecltypeSpecifierAST *asDecltypeSpecifier() { return 0; }
  136. virtual DeleteExpressionAST *asDeleteExpression() { return 0; }
  137. virtual DesignatedInitializerAST *asDesignatedInitializer() { return 0; }
  138. virtual DesignatorAST *asDesignator() { return 0; }
  139. virtual DestructorNameAST *asDestructorName() { return 0; }
  140. virtual DoStatementAST *asDoStatement() { return 0; }
  141. virtual DotDesignatorAST *asDotDesignator() { return 0; }
  142. virtual DynamicExceptionSpecificationAST *asDynamicExceptionSpecification() { return 0; }
  143. virtual ElaboratedTypeSpecifierAST *asElaboratedTypeSpecifier() { return 0; }
  144. virtual EmptyDeclarationAST *asEmptyDeclaration() { return 0; }
  145. virtual EnumSpecifierAST *asEnumSpecifier() { return 0; }
  146. virtual EnumeratorAST *asEnumerator() { return 0; }
  147. virtual ExceptionDeclarationAST *asExceptionDeclaration() { return 0; }
  148. virtual ExceptionSpecificationAST *asExceptionSpecification() { return 0; }
  149. virtual ExpressionAST *asExpression() { return 0; }
  150. virtual ExpressionListParenAST *asExpressionListParen() { return 0; }
  151. virtual ExpressionOrDeclarationStatementAST *asExpressionOrDeclarationStatement() { return 0; }
  152. virtual ExpressionStatementAST *asExpressionStatement() { return 0; }
  153. virtual ForStatementAST *asForStatement() { return 0; }
  154. virtual ForeachStatementAST *asForeachStatement() { return 0; }
  155. virtual FunctionDeclaratorAST *asFunctionDeclarator() { return 0; }
  156. virtual FunctionDefinitionAST *asFunctionDefinition() { return 0; }
  157. virtual GnuAttributeAST *asGnuAttribute() { return 0; }
  158. virtual GnuAttributeSpecifierAST *asGnuAttributeSpecifier() { return 0; }
  159. virtual GotoStatementAST *asGotoStatement() { return 0; }
  160. virtual IdExpressionAST *asIdExpression() { return 0; }
  161. virtual IfStatementAST *asIfStatement() { return 0; }
  162. virtual LabeledStatementAST *asLabeledStatement() { return 0; }
  163. virtual LambdaCaptureAST *asLambdaCapture() { return 0; }
  164. virtual LambdaDeclaratorAST *asLambdaDeclarator() { return 0; }
  165. virtual LambdaExpressionAST *asLambdaExpression() { return 0; }
  166. virtual LambdaIntroducerAST *asLambdaIntroducer() { return 0; }
  167. virtual LinkageBodyAST *asLinkageBody() { return 0; }
  168. virtual LinkageSpecificationAST *asLinkageSpecification() { return 0; }
  169. virtual MemInitializerAST *asMemInitializer() { return 0; }
  170. virtual MemberAccessAST *asMemberAccess() { return 0; }
  171. virtual NameAST *asName() { return 0; }
  172. virtual NamedTypeSpecifierAST *asNamedTypeSpecifier() { return 0; }
  173. virtual NamespaceAST *asNamespace() { return 0; }
  174. virtual NamespaceAliasDefinitionAST *asNamespaceAliasDefinition() { return 0; }
  175. virtual NestedDeclaratorAST *asNestedDeclarator() { return 0; }
  176. virtual NestedExpressionAST *asNestedExpression() { return 0; }
  177. virtual NestedNameSpecifierAST *asNestedNameSpecifier() { return 0; }
  178. virtual NewArrayDeclaratorAST *asNewArrayDeclarator() { return 0; }
  179. virtual NewExpressionAST *asNewExpression() { return 0; }
  180. virtual NewTypeIdAST *asNewTypeId() { return 0; }
  181. virtual NoExceptSpecificationAST *asNoExceptSpecification() { return 0; }
  182. virtual NumericLiteralAST *asNumericLiteral() { return 0; }
  183. virtual ObjCClassDeclarationAST *asObjCClassDeclaration() { return 0; }
  184. virtual ObjCClassForwardDeclarationAST *asObjCClassForwardDeclaration() { return 0; }
  185. virtual ObjCDynamicPropertiesDeclarationAST *asObjCDynamicPropertiesDeclaration() { return 0; }
  186. virtual ObjCEncodeExpressionAST *asObjCEncodeExpression() { return 0; }
  187. virtual ObjCFastEnumerationAST *asObjCFastEnumeration() { return 0; }
  188. virtual ObjCInstanceVariablesDeclarationAST *asObjCInstanceVariablesDeclaration() { return 0; }
  189. virtual ObjCMessageArgumentAST *asObjCMessageArgument() { return 0; }
  190. virtual ObjCMessageArgumentDeclarationAST *asObjCMessageArgumentDeclaration() { return 0; }
  191. virtual ObjCMessageExpressionAST *asObjCMessageExpression() { return 0; }
  192. virtual ObjCMethodDeclarationAST *asObjCMethodDeclaration() { return 0; }
  193. virtual ObjCMethodPrototypeAST *asObjCMethodPrototype() { return 0; }
  194. virtual ObjCPropertyAttributeAST *asObjCPropertyAttribute() { return 0; }
  195. virtual ObjCPropertyDeclarationAST *asObjCPropertyDeclaration() { return 0; }
  196. virtual ObjCProtocolDeclarationAST *asObjCProtocolDeclaration() { return 0; }
  197. virtual ObjCProtocolExpressionAST *asObjCProtocolExpression() { return 0; }
  198. virtual ObjCProtocolForwardDeclarationAST *asObjCProtocolForwardDeclaration() { return 0; }
  199. virtual ObjCProtocolRefsAST *asObjCProtocolRefs() { return 0; }
  200. virtual ObjCSelectorAST *asObjCSelector() { return 0; }
  201. virtual ObjCSelectorArgumentAST *asObjCSelectorArgument() { return 0; }
  202. virtual ObjCSelectorExpressionAST *asObjCSelectorExpression() { return 0; }
  203. virtual ObjCSynchronizedStatementAST *asObjCSynchronizedStatement() { return 0; }
  204. virtual ObjCSynthesizedPropertiesDeclarationAST *asObjCSynthesizedPropertiesDeclaration() { return 0; }
  205. virtual ObjCSynthesizedPropertyAST *asObjCSynthesizedProperty() { return 0; }
  206. virtual ObjCTypeNameAST *asObjCTypeName() { return 0; }
  207. virtual ObjCVisibilityDeclarationAST *asObjCVisibilityDeclaration() { return 0; }
  208. virtual OperatorAST *asOperator() { return 0; }
  209. virtual OperatorFunctionIdAST *asOperatorFunctionId() { return 0; }
  210. virtual ParameterDeclarationAST *asParameterDeclaration() { return 0; }
  211. virtual ParameterDeclarationClauseAST *asParameterDeclarationClause() { return 0; }
  212. virtual PointerAST *asPointer() { return 0; }
  213. virtual PointerLiteralAST *asPointerLiteral() { return 0; }
  214. virtual PointerToMemberAST *asPointerToMember() { return 0; }
  215. virtual PostIncrDecrAST *asPostIncrDecr() { return 0; }
  216. virtual PostfixAST *asPostfix() { return 0; }
  217. virtual PostfixDeclaratorAST *asPostfixDeclarator() { return 0; }
  218. virtual PtrOperatorAST *asPtrOperator() { return 0; }
  219. virtual QtEnumDeclarationAST *asQtEnumDeclaration() { return 0; }
  220. virtual QtFlagsDeclarationAST *asQtFlagsDeclaration() { return 0; }
  221. virtual QtInterfaceNameAST *asQtInterfaceName() { return 0; }
  222. virtual QtInterfacesDeclarationAST *asQtInterfacesDeclaration() { return 0; }
  223. virtual QtMemberDeclarationAST *asQtMemberDeclaration() { return 0; }
  224. virtual QtMethodAST *asQtMethod() { return 0; }
  225. virtual QtObjectTagAST *asQtObjectTag() { return 0; }
  226. virtual QtPrivateSlotAST *asQtPrivateSlot() { return 0; }
  227. virtual QtPropertyDeclarationAST *asQtPropertyDeclaration() { return 0; }
  228. virtual QtPropertyDeclarationItemAST *asQtPropertyDeclarationItem() { return 0; }
  229. virtual QualifiedNameAST *asQualifiedName() { return 0; }
  230. virtual RangeBasedForStatementAST *asRangeBasedForStatement() { return 0; }
  231. virtual ReferenceAST *asReference() { return 0; }
  232. virtual ReturnStatementAST *asReturnStatement() { return 0; }
  233. virtual SimpleDeclarationAST *asSimpleDeclaration() { return 0; }
  234. virtual SimpleNameAST *asSimpleName() { return 0; }
  235. virtual SimpleSpecifierAST *asSimpleSpecifier() { return 0; }
  236. virtual SizeofExpressionAST *asSizeofExpression() { return 0; }
  237. virtual SpecifierAST *asSpecifier() { return 0; }
  238. virtual StatementAST *asStatement() { return 0; }
  239. virtual StaticAssertDeclarationAST *asStaticAssertDeclaration() { return 0; }
  240. virtual StringLiteralAST *asStringLiteral() { return 0; }
  241. virtual SwitchStatementAST *asSwitchStatement() { return 0; }
  242. virtual TemplateDeclarationAST *asTemplateDeclaration() { return 0; }
  243. virtual TemplateIdAST *asTemplateId() { return 0; }
  244. virtual TemplateTypeParameterAST *asTemplateTypeParameter() { return 0; }
  245. virtual ThisExpressionAST *asThisExpression() { return 0; }
  246. virtual ThrowExpressionAST *asThrowExpression() { return 0; }
  247. virtual TrailingReturnTypeAST *asTrailingReturnType() { return 0; }
  248. virtual TranslationUnitAST *asTranslationUnit() { return 0; }
  249. virtual TryBlockStatementAST *asTryBlockStatement() { return 0; }
  250. virtual TypeConstructorCallAST *asTypeConstructorCall() { return 0; }
  251. virtual TypeIdAST *asTypeId() { return 0; }
  252. virtual TypeidExpressionAST *asTypeidExpression() { return 0; }
  253. virtual TypenameCallExpressionAST *asTypenameCallExpression() { return 0; }
  254. virtual TypenameTypeParameterAST *asTypenameTypeParameter() { return 0; }
  255. virtual TypeofSpecifierAST *asTypeofSpecifier() { return 0; }
  256. virtual UnaryExpressionAST *asUnaryExpression() { return 0; }
  257. virtual UsingAST *asUsing() { return 0; }
  258. virtual UsingDirectiveAST *asUsingDirective() { return 0; }
  259. virtual WhileStatementAST *asWhileStatement() { return 0; }
  260. protected:
  261. virtual void accept0(ASTVisitor *visitor) = 0;
  262. virtual bool match0(AST *, ASTMatcher *) = 0;
  263. };
  264. class CPLUSPLUS_EXPORT StatementAST: public AST
  265. {
  266. public:
  267. StatementAST()
  268. {}
  269. virtual StatementAST *asStatement() { return this; }
  270. virtual StatementAST *clone(MemoryPool *pool) const = 0;
  271. };
  272. class CPLUSPLUS_EXPORT ExpressionAST: public AST
  273. {
  274. public:
  275. ExpressionAST()
  276. {}
  277. virtual ExpressionAST *asExpression() { return this; }
  278. virtual ExpressionAST *clone(MemoryPool *pool) const = 0;
  279. };
  280. class CPLUSPLUS_EXPORT DeclarationAST: public AST
  281. {
  282. public:
  283. DeclarationAST()
  284. {}
  285. virtual DeclarationAST *asDeclaration() { return this; }
  286. virtual DeclarationAST *clone(MemoryPool *pool) const = 0;
  287. };
  288. class CPLUSPLUS_EXPORT NameAST: public AST
  289. {
  290. public: // annotations
  291. const Name *name;
  292. public:
  293. NameAST()
  294. : name(0)
  295. {}
  296. virtual NameAST *asName() { return this; }
  297. virtual NameAST *clone(MemoryPool *pool) const = 0;
  298. };
  299. class CPLUSPLUS_EXPORT SpecifierAST: public AST
  300. {
  301. public:
  302. SpecifierAST()
  303. {}
  304. virtual SpecifierAST *asSpecifier() { return this; }
  305. virtual SpecifierAST *clone(MemoryPool *pool) const = 0;
  306. };
  307. class CPLUSPLUS_EXPORT PtrOperatorAST: public AST
  308. {
  309. public:
  310. PtrOperatorAST()
  311. {}
  312. virtual PtrOperatorAST *asPtrOperator() { return this; }
  313. virtual PtrOperatorAST *clone(MemoryPool *pool) const = 0;
  314. };
  315. class CPLUSPLUS_EXPORT PostfixAST: public ExpressionAST
  316. {
  317. public:
  318. PostfixAST()
  319. {}
  320. virtual PostfixAST *asPostfix() { return this; }
  321. virtual PostfixAST *clone(MemoryPool *pool) const = 0;
  322. };
  323. class CPLUSPLUS_EXPORT CoreDeclaratorAST: public AST
  324. {
  325. public:
  326. CoreDeclaratorAST()
  327. {}
  328. virtual CoreDeclaratorAST *asCoreDeclarator() { return this; }
  329. virtual CoreDeclaratorAST *clone(MemoryPool *pool) const = 0;
  330. };
  331. class CPLUSPLUS_EXPORT PostfixDeclaratorAST: public AST
  332. {
  333. public:
  334. PostfixDeclaratorAST()
  335. {}
  336. virtual PostfixDeclaratorAST *asPostfixDeclarator() { return this; }
  337. virtual PostfixDeclaratorAST *clone(MemoryPool *pool) const = 0;
  338. };
  339. class CPLUSPLUS_EXPORT ObjCSelectorArgumentAST: public AST
  340. {
  341. public:
  342. unsigned name_token;
  343. unsigned colon_token;
  344. public:
  345. ObjCSelectorArgumentAST()
  346. : name_token(0)
  347. , colon_token(0)
  348. {}
  349. virtual ObjCSelectorArgumentAST *asObjCSelectorArgument() { return this; }
  350. virtual unsigned firstToken() const;
  351. virtual unsigned lastToken() const;
  352. virtual ObjCSelectorArgumentAST *clone(MemoryPool *pool) const;
  353. protected:
  354. virtual void accept0(ASTVisitor *visitor);
  355. virtual bool match0(AST *, ASTMatcher *);
  356. };
  357. class CPLUSPLUS_EXPORT ObjCSelectorAST: public NameAST
  358. {
  359. public:
  360. ObjCSelectorArgumentListAST *selector_argument_list;
  361. public:
  362. ObjCSelectorAST()
  363. : selector_argument_list(0)
  364. {}
  365. virtual ObjCSelectorAST *asObjCSelector() { return this; }
  366. virtual unsigned firstToken() const;
  367. virtual unsigned lastToken() const;
  368. virtual ObjCSelectorAST *clone(MemoryPool *pool) const;
  369. protected:
  370. virtual void accept0(ASTVisitor *visitor);
  371. virtual bool match0(AST *, ASTMatcher *);
  372. };
  373. class CPLUSPLUS_EXPORT SimpleSpecifierAST: public SpecifierAST
  374. {
  375. public:
  376. unsigned specifier_token;
  377. public:
  378. SimpleSpecifierAST()
  379. : specifier_token(0)
  380. {}
  381. virtual SimpleSpecifierAST *asSimpleSpecifier() { return this; }
  382. virtual unsigned firstToken() const;
  383. virtual unsigned lastToken() const;
  384. virtual SimpleSpecifierAST *clone(MemoryPool *pool) const;
  385. protected:
  386. virtual void accept0(ASTVisitor *visitor);
  387. virtual bool match0(AST *, ASTMatcher *);
  388. };
  389. class CPLUSPLUS_EXPORT AttributeSpecifierAST: public SpecifierAST
  390. {
  391. public:
  392. AttributeSpecifierAST()
  393. {}
  394. virtual AttributeSpecifierAST *asAttributeSpecifier() { return this; }
  395. virtual AttributeSpecifierAST *clone(MemoryPool *pool) const = 0;
  396. };
  397. class CPLUSPLUS_EXPORT AlignmentSpecifierAST: public AttributeSpecifierAST
  398. {
  399. public:
  400. unsigned align_token;
  401. unsigned lparen_token;
  402. ExpressionAST *typeIdExprOrAlignmentExpr;
  403. unsigned ellipses_token;
  404. unsigned rparen_token;
  405. public:
  406. AlignmentSpecifierAST()
  407. : align_token(0)
  408. , lparen_token(0)
  409. , typeIdExprOrAlignmentExpr(0)
  410. , ellipses_token(0)
  411. , rparen_token(0)
  412. {}
  413. virtual AlignmentSpecifierAST *asAlignmentSpecifier() { return this; }
  414. virtual unsigned firstToken() const;
  415. virtual unsigned lastToken() const;
  416. virtual AlignmentSpecifierAST *clone(MemoryPool *pool) const;
  417. protected:
  418. virtual void accept0(ASTVisitor *visitor);
  419. virtual bool match0(AST *, ASTMatcher *);
  420. };
  421. class CPLUSPLUS_EXPORT GnuAttributeSpecifierAST: public AttributeSpecifierAST
  422. {
  423. public:
  424. unsigned attribute_token;
  425. unsigned first_lparen_token;
  426. unsigned second_lparen_token;
  427. GnuAttributeListAST *attribute_list;
  428. unsigned first_rparen_token;
  429. unsigned second_rparen_token;
  430. public:
  431. GnuAttributeSpecifierAST()
  432. : attribute_token(0)
  433. , first_lparen_token(0)
  434. , second_lparen_token(0)
  435. , attribute_list(0)
  436. , first_rparen_token(0)
  437. , second_rparen_token(0)
  438. {}
  439. virtual GnuAttributeSpecifierAST *asGnuAttributeSpecifier() { return this; }
  440. virtual unsigned firstToken() const;
  441. virtual unsigned lastToken() const;
  442. virtual GnuAttributeSpecifierAST *clone(MemoryPool *pool) const;
  443. protected:
  444. virtual void accept0(ASTVisitor *visitor);
  445. virtual bool match0(AST *, ASTMatcher *);
  446. };
  447. class CPLUSPLUS_EXPORT GnuAttributeAST: public AST
  448. {
  449. public:
  450. unsigned identifier_token;
  451. unsigned lparen_token;
  452. unsigned tag_token;
  453. ExpressionListAST *expression_list;
  454. unsigned rparen_token;
  455. public:
  456. GnuAttributeAST()
  457. : identifier_token(0)
  458. , lparen_token(0)
  459. , tag_token(0)
  460. , expression_list(0)
  461. , rparen_token(0)
  462. {}
  463. virtual GnuAttributeAST *asGnuAttribute() { return this; }
  464. virtual unsigned firstToken() const;
  465. virtual unsigned lastToken() const;
  466. virtual GnuAttributeAST *clone(MemoryPool *pool) const;
  467. protected:
  468. virtual void accept0(ASTVisitor *visitor);
  469. virtual bool match0(AST *, ASTMatcher *);
  470. };
  471. class CPLUSPLUS_EXPORT TypeofSpecifierAST: public SpecifierAST
  472. {
  473. public:
  474. unsigned typeof_token;
  475. unsigned lparen_token;
  476. ExpressionAST *expression;
  477. unsigned rparen_token;
  478. public:
  479. TypeofSpecifierAST()
  480. : typeof_token(0)
  481. , lparen_token(0)
  482. , expression(0)
  483. , rparen_token(0)
  484. {}
  485. virtual TypeofSpecifierAST *asTypeofSpecifier() { return this; }
  486. virtual unsigned firstToken() const;
  487. virtual unsigned lastToken() const;
  488. virtual TypeofSpecifierAST *clone(MemoryPool *pool) const;
  489. protected:
  490. virtual void accept0(ASTVisitor *visitor);
  491. virtual bool match0(AST *, ASTMatcher *);
  492. };
  493. class CPLUSPLUS_EXPORT DecltypeSpecifierAST: public SpecifierAST
  494. {
  495. public:
  496. unsigned decltype_token;
  497. unsigned lparen_token;
  498. ExpressionAST *expression;
  499. unsigned rparen_token;
  500. public:
  501. DecltypeSpecifierAST()
  502. : decltype_token(0)
  503. , lparen_token(0)
  504. , expression(0)
  505. , rparen_token(0)
  506. {}
  507. virtual DecltypeSpecifierAST *asDecltypeSpecifier() { return this; }
  508. virtual unsigned firstToken() const;
  509. virtual unsigned lastToken() const;
  510. virtual DecltypeSpecifierAST *clone(MemoryPool *pool) const;
  511. protected:
  512. virtual void accept0(ASTVisitor *visitor);
  513. virtual bool match0(AST *, ASTMatcher *);
  514. };
  515. class CPLUSPLUS_EXPORT DeclaratorAST: public AST
  516. {
  517. public:
  518. SpecifierListAST *attribute_list;
  519. PtrOperatorListAST *ptr_operator_list;
  520. CoreDeclaratorAST *core_declarator;
  521. PostfixDeclaratorListAST *postfix_declarator_list;
  522. SpecifierListAST *post_attribute_list;
  523. unsigned equal_token;
  524. ExpressionAST *initializer;
  525. public:
  526. DeclaratorAST()
  527. : attribute_list(0)
  528. , ptr_operator_list(0)
  529. , core_declarator(0)
  530. , postfix_declarator_list(0)
  531. , post_attribute_list(0)
  532. , equal_token(0)
  533. , initializer(0)
  534. {}
  535. virtual DeclaratorAST *asDeclarator() { return this; }
  536. virtual unsigned firstToken() const;
  537. virtual unsigned lastToken() const;
  538. virtual DeclaratorAST *clone(MemoryPool *pool) const;
  539. protected:
  540. virtual void accept0(ASTVisitor *visitor);
  541. virtual bool match0(AST *, ASTMatcher *);
  542. };
  543. class CPLUSPLUS_EXPORT SimpleDeclarationAST: public DeclarationAST
  544. {
  545. public:
  546. unsigned qt_invokable_token;
  547. SpecifierListAST *decl_specifier_list;
  548. DeclaratorListAST *declarator_list;
  549. unsigned semicolon_token;
  550. public:
  551. List<Symbol *> *symbols;
  552. public:
  553. SimpleDeclarationAST()
  554. : qt_invokable_token(0)
  555. , decl_specifier_list(0)
  556. , declarator_list(0)
  557. , semicolon_token(0)
  558. , symbols(0)
  559. {}
  560. virtual SimpleDeclarationAST *asSimpleDeclaration() { return this; }
  561. virtual unsigned firstToken() const;
  562. virtual unsigned lastToken() const;
  563. virtual SimpleDeclarationAST *clone(MemoryPool *pool) const;
  564. protected:
  565. virtual void accept0(ASTVisitor *visitor);
  566. virtual bool match0(AST *, ASTMatcher *);
  567. };
  568. class CPLUSPLUS_EXPORT EmptyDeclarationAST: public DeclarationAST
  569. {
  570. public:
  571. unsigned semicolon_token;
  572. public:
  573. EmptyDeclarationAST()
  574. : semicolon_token(0)
  575. {}
  576. virtual EmptyDeclarationAST *asEmptyDeclaration() { return this; }
  577. virtual unsigned firstToken() const;
  578. virtual unsigned lastToken() const;
  579. virtual EmptyDeclarationAST *clone(MemoryPool *pool) const;
  580. protected:
  581. virtual void accept0(ASTVisitor *visitor);
  582. virtual bool match0(AST *, ASTMatcher *);
  583. };
  584. class CPLUSPLUS_EXPORT AccessDeclarationAST: public DeclarationAST
  585. {
  586. public:
  587. unsigned access_specifier_token;
  588. unsigned slots_token;
  589. unsigned colon_token;
  590. public:
  591. AccessDeclarationAST()
  592. : access_specifier_token(0)
  593. , slots_token(0)
  594. , colon_token(0)
  595. {}
  596. virtual AccessDeclarationAST *asAccessDeclaration() { return this; }
  597. virtual unsigned firstToken() const;
  598. virtual unsigned lastToken() const;
  599. virtual AccessDeclarationAST *clone(MemoryPool *pool) const;
  600. protected:
  601. virtual void accept0(ASTVisitor *visitor);
  602. virtual bool match0(AST *, ASTMatcher *);
  603. };
  604. class CPLUSPLUS_EXPORT QtObjectTagAST: public DeclarationAST
  605. {
  606. public:
  607. unsigned q_object_token;
  608. public:
  609. QtObjectTagAST()
  610. : q_object_token(0)
  611. {}
  612. virtual QtObjectTagAST *asQtObjectTag() { return this; }
  613. virtual unsigned firstToken() const;
  614. virtual unsigned lastToken() const;
  615. virtual QtObjectTagAST *clone(MemoryPool *pool) const;
  616. protected:
  617. virtual void accept0(ASTVisitor *visitor);
  618. virtual bool match0(AST *, ASTMatcher *);
  619. };
  620. class CPLUSPLUS_EXPORT QtPrivateSlotAST: public DeclarationAST
  621. {
  622. public:
  623. unsigned q_private_slot_token;
  624. unsigned lparen_token;
  625. unsigned dptr_token;
  626. unsigned dptr_lparen_token;
  627. unsigned dptr_rparen_token;
  628. unsigned comma_token;
  629. SpecifierListAST *type_specifier_list;
  630. DeclaratorAST *declarator;
  631. unsigned rparen_token;
  632. public:
  633. QtPrivateSlotAST()
  634. : q_private_slot_token(0)
  635. , lparen_token(0)
  636. , dptr_token(0)
  637. , dptr_lparen_token(0)
  638. , dptr_rparen_token(0)
  639. , comma_token(0)
  640. , type_specifier_list(0)
  641. , declarator(0)
  642. , rparen_token(0)
  643. {}
  644. virtual QtPrivateSlotAST *asQtPrivateSlot() { return this; }
  645. virtual unsigned firstToken() const;
  646. virtual unsigned lastToken() const;
  647. virtual QtPrivateSlotAST *clone(MemoryPool *pool) const;
  648. protected:
  649. virtual void accept0(ASTVisitor *visitor);
  650. virtual bool match0(AST *, ASTMatcher *);
  651. };
  652. class QtPropertyDeclarationItemAST: public AST
  653. {
  654. public:
  655. unsigned item_name_token;
  656. ExpressionAST *expression;
  657. public:
  658. QtPropertyDeclarationItemAST()
  659. : item_name_token(0)
  660. , expression(0)
  661. {}
  662. virtual QtPropertyDeclarationItemAST *asQtPropertyDeclarationItem() { return this; }
  663. virtual unsigned firstToken() const;
  664. virtual unsigned lastToken() const;
  665. virtual QtPropertyDeclarationItemAST *clone(MemoryPool *pool) const;
  666. protected:
  667. virtual void accept0(ASTVisitor *visitor);
  668. virtual bool match0(AST *, ASTMatcher *);
  669. };
  670. class CPLUSPLUS_EXPORT QtPropertyDeclarationAST: public DeclarationAST
  671. {
  672. public:
  673. unsigned property_specifier_token;
  674. unsigned lparen_token;
  675. ExpressionAST *expression; // for Q_PRIVATE_PROPERTY(expression, ...)
  676. unsigned comma_token;
  677. ExpressionAST *type_id;
  678. NameAST *property_name;
  679. QtPropertyDeclarationItemListAST *property_declaration_item_list;
  680. unsigned rparen_token;
  681. public:
  682. QtPropertyDeclarationAST()
  683. : property_specifier_token(0)
  684. , lparen_token(0)
  685. , expression(0)
  686. , comma_token(0)
  687. , type_id(0)
  688. , property_name(0)
  689. , property_declaration_item_list(0)
  690. , rparen_token(0)
  691. {}
  692. virtual QtPropertyDeclarationAST *asQtPropertyDeclaration() { return this; }
  693. virtual unsigned firstToken() const;
  694. virtual unsigned lastToken() const;
  695. virtual QtPropertyDeclarationAST *clone(MemoryPool *pool) const;
  696. protected:
  697. virtual void accept0(ASTVisitor *visitor);
  698. virtual bool match0(AST *, ASTMatcher *);
  699. };
  700. class CPLUSPLUS_EXPORT QtEnumDeclarationAST: public DeclarationAST
  701. {
  702. public:
  703. unsigned enum_specifier_token;
  704. unsigned lparen_token;
  705. NameListAST *enumerator_list;
  706. unsigned rparen_token;
  707. public:
  708. QtEnumDeclarationAST()
  709. : enum_specifier_token(0)
  710. , lparen_token(0)
  711. , enumerator_list(0)
  712. , rparen_token(0)
  713. {}
  714. virtual QtEnumDeclarationAST *asQtEnumDeclaration() { return this; }
  715. virtual unsigned firstToken() const;
  716. virtual unsigned lastToken() const;
  717. virtual QtEnumDeclarationAST *clone(MemoryPool *pool) const;
  718. protected:
  719. virtual void accept0(ASTVisitor *visitor);
  720. virtual bool match0(AST *, ASTMatcher *);
  721. };
  722. class CPLUSPLUS_EXPORT QtFlagsDeclarationAST: public DeclarationAST
  723. {
  724. public:
  725. unsigned flags_specifier_token;
  726. unsigned lparen_token;
  727. NameListAST *flag_enums_list;
  728. unsigned rparen_token;
  729. public:
  730. QtFlagsDeclarationAST()
  731. : flags_specifier_token(0)
  732. , lparen_token(0)
  733. , flag_enums_list(0)
  734. , rparen_token(0)
  735. {}
  736. virtual QtFlagsDeclarationAST *asQtFlagsDeclaration() { return this; }
  737. virtual unsigned firstToken() const;
  738. virtual unsigned lastToken() const;
  739. virtual QtFlagsDeclarationAST *clone(MemoryPool *pool) const;
  740. protected:
  741. virtual void accept0(ASTVisitor *visitor);
  742. virtual bool match0(AST *, ASTMatcher *);
  743. };
  744. class CPLUSPLUS_EXPORT QtInterfaceNameAST: public AST
  745. {
  746. public:
  747. NameAST *interface_name;
  748. NameListAST *constraint_list;
  749. public:
  750. QtInterfaceNameAST()
  751. : interface_name(0)
  752. , constraint_list(0)
  753. {}
  754. virtual QtInterfaceNameAST *asQtInterfaceName() { return this; }
  755. virtual unsigned firstToken() const;
  756. virtual unsigned lastToken() const;
  757. virtual QtInterfaceNameAST *clone(MemoryPool *pool) const;
  758. protected:
  759. virtual void accept0(ASTVisitor *visitor);
  760. virtual bool match0(AST *, ASTMatcher *);
  761. };
  762. class CPLUSPLUS_EXPORT QtInterfacesDeclarationAST: public DeclarationAST
  763. {
  764. public:
  765. unsigned interfaces_token;
  766. unsigned lparen_token;
  767. QtInterfaceNameListAST *interface_name_list;
  768. unsigned rparen_token;
  769. public:
  770. QtInterfacesDeclarationAST()
  771. : interfaces_token(0)
  772. , lparen_token(0)
  773. , interface_name_list(0)
  774. , rparen_token(0)
  775. {}
  776. virtual QtInterfacesDeclarationAST *asQtInterfacesDeclaration() { return this; }
  777. virtual unsigned firstToken() const;
  778. virtual unsigned lastToken() const;
  779. virtual QtInterfacesDeclarationAST *clone(MemoryPool *pool) const;
  780. protected:
  781. virtual void accept0(ASTVisitor *visitor);
  782. virtual bool match0(AST *, ASTMatcher *);
  783. };
  784. class CPLUSPLUS_EXPORT AsmDefinitionAST: public DeclarationAST
  785. {
  786. public:
  787. unsigned asm_token;
  788. unsigned volatile_token;
  789. unsigned lparen_token;
  790. // ### string literals
  791. // ### asm operand list
  792. unsigned rparen_token;
  793. unsigned semicolon_token;
  794. public:
  795. AsmDefinitionAST()
  796. : asm_token(0)
  797. , volatile_token(0)
  798. , lparen_token(0)
  799. , rparen_token(0)
  800. , semicolon_token(0)
  801. {}
  802. virtual AsmDefinitionAST *asAsmDefinition() { return this; }
  803. virtual unsigned firstToken() const;
  804. virtual unsigned lastToken() const;
  805. virtual AsmDefinitionAST *clone(MemoryPool *pool) const;
  806. protected:
  807. virtual void accept0(ASTVisitor *visitor);
  808. virtual bool match0(AST *, ASTMatcher *);
  809. };
  810. class CPLUSPLUS_EXPORT BaseSpecifierAST: public AST
  811. {
  812. public:
  813. unsigned virtual_token;
  814. unsigned access_specifier_token;
  815. NameAST *name;
  816. public: // annotations
  817. BaseClass *symbol;
  818. public:
  819. BaseSpecifierAST()
  820. : virtual_token(0)
  821. , access_specifier_token(0)
  822. , name(0)
  823. , symbol(0)
  824. {}
  825. virtual BaseSpecifierAST *asBaseSpecifier() { return this; }
  826. virtual unsigned firstToken() const;
  827. virtual unsigned lastToken() const;
  828. virtual BaseSpecifierAST *clone(MemoryPool *pool) const;
  829. protected:
  830. virtual void accept0(ASTVisitor *visitor);
  831. virtual bool match0(AST *, ASTMatcher *);
  832. };
  833. class CPLUSPLUS_EXPORT IdExpressionAST: public ExpressionAST
  834. {
  835. public:
  836. NameAST *name;
  837. public:
  838. IdExpressionAST()
  839. : name(0)
  840. {}
  841. virtual IdExpressionAST *asIdExpression() { return this; }
  842. virtual unsigned firstToken() const;
  843. virtual unsigned lastToken() const;
  844. virtual IdExpressionAST *clone(MemoryPool *pool) const;
  845. protected:
  846. virtual void accept0(ASTVisitor *visitor);
  847. virtual bool match0(AST *, ASTMatcher *);
  848. };
  849. class CPLUSPLUS_EXPORT CompoundExpressionAST: public ExpressionAST
  850. {
  851. public:
  852. unsigned lparen_token;
  853. CompoundStatementAST *statement;
  854. unsigned rparen_token;
  855. public:
  856. CompoundExpressionAST()
  857. : lparen_token(0)
  858. , statement(0)
  859. , rparen_token(0)
  860. {}
  861. virtual CompoundExpressionAST *asCompoundExpression() { return this; }
  862. virtual unsigned firstToken() const;
  863. virtual unsigned lastToken() const;
  864. virtual CompoundExpressionAST *clone(MemoryPool *pool) const;
  865. protected:
  866. virtual void accept0(ASTVisitor *visitor);
  867. virtual bool match0(AST *, ASTMatcher *);
  868. };
  869. class CPLUSPLUS_EXPORT CompoundLiteralAST: public ExpressionAST
  870. {
  871. public:
  872. unsigned lparen_token;
  873. ExpressionAST *type_id;
  874. unsigned rparen_token;
  875. ExpressionAST *initializer;
  876. public:
  877. CompoundLiteralAST()
  878. : lparen_token(0)
  879. , type_id(0)
  880. , rparen_token(0)
  881. , initializer(0)
  882. {}
  883. virtual CompoundLiteralAST *asCompoundLiteral() { return this; }
  884. virtual unsigned firstToken() const;
  885. virtual unsigned lastToken() const;
  886. virtual CompoundLiteralAST *clone(MemoryPool *pool) const;
  887. protected:
  888. virtual void accept0(ASTVisitor *visitor);
  889. virtual bool match0(AST *, ASTMatcher *);
  890. };
  891. class CPLUSPLUS_EXPORT QtMethodAST: public ExpressionAST
  892. {
  893. public:
  894. unsigned method_token;
  895. unsigned lparen_token;
  896. DeclaratorAST *declarator;
  897. unsigned rparen_token;
  898. public:
  899. QtMethodAST()
  900. : method_token(0)
  901. , lparen_token(0)
  902. , declarator(0)
  903. , rparen_token(0)
  904. {}
  905. virtual QtMethodAST *asQtMethod() { return this; }
  906. virtual unsigned firstToken() const;
  907. virtual unsigned lastToken() const;
  908. virtual QtMethodAST *clone(MemoryPool *pool) const;
  909. protected:
  910. virtual void accept0(ASTVisitor *visitor);
  911. virtual bool match0(AST *, ASTMatcher *);
  912. };
  913. class CPLUSPLUS_EXPORT QtMemberDeclarationAST: public StatementAST
  914. {
  915. public:
  916. unsigned q_token;
  917. unsigned lparen_token;
  918. ExpressionAST *type_id;
  919. unsigned rparen_token;
  920. public:
  921. QtMemberDeclarationAST()
  922. : q_token(0)
  923. , lparen_token(0)
  924. , type_id(0)
  925. , rparen_token(0)
  926. {}
  927. virtual QtMemberDeclarationAST *asQtMemberDeclaration() { return this; }
  928. virtual unsigned firstToken() const;
  929. virtual unsigned lastToken() const;
  930. virtual QtMemberDeclarationAST *clone(MemoryPool *pool) const;
  931. protected:
  932. virtual void accept0(ASTVisitor *visitor);
  933. virtual bool match0(AST *, ASTMatcher *);
  934. };
  935. class CPLUSPLUS_EXPORT BinaryExpressionAST: public ExpressionAST
  936. {
  937. public:
  938. ExpressionAST *left_expression;
  939. unsigned binary_op_token;
  940. ExpressionAST *right_expression;
  941. public:
  942. BinaryExpressionAST()
  943. : left_expression(0)
  944. , binary_op_token(0)
  945. , right_expression(0)
  946. {}
  947. virtual BinaryExpressionAST *asBinaryExpression() { return this; }
  948. virtual unsigned firstToken() const;
  949. virtual unsigned lastToken() const;
  950. virtual BinaryExpressionAST *clone(MemoryPool *pool) const;
  951. protected:
  952. virtual void accept0(ASTVisitor *visitor);
  953. virtual bool match0(AST *, ASTMatcher *);
  954. };
  955. class CPLUSPLUS_EXPORT CastExpressionAST: public ExpressionAST
  956. {
  957. public:
  958. unsigned lparen_token;
  959. ExpressionAST *type_id;
  960. unsigned rparen_token;
  961. ExpressionAST *expression;
  962. public:
  963. CastExpressionAST()
  964. : lparen_token(0)
  965. , type_id(0)
  966. , rparen_token(0)
  967. , expression(0)
  968. {}
  969. virtual CastExpressionAST *asCastExpression() { return this; }
  970. virtual unsigned firstToken() const;
  971. virtual unsigned lastToken() const;
  972. virtual CastExpressionAST *clone(MemoryPool *pool) const;
  973. protected:
  974. virtual void accept0(ASTVisitor *visitor);
  975. virtual bool match0(AST *, ASTMatcher *);
  976. };
  977. class CPLUSPLUS_EXPORT ClassSpecifierAST: public SpecifierAST
  978. {
  979. public:
  980. unsigned classkey_token;
  981. SpecifierListAST *attribute_list;
  982. NameAST *name;
  983. unsigned final_token;
  984. unsigned colon_token;
  985. BaseSpecifierListAST *base_clause_list;
  986. unsigned dot_dot_dot_token;
  987. unsigned lbrace_token;
  988. DeclarationListAST *member_specifier_list;
  989. unsigned rbrace_token;
  990. public: // annotations
  991. Class *symbol;
  992. public:
  993. ClassSpecifierAST()
  994. : classkey_token(0)
  995. , attribute_list(0)
  996. , name(0)
  997. , final_token(0)
  998. , colon_token(0)
  999. , base_clause_list(0)
  1000. , dot_dot_dot_token(0)
  1001. , lbrace_token(0)
  1002. , member_specifier_list(0)
  1003. , rbrace_token(0)
  1004. , symbol(0)
  1005. {}
  1006. virtual ClassSpecifierAST *asClassSpecifier() { return this; }
  1007. virtual unsigned firstToken() const;
  1008. virtual unsigned lastToken() const;
  1009. virtual ClassSpecifierAST *clone(MemoryPool *pool) const;
  1010. protected:
  1011. virtual void accept0(ASTVisitor *visitor);
  1012. virtual bool match0(AST *, ASTMatcher *);
  1013. };
  1014. class CPLUSPLUS_EXPORT CaseStatementAST: public StatementAST
  1015. {
  1016. public:
  1017. unsigned case_token;
  1018. ExpressionAST *expression;
  1019. unsigned colon_token;
  1020. StatementAST *statement;
  1021. public:
  1022. CaseStatementAST()
  1023. : case_token(0)
  1024. , expression(0)
  1025. , colon_token(0)
  1026. , statement(0)
  1027. {}
  1028. virtual CaseStatementAST *asCaseStatement() { return this; }
  1029. virtual unsigned firstToken() const;
  1030. virtual unsigned lastToken() const;
  1031. virtual CaseStatementAST *clone(MemoryPool *pool) const;
  1032. protected:
  1033. virtual void accept0(ASTVisitor *visitor);
  1034. virtual bool match0(AST *, ASTMatcher *);
  1035. };
  1036. class CPLUSPLUS_EXPORT CompoundStatementAST: public StatementAST
  1037. {
  1038. public:
  1039. unsigned lbrace_token;
  1040. StatementListAST *statement_list;
  1041. unsigned rbrace_token;
  1042. public: // annotations
  1043. Block *symbol;
  1044. public:
  1045. CompoundStatementAST()
  1046. : lbrace_token(0)
  1047. , statement_list(0)
  1048. , rbrace_token(0)
  1049. , symbol(0)
  1050. {}
  1051. virtual CompoundStatementAST *asCompoundStatement() { return this; }
  1052. virtual unsigned firstToken() const;
  1053. virtual unsigned lastToken() const;
  1054. virtual CompoundStatementAST *clone(MemoryPool *pool) const;
  1055. protected:
  1056. virtual void accept0(ASTVisitor *visitor);
  1057. virtual bool match0(AST *, ASTMatcher *);
  1058. };
  1059. class CPLUSPLUS_EXPORT ConditionAST: public ExpressionAST
  1060. {
  1061. public:
  1062. SpecifierListAST *type_specifier_list;
  1063. DeclaratorAST *declarator;
  1064. public:
  1065. ConditionAST()
  1066. : type_specifier_list(0)
  1067. , declarator(0)
  1068. {}
  1069. virtual ConditionAST *asCondition() { return this; }
  1070. virtual unsigned firstToken() const;
  1071. virtual unsigned lastToken() const;
  1072. virtual ConditionAST *clone(MemoryPool *pool) const;
  1073. protected:
  1074. virtual void accept0(ASTVisitor *visitor);
  1075. virtual bool match0(AST *, ASTMatcher *);
  1076. };
  1077. class CPLUSPLUS_EXPORT ConditionalExpressionAST: public ExpressionAST
  1078. {
  1079. public:
  1080. ExpressionAST *condition;
  1081. unsigned question_token;
  1082. ExpressionAST *left_expression;
  1083. unsigned colon_token;
  1084. ExpressionAST *right_expression;
  1085. public:
  1086. ConditionalExpressionAST()
  1087. : condition(0)
  1088. , question_token(0)
  1089. , left_expression(0)
  1090. , colon_token(0)
  1091. , right_expression(0)
  1092. {}
  1093. virtual ConditionalExpressionAST *asConditionalExpression() { return this; }
  1094. virtual unsigned firstToken() const;
  1095. virtual unsigned lastToken() const;
  1096. virtual ConditionalExpressionAST *clone(MemoryPool *pool) const;
  1097. protected:
  1098. virtual void accept0(ASTVisitor *visitor);
  1099. virtual bool match0(AST *, ASTMatcher *);
  1100. };
  1101. class CPLUSPLUS_EXPORT CppCastExpressionAST: public ExpressionAST
  1102. {
  1103. public:
  1104. unsigned cast_token;
  1105. unsigned less_token;
  1106. ExpressionAST *type_id;
  1107. unsigned greater_token;
  1108. unsigned lparen_token;
  1109. ExpressionAST *expression;
  1110. unsigned rparen_token;
  1111. public:
  1112. CppCastExpressionAST()
  1113. : cast_token(0)
  1114. , less_token(0)
  1115. , type_id(0)
  1116. , greater_token(0)
  1117. , lparen_token(0)
  1118. , expression(0)
  1119. , rparen_token(0)
  1120. {}
  1121. virtual CppCastExpressionAST *asCppCastExpression() { return this; }
  1122. virtual unsigned firstToken() const;
  1123. virtual unsigned lastToken() const;
  1124. virtual CppCastExpressionAST *clone(MemoryPool *pool) const;
  1125. protected:
  1126. virtual void accept0(ASTVisitor *visitor);
  1127. virtual bool match0(AST *, ASTMatcher *);
  1128. };
  1129. class CPLUSPLUS_EXPORT CtorInitializerAST: public AST
  1130. {
  1131. public:
  1132. unsigned colon_token;
  1133. MemInitializerListAST *member_initializer_list;
  1134. unsigned dot_dot_dot_token;
  1135. public:
  1136. CtorInitializerAST()
  1137. : colon_token(0)
  1138. , member_initializer_list(0)
  1139. , dot_dot_dot_token(0)
  1140. {}
  1141. virtual CtorInitializerAST *asCtorInitializer() { return this; }
  1142. virtual unsigned firstToken() const;
  1143. virtual unsigned lastToken() const;
  1144. virtual CtorInitializerAST *clone(MemoryPool *pool) const;
  1145. protected:
  1146. virtual void accept0(ASTVisitor *visitor);
  1147. virtual bool match0(AST *, ASTMatcher *);
  1148. };
  1149. class CPLUSPLUS_EXPORT DeclarationStatementAST: public StatementAST
  1150. {
  1151. public:
  1152. DeclarationAST *declaration;
  1153. public:
  1154. DeclarationStatementAST()
  1155. : declaration(0)
  1156. {}
  1157. virtual DeclarationStatementAST *asDeclarationStatement() { return this; }
  1158. virtual unsigned firstToken() const;
  1159. virtual unsigned lastToken() const;
  1160. virtual DeclarationStatementAST *clone(MemoryPool *pool) const;
  1161. protected:
  1162. virtual void accept0(ASTVisitor *visitor);
  1163. virtual bool match0(AST *, ASTMatcher *);
  1164. };
  1165. class CPLUSPLUS_EXPORT DeclaratorIdAST: public CoreDeclaratorAST
  1166. {
  1167. public:
  1168. unsigned dot_dot_dot_token;
  1169. NameAST *name;
  1170. public:
  1171. DeclaratorIdAST()
  1172. : dot_dot_dot_token(0)
  1173. , name(0)
  1174. {}
  1175. virtual DeclaratorIdAST *asDeclaratorId() { return this; }
  1176. virtual unsigned firstToken() const;
  1177. virtual unsigned lastToken() const;
  1178. virtual DeclaratorIdAST *clone(MemoryPool *pool) const;
  1179. protected:
  1180. virtual void accept0(ASTVisitor *visitor);
  1181. virtual bool match0(AST *, ASTMatcher *);
  1182. };
  1183. class CPLUSPLUS_EXPORT NestedDeclaratorAST: public CoreDeclaratorAST
  1184. {
  1185. public:
  1186. unsigned lparen_token;
  1187. DeclaratorAST *declarator;
  1188. unsigned rparen_token;
  1189. public:
  1190. NestedDeclaratorAST()
  1191. : lparen_token(0)
  1192. , declarator(0)
  1193. , rparen_token(0)
  1194. {}
  1195. virtual NestedDeclaratorAST *asNestedDeclarator() { return this; }
  1196. virtual unsigned firstToken() const;
  1197. virtual unsigned lastToken() const;
  1198. virtual NestedDeclaratorAST *clone(MemoryPool *pool) const;
  1199. protected:
  1200. virtual void accept0(ASTVisitor *visitor);
  1201. virtual bool match0(AST *, ASTMatcher *);
  1202. };
  1203. class CPLUSPLUS_EXPORT FunctionDeclaratorAST: public PostfixDeclaratorAST
  1204. {
  1205. public:
  1206. unsigned lparen_token;
  1207. ParameterDeclarationClauseAST *parameter_declaration_clause;
  1208. unsigned rparen_token;
  1209. SpecifierListAST *cv_qualifier_list;
  1210. unsigned ref_qualifier_token;
  1211. ExceptionSpecificationAST *exception_specification;
  1212. TrailingReturnTypeAST *trailing_return_type;
  1213. // Some FunctionDeclarators can also be interpreted as an initializer, like for 'A b(c);'
  1214. ExpressionAST *as_cpp_initializer;
  1215. public: // annotations
  1216. Function *symbol;
  1217. public:
  1218. FunctionDeclaratorAST()
  1219. : lparen_token(0)
  1220. , parameter_declaration_clause(0)
  1221. , rparen_token(0)
  1222. , cv_qualifier_list(0)
  1223. , ref_qualifier_token(0)
  1224. , exception_specification(0)
  1225. , trailing_return_type(0)
  1226. , as_cpp_initializer(0)
  1227. , symbol(0)
  1228. {}
  1229. virtual FunctionDeclaratorAST *asFunctionDeclarator() { return this; }
  1230. virtual unsigned firstToken() const;
  1231. virtual unsigned lastToken() const;
  1232. virtual FunctionDeclaratorAST *clone(MemoryPool *pool) const;
  1233. protected:
  1234. virtual void accept0(ASTVisitor *visitor);
  1235. virtual bool match0(AST *, ASTMatcher *);
  1236. };
  1237. class CPLUSPLUS_EXPORT ArrayDeclaratorAST: public PostfixDeclaratorAST
  1238. {
  1239. public:
  1240. unsigned lbracket_token;
  1241. ExpressionAST *expression;
  1242. unsigned rbracket_token;
  1243. public:
  1244. ArrayDeclaratorAST()
  1245. : lbracket_token(0)
  1246. , expression(0)
  1247. , rbracket_token(0)
  1248. {}
  1249. virtual ArrayDeclaratorAST *asArrayDeclarator() { return this; }
  1250. virtual unsigned firstToken() const;
  1251. virtual unsigned lastToken() const;
  1252. virtual ArrayDeclaratorAST *clone(MemoryPool *pool) const;
  1253. protected:
  1254. virtual void accept0(ASTVisitor *visitor);
  1255. virtual bool match0(AST *, ASTMatcher *);
  1256. };
  1257. class CPLUSPLUS_EXPORT DeleteExpressionAST: public ExpressionAST
  1258. {
  1259. public:
  1260. unsigned scope_token;
  1261. unsigned delete_token;
  1262. unsigned lbracket_token;
  1263. unsigned rbracket_token;
  1264. ExpressionAST *expression;
  1265. public:
  1266. DeleteExpressionAST()
  1267. : scope_token(0)
  1268. , delete_token(0)
  1269. , lbracket_token(0)
  1270. , rbracket_token(0)
  1271. , expression(0)
  1272. {}
  1273. virtual DeleteExpressionAST *asDeleteExpression() { return this; }
  1274. virtual unsigned firstToken() const;
  1275. virtual unsigned lastToken() const;
  1276. virtual DeleteExpressionAST *clone(MemoryPool *pool) const;
  1277. protected:
  1278. virtual void accept0(ASTVisitor *visitor);
  1279. virtual bool match0(AST *, ASTMatcher *);
  1280. };
  1281. class CPLUSPLUS_EXPORT DoStatementAST: public StatementAST
  1282. {
  1283. public:
  1284. unsigned do_token;
  1285. StatementAST *statement;
  1286. unsigned while_token;
  1287. unsigned lparen_token;
  1288. ExpressionAST *expression;
  1289. unsigned rparen_token;
  1290. unsigned semicolon_token;
  1291. public:
  1292. DoStatementAST()
  1293. : do_token(0)
  1294. , statement(0)
  1295. , while_token(0)
  1296. , lparen_token(0)
  1297. , expression(0)
  1298. , rparen_token(0)
  1299. , semicolon_token(0)
  1300. {}
  1301. virtual DoStatementAST *asDoStatement() { return this; }
  1302. virtual unsigned firstToken() const;
  1303. virtual unsigned lastToken() const;
  1304. virtual DoStatementAST *clone(MemoryPool *pool) const;
  1305. protected:
  1306. virtual void accept0(ASTVisitor *visitor);
  1307. virtual bool match0(AST *, ASTMatcher *);
  1308. };
  1309. class CPLUSPLUS_EXPORT NamedTypeSpecifierAST: public SpecifierAST
  1310. {
  1311. public:
  1312. NameAST *name;
  1313. public:
  1314. NamedTypeSpecifierAST()
  1315. : name(0)
  1316. {}
  1317. virtual NamedTypeSpecifierAST *asNamedTypeSpecifier() { return this; }
  1318. virtual unsigned firstToken() const;
  1319. virtual unsigned lastToken() const;
  1320. virtual NamedTypeSpecifierAST *clone(MemoryPool *pool) const;
  1321. protected:
  1322. virtual void accept0(ASTVisitor *visitor);
  1323. virtual bool match0(AST *, ASTMatcher *);
  1324. };
  1325. class CPLUSPLUS_EXPORT ElaboratedTypeSpecifierAST: public SpecifierAST
  1326. {
  1327. public:
  1328. unsigned classkey_token;
  1329. SpecifierListAST *attribute_list;
  1330. NameAST *name;
  1331. public:
  1332. ElaboratedTypeSpecifierAST()
  1333. : classkey_token(0)
  1334. , attribute_list(0)
  1335. , name(0)
  1336. {}
  1337. virtual ElaboratedTypeSpecifierAST *asElaboratedTypeSpecifier() { return this; }
  1338. virtual unsigned firstToken() const;
  1339. virtual unsigned lastToken() const;
  1340. virtual ElaboratedTypeSpecifierAST *clone(MemoryPool *pool) const;
  1341. protected:
  1342. virtual void accept0(ASTVisitor *visitor);
  1343. virtual bool match0(AST *, ASTMatcher *);
  1344. };
  1345. class CPLUSPLUS_EXPORT EnumSpecifierAST: public SpecifierAST
  1346. {
  1347. public:
  1348. unsigned enum_token;
  1349. unsigned key_token; // struct, class or 0
  1350. NameAST *name;
  1351. unsigned colon_token; // can be 0 if there is no enum-base
  1352. SpecifierListAST *type_specifier_list; // ditto
  1353. unsigned lbrace_token;
  1354. EnumeratorListAST *enumerator_list;
  1355. unsigned stray_comma_token;
  1356. unsigned rbrace_token;
  1357. public: // annotations
  1358. Enum *symbol;
  1359. public:
  1360. EnumSpecifierAST()
  1361. : enum_token(0)
  1362. , key_token(0)
  1363. , name(0)
  1364. , colon_token(0)
  1365. , type_specifier_list(0)
  1366. , lbrace_token(0)
  1367. , enumerator_list(0)
  1368. , stray_comma_token(0)
  1369. , rbrace_token(0)
  1370. , symbol(0)
  1371. {}
  1372. virtual EnumSpecifierAST *asEnumSpecifier() { return this; }
  1373. virtual unsigned firstToken() const;
  1374. virtual unsigned lastToken() const;
  1375. virtual EnumSpecifierAST *clone(MemoryPool *pool) const;
  1376. protected:
  1377. virtual void accept0(ASTVisitor *visitor);
  1378. virtual bool match0(AST *, ASTMatcher *);
  1379. };
  1380. class CPLUSPLUS_EXPORT EnumeratorAST: public AST
  1381. {
  1382. public:
  1383. unsigned identifier_token;
  1384. unsigned equal_token;
  1385. ExpressionAST *expression;
  1386. public:
  1387. EnumeratorAST()
  1388. : identifier_token(0)
  1389. , equal_token(0)
  1390. , expression(0)
  1391. {}
  1392. virtual EnumeratorAST *asEnumerator() { return this; }
  1393. virtual unsigned firstToken() const;
  1394. virtual unsigned lastToken() const;
  1395. virtual EnumeratorAST *clone(MemoryPool *pool) const;
  1396. protected:
  1397. virtual void accept0(ASTVisitor *visitor);
  1398. virtual bool match0(AST *, ASTMatcher *);
  1399. };
  1400. class CPLUSPLUS_EXPORT ExceptionDeclarationAST: public DeclarationAST
  1401. {
  1402. public:
  1403. SpecifierListAST *type_specifier_list;
  1404. DeclaratorAST *declarator;
  1405. unsigned dot_dot_dot_token;
  1406. public:
  1407. ExceptionDeclarationAST()
  1408. : type_specifier_list(0)
  1409. , declarator(0)
  1410. , dot_dot_dot_token(0)
  1411. {}
  1412. virtual ExceptionDeclarationAST *asExceptionDeclaration() { return this; }
  1413. virtual unsigned firstToken() const;
  1414. virtual unsigned lastToken() const;
  1415. virtual ExceptionDeclarationAST *clone(MemoryPool *pool) const;
  1416. protected:
  1417. virtual void accept0(ASTVisitor *visitor);
  1418. virtual bool match0(AST *, ASTMatcher *);
  1419. };
  1420. class CPLUSPLUS_EXPORT ExceptionSpecificationAST: public AST
  1421. {
  1422. public:
  1423. ExceptionSpecificationAST()
  1424. {}
  1425. virtual ExceptionSpecificationAST *asExceptionSpecification() { return this; }
  1426. virtual ExceptionSpecificationAST *clone(MemoryPool *pool) const = 0;
  1427. };
  1428. class CPLUSPLUS_EXPORT DynamicExceptionSpecificationAST: public ExceptionSpecificationAST
  1429. {
  1430. public:
  1431. unsigned throw_token;
  1432. unsigned lparen_token;
  1433. unsigned dot_dot_dot_token;
  1434. ExpressionListAST *type_id_list;
  1435. unsigned rparen_token;
  1436. public:
  1437. DynamicExceptionSpecificationAST()
  1438. : throw_token(0)
  1439. , lparen_token(0)
  1440. , dot_dot_dot_token(0)
  1441. , type_id_list(0)
  1442. , rparen_token(0)
  1443. {}
  1444. virtual DynamicExceptionSpecificationAST *asDynamicExceptionSpecification() { return this; }
  1445. virtual unsigned firstToken() const;
  1446. virtual unsigned lastToken() const;
  1447. virtual DynamicExceptionSpecificationAST *clone(MemoryPool *pool) const;
  1448. protected:
  1449. virtual void accept0(ASTVisitor *visitor);
  1450. virtual bool match0(AST *, ASTMatcher *);
  1451. };
  1452. class CPLUSPLUS_EXPORT NoExceptSpecificationAST: public ExceptionSpecificationAST
  1453. {
  1454. public:
  1455. unsigned noexcept_token;
  1456. unsigned lparen_token;
  1457. ExpressionAST *expression;
  1458. unsigned rparen_token;
  1459. public:
  1460. NoExceptSpecificationAST()
  1461. : noexcept_token(0)
  1462. , lparen_token(0)
  1463. , expression(0)
  1464. , rparen_token(0)
  1465. {}
  1466. virtual NoExceptSpecificationAST *asNoExceptSpecification() { return this; }
  1467. virtual unsigned firstToken() const;
  1468. virtual unsigned lastToken() const;
  1469. virtual NoExceptSpecificationAST *clone(MemoryPool *pool) const;
  1470. protected:
  1471. virtual void accept0(ASTVisitor *visitor);
  1472. virtual bool match0(AST *, ASTMatcher *);
  1473. };
  1474. class CPLUSPLUS_EXPORT ExpressionOrDeclarationStatementAST: public StatementAST
  1475. {
  1476. public:
  1477. ExpressionStatementAST *expression;
  1478. DeclarationStatementAST *declaration;
  1479. public:
  1480. ExpressionOrDeclarationStatementAST()
  1481. : expression(0)
  1482. , declaration(0)
  1483. {}
  1484. virtual ExpressionOrDeclarationStatementAST *asExpressionOrDeclarationStatement() { return this; }
  1485. virtual unsigned firstToken() const;
  1486. virtual unsigned lastToken() const;
  1487. virtual ExpressionOrDeclarationStatementAST *clone(MemoryPool *pool) const;
  1488. protected:
  1489. virtual void accept0(ASTVisitor *visitor);
  1490. virtual bool match0(AST *, ASTMatcher *);
  1491. };
  1492. class CPLUSPLUS_EXPORT ExpressionStatementAST: public StatementAST
  1493. {
  1494. public:
  1495. ExpressionAST *expression;
  1496. unsigned semicolon_token;
  1497. public:
  1498. ExpressionStatementAST()
  1499. : expression(0)
  1500. , semicolon_token(0)
  1501. {}
  1502. virtual ExpressionStatementAST *asExpressionStatement() { return this; }
  1503. virtual unsigned firstToken() const;
  1504. virtual unsigned lastToken() const;
  1505. virtual ExpressionStatementAST *clone(MemoryPool *pool) const;
  1506. protected:
  1507. virtual void accept0(ASTVisitor *visitor);
  1508. virtual bool match0(AST *, ASTMatcher *);
  1509. };
  1510. class CPLUSPLUS_EXPORT FunctionDefinitionAST: public DeclarationAST
  1511. {
  1512. public:
  1513. unsigned qt_invokable_token;
  1514. SpecifierListAST *decl_specifier_list;
  1515. DeclaratorAST *declarator;
  1516. CtorInitializerAST *ctor_initializer;
  1517. StatementAST *function_body;
  1518. public: // annotations
  1519. Function *symbol;
  1520. public:
  1521. FunctionDefinitionAST()
  1522. : qt_invokable_token(0)
  1523. , decl_specifier_list(0)
  1524. , declarator(0)
  1525. , ctor_initializer(0)
  1526. , function_body(0)
  1527. , symbol(0)
  1528. {}
  1529. virtual FunctionDefinitionAST *asFunctionDefinition() { return this; }
  1530. virtual unsigned firstToken() const;
  1531. virtual unsigned lastToken() const;
  1532. virtual FunctionDefinitionAST *clone(MemoryPool *pool) const;
  1533. protected:
  1534. virtual void accept0(ASTVisitor *visitor);
  1535. virtual bool match0(AST *, ASTMatcher *);
  1536. };
  1537. class CPLUSPLUS_EXPORT ForeachStatementAST: public StatementAST
  1538. {
  1539. public:
  1540. unsigned foreach_token;
  1541. unsigned lparen_token;
  1542. // declaration
  1543. SpecifierListAST *type_specifier_list;
  1544. DeclaratorAST *declarator;
  1545. // or an expression
  1546. ExpressionAST *initializer;
  1547. unsigned comma_token;
  1548. ExpressionAST *expression;
  1549. unsigned rparen_token;
  1550. StatementAST *statement;
  1551. public: // annotations
  1552. Block *symbol;
  1553. public:
  1554. ForeachStatementAST()
  1555. : foreach_token(0)
  1556. , lparen_token(0)
  1557. , type_specifier_list(0)
  1558. , declarator(0)
  1559. , initializer(0)
  1560. , comma_token(0)
  1561. , expression(0)
  1562. , rparen_token(0)
  1563. , statement(0)
  1564. , symbol(0)
  1565. {}
  1566. virtual ForeachStatementAST *asForeachStatement() { return this; }
  1567. virtual unsigned firstToken() const;
  1568. virtual unsigned lastToken() const;
  1569. virtual ForeachStatementAST *clone(MemoryPool *pool) const;
  1570. protected:
  1571. virtual void accept0(ASTVisitor *visitor);
  1572. virtual bool match0(AST *, ASTMatcher *);
  1573. };
  1574. class CPLUSPLUS_EXPORT RangeBasedForStatementAST : public StatementAST
  1575. {
  1576. public:
  1577. unsigned for_token;
  1578. unsigned lparen_token;
  1579. // declaration
  1580. SpecifierListAST *type_specifier_list;
  1581. DeclaratorAST *declarator;
  1582. // or an expression
  1583. unsigned colon_token;
  1584. ExpressionAST *expression;
  1585. unsigned rparen_token;
  1586. StatementAST *statement;
  1587. public: // annotations
  1588. Block *symbol;
  1589. public:
  1590. RangeBasedForStatementAST()
  1591. : for_token(0)
  1592. , lparen_token(0)
  1593. , type_specifier_list(0)
  1594. , declarator(0)
  1595. , colon_token(0)
  1596. , expression(0)
  1597. , rparen_token(0)
  1598. , statement(0)
  1599. , symbol(0)
  1600. {}
  1601. virtual RangeBasedForStatementAST *asRangeBasedForStatement() { return this; }
  1602. virtual unsigned firstToken() const;
  1603. virtual unsigned lastToken() const;
  1604. virtual RangeBasedForStatementAST *clone(MemoryPool *pool) const;
  1605. protected:
  1606. virtual void accept0(ASTVisitor *visitor);
  1607. virtual bool match0(AST *, ASTMatcher *);
  1608. };
  1609. class CPLUSPLUS_EXPORT ForStatementAST: public StatementAST
  1610. {
  1611. public:
  1612. unsigned for_token;
  1613. unsigned lparen_token;
  1614. StatementAST *initializer;
  1615. ExpressionAST *condition;
  1616. unsigned semicolon_token;
  1617. ExpressionAST *expression;
  1618. unsigned rparen_token;
  1619. StatementAST *statement;
  1620. public: // annotations
  1621. Block *symbol;
  1622. public:
  1623. ForStatementAST()
  1624. : for_token(0)
  1625. , lparen_token(0)
  1626. , initializer(0)
  1627. , condition(0)
  1628. , semicolon_token(0)
  1629. , expression(0)
  1630. , rparen_token(0)
  1631. , statement(0)
  1632. , symbol(0)
  1633. {}
  1634. virtual ForStatementAST *asForStatement() { return this; }
  1635. virtual unsigned firstToken() const;
  1636. virtual unsigned lastToken() const;
  1637. virtual ForStatementAST *clone(MemoryPool *pool) const;
  1638. protected:
  1639. virtual void accept0(ASTVisitor *visitor);
  1640. virtual bool match0(AST *, ASTMatcher *);
  1641. };
  1642. class CPLUSPLUS_EXPORT IfStatementAST: public StatementAST
  1643. {
  1644. public:
  1645. unsigned if_token;
  1646. unsigned lparen_token;
  1647. ExpressionAST *condition;
  1648. unsigned rparen_token;
  1649. StatementAST *statement;
  1650. unsigned else_token;
  1651. StatementAST *else_statement;
  1652. public: // annotations
  1653. Block *symbol;
  1654. public:
  1655. IfStatementAST()
  1656. : if_token(0)
  1657. , lparen_token(0)
  1658. , condition(0)
  1659. , rparen_token(0)
  1660. , statement(0)
  1661. , else_token(0)
  1662. , else_statement(0)
  1663. , symbol(0)
  1664. {}
  1665. virtual IfStatementAST *asIfStatement() { return this; }
  1666. virtual unsigned firstToken() const;
  1667. virtual unsigned lastToken() const;
  1668. virtual IfStatementAST *clone(MemoryPool *pool) const;
  1669. protected:
  1670. virtual void accept0(ASTVisitor *visitor);
  1671. virtual bool match0(AST *, ASTMatcher *);
  1672. };
  1673. class CPLUSPLUS_EXPORT ArrayInitializerAST: public ExpressionAST
  1674. {
  1675. public:
  1676. unsigned lbrace_token;
  1677. ExpressionListAST *expression_list;
  1678. unsigned rbrace_token;
  1679. public:
  1680. ArrayInitializerAST()
  1681. : lbrace_token(0)
  1682. , expression_list(0)
  1683. , rbrace_token(0)
  1684. {}
  1685. virtual ArrayInitializerAST *asArrayInitializer() { return this; }
  1686. virtual unsigned firstToken() const;
  1687. virtual unsigned lastToken() const;
  1688. virtual ArrayInitializerAST *clone(MemoryPool *pool) const;
  1689. protected:
  1690. virtual void accept0(ASTVisitor *visitor);
  1691. virtual bool match0(AST *, ASTMatcher *);
  1692. };
  1693. class CPLUSPLUS_EXPORT LabeledStatementAST: public StatementAST
  1694. {
  1695. public:
  1696. unsigned label_token;
  1697. unsigned colon_token;
  1698. StatementAST *statement;
  1699. public:
  1700. LabeledStatementAST()
  1701. : label_token(0)
  1702. , colon_token(0)
  1703. , statement(0)
  1704. {}
  1705. virtual LabeledStatementAST *asLabeledStatement() { return this; }
  1706. virtual unsigned firstToken() const;
  1707. virtual unsigned lastToken() const;
  1708. virtual LabeledStatementAST *clone(MemoryPool *pool) const;
  1709. protected:
  1710. virtual void accept0(ASTVisitor *visitor);
  1711. virtual bool match0(AST *, ASTMatcher *);
  1712. };
  1713. class CPLUSPLUS_EXPORT LinkageBodyAST: public DeclarationAST
  1714. {
  1715. public:
  1716. unsigned lbrace_token;
  1717. DeclarationListAST *declaration_list;
  1718. unsigned rbrace_token;
  1719. public:
  1720. LinkageBodyAST()
  1721. : lbrace_token(0)
  1722. , declaration_list(0)
  1723. , rbrace_token(0)
  1724. {}
  1725. virtual LinkageBodyAST *asLinkageBody() { return this; }
  1726. virtual unsigned firstToken() const;
  1727. virtual unsigned lastToken() const;
  1728. virtual LinkageBodyAST *clone(MemoryPool *pool) const;
  1729. protected:
  1730. virtual void accept0(ASTVisitor *visitor);
  1731. virtual bool match0(AST *, ASTMatcher *);
  1732. };
  1733. class CPLUSPLUS_EXPORT LinkageSpecificationAST: public DeclarationAST
  1734. {
  1735. public:
  1736. unsigned extern_token;
  1737. unsigned extern_type_token;
  1738. DeclarationAST *declaration;
  1739. public:
  1740. LinkageSpecificationAST()
  1741. : extern_token(0)
  1742. , extern_type_token(0)
  1743. , declaration(0)
  1744. {}
  1745. virtual LinkageSpecificationAST *asLinkageSpecification() { return this; }
  1746. virtual unsigned firstToken() const;
  1747. virtual unsigned lastToken() const;
  1748. virtual LinkageSpecificationAST *clone(MemoryPool *pool) const;
  1749. protected:
  1750. virtual void accept0(ASTVisitor *visitor);
  1751. virtual bool match0(AST *, ASTMatcher *);
  1752. };
  1753. class CPLUSPLUS_EXPORT MemInitializerAST: public AST
  1754. {
  1755. public:
  1756. NameAST *name;
  1757. // either a BracedInitializerAST or a ExpressionListParenAST
  1758. ExpressionAST *expression;
  1759. public:
  1760. MemInitializerAST()
  1761. : name(0)
  1762. , expression(0)
  1763. {}
  1764. virtual MemInitializerAST *asMemInitializer() { return this; }
  1765. virtual unsigned firstToken() const;
  1766. virtual unsigned lastToken() const;
  1767. virtual MemInitializerAST *clone(MemoryPool *pool) const;
  1768. protected:
  1769. virtual void accept0(ASTVisitor *visitor);
  1770. virtual bool match0(AST *, ASTMatcher *);
  1771. };
  1772. class CPLUSPLUS_EXPORT NestedNameSpecifierAST: public AST
  1773. {
  1774. public:
  1775. NameAST *class_or_namespace_name;
  1776. unsigned scope_token;
  1777. public:
  1778. NestedNameSpecifierAST()
  1779. : class_or_namespace_name(0)
  1780. , scope_token(0)
  1781. {}
  1782. virtual NestedNameSpecifierAST *asNestedNameSpecifier() { return this; }
  1783. virtual unsigned firstToken() const;
  1784. virtual unsigned lastToken() const;
  1785. virtual NestedNameSpecifierAST *clone(MemoryPool *pool) const;
  1786. protected:
  1787. virtual void accept0(ASTVisitor *visitor);
  1788. virtual bool match0(AST *, ASTMatcher *);
  1789. };
  1790. class CPLUSPLUS_EXPORT QualifiedNameAST: public NameAST
  1791. {
  1792. public:
  1793. unsigned global_scope_token;
  1794. NestedNameSpecifierListAST *nested_name_specifier_list;
  1795. NameAST *unqualified_name;
  1796. public:
  1797. QualifiedNameAST()
  1798. : global_scope_token(0)
  1799. , nested_name_specifier_list(0)
  1800. , unqualified_name(0)
  1801. {}
  1802. virtual QualifiedNameAST *asQualifiedName() { return this; }
  1803. virtual unsigned firstToken() const;
  1804. virtual unsigned lastToken() const;
  1805. virtual QualifiedNameAST *clone(MemoryPool *pool) const;
  1806. protected:
  1807. virtual void accept0(ASTVisitor *visitor);
  1808. virtual bool match0(AST *, ASTMatcher *);
  1809. };
  1810. class CPLUSPLUS_EXPORT OperatorFunctionIdAST: public NameAST
  1811. {
  1812. public:
  1813. unsigned operator_token;
  1814. OperatorAST *op;
  1815. public:
  1816. OperatorFunctionIdAST()
  1817. : operator_token(0)
  1818. , op(0)
  1819. {}
  1820. virtual OperatorFunctionIdAST *asOperatorFunctionId() { return this; }
  1821. virtual unsigned firstToken() const;
  1822. virtual unsigned lastToken() const;
  1823. virtual OperatorFunctionIdAST *clone(MemoryPool *pool) const;
  1824. protected:
  1825. virtual void accept0(ASTVisitor *visitor);
  1826. virtual bool match0(AST *, ASTMatcher *);
  1827. };
  1828. class CPLUSPLUS_EXPORT ConversionFunctionIdAST: public NameAST
  1829. {
  1830. public:
  1831. unsigned operator_token;
  1832. SpecifierListAST *type_specifier_list;
  1833. PtrOperatorListAST *ptr_operator_list;
  1834. public:
  1835. ConversionFunctionIdAST()
  1836. : operator_token(0)
  1837. , type_specifier_list(0)
  1838. , ptr_operator_list(0)
  1839. {}
  1840. virtual ConversionFunctionIdAST *asConversionFunctionId() { return this; }
  1841. virtual unsigned firstToken() const;
  1842. virtual unsigned lastToken() const;
  1843. virtual ConversionFunctionIdAST *clone(MemoryPool *pool) const;
  1844. protected:
  1845. virtual void accept0(ASTVisitor *visitor);
  1846. virtual bool match0(AST *, ASTMatcher *);
  1847. };
  1848. class CPLUSPLUS_EXPORT AnonymousNameAST: public NameAST
  1849. {
  1850. public:
  1851. unsigned class_token;
  1852. public:
  1853. AnonymousNameAST()
  1854. : class_token(0)
  1855. {}
  1856. virtual AnonymousNameAST *asAnonymousName() { return this; }
  1857. virtual unsigned firstToken() const { return 0; }
  1858. virtual unsigned lastToken() const { return 0; }
  1859. virtual AnonymousNameAST *clone(MemoryPool *pool) const;
  1860. protected:
  1861. virtual void accept0(ASTVisitor *visitor);
  1862. virtual bool match0(AST *, ASTMatcher *);
  1863. };
  1864. class CPLUSPLUS_EXPORT SimpleNameAST: public NameAST
  1865. {
  1866. public:
  1867. unsigned identifier_token;
  1868. public:
  1869. SimpleNameAST()
  1870. : identifier_token(0)
  1871. {}
  1872. virtual SimpleNameAST *asSimpleName() { return this; }
  1873. virtual unsigned firstToken() const;
  1874. virtual unsigned lastToken() const;
  1875. virtual SimpleNameAST *clone(MemoryPool *pool) const;
  1876. protected:
  1877. virtual void accept0(ASTVisitor *visitor);
  1878. virtual bool match0(AST *, ASTMatcher *);
  1879. };
  1880. class CPLUSPLUS_EXPORT DestructorNameAST: public NameAST
  1881. {
  1882. public:
  1883. unsigned tilde_token;
  1884. NameAST *unqualified_name;
  1885. public:
  1886. DestructorNameAST()
  1887. : tilde_token(0)
  1888. , unqualified_name(0)
  1889. {}
  1890. virtual DestructorNameAST *asDestructorName() { return this; }
  1891. virtual unsigned firstToken() const;
  1892. virtual unsigned lastToken() const;
  1893. virtual DestructorNameAST *clone(MemoryPool *pool) const;
  1894. protected:
  1895. virtual void accept0(ASTVisitor *visitor);
  1896. virtual bool match0(AST *, ASTMatcher *);
  1897. };
  1898. class CPLUSPLUS_EXPORT TemplateIdAST: public NameAST
  1899. {
  1900. public:
  1901. unsigned template_token;
  1902. unsigned identifier_token;
  1903. unsigned less_token;
  1904. ExpressionListAST *template_argument_list;
  1905. unsigned greater_token;
  1906. public:
  1907. TemplateIdAST()
  1908. : template_token(0)
  1909. , identifier_token(0)
  1910. , less_token(0)
  1911. , template_argument_list(0)
  1912. , greater_token(0)
  1913. {}
  1914. virtual TemplateIdAST *asTemplateId() { return this; }
  1915. virtual unsigned firstToken() const;
  1916. virtual unsigned lastToken() const;
  1917. virtual TemplateIdAST *clone(MemoryPool *pool) const;
  1918. protected:
  1919. virtual void accept0(ASTVisitor *visitor);
  1920. virtual bool match0(AST *, ASTMatcher *);
  1921. };
  1922. class CPLUSPLUS_EXPORT NamespaceAST: public DeclarationAST
  1923. {
  1924. public:
  1925. unsigned inline_token;
  1926. unsigned namespace_token;
  1927. unsigned identifier_token;
  1928. SpecifierListAST *attribute_list;
  1929. DeclarationAST *linkage_body;
  1930. public: // annotations
  1931. Namespace *symbol;
  1932. public:
  1933. NamespaceAST()
  1934. : inline_token(0)
  1935. , namespace_token(0)
  1936. , identifier_token(0)
  1937. , attribute_list(0)
  1938. , linkage_body(0)
  1939. , symbol(0)
  1940. {}
  1941. virtual NamespaceAST *asNamespace() { return this; }
  1942. virtual unsigned firstToken() const;
  1943. virtual unsigned lastToken() const;
  1944. virtual NamespaceAST *clone(MemoryPool *pool) const;
  1945. protected:
  1946. virtual void accept0(ASTVisitor *visitor);
  1947. virtual bool match0(AST *, ASTMatcher *);
  1948. };
  1949. class CPLUSPLUS_EXPORT NamespaceAliasDefinitionAST: public DeclarationAST
  1950. {
  1951. public:
  1952. unsigned namespace_token;
  1953. unsigned namespace_name_token;
  1954. unsigned equal_token;
  1955. NameAST *name;
  1956. unsigned semicolon_token;
  1957. public:
  1958. NamespaceAliasDefinitionAST()
  1959. : namespace_token(0)
  1960. , namespace_name_token(0)
  1961. , equal_token(0)
  1962. , name(0)
  1963. , semicolon_token(0)
  1964. {}
  1965. virtual NamespaceAliasDefinitionAST *asNamespaceAliasDefinition() { return this; }
  1966. virtual unsigned firstToken() const;
  1967. virtual unsigned lastToken() const;
  1968. virtual NamespaceAliasDefinitionAST *clone(MemoryPool *pool) const;
  1969. protected:
  1970. virtual void accept0(ASTVisitor *visitor);
  1971. virtual bool match0(AST *, ASTMatcher *);
  1972. };
  1973. class CPLUSPLUS_EXPORT AliasDeclarationAST: public DeclarationAST
  1974. {
  1975. public:
  1976. unsigned using_token;
  1977. NameAST *name;
  1978. unsigned equal_token;
  1979. TypeIdAST *typeId;
  1980. unsigned semicolon_token;
  1981. public: // annotations
  1982. Declaration *symbol;
  1983. public:
  1984. AliasDeclarationAST()
  1985. : using_token(0)
  1986. , name(0)
  1987. , equal_token(0)
  1988. , typeId(0)
  1989. , semicolon_token(0)
  1990. , symbol(0)
  1991. {}
  1992. virtual AliasDeclarationAST *asAliasDeclaration() { return this; }
  1993. virtual unsigned firstToken() const;
  1994. virtual unsigned lastToken() const;
  1995. virtual AliasDeclarationAST *clone(MemoryPool *pool) const;
  1996. protected:
  1997. virtual void accept0(ASTVisitor *visitor);
  1998. virtual bool match0(AST *, ASTMatcher *);
  1999. };
  2000. class CPLUSPLUS_EXPORT ExpressionListParenAST: public ExpressionAST
  2001. {
  2002. public:
  2003. unsigned lparen_token;
  2004. ExpressionListAST *expression_list;
  2005. unsigned rparen_token;
  2006. public:
  2007. ExpressionListParenAST()
  2008. : lparen_token(0)
  2009. , expression_list(0)
  2010. , rparen_token(0)
  2011. {}
  2012. virtual ExpressionListParenAST *asExpressionListParen() { return this; }
  2013. virtual unsigned firstToken() const;
  2014. virtual unsigned lastToken() const;
  2015. virtual ExpressionListParenAST *clone(MemoryPool *pool) const;
  2016. protected:
  2017. virtual void accept0(ASTVisitor *visitor);
  2018. virtual bool match0(AST *, ASTMatcher *);
  2019. };
  2020. class CPLUSPLUS_EXPORT NewArrayDeclaratorAST: public AST
  2021. {
  2022. public:
  2023. unsigned lbracket_token;
  2024. ExpressionAST *expression;
  2025. unsigned rbracket_token;
  2026. public:
  2027. NewArrayDeclaratorAST()
  2028. : lbracket_token(0)
  2029. , expression(0)
  2030. , rbracket_token(0)
  2031. {}
  2032. virtual NewArrayDeclaratorAST *asNewArrayDeclarator() { return this; }
  2033. virtual unsigned firstToken() const;
  2034. virtual unsigned lastToken() const;
  2035. virtual NewArrayDeclaratorAST *clone(MemoryPool *pool) const;
  2036. protected:
  2037. virtual void accept0(ASTVisitor *visitor);
  2038. virtual bool match0(AST *, ASTMatcher *);
  2039. };
  2040. class CPLUSPLUS_EXPORT NewExpressionAST: public ExpressionAST
  2041. {
  2042. public:
  2043. unsigned scope_token;
  2044. unsigned new_token;
  2045. ExpressionListParenAST *new_placement;
  2046. unsigned lparen_token;
  2047. ExpressionAST *type_id;
  2048. unsigned rparen_token;
  2049. NewTypeIdAST *new_type_id;
  2050. ExpressionAST *new_initializer; // either ExpressionListParenAST or BracedInitializerAST
  2051. public:
  2052. NewExpressionAST()
  2053. : scope_token(0)
  2054. , new_token(0)
  2055. , new_placement(0)
  2056. , lparen_token(0)
  2057. , type_id(0)
  2058. , rparen_token(0)
  2059. , new_type_id(0)
  2060. , new_initializer(0)
  2061. {}
  2062. virtual NewExpressionAST *asNewExpression() { return this; }
  2063. virtual unsigned firstToken() const;
  2064. virtual unsigned lastToken() const;
  2065. virtual NewExpressionAST *clone(MemoryPool *pool) const;
  2066. protected:
  2067. virtual void accept0(ASTVisitor *visitor);
  2068. virtual bool match0(AST *, ASTMatcher *);
  2069. };
  2070. class CPLUSPLUS_EXPORT NewTypeIdAST: public AST
  2071. {
  2072. public:
  2073. SpecifierListAST *type_specifier_list;
  2074. PtrOperatorListAST *ptr_operator_list;
  2075. NewArrayDeclaratorListAST *new_array_declarator_list;
  2076. public:
  2077. NewTypeIdAST()
  2078. : type_specifier_list(0)
  2079. , ptr_operator_list(0)
  2080. , new_array_declarator_list(0)
  2081. {}
  2082. virtual NewTypeIdAST *asNewTypeId() { return this; }
  2083. virtual unsigned firstToken() const;
  2084. virtual unsigned lastToken() const;
  2085. virtual NewTypeIdAST *clone(MemoryPool *pool) const;
  2086. protected:
  2087. virtual void accept0(ASTVisitor *visitor);
  2088. virtual bool match0(AST *, ASTMatcher *);
  2089. };
  2090. class CPLUSPLUS_EXPORT OperatorAST: public AST
  2091. {
  2092. public:
  2093. unsigned op_token;
  2094. unsigned open_token;
  2095. unsigned close_token;
  2096. public:
  2097. OperatorAST()
  2098. : op_token(0)
  2099. , open_token(0)
  2100. , close_token(0)
  2101. {}
  2102. virtual OperatorAST *asOperator() { return this; }
  2103. virtual unsigned firstToken() const;
  2104. virtual unsigned lastToken() const;
  2105. virtual OperatorAST *clone(MemoryPool *pool) const;
  2106. protected:
  2107. virtual void accept0(ASTVisitor *visitor);
  2108. virtual bool match0(AST *, ASTMatcher *);
  2109. };
  2110. class CPLUSPLUS_EXPORT ParameterDeclarationAST: public DeclarationAST
  2111. {
  2112. public:
  2113. SpecifierListAST *type_specifier_list;
  2114. DeclaratorAST *declarator;
  2115. unsigned equal_token;
  2116. ExpressionAST *expression;
  2117. public: // annotations
  2118. Argument *symbol;
  2119. public:
  2120. ParameterDeclarationAST()
  2121. : type_specifier_list(0)
  2122. , declarator(0)
  2123. , equal_token(0)
  2124. , expression(0)
  2125. , symbol(0)
  2126. {}
  2127. virtual ParameterDeclarationAST *asParameterDeclaration() { return this; }
  2128. virtual unsigned firstToken() const;
  2129. virtual unsigned lastToken() const;
  2130. virtual ParameterDeclarationAST *clone(MemoryPool *pool) const;
  2131. protected:
  2132. virtual void accept0(ASTVisitor *visitor);
  2133. virtual bool match0(AST *, ASTMatcher *);
  2134. };
  2135. class CPLUSPLUS_EXPORT ParameterDeclarationClauseAST: public AST
  2136. {
  2137. public:
  2138. ParameterDeclarationListAST *parameter_declaration_list;
  2139. unsigned dot_dot_dot_token;
  2140. public:
  2141. ParameterDeclarationClauseAST()
  2142. : parameter_declaration_list(0)
  2143. , dot_dot_dot_token(0)
  2144. {}
  2145. virtual ParameterDeclarationClauseAST *asParameterDeclarationClause() { return this; }
  2146. virtual unsigned firstToken() const;
  2147. virtual unsigned lastToken() const;
  2148. virtual ParameterDeclarationClauseAST *clone(MemoryPool *pool) const;
  2149. protected:
  2150. virtual void accept0(ASTVisitor *visitor);
  2151. virtual bool match0(AST *, ASTMatcher *);
  2152. };
  2153. class CPLUSPLUS_EXPORT CallAST: public PostfixAST
  2154. {
  2155. public:
  2156. ExpressionAST *base_expression;
  2157. unsigned lparen_token;
  2158. ExpressionListAST *expression_list;
  2159. unsigned rparen_token;
  2160. public:
  2161. CallAST()
  2162. : base_expression(0)
  2163. , lparen_token(0)
  2164. , expression_list(0)
  2165. , rparen_token(0)
  2166. {}
  2167. virtual CallAST *asCall() { return this; }
  2168. virtual unsigned firstToken() const;
  2169. virtual unsigned lastToken() const;
  2170. virtual CallAST *clone(MemoryPool *pool) const;
  2171. protected:
  2172. virtual void accept0(ASTVisitor *visitor);
  2173. virtual bool match0(AST *, ASTMatcher *);
  2174. };
  2175. class CPLUSPLUS_EXPORT ArrayAccessAST: public PostfixAST
  2176. {
  2177. public:
  2178. ExpressionAST *base_expression;
  2179. unsigned lbracket_token;
  2180. ExpressionAST *expression;
  2181. unsigned rbracket_token;
  2182. public:
  2183. ArrayAccessAST()
  2184. : base_expression(0)
  2185. , lbracket_token(0)
  2186. , expression(0)
  2187. , rbracket_token(0)
  2188. {}
  2189. virtual ArrayAccessAST *asArrayAccess() { return this; }
  2190. virtual unsigned firstToken() const;
  2191. virtual unsigned lastToken() const;
  2192. virtual ArrayAccessAST *clone(MemoryPool *pool) const;
  2193. protected:
  2194. virtual void accept0(ASTVisitor *visitor);
  2195. virtual bool match0(AST *, ASTMatcher *);
  2196. };
  2197. class CPLUSPLUS_EXPORT PostIncrDecrAST: public PostfixAST
  2198. {
  2199. public:
  2200. ExpressionAST *base_expression;
  2201. unsigned incr_decr_token;
  2202. public:
  2203. PostIncrDecrAST()
  2204. : base_expression(0)
  2205. , incr_decr_token(0)
  2206. {}
  2207. virtual PostIncrDecrAST *asPostIncrDecr() { return this; }
  2208. virtual unsigned firstToken() const;
  2209. virtual unsigned lastToken() const;
  2210. virtual PostIncrDecrAST *clone(MemoryPool *pool) const;
  2211. protected:
  2212. virtual void accept0(ASTVisitor *visitor);
  2213. virtual bool match0(AST *, ASTMatcher *);
  2214. };
  2215. class CPLUSPLUS_EXPORT MemberAccessAST: public PostfixAST
  2216. {
  2217. public:
  2218. ExpressionAST *base_expression;
  2219. unsigned access_token;
  2220. unsigned template_token;
  2221. NameAST *member_name;
  2222. public:
  2223. MemberAccessAST()
  2224. : base_expression(0)
  2225. , access_token(0)
  2226. , template_token(0)
  2227. , member_name(0)
  2228. {}
  2229. virtual MemberAccessAST *asMemberAccess() { return this; }
  2230. virtual unsigned firstToken() const;
  2231. virtual unsigned lastToken() const;
  2232. virtual MemberAccessAST *clone(MemoryPool *pool) const;
  2233. protected:
  2234. virtual void accept0(ASTVisitor *visitor);
  2235. virtual bool match0(AST *, ASTMatcher *);
  2236. };
  2237. class CPLUSPLUS_EXPORT TypeidExpressionAST: public ExpressionAST
  2238. {
  2239. public:
  2240. unsigned typeid_token;
  2241. unsigned lparen_token;
  2242. ExpressionAST *expression;
  2243. unsigned rparen_token;
  2244. public:
  2245. TypeidExpressionAST()
  2246. : typeid_token(0)
  2247. , lparen_token(0)
  2248. , expression(0)
  2249. , rparen_token(0)
  2250. {}
  2251. virtual TypeidExpressionAST *asTypeidExpression() { return this; }
  2252. virtual unsigned firstToken() const;
  2253. virtual unsigned lastToken() const;
  2254. virtual TypeidExpressionAST *clone(MemoryPool *pool) const;
  2255. protected:
  2256. virtual void accept0(ASTVisitor *visitor);
  2257. virtual bool match0(AST *, ASTMatcher *);
  2258. };
  2259. class CPLUSPLUS_EXPORT TypenameCallExpressionAST: public ExpressionAST
  2260. {
  2261. public:
  2262. unsigned typename_token;
  2263. NameAST *name;
  2264. ExpressionAST *expression; // either ExpressionListParenAST or BracedInitializerAST
  2265. public:
  2266. TypenameCallExpressionAST()
  2267. : typename_token(0)
  2268. , name(0)
  2269. , expression(0)
  2270. {}
  2271. virtual TypenameCallExpressionAST *asTypenameCallExpression() { return this; }
  2272. virtual unsigned firstToken() const;
  2273. virtual unsigned lastToken() const;
  2274. virtual TypenameCallExpressionAST *clone(MemoryPool *pool) const;
  2275. protected:
  2276. virtual void accept0(ASTVisitor *visitor);
  2277. virtual bool match0(AST *, ASTMatcher *);
  2278. };
  2279. class CPLUSPLUS_EXPORT TypeConstructorCallAST: public ExpressionAST
  2280. {
  2281. public:
  2282. SpecifierListAST *type_specifier_list;
  2283. ExpressionAST *expression; // either ExpressionListParenAST or BracedInitializerAST
  2284. public:
  2285. TypeConstructorCallAST()
  2286. : type_specifier_list(0)
  2287. , expression(0)
  2288. {}
  2289. virtual TypeConstructorCallAST *asTypeConstructorCall() { return this; }
  2290. virtual unsigned firstToken() const;
  2291. virtual unsigned lastToken() const;
  2292. virtual TypeConstructorCallAST *clone(MemoryPool *pool) const;
  2293. protected:
  2294. virtual void accept0(ASTVisitor *visitor);
  2295. virtual bool match0(AST *, ASTMatcher *);
  2296. };
  2297. class CPLUSPLUS_EXPORT PointerToMemberAST: public PtrOperatorAST
  2298. {
  2299. public:
  2300. unsigned global_scope_token;
  2301. NestedNameSpecifierListAST *nested_name_specifier_list;
  2302. unsigned star_token;
  2303. SpecifierListAST *cv_qualifier_list;
  2304. unsigned ref_qualifier_token;
  2305. public:
  2306. PointerToMemberAST()
  2307. : global_scope_token(0)
  2308. , nested_name_specifier_list(0)
  2309. , star_token(0)
  2310. , cv_qualifier_list(0)
  2311. , ref_qualifier_token(0)
  2312. {}
  2313. virtual PointerToMemberAST *asPointerToMember() { return this; }
  2314. virtual unsigned firstToken() const;
  2315. virtual unsigned lastToken() const;
  2316. virtual PointerToMemberAST *clone(MemoryPool *pool) const;
  2317. protected:
  2318. virtual void accept0(ASTVisitor *visitor);
  2319. virtual bool match0(AST *, ASTMatcher *);
  2320. };
  2321. class CPLUSPLUS_EXPORT PointerAST: public PtrOperatorAST
  2322. {
  2323. public:
  2324. unsigned star_token;
  2325. SpecifierListAST *cv_qualifier_list;
  2326. public:
  2327. PointerAST()
  2328. : star_token(0)
  2329. , cv_qualifier_list(0)
  2330. {}
  2331. virtual PointerAST *asPointer() { return this; }
  2332. virtual unsigned firstToken() const;
  2333. virtual unsigned lastToken() const;
  2334. virtual PointerAST *clone(MemoryPool *pool) const;
  2335. protected:
  2336. virtual void accept0(ASTVisitor *visitor);
  2337. virtual bool match0(AST *, ASTMatcher *);
  2338. };
  2339. class CPLUSPLUS_EXPORT ReferenceAST: public PtrOperatorAST
  2340. {
  2341. public:
  2342. unsigned reference_token;
  2343. public:
  2344. ReferenceAST()
  2345. : reference_token(0)
  2346. {}
  2347. virtual ReferenceAST *asReference() { return this; }
  2348. virtual unsigned firstToken() const;
  2349. virtual unsigned lastToken() const;
  2350. virtual ReferenceAST *clone(MemoryPool *pool) const;
  2351. protected:
  2352. virtual void accept0(ASTVisitor *visitor);
  2353. virtual bool match0(AST *, ASTMatcher *);
  2354. };
  2355. class CPLUSPLUS_EXPORT BreakStatementAST: public StatementAST
  2356. {
  2357. public:
  2358. unsigned break_token;
  2359. unsigned semicolon_token;
  2360. public:
  2361. BreakStatementAST()
  2362. : break_token(0)
  2363. , semicolon_token(0)
  2364. {}
  2365. virtual BreakStatementAST *asBreakStatement() { return this; }
  2366. virtual unsigned firstToken() const;
  2367. virtual unsigned lastToken() const;
  2368. virtual BreakStatementAST *clone(MemoryPool *pool) const;
  2369. protected:
  2370. virtual void accept0(ASTVisitor *visitor);
  2371. virtual bool match0(AST *, ASTMatcher *);
  2372. };
  2373. class CPLUSPLUS_EXPORT ContinueStatementAST: public StatementAST
  2374. {
  2375. public:
  2376. unsigned continue_token;
  2377. unsigned semicolon_token;
  2378. public:
  2379. ContinueStatementAST()
  2380. : continue_token(0)
  2381. , semicolon_token(0)
  2382. {}
  2383. virtual ContinueStatementAST *asContinueStatement() { return this; }
  2384. virtual unsigned firstToken() const;
  2385. virtual unsigned lastToken() const;
  2386. virtual ContinueStatementAST *clone(MemoryPool *pool) const;
  2387. protected:
  2388. virtual void accept0(ASTVisitor *visitor);
  2389. virtual bool match0(AST *, ASTMatcher *);
  2390. };
  2391. class CPLUSPLUS_EXPORT GotoStatementAST: public StatementAST
  2392. {
  2393. public:
  2394. unsigned goto_token;
  2395. unsigned identifier_token;
  2396. unsigned semicolon_token;
  2397. public:
  2398. GotoStatementAST()
  2399. : goto_token(0)
  2400. , identifier_token(0)
  2401. , semicolon_token(0)
  2402. {}
  2403. virtual GotoStatementAST *asGotoStatement() { return this; }
  2404. virtual unsigned firstToken() const;
  2405. virtual unsigned lastToken() const;
  2406. virtual GotoStatementAST *clone(MemoryPool *pool) const;
  2407. protected:
  2408. virtual void accept0(ASTVisitor *visitor);
  2409. virtual bool match0(AST *, ASTMatcher *);
  2410. };
  2411. class CPLUSPLUS_EXPORT ReturnStatementAST: public StatementAST
  2412. {
  2413. public:
  2414. unsigned return_token;
  2415. ExpressionAST *expression;
  2416. unsigned semicolon_token;
  2417. public:
  2418. ReturnStatementAST()
  2419. : return_token(0)
  2420. , expression(0)
  2421. , semicolon_token(0)
  2422. {}
  2423. virtual ReturnStatementAST *asReturnStatement() { return this; }
  2424. virtual unsigned firstToken() const;
  2425. virtual unsigned lastToken() const;
  2426. virtual ReturnStatementAST *clone(MemoryPool *pool) const;
  2427. protected:
  2428. virtual void accept0(ASTVisitor *visitor);
  2429. virtual bool match0(AST *, ASTMatcher *);
  2430. };
  2431. class CPLUSPLUS_EXPORT SizeofExpressionAST: public ExpressionAST
  2432. {
  2433. public:
  2434. unsigned sizeof_token;
  2435. unsigned dot_dot_dot_token;
  2436. unsigned lparen_token;
  2437. ExpressionAST *expression;
  2438. unsigned rparen_token;
  2439. public:
  2440. SizeofExpressionAST()
  2441. : sizeof_token(0)
  2442. , dot_dot_dot_token(0)
  2443. , lparen_token(0)
  2444. , expression(0)
  2445. , rparen_token(0)
  2446. {}
  2447. virtual SizeofExpressionAST *asSizeofExpression() { return this; }
  2448. virtual unsigned firstToken() const;
  2449. virtual unsigned lastToken() const;
  2450. virtual SizeofExpressionAST *clone(MemoryPool *pool) const;
  2451. protected:
  2452. virtual void accept0(ASTVisitor *visitor);
  2453. virtual bool match0(AST *, ASTMatcher *);
  2454. };
  2455. class CPLUSPLUS_EXPORT AlignofExpressionAST: public ExpressionAST
  2456. {
  2457. public:
  2458. unsigned alignof_token;
  2459. unsigned lparen_token;
  2460. TypeIdAST *typeId;
  2461. unsigned rparen_token;
  2462. public:
  2463. AlignofExpressionAST()
  2464. : alignof_token(0)
  2465. , lparen_token(0)
  2466. , typeId(0)
  2467. , rparen_token(0)
  2468. {}
  2469. virtual AlignofExpressionAST *asAlignofExpression() { return this; }
  2470. virtual unsigned firstToken() const;
  2471. virtual unsigned lastToken() const;
  2472. virtual AlignofExpressionAST *clone(MemoryPool *pool) const;
  2473. protected:
  2474. virtual void accept0(ASTVisitor *visitor);
  2475. virtual bool match0(AST *, ASTMatcher *);
  2476. };
  2477. class CPLUSPLUS_EXPORT PointerLiteralAST: public ExpressionAST
  2478. {
  2479. public:
  2480. unsigned literal_token;
  2481. public:
  2482. PointerLiteralAST()
  2483. : literal_token(0)
  2484. {}
  2485. virtual PointerLiteralAST *asPointerLiteral() { return this; }
  2486. virtual unsigned firstToken() const;
  2487. virtual unsigned lastToken() const;
  2488. virtual PointerLiteralAST *clone(MemoryPool *pool) const;
  2489. protected:
  2490. virtual void accept0(ASTVisitor *visitor);
  2491. virtual bool match0(AST *, ASTMatcher *);
  2492. };
  2493. class CPLUSPLUS_EXPORT NumericLiteralAST: public ExpressionAST
  2494. {
  2495. public:
  2496. unsigned literal_token;
  2497. public:
  2498. NumericLiteralAST()
  2499. : literal_token(0)
  2500. {}
  2501. virtual NumericLiteralAST *asNumericLiteral() { return this; }
  2502. virtual unsigned firstToken() const;
  2503. virtual unsigned lastToken() const;
  2504. virtual NumericLiteralAST *clone(MemoryPool *pool) const;
  2505. protected:
  2506. virtual void accept0(ASTVisitor *visitor);
  2507. virtual bool match0(AST *, ASTMatcher *);
  2508. };
  2509. class CPLUSPLUS_EXPORT BoolLiteralAST: public ExpressionAST
  2510. {
  2511. public:
  2512. unsigned literal_token;
  2513. public:
  2514. BoolLiteralAST()
  2515. : literal_token(0)
  2516. {}
  2517. virtual BoolLiteralAST *asBoolLiteral() { return this; }
  2518. virtual unsigned firstToken() const;
  2519. virtual unsigned lastToken() const;
  2520. virtual BoolLiteralAST *clone(MemoryPool *pool) const;
  2521. protected:
  2522. virtual void accept0(ASTVisitor *visitor);
  2523. virtual bool match0(AST *, ASTMatcher *);
  2524. };
  2525. class CPLUSPLUS_EXPORT ThisExpressionAST: public ExpressionAST
  2526. {
  2527. public:
  2528. unsigned this_token;
  2529. public:
  2530. ThisExpressionAST()
  2531. : this_token(0)
  2532. {}
  2533. virtual ThisExpressionAST *asThisExpression() { return this; }
  2534. virtual unsigned firstToken() const;
  2535. virtual unsigned lastToken() const;
  2536. virtual ThisExpressionAST *clone(MemoryPool *pool) const;
  2537. protected:
  2538. virtual void accept0(ASTVisitor *visitor);
  2539. virtual bool match0(AST *, ASTMatcher *);
  2540. };
  2541. class CPLUSPLUS_EXPORT NestedExpressionAST: public ExpressionAST
  2542. {
  2543. public:
  2544. unsigned lparen_token;
  2545. ExpressionAST *expression;
  2546. unsigned rparen_token;
  2547. public:
  2548. NestedExpressionAST()
  2549. : lparen_token(0)
  2550. , expression(0)
  2551. , rparen_token(0)
  2552. {}
  2553. virtual NestedExpressionAST *asNestedExpression() { return this; }
  2554. virtual unsigned firstToken() const;
  2555. virtual unsigned lastToken() const;
  2556. virtual NestedExpressionAST *clone(MemoryPool *pool) const;
  2557. protected:
  2558. virtual void accept0(ASTVisitor *visitor);
  2559. virtual bool match0(AST *, ASTMatcher *);
  2560. };
  2561. class CPLUSPLUS_EXPORT StaticAssertDeclarationAST: public DeclarationAST
  2562. {
  2563. public:
  2564. unsigned static_assert_token;
  2565. unsigned lparen_token;
  2566. ExpressionAST *expression;
  2567. unsigned comma_token;
  2568. ExpressionAST *string_literal;
  2569. unsigned rparen_token;
  2570. unsigned semicolon_token;
  2571. public:
  2572. StaticAssertDeclarationAST()
  2573. : static_assert_token(0)
  2574. , lparen_token(0)
  2575. , expression(0)
  2576. , comma_token(0)
  2577. , string_literal(0)
  2578. , rparen_token(0)
  2579. , semicolon_token(0)
  2580. {}
  2581. virtual StaticAssertDeclarationAST *asStaticAssertDeclaration() { return this; }
  2582. virtual unsigned firstToken() const;
  2583. virtual unsigned lastToken() const;
  2584. virtual StaticAssertDeclarationAST *clone(MemoryPool *pool) const;
  2585. protected:
  2586. virtual void accept0(ASTVisitor *visitor);
  2587. virtual bool match0(AST *, ASTMatcher *);
  2588. };
  2589. class CPLUSPLUS_EXPORT StringLiteralAST: public ExpressionAST
  2590. {
  2591. public:
  2592. unsigned literal_token;
  2593. StringLiteralAST *next;
  2594. public:
  2595. StringLiteralAST()
  2596. : literal_token(0)
  2597. , next(0)
  2598. {}
  2599. virtual StringLiteralAST *asStringLiteral() { return this; }
  2600. virtual unsigned firstToken() const;
  2601. virtual unsigned lastToken() const;
  2602. virtual StringLiteralAST *clone(MemoryPool *pool) const;
  2603. protected:
  2604. virtual void accept0(ASTVisitor *visitor);
  2605. virtual bool match0(AST *, ASTMatcher *);
  2606. };
  2607. class CPLUSPLUS_EXPORT SwitchStatementAST: public StatementAST
  2608. {
  2609. public:
  2610. unsigned switch_token;
  2611. unsigned lparen_token;
  2612. ExpressionAST *condition;
  2613. unsigned rparen_token;
  2614. StatementAST *statement;
  2615. public: // annotations
  2616. Block *symbol;
  2617. public:
  2618. SwitchStatementAST()
  2619. : switch_token(0)
  2620. , lparen_token(0)
  2621. , condition(0)
  2622. , rparen_token(0)
  2623. , statement(0)
  2624. , symbol(0)
  2625. {}
  2626. virtual SwitchStatementAST *asSwitchStatement() { return this; }
  2627. virtual unsigned firstToken() const;
  2628. virtual unsigned lastToken() const;
  2629. virtual SwitchStatementAST *clone(MemoryPool *pool) const;
  2630. protected:
  2631. virtual void accept0(ASTVisitor *visitor);
  2632. virtual bool match0(AST *, ASTMatcher *);
  2633. };
  2634. class CPLUSPLUS_EXPORT TemplateDeclarationAST: public DeclarationAST
  2635. {
  2636. public:
  2637. unsigned export_token;
  2638. unsigned template_token;
  2639. unsigned less_token;
  2640. DeclarationListAST *template_parameter_list;
  2641. unsigned greater_token;
  2642. DeclarationAST *declaration;
  2643. public: // annotations
  2644. Template *symbol;
  2645. public:
  2646. TemplateDeclarationAST()
  2647. : export_token(0)
  2648. , template_token(0)
  2649. , less_token(0)
  2650. , template_parameter_list(0)
  2651. , greater_token(0)
  2652. , declaration(0)
  2653. , symbol(0)
  2654. {}
  2655. virtual TemplateDeclarationAST *asTemplateDeclaration() { return this; }
  2656. virtual unsigned firstToken() const;
  2657. virtual unsigned lastToken() const;
  2658. virtual TemplateDeclarationAST *clone(MemoryPool *pool) const;
  2659. protected:
  2660. virtual void accept0(ASTVisitor *visitor);
  2661. virtual bool match0(AST *, ASTMatcher *);
  2662. };
  2663. class CPLUSPLUS_EXPORT ThrowExpressionAST: public ExpressionAST
  2664. {
  2665. public:
  2666. unsigned throw_token;
  2667. ExpressionAST *expression;
  2668. public:
  2669. ThrowExpressionAST()
  2670. : throw_token(0)
  2671. , expression(0)
  2672. {}
  2673. virtual ThrowExpressionAST *asThrowExpression() { return this; }
  2674. virtual unsigned firstToken() const;
  2675. virtual unsigned lastToken() const;
  2676. virtual ThrowExpressionAST *clone(MemoryPool *pool) const;
  2677. protected:
  2678. virtual void accept0(ASTVisitor *visitor);
  2679. virtual bool match0(AST *, ASTMatcher *);
  2680. };
  2681. class CPLUSPLUS_EXPORT TranslationUnitAST: public AST
  2682. {
  2683. public:
  2684. DeclarationListAST *declaration_list;
  2685. public:
  2686. TranslationUnitAST()
  2687. : declaration_list(0)
  2688. {}
  2689. virtual TranslationUnitAST *asTranslationUnit() { return this; }
  2690. virtual unsigned firstToken() const;
  2691. virtual unsigned lastToken() const;
  2692. virtual TranslationUnitAST *clone(MemoryPool *pool) const;
  2693. protected:
  2694. virtual void accept0(ASTVisitor *visitor);
  2695. virtual bool match0(AST *, ASTMatcher *);
  2696. };
  2697. class CPLUSPLUS_EXPORT TryBlockStatementAST: public StatementAST
  2698. {
  2699. public:
  2700. unsigned try_token;
  2701. StatementAST *statement;
  2702. CatchClauseListAST *catch_clause_list;
  2703. public:
  2704. TryBlockStatementAST()
  2705. : try_token(0)
  2706. , statement(0)
  2707. , catch_clause_list(0)
  2708. {}
  2709. virtual TryBlockStatementAST *asTryBlockStatement() { return this; }
  2710. virtual unsigned firstToken() const;
  2711. virtual unsigned lastToken() const;
  2712. virtual TryBlockStatementAST *clone(MemoryPool *pool) const;
  2713. protected:
  2714. virtual void accept0(ASTVisitor *visitor);
  2715. virtual bool match0(AST *, ASTMatcher *);
  2716. };
  2717. class CPLUSPLUS_EXPORT CatchClauseAST: public StatementAST
  2718. {
  2719. public:
  2720. unsigned catch_token;
  2721. unsigned lparen_token;
  2722. ExceptionDeclarationAST *exception_declaration;
  2723. unsigned rparen_token;
  2724. StatementAST *statement;
  2725. public: // annotations
  2726. Block *symbol;
  2727. public:
  2728. CatchClauseAST()
  2729. : catch_token(0)
  2730. , lparen_token(0)
  2731. , exception_declaration(0)
  2732. , rparen_token(0)
  2733. , statement(0)
  2734. , symbol(0)
  2735. {}
  2736. virtual CatchClauseAST *asCatchClause() { return this; }
  2737. virtual unsigned firstToken() const;
  2738. virtual unsigned lastToken() const;
  2739. virtual CatchClauseAST *clone(MemoryPool *pool) const;
  2740. protected:
  2741. virtual void accept0(ASTVisitor *visitor);
  2742. virtual bool match0(AST *, ASTMatcher *);
  2743. };
  2744. class CPLUSPLUS_EXPORT TypeIdAST: public ExpressionAST
  2745. {
  2746. public:
  2747. SpecifierListAST *type_specifier_list;
  2748. DeclaratorAST *declarator;
  2749. public:
  2750. TypeIdAST()
  2751. : type_specifier_list(0)
  2752. , declarator(0)
  2753. {}
  2754. virtual TypeIdAST *asTypeId() { return this; }
  2755. virtual unsigned firstToken() const;
  2756. virtual unsigned lastToken() const;
  2757. virtual TypeIdAST *clone(MemoryPool *pool) const;
  2758. protected:
  2759. virtual void accept0(ASTVisitor *visitor);
  2760. virtual bool match0(AST *, ASTMatcher *);
  2761. };
  2762. class CPLUSPLUS_EXPORT TypenameTypeParameterAST: public DeclarationAST
  2763. {
  2764. public:
  2765. unsigned classkey_token;
  2766. unsigned dot_dot_dot_token;
  2767. NameAST *name;
  2768. unsigned equal_token;
  2769. ExpressionAST *type_id;
  2770. public: // annotations
  2771. TypenameArgument *symbol;
  2772. public:
  2773. TypenameTypeParameterAST()
  2774. : classkey_token(0)
  2775. , dot_dot_dot_token(0)
  2776. , name(0)
  2777. , equal_token(0)
  2778. , type_id(0)
  2779. , symbol(0)
  2780. {}
  2781. virtual TypenameTypeParameterAST *asTypenameTypeParameter() { return this; }
  2782. virtual unsigned firstToken() const;
  2783. virtual unsigned lastToken() const;
  2784. virtual TypenameTypeParameterAST *clone(MemoryPool *pool) const;
  2785. protected:
  2786. virtual void accept0(ASTVisitor *visitor);
  2787. virtual bool match0(AST *, ASTMatcher *);
  2788. };
  2789. class CPLUSPLUS_EXPORT TemplateTypeParameterAST: public DeclarationAST
  2790. {
  2791. public:
  2792. unsigned template_token;
  2793. unsigned less_token;
  2794. DeclarationListAST *template_parameter_list;
  2795. unsigned greater_token;
  2796. unsigned class_token;
  2797. unsigned dot_dot_dot_token;
  2798. NameAST *name;
  2799. unsigned equal_token;
  2800. ExpressionAST *type_id;
  2801. public:
  2802. TypenameArgument *symbol;
  2803. public:
  2804. TemplateTypeParameterAST()
  2805. : template_token(0)
  2806. , less_token(0)
  2807. , template_parameter_list(0)
  2808. , greater_token(0)
  2809. , class_token(0)
  2810. , dot_dot_dot_token(0)
  2811. , name(0)
  2812. , equal_token(0)
  2813. , type_id(0)
  2814. , symbol(0)
  2815. {}
  2816. virtual TemplateTypeParameterAST *asTemplateTypeParameter() { return this; }
  2817. virtual unsigned firstToken() const;
  2818. virtual unsigned lastToken() const;
  2819. virtual TemplateTypeParameterAST *clone(MemoryPool *pool) const;
  2820. protected:
  2821. virtual void accept0(ASTVisitor *visitor);
  2822. virtual bool match0(AST *, ASTMatcher *);
  2823. };
  2824. class CPLUSPLUS_EXPORT UnaryExpressionAST: public ExpressionAST
  2825. {
  2826. public:
  2827. unsigned unary_op_token;
  2828. ExpressionAST *expression;
  2829. public:
  2830. UnaryExpressionAST()
  2831. : unary_op_token(0)
  2832. , expression(0)
  2833. {}
  2834. virtual UnaryExpressionAST *asUnaryExpression() { return this; }
  2835. virtual unsigned firstToken() const;
  2836. virtual unsigned lastToken() const;
  2837. virtual UnaryExpressionAST *clone(MemoryPool *pool) const;
  2838. protected:
  2839. virtual void accept0(ASTVisitor *visitor);
  2840. virtual bool match0(AST *, ASTMatcher *);
  2841. };
  2842. class CPLUSPLUS_EXPORT UsingAST: public DeclarationAST
  2843. {
  2844. public:
  2845. unsigned using_token;
  2846. unsigned typename_token;
  2847. NameAST *name;
  2848. unsigned semicolon_token;
  2849. public: // annotations
  2850. UsingDeclaration *symbol;
  2851. public:
  2852. UsingAST()
  2853. : using_token(0)
  2854. , typename_token(0)
  2855. , name(0)
  2856. , semicolon_token(0)
  2857. , symbol(0)
  2858. {}
  2859. virtual UsingAST *asUsing() { return this; }
  2860. virtual unsigned firstToken() const;
  2861. virtual unsigned lastToken() const;
  2862. virtual UsingAST *clone(MemoryPool *pool) const;
  2863. protected:
  2864. virtual void accept0(ASTVisitor *visitor);
  2865. virtual bool match0(AST *, ASTMatcher *);
  2866. };
  2867. class CPLUSPLUS_EXPORT UsingDirectiveAST: public DeclarationAST
  2868. {
  2869. public:
  2870. unsigned using_token;
  2871. unsigned namespace_token;
  2872. NameAST *name;
  2873. unsigned semicolon_token;
  2874. public:
  2875. UsingNamespaceDirective *symbol;
  2876. public:
  2877. UsingDirectiveAST()
  2878. : using_token(0)
  2879. , namespace_token(0)
  2880. , name(0)
  2881. , semicolon_token(0)
  2882. , symbol(0)
  2883. {}
  2884. virtual UsingDirectiveAST *asUsingDirective() { return this; }
  2885. virtual unsigned firstToken() const;
  2886. virtual unsigned lastToken() const;
  2887. virtual UsingDirectiveAST *clone(MemoryPool *pool) const;
  2888. protected:
  2889. virtual void accept0(ASTVisitor *visitor);
  2890. virtual bool match0(AST *, ASTMatcher *);
  2891. };
  2892. class CPLUSPLUS_EXPORT WhileStatementAST: public StatementAST
  2893. {
  2894. public:
  2895. unsigned while_token;
  2896. unsigned lparen_token;
  2897. ExpressionAST *condition;
  2898. unsigned rparen_token;
  2899. StatementAST *statement;
  2900. public: // annotations
  2901. Block *symbol;
  2902. public:
  2903. WhileStatementAST()
  2904. : while_token(0)
  2905. , lparen_token(0)
  2906. , condition(0)
  2907. , rparen_token(0)
  2908. , statement(0)
  2909. , symbol(0)
  2910. {}
  2911. virtual WhileStatementAST *asWhileStatement() { return this; }
  2912. virtual unsigned firstToken() const;
  2913. virtual unsigned lastToken() const;
  2914. virtual WhileStatementAST *clone(MemoryPool *pool) const;
  2915. protected:
  2916. virtual void accept0(ASTVisitor *visitor);
  2917. virtual bool match0(AST *, ASTMatcher *);
  2918. };
  2919. class CPLUSPLUS_EXPORT ObjCClassForwardDeclarationAST: public DeclarationAST
  2920. {
  2921. public:
  2922. SpecifierListAST *attribute_list;
  2923. unsigned class_token;
  2924. NameListAST *identifier_list;
  2925. unsigned semicolon_token;
  2926. public: // annotations
  2927. List<ObjCForwardClassDeclaration *> *symbols;
  2928. public:
  2929. ObjCClassForwardDeclarationAST()
  2930. : attribute_list(0)
  2931. , class_token(0)
  2932. , identifier_list(0)
  2933. , semicolon_token(0)
  2934. , symbols(0)
  2935. {}
  2936. virtual ObjCClassForwardDeclarationAST *asObjCClassForwardDeclaration() { return this; }
  2937. virtual unsigned firstToken() const;
  2938. virtual unsigned lastToken() const;
  2939. virtual ObjCClassForwardDeclarationAST *clone(MemoryPool *pool) const;
  2940. protected:
  2941. virtual void accept0(ASTVisitor *visitor);
  2942. virtual bool match0(AST *, ASTMatcher *);
  2943. };
  2944. class CPLUSPLUS_EXPORT ObjCClassDeclarationAST: public DeclarationAST
  2945. {
  2946. public:
  2947. SpecifierListAST *attribute_list;
  2948. unsigned interface_token;
  2949. unsigned implementation_token;
  2950. NameAST *class_name;
  2951. unsigned lparen_token;
  2952. NameAST *category_name;
  2953. unsigned rparen_token;
  2954. unsigned colon_token;
  2955. NameAST *superclass;
  2956. ObjCProtocolRefsAST *protocol_refs;
  2957. ObjCInstanceVariablesDeclarationAST *inst_vars_decl;
  2958. DeclarationListAST *member_declaration_list;
  2959. unsigned end_token;
  2960. public: // annotations
  2961. ObjCClass *symbol;
  2962. public:
  2963. ObjCClassDeclarationAST()
  2964. : attribute_list(0)
  2965. , interface_token(0)
  2966. , implementation_token(0)
  2967. , class_name(0)
  2968. , lparen_token(0)
  2969. , category_name(0)
  2970. , rparen_token(0)
  2971. , colon_token(0)
  2972. , superclass(0)
  2973. , protocol_refs(0)
  2974. , inst_vars_decl(0)
  2975. , member_declaration_list(0)
  2976. , end_token(0)
  2977. , symbol(0)
  2978. {}
  2979. virtual ObjCClassDeclarationAST *asObjCClassDeclaration() { return this; }
  2980. virtual unsigned firstToken() const;
  2981. virtual unsigned lastToken() const;
  2982. virtual ObjCClassDeclarationAST *clone(MemoryPool *pool) const;
  2983. protected:
  2984. virtual void accept0(ASTVisitor *visitor);
  2985. virtual bool match0(AST *, ASTMatcher *);
  2986. };
  2987. class CPLUSPLUS_EXPORT ObjCProtocolForwardDeclarationAST: public DeclarationAST
  2988. {
  2989. public:
  2990. SpecifierListAST *attribute_list;
  2991. unsigned protocol_token;
  2992. NameListAST *identifier_list;
  2993. unsigned semicolon_token;
  2994. public: // annotations
  2995. List<ObjCForwardProtocolDeclaration *> *symbols;
  2996. public:
  2997. ObjCProtocolForwardDeclarationAST()
  2998. : attribute_list(0)
  2999. , protocol_token(0)
  3000. , identifier_list(0)
  3001. , semicolon_token(0)
  3002. , symbols(0)
  3003. {}
  3004. virtual ObjCProtocolForwardDeclarationAST *asObjCProtocolForwardDeclaration() { return this; }
  3005. virtual unsigned firstToken() const;
  3006. virtual unsigned lastToken() const;
  3007. virtual ObjCProtocolForwardDeclarationAST *clone(MemoryPool *pool) const;
  3008. protected:
  3009. virtual void accept0(ASTVisitor *visitor);
  3010. virtual bool match0(AST *, ASTMatcher *);
  3011. };
  3012. class CPLUSPLUS_EXPORT ObjCProtocolDeclarationAST: public DeclarationAST
  3013. {
  3014. public:
  3015. SpecifierListAST *attribute_list;
  3016. unsigned protocol_token;
  3017. NameAST *name;
  3018. ObjCProtocolRefsAST *protocol_refs;
  3019. DeclarationListAST *member_declaration_list;
  3020. unsigned end_token;
  3021. public: // annotations
  3022. ObjCProtocol *symbol;
  3023. public:
  3024. ObjCProtocolDeclarationAST()
  3025. : attribute_list(0)
  3026. , protocol_token(0)
  3027. , name(0)
  3028. , protocol_refs(0)
  3029. , member_declaration_list(0)
  3030. , end_token(0)
  3031. , symbol(0)
  3032. {}
  3033. virtual ObjCProtocolDeclarationAST *asObjCProtocolDeclaration() { return this; }
  3034. virtual unsigned firstToken() const;
  3035. virtual unsigned lastToken() const;
  3036. virtual ObjCProtocolDeclarationAST *clone(MemoryPool *pool) const;
  3037. protected:
  3038. virtual void accept0(ASTVisitor *visitor);
  3039. virtual bool match0(AST *, ASTMatcher *);
  3040. };
  3041. class CPLUSPLUS_EXPORT ObjCProtocolRefsAST: public AST
  3042. {
  3043. public:
  3044. unsigned less_token;
  3045. NameListAST *identifier_list;
  3046. unsigned greater_token;
  3047. public:
  3048. ObjCProtocolRefsAST()
  3049. : less_token(0)
  3050. , identifier_list(0)
  3051. , greater_token(0)
  3052. {}
  3053. virtual ObjCProtocolRefsAST *asObjCProtocolRefs() { return this; }
  3054. virtual unsigned firstToken() const;
  3055. virtual unsigned lastToken() const;
  3056. virtual ObjCProtocolRefsAST *clone(MemoryPool *pool) const;
  3057. protected:
  3058. virtual void accept0(ASTVisitor *visitor);
  3059. virtual bool match0(AST *, ASTMatcher *);
  3060. };
  3061. class CPLUSPLUS_EXPORT ObjCMessageArgumentAST: public AST
  3062. {
  3063. public:
  3064. ExpressionAST *parameter_value_expression;
  3065. public:
  3066. ObjCMessageArgumentAST()
  3067. : parameter_value_expression(0)
  3068. {}
  3069. virtual ObjCMessageArgumentAST *asObjCMessageArgument() { return this; }
  3070. virtual unsigned firstToken() const;
  3071. virtual unsigned lastToken() const;
  3072. virtual ObjCMessageArgumentAST *clone(MemoryPool *pool) const;
  3073. protected:
  3074. virtual void accept0(ASTVisitor *visitor);
  3075. virtual bool match0(AST *, ASTMatcher *);
  3076. };
  3077. class CPLUSPLUS_EXPORT ObjCMessageExpressionAST: public ExpressionAST
  3078. {
  3079. public:
  3080. unsigned lbracket_token;
  3081. ExpressionAST *receiver_expression;
  3082. ObjCSelectorAST *selector;
  3083. ObjCMessageArgumentListAST *argument_list;
  3084. unsigned rbracket_token;
  3085. public:
  3086. ObjCMessageExpressionAST()
  3087. : lbracket_token(0)
  3088. , receiver_expression(0)
  3089. , selector(0)
  3090. , argument_list(0)
  3091. , rbracket_token(0)
  3092. {}
  3093. virtual ObjCMessageExpressionAST *asObjCMessageExpression() { return this; }
  3094. virtual unsigned firstToken() const;
  3095. virtual unsigned lastToken() const;
  3096. virtual ObjCMessageExpressionAST *clone(MemoryPool *pool) const;
  3097. protected:
  3098. virtual void accept0(ASTVisitor *visitor);
  3099. virtual bool match0(AST *, ASTMatcher *);
  3100. };
  3101. class CPLUSPLUS_EXPORT ObjCProtocolExpressionAST: public ExpressionAST
  3102. {
  3103. public:
  3104. unsigned protocol_token;
  3105. unsigned lparen_token;
  3106. unsigned identifier_token;
  3107. unsigned rparen_token;
  3108. public:
  3109. ObjCProtocolExpressionAST()
  3110. : protocol_token(0)
  3111. , lparen_token(0)
  3112. , identifier_token(0)
  3113. , rparen_token(0)
  3114. {}
  3115. virtual ObjCProtocolExpressionAST *asObjCProtocolExpression() { return this; }
  3116. virtual unsigned firstToken() const;
  3117. virtual unsigned lastToken() const;
  3118. virtual ObjCProtocolExpressionAST *clone(MemoryPool *pool) const;
  3119. protected:
  3120. virtual void accept0(ASTVisitor *visitor);
  3121. virtual bool match0(AST *, ASTMatcher *);
  3122. };
  3123. class CPLUSPLUS_EXPORT ObjCTypeNameAST: public AST
  3124. {
  3125. public:
  3126. unsigned lparen_token;
  3127. unsigned type_qualifier_token;
  3128. ExpressionAST *type_id;
  3129. unsigned rparen_token;
  3130. public:
  3131. ObjCTypeNameAST()
  3132. : lparen_token(0)
  3133. , type_qualifier_token(0)
  3134. , type_id(0)
  3135. , rparen_token(0)
  3136. {}
  3137. virtual ObjCTypeNameAST *asObjCTypeName() { return this; }
  3138. virtual unsigned firstToken() const;
  3139. virtual unsigned lastToken() const;
  3140. virtual ObjCTypeNameAST *clone(MemoryPool *pool) const;
  3141. protected:
  3142. virtual void accept0(ASTVisitor *visitor);
  3143. virtual bool match0(AST *, ASTMatcher *);
  3144. };
  3145. class CPLUSPLUS_EXPORT ObjCEncodeExpressionAST: public ExpressionAST
  3146. {
  3147. public:
  3148. unsigned encode_token;
  3149. ObjCTypeNameAST *type_name;
  3150. public:
  3151. ObjCEncodeExpressionAST()
  3152. : encode_token(0)
  3153. , type_name(0)
  3154. {}
  3155. virtual ObjCEncodeExpressionAST *asObjCEncodeExpression() { return this; }
  3156. virtual unsigned firstToken() const;
  3157. virtual unsigned lastToken() const;
  3158. virtual ObjCEncodeExpressionAST *clone(MemoryPool *pool) const;
  3159. protected:
  3160. virtual void accept0(ASTVisitor *visitor);
  3161. virtual bool match0(AST *, ASTMatcher *);
  3162. };
  3163. class CPLUSPLUS_EXPORT ObjCSelectorExpressionAST: public ExpressionAST
  3164. {
  3165. public:
  3166. unsigned selector_token;
  3167. unsigned lparen_token;
  3168. ObjCSelectorAST *selector;
  3169. unsigned rparen_token;
  3170. public:
  3171. ObjCSelectorExpressionAST()
  3172. : selector_token(0)
  3173. , lparen_token(0)
  3174. , selector(0)
  3175. , rparen_token(0)
  3176. {}
  3177. virtual ObjCSelectorExpressionAST *asObjCSelectorExpression() { return this; }
  3178. virtual unsigned firstToken() const;
  3179. virtual unsigned lastToken() const;
  3180. virtual ObjCSelectorExpressionAST *clone(MemoryPool *pool) const;
  3181. protected:
  3182. virtual void accept0(ASTVisitor *visitor);
  3183. virtual bool match0(AST *, ASTMatcher *);
  3184. };
  3185. class CPLUSPLUS_EXPORT ObjCInstanceVariablesDeclarationAST: public AST
  3186. {
  3187. public:
  3188. unsigned lbrace_token;
  3189. DeclarationListAST *instance_variable_list;
  3190. unsigned rbrace_token;
  3191. public:
  3192. ObjCInstanceVariablesDeclarationAST()
  3193. : lbrace_token(0)
  3194. , instance_variable_list(0)
  3195. , rbrace_token(0)
  3196. {}
  3197. virtual ObjCInstanceVariablesDeclarationAST *asObjCInstanceVariablesDeclaration() { return this; }
  3198. virtual unsigned firstToken() const;
  3199. virtual unsigned lastToken() const;
  3200. virtual ObjCInstanceVariablesDeclarationAST *clone(MemoryPool *pool) const;
  3201. protected:
  3202. virtual void accept0(ASTVisitor *visitor);
  3203. virtual bool match0(AST *, ASTMatcher *);
  3204. };
  3205. class CPLUSPLUS_EXPORT ObjCVisibilityDeclarationAST: public DeclarationAST
  3206. {
  3207. public:
  3208. unsigned visibility_token;
  3209. public:
  3210. ObjCVisibilityDeclarationAST()
  3211. : visibility_token(0)
  3212. {}
  3213. virtual ObjCVisibilityDeclarationAST *asObjCVisibilityDeclaration() { return this; }
  3214. virtual unsigned firstToken() const;
  3215. virtual unsigned lastToken() const;
  3216. virtual ObjCVisibilityDeclarationAST *clone(MemoryPool *pool) const;
  3217. protected:
  3218. virtual void accept0(ASTVisitor *visitor);
  3219. virtual bool match0(AST *, ASTMatcher *);
  3220. };
  3221. class CPLUSPLUS_EXPORT ObjCPropertyAttributeAST: public AST
  3222. {
  3223. public:
  3224. unsigned attribute_identifier_token;
  3225. unsigned equals_token;
  3226. ObjCSelectorAST *method_selector;
  3227. public:
  3228. ObjCPropertyAttributeAST()
  3229. : attribute_identifier_token(0)
  3230. , equals_token(0)
  3231. , method_selector(0)
  3232. {}
  3233. virtual ObjCPropertyAttributeAST *asObjCPropertyAttribute() { return this; }
  3234. virtual unsigned firstToken() const;
  3235. virtual unsigned lastToken() const;
  3236. virtual ObjCPropertyAttributeAST *clone(MemoryPool *pool) const;
  3237. protected:
  3238. virtual void accept0(ASTVisitor *visitor);
  3239. virtual bool match0(AST *, ASTMatcher *);
  3240. };
  3241. class CPLUSPLUS_EXPORT ObjCPropertyDeclarationAST: public DeclarationAST
  3242. {
  3243. public:
  3244. SpecifierListAST *attribute_list;
  3245. unsigned property_token;
  3246. unsigned lparen_token;
  3247. ObjCPropertyAttributeListAST *property_attribute_list;
  3248. unsigned rparen_token;
  3249. DeclarationAST *simple_declaration;
  3250. public: // annotations
  3251. List<ObjCPropertyDeclaration *> *symbols;
  3252. public:
  3253. ObjCPropertyDeclarationAST()
  3254. : attribute_list(0)
  3255. , property_token(0)
  3256. , lparen_token(0)
  3257. , property_attribute_list(0)
  3258. , rparen_token(0)
  3259. , simple_declaration(0)
  3260. , symbols(0)
  3261. {}
  3262. virtual ObjCPropertyDeclarationAST *asObjCPropertyDeclaration() { return this; }
  3263. virtual unsigned firstToken() const;
  3264. virtual unsigned lastToken() const;
  3265. virtual ObjCPropertyDeclarationAST *clone(MemoryPool *pool) const;
  3266. protected:
  3267. virtual void accept0(ASTVisitor *visitor);
  3268. virtual bool match0(AST *, ASTMatcher *);
  3269. };
  3270. class CPLUSPLUS_EXPORT ObjCMessageArgumentDeclarationAST: public AST
  3271. {
  3272. public:
  3273. ObjCTypeNameAST* type_name;
  3274. SpecifierListAST *attribute_list;
  3275. NameAST *param_name;
  3276. public: // annotations
  3277. Argument *argument;
  3278. public:
  3279. ObjCMessageArgumentDeclarationAST()
  3280. : type_name(0)
  3281. , attribute_list(0)
  3282. , param_name(0)
  3283. , argument(0)
  3284. {}
  3285. virtual ObjCMessageArgumentDeclarationAST *asObjCMessageArgumentDeclaration() { return this; }
  3286. virtual unsigned firstToken() const;
  3287. virtual unsigned lastToken() const;
  3288. virtual ObjCMessageArgumentDeclarationAST *clone(MemoryPool *pool) const;
  3289. protected:
  3290. virtual void accept0(ASTVisitor *visitor);
  3291. virtual bool match0(AST *, ASTMatcher *);
  3292. };
  3293. class CPLUSPLUS_EXPORT ObjCMethodPrototypeAST: public AST
  3294. {
  3295. public:
  3296. unsigned method_type_token;
  3297. ObjCTypeNameAST *type_name;
  3298. ObjCSelectorAST *selector;
  3299. ObjCMessageArgumentDeclarationListAST *argument_list;
  3300. unsigned dot_dot_dot_token;
  3301. SpecifierListAST *attribute_list;
  3302. public: // annotations
  3303. ObjCMethod *symbol;
  3304. public:
  3305. ObjCMethodPrototypeAST()
  3306. : method_type_token(0)
  3307. , type_name(0)
  3308. , selector(0)
  3309. , argument_list(0)
  3310. , dot_dot_dot_token(0)
  3311. , attribute_list(0)
  3312. , symbol(0)
  3313. {}
  3314. virtual ObjCMethodPrototypeAST *asObjCMethodPrototype() { return this; }
  3315. virtual unsigned firstToken() const;
  3316. virtual unsigned lastToken() const;
  3317. virtual ObjCMethodPrototypeAST *clone(MemoryPool *pool) const;
  3318. protected:
  3319. virtual void accept0(ASTVisitor *visitor);
  3320. virtual bool match0(AST *, ASTMatcher *);
  3321. };
  3322. class CPLUSPLUS_EXPORT ObjCMethodDeclarationAST: public DeclarationAST
  3323. {
  3324. public:
  3325. ObjCMethodPrototypeAST *method_prototype;
  3326. StatementAST *function_body;
  3327. unsigned semicolon_token;
  3328. public:
  3329. ObjCMethodDeclarationAST()
  3330. : method_prototype(0)
  3331. , function_body(0)
  3332. , semicolon_token(0)
  3333. {}
  3334. virtual ObjCMethodDeclarationAST *asObjCMethodDeclaration() { return this; }
  3335. virtual unsigned firstToken() const;
  3336. virtual unsigned lastToken() const;
  3337. virtual ObjCMethodDeclarationAST *clone(MemoryPool *pool) const;
  3338. protected:
  3339. virtual void accept0(ASTVisitor *visitor);
  3340. virtual bool match0(AST *, ASTMatcher *);
  3341. };
  3342. class CPLUSPLUS_EXPORT ObjCSynthesizedPropertyAST: public AST
  3343. {
  3344. public:
  3345. unsigned property_identifier_token;
  3346. unsigned equals_token;
  3347. unsigned alias_identifier_token;
  3348. public:
  3349. ObjCSynthesizedPropertyAST()
  3350. : property_identifier_token(0)
  3351. , equals_token(0)
  3352. , alias_identifier_token(0)
  3353. {}
  3354. virtual ObjCSynthesizedPropertyAST *asObjCSynthesizedProperty() { return this; }
  3355. virtual unsigned firstToken() const;
  3356. virtual unsigned lastToken() const;
  3357. virtual ObjCSynthesizedPropertyAST *clone(MemoryPool *pool) const;
  3358. protected:
  3359. virtual void accept0(ASTVisitor *visitor);
  3360. virtual bool match0(AST *, ASTMatcher *);
  3361. };
  3362. class CPLUSPLUS_EXPORT ObjCSynthesizedPropertiesDeclarationAST: public DeclarationAST
  3363. {
  3364. public:
  3365. unsigned synthesized_token;
  3366. ObjCSynthesizedPropertyListAST *property_identifier_list;
  3367. unsigned semicolon_token;
  3368. public:
  3369. ObjCSynthesizedPropertiesDeclarationAST()
  3370. : synthesized_token(0)
  3371. , property_identifier_list(0)
  3372. , semicolon_token(0)
  3373. {}
  3374. virtual ObjCSynthesizedPropertiesDeclarationAST *asObjCSynthesizedPropertiesDeclaration() { return this; }
  3375. virtual unsigned firstToken() const;
  3376. virtual unsigned lastToken() const;
  3377. virtual ObjCSynthesizedPropertiesDeclarationAST *clone(MemoryPool *pool) const;
  3378. protected:
  3379. virtual void accept0(ASTVisitor *visitor);
  3380. virtual bool match0(AST *, ASTMatcher *);
  3381. };
  3382. class CPLUSPLUS_EXPORT ObjCDynamicPropertiesDeclarationAST: public DeclarationAST
  3383. {
  3384. public:
  3385. unsigned dynamic_token;
  3386. NameListAST *property_identifier_list;
  3387. unsigned semicolon_token;
  3388. public:
  3389. ObjCDynamicPropertiesDeclarationAST()
  3390. : dynamic_token(0)
  3391. , property_identifier_list(0)
  3392. , semicolon_token(0)
  3393. {}
  3394. virtual ObjCDynamicPropertiesDeclarationAST *asObjCDynamicPropertiesDeclaration() { return this; }
  3395. virtual unsigned firstToken() const;
  3396. virtual unsigned lastToken() const;
  3397. virtual ObjCDynamicPropertiesDeclarationAST *clone(MemoryPool *pool) const;
  3398. protected:
  3399. virtual void accept0(ASTVisitor *visitor);
  3400. virtual bool match0(AST *, ASTMatcher *);
  3401. };
  3402. class CPLUSPLUS_EXPORT ObjCFastEnumerationAST: public StatementAST
  3403. {
  3404. public:
  3405. unsigned for_token;
  3406. unsigned lparen_token;
  3407. // declaration
  3408. SpecifierListAST *type_specifier_list;
  3409. DeclaratorAST *declarator;
  3410. // or an expression
  3411. ExpressionAST *initializer;
  3412. unsigned in_token;
  3413. ExpressionAST *fast_enumeratable_expression;
  3414. unsigned rparen_token;
  3415. StatementAST *statement;
  3416. public: // annotations
  3417. Block *symbol;
  3418. public:
  3419. ObjCFastEnumerationAST()
  3420. : for_token(0)
  3421. , lparen_token(0)
  3422. , type_specifier_list(0)
  3423. , declarator(0)
  3424. , initializer(0)
  3425. , in_token(0)
  3426. , fast_enumeratable_expression(0)
  3427. , rparen_token(0)
  3428. , statement(0)
  3429. , symbol(0)
  3430. {}
  3431. virtual ObjCFastEnumerationAST *asObjCFastEnumeration() { return this; }
  3432. virtual unsigned firstToken() const;
  3433. virtual unsigned lastToken() const;
  3434. virtual ObjCFastEnumerationAST *clone(MemoryPool *pool) const;
  3435. protected:
  3436. virtual void accept0(ASTVisitor *visitor);
  3437. virtual bool match0(AST *, ASTMatcher *);
  3438. };
  3439. class CPLUSPLUS_EXPORT ObjCSynchronizedStatementAST: public StatementAST
  3440. {
  3441. public:
  3442. unsigned synchronized_token;
  3443. unsigned lparen_token;
  3444. ExpressionAST *synchronized_object;
  3445. unsigned rparen_token;
  3446. StatementAST *statement;
  3447. public:
  3448. ObjCSynchronizedStatementAST()
  3449. : synchronized_token(0)
  3450. , lparen_token(0)
  3451. , synchronized_object(0)
  3452. , rparen_token(0)
  3453. , statement(0)
  3454. {}
  3455. virtual ObjCSynchronizedStatementAST *asObjCSynchronizedStatement() { return this; }
  3456. virtual unsigned firstToken() const;
  3457. virtual unsigned lastToken() const;
  3458. virtual ObjCSynchronizedStatementAST *clone(MemoryPool *pool) const;
  3459. protected:
  3460. virtual void accept0(ASTVisitor *visitor);
  3461. virtual bool match0(AST *, ASTMatcher *);
  3462. };
  3463. class LambdaExpressionAST: public ExpressionAST
  3464. {
  3465. public:
  3466. LambdaIntroducerAST *lambda_introducer;
  3467. LambdaDeclaratorAST *lambda_declarator;
  3468. StatementAST *statement;
  3469. public:
  3470. LambdaExpressionAST()
  3471. : lambda_introducer(0)
  3472. , lambda_declarator(0)
  3473. , statement(0)
  3474. {}
  3475. virtual LambdaExpressionAST *asLambdaExpression() { return this; }
  3476. virtual unsigned firstToken() const;
  3477. virtual unsigned lastToken() const;
  3478. virtual LambdaExpressionAST *clone(MemoryPool *pool) const;
  3479. protected:
  3480. virtual void accept0(ASTVisitor *visitor);
  3481. virtual bool match0(AST *, ASTMatcher *);
  3482. };
  3483. class LambdaIntroducerAST: public AST
  3484. {
  3485. public:
  3486. unsigned lbracket_token;
  3487. LambdaCaptureAST *lambda_capture;
  3488. unsigned rbracket_token;
  3489. public:
  3490. LambdaIntroducerAST()
  3491. : lbracket_token(0)
  3492. , lambda_capture(0)
  3493. , rbracket_token(0)
  3494. {}
  3495. virtual LambdaIntroducerAST *asLambdaIntroducer() { return this; }
  3496. virtual unsigned firstToken() const;
  3497. virtual unsigned lastToken() const;
  3498. virtual LambdaIntroducerAST *clone(MemoryPool *pool) const;
  3499. protected:
  3500. virtual void accept0(ASTVisitor *visitor);
  3501. virtual bool match0(AST *, ASTMatcher *);
  3502. };
  3503. class LambdaCaptureAST: public AST
  3504. {
  3505. public:
  3506. unsigned default_capture_token;
  3507. CaptureListAST *capture_list;
  3508. public:
  3509. LambdaCaptureAST()
  3510. : default_capture_token(0)
  3511. , capture_list(0)
  3512. {}
  3513. virtual LambdaCaptureAST *asLambdaCapture() { return this; }
  3514. virtual unsigned firstToken() const;
  3515. virtual unsigned lastToken() const;
  3516. virtual LambdaCaptureAST *clone(MemoryPool *pool) const;
  3517. protected:
  3518. virtual void accept0(ASTVisitor *visitor);
  3519. virtual bool match0(AST *, ASTMatcher *);
  3520. };
  3521. class CaptureAST: public AST
  3522. {
  3523. public:
  3524. unsigned amper_token;
  3525. NameAST *identifier;
  3526. public:
  3527. CaptureAST()
  3528. : amper_token(0)
  3529. , identifier(0)
  3530. {}
  3531. virtual CaptureAST *asCapture() { return this; }
  3532. virtual unsigned firstToken() const;
  3533. virtual unsigned lastToken() const;
  3534. virtual CaptureAST *clone(MemoryPool *pool) const;
  3535. protected:
  3536. virtual void accept0(ASTVisitor *visitor);
  3537. virtual bool match0(AST *, ASTMatcher *);
  3538. };
  3539. class LambdaDeclaratorAST: public AST
  3540. {
  3541. public:
  3542. unsigned lparen_token;
  3543. ParameterDeclarationClauseAST *parameter_declaration_clause;
  3544. unsigned rparen_token;
  3545. SpecifierListAST *attributes;
  3546. unsigned mutable_token;
  3547. ExceptionSpecificationAST *exception_specification;
  3548. TrailingReturnTypeAST *trailing_return_type;
  3549. public: // annotations
  3550. Function *symbol;
  3551. public:
  3552. LambdaDeclaratorAST()
  3553. : lparen_token(0)
  3554. , parameter_declaration_clause(0)
  3555. , rparen_token(0)
  3556. , attributes(0)
  3557. , mutable_token(0)
  3558. , exception_specification(0)
  3559. , trailing_return_type(0)
  3560. , symbol(0)
  3561. {}
  3562. virtual LambdaDeclaratorAST *asLambdaDeclarator() { return this; }
  3563. virtual unsigned firstToken() const;
  3564. virtual unsigned lastToken() const;
  3565. virtual LambdaDeclaratorAST *clone(MemoryPool *pool) const;
  3566. protected:
  3567. virtual void accept0(ASTVisitor *visitor);
  3568. virtual bool match0(AST *, ASTMatcher *);
  3569. };
  3570. class TrailingReturnTypeAST: public AST
  3571. {
  3572. public:
  3573. unsigned arrow_token;
  3574. SpecifierListAST *attributes;
  3575. SpecifierListAST *type_specifier_list;
  3576. DeclaratorAST *declarator;
  3577. public:
  3578. TrailingReturnTypeAST()
  3579. : arrow_token(0)
  3580. , attributes(0)
  3581. , type_specifier_list(0)
  3582. , declarator(0)
  3583. {}
  3584. virtual TrailingReturnTypeAST *asTrailingReturnType() { return this; }
  3585. virtual unsigned firstToken() const;
  3586. virtual unsigned lastToken() const;
  3587. virtual TrailingReturnTypeAST *clone(MemoryPool *pool) const;
  3588. protected:
  3589. virtual void accept0(ASTVisitor *visitor);
  3590. virtual bool match0(AST *, ASTMatcher *);
  3591. };
  3592. class BracedInitializerAST: public ExpressionAST
  3593. {
  3594. public:
  3595. unsigned lbrace_token;
  3596. ExpressionListAST *expression_list;
  3597. unsigned comma_token;
  3598. unsigned rbrace_token;
  3599. public:
  3600. BracedInitializerAST()
  3601. : lbrace_token(0)
  3602. , expression_list(0)
  3603. , comma_token(0)
  3604. , rbrace_token(0)
  3605. {}
  3606. virtual BracedInitializerAST *asBracedInitializer() { return this; }
  3607. virtual unsigned firstToken() const;
  3608. virtual unsigned lastToken() const;
  3609. virtual BracedInitializerAST *clone(MemoryPool *pool) const;
  3610. protected:
  3611. virtual void accept0(ASTVisitor *visitor);
  3612. virtual bool match0(AST *, ASTMatcher *);
  3613. };
  3614. class DesignatorAST: public AST
  3615. {
  3616. public:
  3617. DesignatorAST()
  3618. {}
  3619. virtual DesignatorAST *asDesignator() { return this; }
  3620. virtual DesignatorAST *clone(MemoryPool *pool) const = 0;
  3621. };
  3622. class DotDesignatorAST: public DesignatorAST
  3623. {
  3624. public:
  3625. unsigned dot_token;
  3626. unsigned identifier_token;
  3627. public:
  3628. DotDesignatorAST()
  3629. : dot_token(0)
  3630. , identifier_token(0)
  3631. {}
  3632. virtual DotDesignatorAST *asDotDesignator() { return this; }
  3633. virtual unsigned firstToken() const;
  3634. virtual unsigned lastToken() const;
  3635. virtual DotDesignatorAST *clone(MemoryPool *pool) const;
  3636. protected:
  3637. virtual void accept0(ASTVisitor *visitor);
  3638. virtual bool match0(AST *, ASTMatcher *);
  3639. };
  3640. class BracketDesignatorAST: public DesignatorAST
  3641. {
  3642. public:
  3643. unsigned lbracket_token;
  3644. ExpressionAST *expression;
  3645. unsigned rbracket_token;
  3646. public:
  3647. BracketDesignatorAST()
  3648. : lbracket_token(0)
  3649. , expression(0)
  3650. , rbracket_token(0)
  3651. {}
  3652. virtual BracketDesignatorAST *asBracketDesignator() { return this; }
  3653. virtual unsigned firstToken() const;
  3654. virtual unsigned lastToken() const;
  3655. virtual BracketDesignatorAST *clone(MemoryPool *pool) const;
  3656. protected:
  3657. virtual void accept0(ASTVisitor *visitor);
  3658. virtual bool match0(AST *, ASTMatcher *);
  3659. };
  3660. class DesignatedInitializerAST: public ExpressionAST
  3661. {
  3662. public:
  3663. DesignatorListAST *designator_list;
  3664. unsigned equal_token;
  3665. ExpressionAST *initializer;
  3666. public:
  3667. DesignatedInitializerAST()
  3668. : designator_list(0)
  3669. , equal_token(0)
  3670. , initializer(0)
  3671. {}
  3672. virtual DesignatedInitializerAST *asDesignatedInitializer() { return this; }
  3673. virtual unsigned firstToken() const;
  3674. virtual unsigned lastToken() const;
  3675. virtual DesignatedInitializerAST *clone(MemoryPool *pool) const;
  3676. protected:
  3677. virtual void accept0(ASTVisitor *visitor);
  3678. virtual bool match0(AST *, ASTMatcher *);
  3679. };
  3680. } // namespace CPlusPlus
  3681. #endif // CPLUSPLUS_AST_H