BfElementVisitor.cpp 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317
  1. #include "BfElementVisitor.h"
  2. USING_NS_BF;
  3. //////////////////////////////////////////////////////////////////////////
  4. BfElementVisitor::BfElementVisitor()
  5. {
  6. }
  7. void BfElementVisitor::Visit(BfTypedValueExpression* typedValueExpr)
  8. {
  9. Visit(typedValueExpr->ToBase());
  10. }
  11. void BfElementVisitor::Visit(BfCommentNode* commentNode)
  12. {
  13. Visit(commentNode->ToBase());
  14. }
  15. void BfElementVisitor::Visit(BfPreprocesorIgnoredSectionNode* preprocesorIgnoredSection)
  16. {
  17. Visit(preprocesorIgnoredSection->ToBase());
  18. }
  19. void BfElementVisitor::Visit(BfPreprocessorNode* preprocessorNode)
  20. {
  21. Visit(preprocessorNode->ToBase());
  22. VisitChild(preprocessorNode->mCommand);
  23. VisitChild(preprocessorNode->mArgument);
  24. }
  25. void BfElementVisitor::Visit(BfPreprocessorDefinedExpression* definedExpr)
  26. {
  27. Visit(definedExpr->ToBase());
  28. VisitChild(definedExpr->mIdentifier);
  29. }
  30. void BfElementVisitor::Visit(BfAttributeDirective* attributeDirective)
  31. {
  32. Visit(attributeDirective->ToBase());
  33. VisitChild(attributeDirective->mAttrOpenToken); // Either [ or ,
  34. VisitChild(attributeDirective->mAttrCloseToken);
  35. VisitChild(attributeDirective->mAttributeTargetSpecifier);
  36. VisitChild(attributeDirective->mAttributeTypeRef);
  37. VisitChild(attributeDirective->mCtorOpenParen);
  38. VisitChild(attributeDirective->mCtorCloseParen);
  39. for (auto& val : attributeDirective->mArguments)
  40. VisitChild(val);
  41. for (auto& val : attributeDirective->mCommas)
  42. VisitChild(val);
  43. VisitChild(attributeDirective->mNextAttribute);
  44. }
  45. void BfElementVisitor::Visit(BfGenericParamsDeclaration* genericParams)
  46. {
  47. Visit(genericParams->ToBase());
  48. VisitChild(genericParams->mOpenChevron);
  49. for (auto& val : genericParams->mGenericParams)
  50. VisitChild(val);
  51. for (auto& val : genericParams->mCommas)
  52. VisitChild(val);
  53. VisitChild(genericParams->mCloseChevron);
  54. }
  55. void BfElementVisitor::Visit(BfGenericOperatorConstraint* genericConstraints)
  56. {
  57. Visit(genericConstraints->ToBase());
  58. VisitChild(genericConstraints->mOperatorToken);
  59. VisitChild(genericConstraints->mLeftType);
  60. VisitChild(genericConstraints->mOpToken);
  61. VisitChild(genericConstraints->mRightType);
  62. }
  63. void BfElementVisitor::Visit(BfGenericConstraintsDeclaration* genericConstraints)
  64. {
  65. Visit(genericConstraints->ToBase());
  66. for (auto genericConstraintNode : genericConstraints->mGenericConstraints)
  67. {
  68. if (auto genericConstraint = BfNodeDynCast<BfGenericConstraint>(genericConstraintNode))
  69. {
  70. VisitChild(genericConstraint->mWhereToken);
  71. VisitChild(genericConstraint->mTypeRef);
  72. VisitChild(genericConstraint->mColonToken);
  73. for (auto val : genericConstraint->mConstraintTypes)
  74. VisitChild(val);
  75. for (auto val : genericConstraint->mCommas)
  76. VisitChild(val);
  77. }
  78. else if (auto genericConstraintExpr = BfNodeDynCast<BfGenericConstraintExpression>(genericConstraintNode))
  79. {
  80. VisitChild(genericConstraintExpr->mWhereToken);
  81. VisitChild(genericConstraintExpr->mExpression);
  82. }
  83. }
  84. }
  85. void BfElementVisitor::Visit(BfGenericArgumentsNode* genericArgumentsNode)
  86. {
  87. Visit(genericArgumentsNode->ToBase());
  88. VisitChild(genericArgumentsNode->mOpenChevron);
  89. for (auto& val : genericArgumentsNode->mGenericArgs)
  90. VisitChild(val);
  91. for (auto& val : genericArgumentsNode->mCommas)
  92. VisitChild(val);
  93. VisitChild(genericArgumentsNode->mCloseChevron);
  94. }
  95. void BfElementVisitor::Visit(BfCtorExplicitNode* ctorExplicitNode)
  96. {
  97. Visit(ctorExplicitNode->ToBase());
  98. VisitChild(ctorExplicitNode->mDotToken);
  99. VisitChild(ctorExplicitNode->mThisToken);
  100. VisitChild(ctorExplicitNode->mGenericArgs);
  101. }
  102. void BfElementVisitor::Visit(BfStatement* stmt)
  103. {
  104. Visit(stmt->ToBase());
  105. VisitChild(stmt->mTrailingSemicolon);
  106. }
  107. void BfElementVisitor::Visit(BfAttributedStatement* attribStmt)
  108. {
  109. Visit(attribStmt->ToBase());
  110. VisitChild(attribStmt->mAttributes);
  111. VisitChild(attribStmt->mStatement);
  112. }
  113. void BfElementVisitor::Visit(BfLabelableStatement* labelableStmt)
  114. {
  115. Visit(labelableStmt->ToBase());
  116. if (labelableStmt->mLabelNode != NULL)
  117. {
  118. VisitChild(labelableStmt->mLabelNode->mLabel);
  119. VisitChild(labelableStmt->mLabelNode->mColonToken);
  120. }
  121. }
  122. void BfElementVisitor::Visit(BfErrorNode* bfErrorNode)
  123. {
  124. Visit(bfErrorNode->mRefNode);
  125. }
  126. void BfElementVisitor::Visit(BfScopeNode* scopeNode)
  127. {
  128. Visit(scopeNode->ToBase());
  129. VisitChild(scopeNode->mScopeToken);
  130. VisitChild(scopeNode->mColonToken);
  131. VisitChild(scopeNode->mTargetNode);
  132. VisitChild(scopeNode->mAttributes);
  133. }
  134. void BfElementVisitor::Visit(BfNewNode* newNode)
  135. {
  136. Visit(newNode->ToBase());
  137. VisitChild(newNode->mNewToken);
  138. VisitChild(newNode->mColonToken);
  139. VisitChild(newNode->mAllocNode);
  140. VisitChild(newNode->mAttributes);
  141. }
  142. void BfElementVisitor::Visit(BfLabeledBlock* labeledBlock)
  143. {
  144. Visit(labeledBlock->ToBase());
  145. VisitChild(labeledBlock->mBlock);
  146. }
  147. void BfElementVisitor::Visit(BfExpression* expr)
  148. {
  149. Visit(expr->ToBase());
  150. }
  151. void BfElementVisitor::Visit(BfExpressionStatement* exprStmt)
  152. {
  153. Visit(exprStmt->ToBase());
  154. VisitChild(exprStmt->mExpression);
  155. }
  156. void BfElementVisitor::Visit(BfNamedExpression* namedExpr)
  157. {
  158. Visit(namedExpr->ToBase());
  159. VisitChild(namedExpr->mNameNode);
  160. VisitChild(namedExpr->mColonToken);
  161. VisitChild(namedExpr->mExpression);
  162. }
  163. void BfElementVisitor::Visit(BfAttributedExpression* attribExpr)
  164. {
  165. Visit(attribExpr->ToBase());
  166. VisitChild(attribExpr->mAttributes);
  167. VisitChild(attribExpr->mExpression);
  168. }
  169. void BfElementVisitor::Visit(BfEmptyStatement* emptyStmt)
  170. {
  171. Visit(emptyStmt->ToBase());
  172. }
  173. void BfElementVisitor::Visit(BfTokenNode* tokenNode)
  174. {
  175. Visit(tokenNode->ToBase());
  176. }
  177. void BfElementVisitor::Visit(BfTokenPairNode* tokenPairNode)
  178. {
  179. Visit(tokenPairNode->ToBase());
  180. VisitChild(tokenPairNode->mLeft);
  181. VisitChild(tokenPairNode->mRight);
  182. }
  183. void BfElementVisitor::Visit(BfUsingSpecifierNode* usingSpecifier)
  184. {
  185. Visit(usingSpecifier->ToBase());
  186. VisitChild(usingSpecifier->mProtection);
  187. VisitChild(usingSpecifier->mUsingToken);
  188. }
  189. void BfElementVisitor::Visit(BfLiteralExpression* literalExpr)
  190. {
  191. Visit(literalExpr->ToBase());
  192. }
  193. void BfElementVisitor::Visit(BfStringInterpolationExpression* stringInterpolationExpression)
  194. {
  195. Visit(stringInterpolationExpression->ToBase());
  196. VisitChild(stringInterpolationExpression->mAllocNode);
  197. for (auto block : stringInterpolationExpression->mExpressions)
  198. {
  199. VisitChild(block);
  200. }
  201. }
  202. void BfElementVisitor::Visit(BfIdentifierNode* identifierNode)
  203. {
  204. Visit(identifierNode->ToBase());
  205. }
  206. void BfElementVisitor::Visit(BfAttributedIdentifierNode * attrIdentifierNode)
  207. {
  208. Visit(attrIdentifierNode->ToBase());
  209. VisitChild(attrIdentifierNode->mAttributes);
  210. VisitChild(attrIdentifierNode->mIdentifier);
  211. }
  212. void BfElementVisitor::Visit(BfQualifiedNameNode* nameNode)
  213. {
  214. Visit(nameNode->ToBase());
  215. VisitChild(nameNode->mLeft);
  216. VisitChild(nameNode->mDot);
  217. VisitChild(nameNode->mRight);
  218. }
  219. void BfElementVisitor::Visit(BfThisExpression* thisExpr)
  220. {
  221. Visit(thisExpr->ToBase());
  222. }
  223. void BfElementVisitor::Visit(BfBaseExpression* baseExpr)
  224. {
  225. Visit(baseExpr->ToBase());
  226. }
  227. void BfElementVisitor::Visit(BfMixinExpression* mixinExpr)
  228. {
  229. Visit(mixinExpr->ToBase());
  230. }
  231. void BfElementVisitor::Visit(BfSizedArrayCreateExpression* createExpr)
  232. {
  233. Visit(createExpr->ToBase());
  234. VisitChild(createExpr->mTypeRef);
  235. VisitChild(createExpr->mInitializer);
  236. }
  237. void BfElementVisitor::Visit(BfInitializerExpression* initExpr)
  238. {
  239. Visit(initExpr->ToBase());
  240. VisitChild(initExpr->mTarget);
  241. VisitChild(initExpr->mOpenBrace);
  242. VisitChild(initExpr->mInlineTypeRef);
  243. for (auto& val : initExpr->mValues)
  244. VisitChild(val);
  245. for (auto& val : initExpr->mCommas)
  246. VisitChild(val);
  247. VisitChild(initExpr->mCloseBrace);
  248. }
  249. void BfElementVisitor::Visit(BfCollectionInitializerExpression* collectionInitExpr)
  250. {
  251. Visit(collectionInitExpr->ToBase());
  252. VisitChild(collectionInitExpr->mOpenBrace);
  253. for (auto& val : collectionInitExpr->mValues)
  254. VisitChild(val);
  255. for (auto& val : collectionInitExpr->mCommas)
  256. VisitChild(val);
  257. VisitChild(collectionInitExpr->mCloseBrace);
  258. }
  259. void BfElementVisitor::Visit(BfTypeReference* typeRef)
  260. {
  261. Visit(typeRef->ToBase());
  262. }
  263. void BfElementVisitor::Visit(BfInlineTypeReference* typeRef)
  264. {
  265. Visit(typeRef->ToBase());
  266. VisitChild(typeRef->mTypeDeclaration);
  267. }
  268. void BfElementVisitor::Visit(BfNamedTypeReference* typeRef)
  269. {
  270. Visit(typeRef->ToBase());
  271. VisitChild(typeRef->mNameNode);
  272. }
  273. void BfElementVisitor::Visit(BfQualifiedTypeReference* qualifiedTypeRef)
  274. {
  275. Visit(qualifiedTypeRef->ToBase());
  276. VisitChild(qualifiedTypeRef->mLeft);
  277. VisitChild(qualifiedTypeRef->mDot);
  278. VisitChild(qualifiedTypeRef->mRight);
  279. }
  280. void BfElementVisitor::Visit(BfDotTypeReference* typeRef)
  281. {
  282. Visit(typeRef->ToBase());
  283. VisitChild(typeRef->mDotToken);
  284. }
  285. void BfElementVisitor::Visit(BfVarTypeReference* typeRef)
  286. {
  287. Visit(typeRef->ToBase());
  288. VisitChild(typeRef->mVarToken);
  289. }
  290. void BfElementVisitor::Visit(BfVarRefTypeReference* typeRef)
  291. {
  292. Visit(typeRef->ToBase());
  293. VisitChild(typeRef->mVarToken);
  294. VisitChild(typeRef->mRefToken);
  295. }
  296. void BfElementVisitor::Visit(BfLetTypeReference* typeRef)
  297. {
  298. Visit(typeRef->ToBase());
  299. VisitChild(typeRef->mLetToken);
  300. }
  301. void BfElementVisitor::Visit(BfConstTypeRef* typeRef)
  302. {
  303. Visit((BfTypeReference*)typeRef); // Skip the Elemented part so we can put the element in the right spot
  304. VisitChild(typeRef->mConstToken);
  305. VisitChild(typeRef->mElementType);
  306. }
  307. void BfElementVisitor::Visit(BfConstExprTypeRef* typeRef)
  308. {
  309. Visit((BfTypeReference*)typeRef); // Skip the Elemented part so we can put the element in the right spot
  310. VisitChild(typeRef->mConstToken);
  311. VisitChild(typeRef->mConstExpr);
  312. }
  313. void BfElementVisitor::Visit(BfRefTypeRef* typeRef)
  314. {
  315. Visit((BfTypeReference*)typeRef); // Skip the Elemented part so we can put the element in the right spot
  316. VisitChild(typeRef->mRefToken);
  317. VisitChild(typeRef->mElementType);
  318. }
  319. void BfElementVisitor::Visit(BfModifiedTypeRef * typeRef)
  320. {
  321. Visit((BfTypeReference*)typeRef); // Skip the Elemented part so we can put the element in the right spot
  322. VisitChild(typeRef->mRetTypeToken);
  323. VisitChild(typeRef->mOpenParen);
  324. VisitChild(typeRef->mElementType);
  325. VisitChild(typeRef->mCloseParen);
  326. }
  327. void BfElementVisitor::Visit(BfArrayTypeRef* typeRef)
  328. {
  329. Visit((BfTypeReference*)typeRef); // Skip the Elemented part so we can put the element in the right spot
  330. VisitChild(typeRef->mElementType);
  331. VisitChild(typeRef->mOpenBracket);
  332. for (auto& val : typeRef->mParams)
  333. VisitChild(val);
  334. VisitChild(typeRef->mCloseBracket);
  335. }
  336. void BfElementVisitor::Visit(BfGenericInstanceTypeRef* typeRef)
  337. {
  338. Visit(typeRef->ToBase());
  339. VisitChild(typeRef->mOpenChevron);
  340. for (auto& val : typeRef->mGenericArguments)
  341. VisitChild(val);
  342. if (typeRef->mCommas.mVals != NULL)
  343. {
  344. for (auto& val : typeRef->mCommas)
  345. VisitChild(val);
  346. }
  347. VisitChild(typeRef->mCloseChevron);
  348. }
  349. void BfElementVisitor::Visit(BfTupleTypeRef* typeRef)
  350. {
  351. Visit(typeRef->ToBase());
  352. VisitChild(typeRef->mOpenParen);
  353. for (auto& val : typeRef->mFieldNames)
  354. VisitChild(val);
  355. for (auto& val : typeRef->mFieldTypes)
  356. VisitChild(val);
  357. if (typeRef->mCommas.mVals != NULL)
  358. {
  359. for (auto& val : typeRef->mCommas)
  360. VisitChild(val);
  361. }
  362. VisitChild(typeRef->mCloseParen);
  363. }
  364. void BfElementVisitor::Visit(BfTagTypeRef* typeRef)
  365. {
  366. Visit(typeRef->ToBase());
  367. VisitChild(typeRef->mTagNode);
  368. VisitChild(typeRef->mNameNode);
  369. }
  370. void BfElementVisitor::Visit(BfExprModTypeRef* typeRef)
  371. {
  372. Visit(typeRef->ToBase());
  373. VisitChild(typeRef->mToken);
  374. VisitChild(typeRef->mOpenParen);
  375. VisitChild(typeRef->mTarget);
  376. VisitChild(typeRef->mCloseParen);
  377. }
  378. void BfElementVisitor::Visit(BfDelegateTypeRef* typeRef)
  379. {
  380. Visit((BfTypeReference*)typeRef);
  381. VisitChild(typeRef->mTypeToken);
  382. VisitChild(typeRef->mReturnType);
  383. VisitChild(typeRef->mAttributes);
  384. VisitChild(typeRef->mOpenParen);
  385. for (auto& param : typeRef->mParams)
  386. VisitChild(param);
  387. for (auto& comma : typeRef->mCommas)
  388. VisitChild(comma);
  389. VisitChild(typeRef->mCloseParen);
  390. }
  391. void BfElementVisitor::Visit(BfPointerTypeRef* typeRef)
  392. {
  393. Visit((BfTypeReference*)typeRef); // Skip the Elemented part so we can put the element in the right spot
  394. VisitChild(typeRef->mElementType);
  395. VisitChild(typeRef->mStarNode);
  396. }
  397. void BfElementVisitor::Visit(BfNullableTypeRef* typeRef)
  398. {
  399. Visit((BfTypeReference*)typeRef); // Skip the Elemented part so we can put the element in the right spot
  400. VisitChild(typeRef->mElementType);
  401. VisitChild(typeRef->mQuestionToken);
  402. }
  403. void BfElementVisitor::Visit(BfVariableDeclaration* varDecl)
  404. {
  405. Visit(varDecl->ToBase());
  406. VisitChild(varDecl->mAttributes);
  407. VisitChild(varDecl->mModSpecifier);
  408. VisitChild(varDecl->mTypeRef);
  409. VisitChild(varDecl->mPrecedingComma);
  410. VisitChild(varDecl->mNameNode); // Either BfIdentifierNode or BfTupleExpression
  411. VisitChild(varDecl->mEqualsNode);
  412. VisitChild(varDecl->mInitializer);
  413. }
  414. void BfElementVisitor::Visit(BfLocalMethodDeclaration* methodDecl)
  415. {
  416. Visit(methodDecl->ToBase());
  417. VisitChild(methodDecl->mMethodDeclaration);
  418. }
  419. void BfElementVisitor::Visit(BfParameterDeclaration* paramDecl)
  420. {
  421. Visit(paramDecl->ToBase());
  422. VisitChild(paramDecl->mModToken); // 'Params'
  423. }
  424. void BfElementVisitor::Visit(BfTypeAttrExpression* typeAttrExpr)
  425. {
  426. Visit(typeAttrExpr->ToBase());
  427. VisitChild(typeAttrExpr->mToken);
  428. VisitChild(typeAttrExpr->mOpenParen);
  429. VisitChild(typeAttrExpr->mTypeRef);
  430. VisitChild(typeAttrExpr->mCloseParen);
  431. }
  432. void BfElementVisitor::Visit(BfOffsetOfExpression* offsetOfExpr)
  433. {
  434. Visit(offsetOfExpr->ToBase());
  435. VisitChild(offsetOfExpr->mToken);
  436. VisitChild(offsetOfExpr->mOpenParen);
  437. VisitChild(offsetOfExpr->mTypeRef);
  438. VisitChild(offsetOfExpr->mCommaToken);
  439. VisitChild(offsetOfExpr->mMemberName);
  440. VisitChild(offsetOfExpr->mCloseParen);
  441. }
  442. void BfElementVisitor::Visit(BfNameOfExpression* nameOfExpr)
  443. {
  444. Visit(nameOfExpr->ToBase());
  445. VisitChild(nameOfExpr->mToken);
  446. VisitChild(nameOfExpr->mOpenParen);
  447. VisitChild(nameOfExpr->mTarget);
  448. VisitChild(nameOfExpr->mCloseParen);
  449. }
  450. void BfElementVisitor::Visit(BfDefaultExpression* defaultExpr)
  451. {
  452. Visit(defaultExpr->ToBase());
  453. VisitChild(defaultExpr->mDefaultToken);
  454. VisitChild(defaultExpr->mOpenParen);
  455. VisitChild(defaultExpr->mTypeRef);
  456. VisitChild(defaultExpr->mCloseParen);
  457. }
  458. void BfElementVisitor::Visit(BfIsConstExpression* isConstExpr)
  459. {
  460. Visit(isConstExpr->ToBase());
  461. VisitChild(isConstExpr->mIsConstToken);
  462. VisitChild(isConstExpr->mOpenParen);
  463. VisitChild(isConstExpr->mExpression);
  464. VisitChild(isConstExpr->mCloseParen);
  465. }
  466. void BfElementVisitor::Visit(BfUninitializedExpression* uninitializedExpr)
  467. {
  468. Visit(uninitializedExpr->ToBase());
  469. VisitChild(uninitializedExpr->mQuestionToken);
  470. }
  471. void BfElementVisitor::Visit(BfCheckTypeExpression* checkTypeExpr)
  472. {
  473. Visit(checkTypeExpr->ToBase());
  474. VisitChild(checkTypeExpr->mTarget);
  475. VisitChild(checkTypeExpr->mIsToken);
  476. VisitChild(checkTypeExpr->mTypeRef);
  477. }
  478. void BfElementVisitor::Visit(BfDynamicCastExpression* dynCastExpr)
  479. {
  480. Visit(dynCastExpr->ToBase());
  481. VisitChild(dynCastExpr->mTarget);
  482. VisitChild(dynCastExpr->mAsToken);
  483. VisitChild(dynCastExpr->mTypeRef);
  484. }
  485. void BfElementVisitor::Visit(BfCastExpression* castExpr)
  486. {
  487. Visit(castExpr->ToBase());
  488. VisitChild(castExpr->mOpenParen);
  489. VisitChild(castExpr->mTypeRef);
  490. VisitChild(castExpr->mCloseParen);
  491. }
  492. void BfElementVisitor::Visit(BfDelegateBindExpression* bindExpr)
  493. {
  494. Visit(bindExpr->ToBase());
  495. VisitChild(bindExpr->mNewToken);
  496. VisitChild(bindExpr->mFatArrowToken);
  497. VisitChild(bindExpr->mTarget);
  498. VisitChild(bindExpr->mGenericArgs);
  499. }
  500. void BfElementVisitor::Visit(BfLambdaBindExpression* lambdaBindExpr)
  501. {
  502. Visit(lambdaBindExpr->ToBase());
  503. VisitChild(lambdaBindExpr->mNewToken);
  504. VisitChild(lambdaBindExpr->mOpenParen);
  505. VisitChild(lambdaBindExpr->mCloseParen);
  506. for (auto& val : lambdaBindExpr->mParams)
  507. VisitChild(val);
  508. for (auto& val : lambdaBindExpr->mCommas)
  509. VisitChild(val);
  510. VisitChild(lambdaBindExpr->mFatArrowToken);
  511. VisitChild(lambdaBindExpr->mBody); // Either expression or block
  512. VisitChild(lambdaBindExpr->mDtor);
  513. }
  514. void BfElementVisitor::Visit(BfObjectCreateExpression* newExpr)
  515. {
  516. Visit(newExpr->ToBase());
  517. VisitChild(newExpr->mNewNode);
  518. VisitChild(newExpr->mStarToken);
  519. VisitChild(newExpr->mTypeRef);
  520. VisitChild(newExpr->mCtorExplicit);
  521. VisitChild(newExpr->mOpenToken);
  522. VisitChild(newExpr->mCloseToken);
  523. for (auto& val : newExpr->mArguments)
  524. VisitChild(val);
  525. for (auto& val : newExpr->mCommas)
  526. VisitChild(val);
  527. }
  528. void BfElementVisitor::Visit(BfBoxExpression* boxExpr)
  529. {
  530. Visit(boxExpr->ToBase());
  531. VisitChild(boxExpr->mAllocNode);
  532. VisitChild(boxExpr->mBoxToken);
  533. VisitChild(boxExpr->mExpression);
  534. }
  535. void BfElementVisitor::Visit(BfScopedInvocationTarget* scopedTarget)
  536. {
  537. Visit(scopedTarget->ToBase());
  538. VisitChild(scopedTarget->mTarget);
  539. VisitChild(scopedTarget->mColonToken);
  540. VisitChild(scopedTarget->mScopeName);
  541. }
  542. void BfElementVisitor::Visit(BfThrowStatement* throwStmt)
  543. {
  544. Visit(throwStmt->ToBase());
  545. VisitChild(throwStmt->mThrowToken);
  546. VisitChild(throwStmt->mExpression);
  547. }
  548. void BfElementVisitor::Visit(BfDeleteStatement* deleteStmt)
  549. {
  550. Visit(deleteStmt->ToBase());
  551. VisitChild(deleteStmt->mDeleteToken);
  552. VisitChild(deleteStmt->mTargetTypeToken);
  553. VisitChild(deleteStmt->mAllocExpr);
  554. VisitChild(deleteStmt->mExpression);
  555. }
  556. void BfElementVisitor::Visit(BfInvocationExpression* invocationExpr)
  557. {
  558. Visit(invocationExpr->ToBase());
  559. VisitChild(invocationExpr->mTarget);
  560. VisitChild(invocationExpr->mOpenParen);
  561. VisitChild(invocationExpr->mCloseParen);
  562. VisitChild(invocationExpr->mGenericArgs);
  563. for (auto& val : invocationExpr->mArguments)
  564. VisitChild(val);
  565. for (auto& val : invocationExpr->mCommas)
  566. VisitChild(val);
  567. }
  568. void BfElementVisitor::Visit(BfEnumCaseBindExpression* caseBindExpr)
  569. {
  570. Visit(caseBindExpr->ToBase());
  571. VisitChild(caseBindExpr->mBindToken);
  572. VisitChild(caseBindExpr->mEnumMemberExpr);
  573. VisitChild(caseBindExpr->mBindNames);
  574. }
  575. void BfElementVisitor::Visit(BfCaseExpression* caseExpr)
  576. {
  577. Visit(caseExpr->ToBase());
  578. VisitChild(caseExpr->mNotToken);
  579. VisitChild(caseExpr->mCaseToken);
  580. VisitChild(caseExpr->mCaseExpression);
  581. VisitChild(caseExpr->mEqualsNode);
  582. VisitChild(caseExpr->mValueExpression);
  583. }
  584. void BfElementVisitor::Visit(BfSwitchCase* switchCase)
  585. {
  586. Visit(switchCase->ToBase());
  587. VisitChild(switchCase->mCaseToken);
  588. for (auto& val : switchCase->mCaseExpressions)
  589. VisitChild(val);
  590. for (auto& val : switchCase->mCaseCommas)
  591. VisitChild(val);
  592. VisitChild(switchCase->mColonToken);
  593. VisitChild(switchCase->mCodeBlock);
  594. VisitChild(switchCase->mEndingToken);
  595. VisitChild(switchCase->mEndingSemicolonToken);
  596. }
  597. void BfElementVisitor::Visit(BfWhenExpression* whenExpr)
  598. {
  599. Visit(whenExpr->ToBase());
  600. VisitChild(whenExpr->mWhenToken);
  601. VisitChild(whenExpr->mExpression);
  602. }
  603. void BfElementVisitor::Visit(BfSwitchStatement* switchStmt)
  604. {
  605. Visit(switchStmt->ToBase());
  606. VisitChild(switchStmt->mSwitchToken);
  607. VisitChild(switchStmt->mOpenParen);
  608. VisitChild(switchStmt->mSwitchValue);
  609. VisitChild(switchStmt->mCloseParen);
  610. VisitChild(switchStmt->mOpenBrace);
  611. for (auto& val : switchStmt->mSwitchCases)
  612. VisitChild(val);
  613. VisitChild(switchStmt->mDefaultCase);
  614. VisitChild(switchStmt->mCloseBrace);
  615. }
  616. void BfElementVisitor::Visit(BfTryStatement* tryStmt)
  617. {
  618. Visit(tryStmt->ToBase());
  619. VisitChild(tryStmt->mTryToken);
  620. VisitChild(tryStmt->mStatement);
  621. }
  622. void BfElementVisitor::Visit(BfCatchStatement* catchStmt)
  623. {
  624. Visit(catchStmt->ToBase());
  625. VisitChild(catchStmt->mCatchToken);
  626. VisitChild(catchStmt->mStatement);
  627. }
  628. void BfElementVisitor::Visit(BfFinallyStatement* finallyStmt)
  629. {
  630. Visit(finallyStmt->ToBase());
  631. VisitChild(finallyStmt->mFinallyToken);
  632. VisitChild(finallyStmt->mStatement);
  633. }
  634. void BfElementVisitor::Visit(BfCheckedStatement* checkedStmt)
  635. {
  636. Visit(checkedStmt->ToBase());
  637. VisitChild(checkedStmt->mCheckedToken);
  638. VisitChild(checkedStmt->mStatement);
  639. }
  640. void BfElementVisitor::Visit(BfUncheckedStatement* uncheckedStmt)
  641. {
  642. Visit(uncheckedStmt->ToBase());
  643. VisitChild(uncheckedStmt->mUncheckedToken);
  644. VisitChild(uncheckedStmt->mStatement);
  645. }
  646. void BfElementVisitor::Visit(BfIfStatement* ifStmt)
  647. {
  648. Visit(ifStmt->ToBase());
  649. VisitChild(ifStmt->mIfToken);
  650. VisitChild(ifStmt->mOpenParen);
  651. VisitChild(ifStmt->mCondition);
  652. VisitChild(ifStmt->mCloseParen);
  653. VisitChild(ifStmt->mTrueStatement);
  654. VisitChild(ifStmt->mElseToken);
  655. VisitChild(ifStmt->mFalseStatement);
  656. }
  657. void BfElementVisitor::Visit(BfDeferStatement* deferStmt)
  658. {
  659. Visit(deferStmt->ToBase());
  660. VisitChild(deferStmt->mDeferToken);
  661. VisitChild(deferStmt->mColonToken);
  662. VisitChild(deferStmt->mScopeName);
  663. if (deferStmt->mBind != NULL)
  664. {
  665. auto bind = deferStmt->mBind;
  666. VisitChild(bind->mOpenBracket);
  667. VisitChild(bind->mCloseBracket);
  668. for (auto& val : bind->mParams)
  669. VisitChild(val);
  670. for (auto& val : bind->mCommas)
  671. VisitChild(val);
  672. }
  673. VisitChild(deferStmt->mOpenParen);
  674. VisitChild(deferStmt->mScopeToken);
  675. VisitChild(deferStmt->mCloseParen);
  676. VisitChild(deferStmt->mTargetNode);
  677. }
  678. void BfElementVisitor::Visit(BfReturnStatement* returnStmt)
  679. {
  680. Visit(returnStmt->ToBase());
  681. VisitChild(returnStmt->mReturnToken);
  682. VisitChild(returnStmt->mExpression);
  683. }
  684. void BfElementVisitor::Visit(BfYieldStatement* yieldStmt)
  685. {
  686. Visit(yieldStmt->ToBase());
  687. VisitChild(yieldStmt->mReturnOrBreakToken);
  688. VisitChild(yieldStmt->mExpression);
  689. }
  690. void BfElementVisitor::Visit(BfUsingStatement* usingStmt)
  691. {
  692. Visit(usingStmt->ToBase());
  693. VisitChild(usingStmt->mUsingToken);
  694. VisitChild(usingStmt->mOpenParen);
  695. VisitChild(usingStmt->mVariableDeclaration);
  696. VisitChild(usingStmt->mCloseParen);
  697. VisitChild(usingStmt->mEmbeddedStatement);
  698. }
  699. void BfElementVisitor::Visit(BfDoStatement* doStmt)
  700. {
  701. Visit(doStmt->ToBase());
  702. VisitChild(doStmt->mDoToken);
  703. VisitChild(doStmt->mEmbeddedStatement);
  704. }
  705. void BfElementVisitor::Visit(BfRepeatStatement* repeatStmt)
  706. {
  707. Visit(repeatStmt->ToBase());
  708. VisitChild(repeatStmt->mRepeatToken);
  709. VisitChild(repeatStmt->mEmbeddedStatement);
  710. VisitChild(repeatStmt->mWhileToken);
  711. VisitChild(repeatStmt->mOpenParen);
  712. VisitChild(repeatStmt->mCondition);
  713. VisitChild(repeatStmt->mCloseParen);
  714. }
  715. void BfElementVisitor::Visit(BfWhileStatement* whileStmt)
  716. {
  717. Visit(whileStmt->ToBase());
  718. VisitChild(whileStmt->mWhileToken);
  719. VisitChild(whileStmt->mOpenParen);
  720. VisitChild(whileStmt->mCondition);
  721. VisitChild(whileStmt->mCloseParen);
  722. VisitChild(whileStmt->mEmbeddedStatement);
  723. }
  724. void BfElementVisitor::Visit(BfBreakStatement* breakStmt)
  725. {
  726. Visit(breakStmt->ToBase());
  727. VisitChild(breakStmt->mBreakNode);
  728. VisitChild(breakStmt->mLabel);
  729. }
  730. void BfElementVisitor::Visit(BfContinueStatement* continueStmt)
  731. {
  732. Visit(continueStmt->ToBase());
  733. VisitChild(continueStmt->mContinueNode);
  734. VisitChild(continueStmt->mLabel);
  735. }
  736. void BfElementVisitor::Visit(BfFallthroughStatement* fallthroughStmt)
  737. {
  738. Visit(fallthroughStmt->ToBase());
  739. VisitChild(fallthroughStmt->mFallthroughToken);
  740. VisitChild(fallthroughStmt->mLabel);
  741. }
  742. void BfElementVisitor::Visit(BfForStatement* forStmt)
  743. {
  744. Visit(forStmt->ToBase());
  745. VisitChild(forStmt->mForToken);
  746. VisitChild(forStmt->mOpenParen);
  747. for (auto& val : forStmt->mInitializers)
  748. VisitChild(val);
  749. for (auto& val : forStmt->mInitializerCommas)
  750. VisitChild(val);
  751. VisitChild(forStmt->mInitializerSemicolon);
  752. VisitChild(forStmt->mCondition);
  753. VisitChild(forStmt->mConditionSemicolon);
  754. for (auto& val : forStmt->mIterators)
  755. VisitChild(val);
  756. for (auto& val : forStmt->mIteratorCommas)
  757. VisitChild(val);
  758. VisitChild(forStmt->mCloseParen);
  759. VisitChild(forStmt->mEmbeddedStatement);
  760. }
  761. void BfElementVisitor::Visit(BfForEachStatement* forEachStmt)
  762. {
  763. Visit(forEachStmt->ToBase());
  764. VisitChild(forEachStmt->mForToken);
  765. VisitChild(forEachStmt->mOpenParen);
  766. VisitChild(forEachStmt->mReadOnlyToken);
  767. VisitChild(forEachStmt->mVariableTypeRef);
  768. VisitChild(forEachStmt->mVariableName);
  769. VisitChild(forEachStmt->mInToken);
  770. VisitChild(forEachStmt->mCollectionExpression);
  771. VisitChild(forEachStmt->mCloseParen);
  772. VisitChild(forEachStmt->mEmbeddedStatement);
  773. }
  774. void BfElementVisitor::Visit(BfConditionalExpression* condExpr)
  775. {
  776. Visit(condExpr->ToBase());
  777. VisitChild(condExpr->mConditionExpression);
  778. VisitChild(condExpr->mQuestionToken);
  779. VisitChild(condExpr->mTrueExpression);
  780. VisitChild(condExpr->mColonToken);
  781. VisitChild(condExpr->mFalseExpression);
  782. }
  783. void BfElementVisitor::Visit(BfAssignmentExpression* assignExpr)
  784. {
  785. Visit(assignExpr->ToBase());
  786. VisitChild(assignExpr->mOpToken);
  787. VisitChild(assignExpr->mLeft);
  788. VisitChild(assignExpr->mRight);
  789. }
  790. void BfElementVisitor::Visit(BfParenthesizedExpression* parenExpr)
  791. {
  792. Visit(parenExpr->ToBase());
  793. VisitChild(parenExpr->mOpenParen);
  794. VisitChild(parenExpr->mExpression);
  795. VisitChild(parenExpr->mCloseParen);
  796. }
  797. void BfElementVisitor::Visit(BfTupleExpression* tupleExpr)
  798. {
  799. Visit(tupleExpr->ToBase());
  800. VisitChild(tupleExpr->mOpenParen);
  801. for (auto& val : tupleExpr->mNames)
  802. {
  803. if (val != NULL)
  804. {
  805. VisitChild(val->mNameNode);
  806. VisitChild(val->mColonToken);
  807. }
  808. }
  809. for (auto& val : tupleExpr->mValues)
  810. VisitChild(val);
  811. for (auto& val : tupleExpr->mCommas)
  812. VisitChild(val);
  813. VisitChild(tupleExpr->mCloseParen);
  814. }
  815. void BfElementVisitor::Visit(BfMemberReferenceExpression* memberRefExpr)
  816. {
  817. Visit(memberRefExpr->ToBase());
  818. VisitChild(memberRefExpr->mDotToken);
  819. VisitChild(memberRefExpr->mTarget);
  820. VisitChild(memberRefExpr->mMemberName);
  821. }
  822. void BfElementVisitor::Visit(BfIndexerExpression* indexerExpr)
  823. {
  824. Visit(indexerExpr->ToBase());
  825. VisitChild(indexerExpr->mTarget);
  826. VisitChild(indexerExpr->mOpenBracket);
  827. VisitChild(indexerExpr->mCloseBracket);
  828. for (auto& arg : indexerExpr->mArguments)
  829. VisitChild(arg);
  830. for (auto& comma : indexerExpr->mCommas)
  831. VisitChild(comma);
  832. }
  833. void BfElementVisitor::Visit(BfUnaryOperatorExpression* binOpExpr)
  834. {
  835. Visit(binOpExpr->ToBase());
  836. VisitChild(binOpExpr->mOpToken);
  837. VisitChild(binOpExpr->mExpression);
  838. }
  839. void BfElementVisitor::Visit(BfBinaryOperatorExpression* binOpExpr)
  840. {
  841. Visit(binOpExpr->ToBase());
  842. VisitChild(binOpExpr->mOpToken);
  843. VisitChild(binOpExpr->mLeft);
  844. VisitChild(binOpExpr->mRight);
  845. }
  846. void BfElementVisitor::Visit(BfConstructorDeclaration* ctorDeclaration)
  847. {
  848. Visit(ctorDeclaration->ToBase());
  849. VisitChild(ctorDeclaration->mThisToken);
  850. VisitChild(ctorDeclaration->mInitializerColonToken);
  851. VisitChild(ctorDeclaration->mInitializer);
  852. }
  853. void BfElementVisitor::Visit(BfAutoConstructorDeclaration* ctorDeclaration)
  854. {
  855. VisitChild(ctorDeclaration->mPrefix);
  856. Visit(ctorDeclaration->ToBase());
  857. }
  858. void BfElementVisitor::Visit(BfDestructorDeclaration* dtorDeclaration)
  859. {
  860. Visit(dtorDeclaration->ToBase());
  861. VisitChild(dtorDeclaration->mTildeToken);
  862. VisitChild(dtorDeclaration->mThisToken);
  863. }
  864. void BfElementVisitor::Visit(BfMethodDeclaration* methodDeclaration)
  865. {
  866. Visit(methodDeclaration->ToBase());
  867. VisitChild(methodDeclaration->mAttributes);
  868. VisitChild(methodDeclaration->mProtectionSpecifier);
  869. VisitChild(methodDeclaration->mReadOnlySpecifier);
  870. VisitChild(methodDeclaration->mStaticSpecifier);
  871. VisitChild(methodDeclaration->mExternSpecifier);
  872. VisitChild(methodDeclaration->mVirtualSpecifier); // either 'virtual', 'override', or 'abstract'
  873. VisitChild(methodDeclaration->mNewSpecifier);
  874. VisitChild(methodDeclaration->mMixinSpecifier);
  875. VisitChild(methodDeclaration->mPartialSpecifier);
  876. VisitChild(methodDeclaration->mMutSpecifier);
  877. VisitChild(methodDeclaration->mReturnType);
  878. VisitChild(methodDeclaration->mExplicitInterface);
  879. VisitChild(methodDeclaration->mExplicitInterfaceDotToken);
  880. VisitChild(methodDeclaration->mNameNode);
  881. VisitChild(methodDeclaration->mOpenParen);
  882. VisitChild(methodDeclaration->mThisToken);
  883. for (auto& param : methodDeclaration->mParams)
  884. VisitChild(param);
  885. for (auto& comma : methodDeclaration->mCommas)
  886. VisitChild(comma);
  887. VisitChild(methodDeclaration->mCloseParen);
  888. VisitChild(methodDeclaration->mGenericParams);
  889. VisitChild(methodDeclaration->mGenericConstraintsDeclaration);
  890. VisitChild(methodDeclaration->mEndSemicolon);
  891. VisitChild(methodDeclaration->mFatArrowToken);
  892. VisitChild(methodDeclaration->mBody);
  893. }
  894. void BfElementVisitor::Visit(BfOperatorDeclaration* operatorDeclaration)
  895. {
  896. Visit(operatorDeclaration->ToBase());
  897. VisitChild(operatorDeclaration->mExplicitToken);
  898. VisitChild(operatorDeclaration->mOperatorToken);
  899. VisitChild(operatorDeclaration->mOpTypeToken);
  900. }
  901. void BfElementVisitor::Visit(BfPropertyMethodDeclaration* propertyDeclaration)
  902. {
  903. Visit(propertyDeclaration->ToBase());
  904. VisitChild(propertyDeclaration->mAttributes);
  905. VisitChild(propertyDeclaration->mProtectionSpecifier);
  906. VisitChild(propertyDeclaration->mNameNode);
  907. VisitChild(propertyDeclaration->mSetRefSpecifier);
  908. VisitChild(propertyDeclaration->mMutSpecifier);
  909. VisitChild(propertyDeclaration->mFatArrowToken);
  910. VisitChild(propertyDeclaration->mBody);
  911. VisitChild(propertyDeclaration->mEndSemicolon);
  912. }
  913. void BfElementVisitor::Visit(BfPropertyBodyExpression* propertyBodyExpression)
  914. {
  915. Visit(propertyBodyExpression->ToBase());
  916. VisitChild(propertyBodyExpression->mMutSpecifier);
  917. VisitChild(propertyBodyExpression->mFatTokenArrow);
  918. }
  919. void BfElementVisitor::Visit(BfPropertyDeclaration* propertyDeclaration)
  920. {
  921. Visit(propertyDeclaration->ToBase());
  922. VisitChild(propertyDeclaration->mAttributes);
  923. VisitChild(propertyDeclaration->mProtectionSpecifier);
  924. VisitChild(propertyDeclaration->mStaticSpecifier);
  925. VisitChild(propertyDeclaration->mVirtualSpecifier); // either 'virtual', 'override', or 'abstract'
  926. VisitChild(propertyDeclaration->mExplicitInterface);
  927. VisitChild(propertyDeclaration->mExplicitInterfaceDotToken);
  928. if (auto block = BfNodeDynCast<BfBlock>(propertyDeclaration->mDefinitionBlock))
  929. {
  930. VisitChild(block->mOpenBrace);
  931. for (auto& method : propertyDeclaration->mMethods)
  932. VisitChild(method);
  933. VisitChild(block->mCloseBrace);
  934. }
  935. else
  936. {
  937. VisitChild(propertyDeclaration->mDefinitionBlock);
  938. for (auto& method : propertyDeclaration->mMethods)
  939. VisitChild(method);
  940. }
  941. }
  942. void BfElementVisitor::Visit(BfIndexerDeclaration* indexerDeclaration)
  943. {
  944. Visit(indexerDeclaration->ToBase());
  945. VisitChild(indexerDeclaration->mThisToken);
  946. VisitChild(indexerDeclaration->mOpenBracket);
  947. for (auto& param : indexerDeclaration->mParams)
  948. VisitChild(param);
  949. for (auto& comma : indexerDeclaration->mCommas)
  950. VisitChild(comma);
  951. VisitChild(indexerDeclaration->mCloseBracket);
  952. }
  953. void BfElementVisitor::Visit(BfFieldDeclaration* fieldDeclaration)
  954. {
  955. Visit(fieldDeclaration->ToBase());
  956. VisitChild(fieldDeclaration->mAttributes);
  957. VisitChild(fieldDeclaration->mProtectionSpecifier);
  958. VisitChild(fieldDeclaration->mStaticSpecifier);
  959. VisitChild(fieldDeclaration->mPrecedingComma);
  960. VisitChild(fieldDeclaration->mConstSpecifier);
  961. VisitChild(fieldDeclaration->mReadOnlySpecifier);
  962. VisitChild(fieldDeclaration->mVolatileSpecifier);
  963. VisitChild(fieldDeclaration->mNewSpecifier);
  964. VisitChild(fieldDeclaration->mExternSpecifier);
  965. VisitChild(fieldDeclaration->mTypeRef);
  966. VisitChild(fieldDeclaration->mNameNode);
  967. VisitChild(fieldDeclaration->mEqualsNode);
  968. VisitChild(fieldDeclaration->mInitializer);
  969. VisitChild(fieldDeclaration->mFieldDtor);
  970. }
  971. void BfElementVisitor::Visit(BfEnumCaseDeclaration* enumCaseDeclaration)
  972. {
  973. Visit(enumCaseDeclaration->ToBase());
  974. VisitChild(enumCaseDeclaration->mCaseToken);
  975. for (auto& entry : enumCaseDeclaration->mEntries)
  976. VisitChild(entry);
  977. for (auto& comma : enumCaseDeclaration->mCommas)
  978. VisitChild(comma);
  979. }
  980. void BfElementVisitor::Visit(BfFieldDtorDeclaration* fieldDtorDeclaration)
  981. {
  982. Visit(fieldDtorDeclaration->ToBase());
  983. VisitChild(fieldDtorDeclaration->mTildeToken);
  984. VisitChild(fieldDtorDeclaration->mBody);
  985. VisitChild(fieldDtorDeclaration->mNextFieldDtor);
  986. }
  987. void BfElementVisitor::Visit(BfTypeDeclaration* typeDeclaration)
  988. {
  989. Visit(typeDeclaration->ToBase());
  990. VisitChild(typeDeclaration->mAttributes);
  991. VisitChild(typeDeclaration->mAbstractSpecifier);
  992. VisitChild(typeDeclaration->mSealedSpecifier);
  993. VisitChild(typeDeclaration->mProtectionSpecifier);
  994. VisitChild(typeDeclaration->mStaticSpecifier);
  995. VisitChild(typeDeclaration->mPartialSpecifier);
  996. VisitChild(typeDeclaration->mTypeNode);
  997. VisitChild(typeDeclaration->mNameNode);
  998. VisitChild(typeDeclaration->mColonToken);
  999. VisitChild(typeDeclaration->mAutoCtor);
  1000. for (auto& baseClass : typeDeclaration->mBaseClasses)
  1001. VisitChild(baseClass);
  1002. for (auto& comma : typeDeclaration->mBaseClassCommas)
  1003. VisitChild(comma);
  1004. VisitChild(typeDeclaration->mGenericParams);
  1005. VisitChild(typeDeclaration->mGenericConstraintsDeclaration);
  1006. VisitChild(typeDeclaration->mDefineNode);
  1007. /*if (typeDeclaration->mDefineBlock != NULL)
  1008. {
  1009. for (auto& member : *typeDeclaration->mDefineBlock)
  1010. VisitChild(member);
  1011. }*/
  1012. }
  1013. void BfElementVisitor::Visit(BfTypeAliasDeclaration* typeDeclaration)
  1014. {
  1015. Visit(typeDeclaration->ToBase());
  1016. VisitChild(typeDeclaration->mEqualsToken);
  1017. VisitChild(typeDeclaration->mAliasToType);
  1018. VisitChild(typeDeclaration->mEndSemicolon);
  1019. }
  1020. void BfElementVisitor::Visit(BfUsingDirective* usingDirective)
  1021. {
  1022. Visit(usingDirective->ToBase());
  1023. VisitChild(usingDirective->mUsingToken);
  1024. VisitChild(usingDirective->mNamespace);
  1025. }
  1026. void BfElementVisitor::Visit(BfUsingModDirective* usingDirective)
  1027. {
  1028. Visit(usingDirective->ToBase());
  1029. VisitChild(usingDirective->mUsingToken);
  1030. VisitChild(usingDirective->mModToken);
  1031. VisitChild(usingDirective->mTypeRef);
  1032. }
  1033. void BfElementVisitor::Visit(BfNamespaceDeclaration* namespaceDeclaration)
  1034. {
  1035. Visit(namespaceDeclaration->ToBase());
  1036. VisitChild(namespaceDeclaration->mNamespaceNode);
  1037. VisitChild(namespaceDeclaration->mNameNode);
  1038. VisitChild(namespaceDeclaration->mBody);
  1039. }
  1040. void BfElementVisitor::Visit(BfBlock* block)
  1041. {
  1042. Visit(block->ToBase());
  1043. VisitChild(block->mOpenBrace);
  1044. VisitMembers(block);
  1045. VisitChild(block->mCloseBrace);
  1046. }
  1047. void BfElementVisitor::Visit(BfRootNode* rootNode)
  1048. {
  1049. Visit(rootNode->ToBase());
  1050. VisitMembers(rootNode);
  1051. }
  1052. void BfElementVisitor::Visit(BfInlineAsmStatement* asmStmt)
  1053. {
  1054. Visit(asmStmt->ToBase());
  1055. }
  1056. void BfElementVisitor::Visit(BfInlineAsmInstruction* asmInst)
  1057. {
  1058. Visit(asmInst->ToBase());
  1059. }