123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317 |
- #include "BfElementVisitor.h"
- USING_NS_BF;
- //////////////////////////////////////////////////////////////////////////
- BfElementVisitor::BfElementVisitor()
- {
- }
- void BfElementVisitor::Visit(BfTypedValueExpression* typedValueExpr)
- {
- Visit(typedValueExpr->ToBase());
- }
- void BfElementVisitor::Visit(BfCommentNode* commentNode)
- {
- Visit(commentNode->ToBase());
- }
- void BfElementVisitor::Visit(BfPreprocesorIgnoredSectionNode* preprocesorIgnoredSection)
- {
- Visit(preprocesorIgnoredSection->ToBase());
- }
- void BfElementVisitor::Visit(BfPreprocessorNode* preprocessorNode)
- {
- Visit(preprocessorNode->ToBase());
- VisitChild(preprocessorNode->mCommand);
- VisitChild(preprocessorNode->mArgument);
- }
- void BfElementVisitor::Visit(BfPreprocessorDefinedExpression* definedExpr)
- {
- Visit(definedExpr->ToBase());
- VisitChild(definedExpr->mIdentifier);
- }
- void BfElementVisitor::Visit(BfAttributeDirective* attributeDirective)
- {
- Visit(attributeDirective->ToBase());
- VisitChild(attributeDirective->mAttrOpenToken); // Either [ or ,
- VisitChild(attributeDirective->mAttrCloseToken);
- VisitChild(attributeDirective->mAttributeTargetSpecifier);
- VisitChild(attributeDirective->mAttributeTypeRef);
- VisitChild(attributeDirective->mCtorOpenParen);
- VisitChild(attributeDirective->mCtorCloseParen);
- for (auto& val : attributeDirective->mArguments)
- VisitChild(val);
- for (auto& val : attributeDirective->mCommas)
- VisitChild(val);
- VisitChild(attributeDirective->mNextAttribute);
- }
- void BfElementVisitor::Visit(BfGenericParamsDeclaration* genericParams)
- {
- Visit(genericParams->ToBase());
- VisitChild(genericParams->mOpenChevron);
- for (auto& val : genericParams->mGenericParams)
- VisitChild(val);
- for (auto& val : genericParams->mCommas)
- VisitChild(val);
- VisitChild(genericParams->mCloseChevron);
- }
- void BfElementVisitor::Visit(BfGenericOperatorConstraint* genericConstraints)
- {
- Visit(genericConstraints->ToBase());
- VisitChild(genericConstraints->mOperatorToken);
- VisitChild(genericConstraints->mLeftType);
- VisitChild(genericConstraints->mOpToken);
- VisitChild(genericConstraints->mRightType);
- }
- void BfElementVisitor::Visit(BfGenericConstraintsDeclaration* genericConstraints)
- {
- Visit(genericConstraints->ToBase());
- for (auto genericConstraintNode : genericConstraints->mGenericConstraints)
- {
- if (auto genericConstraint = BfNodeDynCast<BfGenericConstraint>(genericConstraintNode))
- {
- VisitChild(genericConstraint->mWhereToken);
- VisitChild(genericConstraint->mTypeRef);
- VisitChild(genericConstraint->mColonToken);
- for (auto val : genericConstraint->mConstraintTypes)
- VisitChild(val);
- for (auto val : genericConstraint->mCommas)
- VisitChild(val);
- }
- else if (auto genericConstraintExpr = BfNodeDynCast<BfGenericConstraintExpression>(genericConstraintNode))
- {
- VisitChild(genericConstraintExpr->mWhereToken);
- VisitChild(genericConstraintExpr->mExpression);
- }
- }
- }
- void BfElementVisitor::Visit(BfGenericArgumentsNode* genericArgumentsNode)
- {
- Visit(genericArgumentsNode->ToBase());
- VisitChild(genericArgumentsNode->mOpenChevron);
- for (auto& val : genericArgumentsNode->mGenericArgs)
- VisitChild(val);
- for (auto& val : genericArgumentsNode->mCommas)
- VisitChild(val);
- VisitChild(genericArgumentsNode->mCloseChevron);
- }
- void BfElementVisitor::Visit(BfCtorExplicitNode* ctorExplicitNode)
- {
- Visit(ctorExplicitNode->ToBase());
- VisitChild(ctorExplicitNode->mDotToken);
- VisitChild(ctorExplicitNode->mThisToken);
- VisitChild(ctorExplicitNode->mGenericArgs);
- }
- void BfElementVisitor::Visit(BfStatement* stmt)
- {
- Visit(stmt->ToBase());
- VisitChild(stmt->mTrailingSemicolon);
- }
- void BfElementVisitor::Visit(BfAttributedStatement* attribStmt)
- {
- Visit(attribStmt->ToBase());
- VisitChild(attribStmt->mAttributes);
- VisitChild(attribStmt->mStatement);
- }
- void BfElementVisitor::Visit(BfLabelableStatement* labelableStmt)
- {
- Visit(labelableStmt->ToBase());
- if (labelableStmt->mLabelNode != NULL)
- {
- VisitChild(labelableStmt->mLabelNode->mLabel);
- VisitChild(labelableStmt->mLabelNode->mColonToken);
- }
- }
- void BfElementVisitor::Visit(BfErrorNode* bfErrorNode)
- {
- Visit(bfErrorNode->mRefNode);
- }
- void BfElementVisitor::Visit(BfScopeNode* scopeNode)
- {
- Visit(scopeNode->ToBase());
- VisitChild(scopeNode->mScopeToken);
- VisitChild(scopeNode->mColonToken);
- VisitChild(scopeNode->mTargetNode);
- VisitChild(scopeNode->mAttributes);
- }
- void BfElementVisitor::Visit(BfNewNode* newNode)
- {
- Visit(newNode->ToBase());
- VisitChild(newNode->mNewToken);
- VisitChild(newNode->mColonToken);
- VisitChild(newNode->mAllocNode);
- VisitChild(newNode->mAttributes);
- }
- void BfElementVisitor::Visit(BfLabeledBlock* labeledBlock)
- {
- Visit(labeledBlock->ToBase());
- VisitChild(labeledBlock->mBlock);
- }
- void BfElementVisitor::Visit(BfExpression* expr)
- {
- Visit(expr->ToBase());
- }
- void BfElementVisitor::Visit(BfExpressionStatement* exprStmt)
- {
- Visit(exprStmt->ToBase());
- VisitChild(exprStmt->mExpression);
- }
- void BfElementVisitor::Visit(BfNamedExpression* namedExpr)
- {
- Visit(namedExpr->ToBase());
- VisitChild(namedExpr->mNameNode);
- VisitChild(namedExpr->mColonToken);
- VisitChild(namedExpr->mExpression);
- }
- void BfElementVisitor::Visit(BfAttributedExpression* attribExpr)
- {
- Visit(attribExpr->ToBase());
- VisitChild(attribExpr->mAttributes);
- VisitChild(attribExpr->mExpression);
- }
- void BfElementVisitor::Visit(BfEmptyStatement* emptyStmt)
- {
- Visit(emptyStmt->ToBase());
- }
- void BfElementVisitor::Visit(BfTokenNode* tokenNode)
- {
- Visit(tokenNode->ToBase());
- }
- void BfElementVisitor::Visit(BfTokenPairNode* tokenPairNode)
- {
- Visit(tokenPairNode->ToBase());
- VisitChild(tokenPairNode->mLeft);
- VisitChild(tokenPairNode->mRight);
- }
- void BfElementVisitor::Visit(BfUsingSpecifierNode* usingSpecifier)
- {
- Visit(usingSpecifier->ToBase());
- VisitChild(usingSpecifier->mProtection);
- VisitChild(usingSpecifier->mUsingToken);
- }
- void BfElementVisitor::Visit(BfLiteralExpression* literalExpr)
- {
- Visit(literalExpr->ToBase());
- }
- void BfElementVisitor::Visit(BfStringInterpolationExpression* stringInterpolationExpression)
- {
- Visit(stringInterpolationExpression->ToBase());
- VisitChild(stringInterpolationExpression->mAllocNode);
- for (auto block : stringInterpolationExpression->mExpressions)
- {
- VisitChild(block);
- }
- }
- void BfElementVisitor::Visit(BfIdentifierNode* identifierNode)
- {
- Visit(identifierNode->ToBase());
- }
- void BfElementVisitor::Visit(BfAttributedIdentifierNode * attrIdentifierNode)
- {
- Visit(attrIdentifierNode->ToBase());
- VisitChild(attrIdentifierNode->mAttributes);
- VisitChild(attrIdentifierNode->mIdentifier);
- }
- void BfElementVisitor::Visit(BfQualifiedNameNode* nameNode)
- {
- Visit(nameNode->ToBase());
- VisitChild(nameNode->mLeft);
- VisitChild(nameNode->mDot);
- VisitChild(nameNode->mRight);
- }
- void BfElementVisitor::Visit(BfThisExpression* thisExpr)
- {
- Visit(thisExpr->ToBase());
- }
- void BfElementVisitor::Visit(BfBaseExpression* baseExpr)
- {
- Visit(baseExpr->ToBase());
- }
- void BfElementVisitor::Visit(BfMixinExpression* mixinExpr)
- {
- Visit(mixinExpr->ToBase());
- }
- void BfElementVisitor::Visit(BfSizedArrayCreateExpression* createExpr)
- {
- Visit(createExpr->ToBase());
- VisitChild(createExpr->mTypeRef);
- VisitChild(createExpr->mInitializer);
- }
- void BfElementVisitor::Visit(BfInitializerExpression* initExpr)
- {
- Visit(initExpr->ToBase());
- VisitChild(initExpr->mTarget);
- VisitChild(initExpr->mOpenBrace);
- VisitChild(initExpr->mInlineTypeRef);
- for (auto& val : initExpr->mValues)
- VisitChild(val);
- for (auto& val : initExpr->mCommas)
- VisitChild(val);
- VisitChild(initExpr->mCloseBrace);
- }
- void BfElementVisitor::Visit(BfCollectionInitializerExpression* collectionInitExpr)
- {
- Visit(collectionInitExpr->ToBase());
- VisitChild(collectionInitExpr->mOpenBrace);
- for (auto& val : collectionInitExpr->mValues)
- VisitChild(val);
- for (auto& val : collectionInitExpr->mCommas)
- VisitChild(val);
- VisitChild(collectionInitExpr->mCloseBrace);
- }
- void BfElementVisitor::Visit(BfTypeReference* typeRef)
- {
- Visit(typeRef->ToBase());
- }
- void BfElementVisitor::Visit(BfInlineTypeReference* typeRef)
- {
- Visit(typeRef->ToBase());
- VisitChild(typeRef->mTypeDeclaration);
- }
- void BfElementVisitor::Visit(BfNamedTypeReference* typeRef)
- {
- Visit(typeRef->ToBase());
- VisitChild(typeRef->mNameNode);
- }
- void BfElementVisitor::Visit(BfQualifiedTypeReference* qualifiedTypeRef)
- {
- Visit(qualifiedTypeRef->ToBase());
- VisitChild(qualifiedTypeRef->mLeft);
- VisitChild(qualifiedTypeRef->mDot);
- VisitChild(qualifiedTypeRef->mRight);
- }
- void BfElementVisitor::Visit(BfDotTypeReference* typeRef)
- {
- Visit(typeRef->ToBase());
- VisitChild(typeRef->mDotToken);
- }
- void BfElementVisitor::Visit(BfVarTypeReference* typeRef)
- {
- Visit(typeRef->ToBase());
- VisitChild(typeRef->mVarToken);
- }
- void BfElementVisitor::Visit(BfVarRefTypeReference* typeRef)
- {
- Visit(typeRef->ToBase());
- VisitChild(typeRef->mVarToken);
- VisitChild(typeRef->mRefToken);
- }
- void BfElementVisitor::Visit(BfLetTypeReference* typeRef)
- {
- Visit(typeRef->ToBase());
- VisitChild(typeRef->mLetToken);
- }
- void BfElementVisitor::Visit(BfConstTypeRef* typeRef)
- {
- Visit((BfTypeReference*)typeRef); // Skip the Elemented part so we can put the element in the right spot
- VisitChild(typeRef->mConstToken);
- VisitChild(typeRef->mElementType);
- }
- void BfElementVisitor::Visit(BfConstExprTypeRef* typeRef)
- {
- Visit((BfTypeReference*)typeRef); // Skip the Elemented part so we can put the element in the right spot
- VisitChild(typeRef->mConstToken);
- VisitChild(typeRef->mConstExpr);
- }
- void BfElementVisitor::Visit(BfRefTypeRef* typeRef)
- {
- Visit((BfTypeReference*)typeRef); // Skip the Elemented part so we can put the element in the right spot
- VisitChild(typeRef->mRefToken);
- VisitChild(typeRef->mElementType);
- }
- void BfElementVisitor::Visit(BfModifiedTypeRef * typeRef)
- {
- Visit((BfTypeReference*)typeRef); // Skip the Elemented part so we can put the element in the right spot
- VisitChild(typeRef->mRetTypeToken);
- VisitChild(typeRef->mOpenParen);
- VisitChild(typeRef->mElementType);
- VisitChild(typeRef->mCloseParen);
- }
- void BfElementVisitor::Visit(BfArrayTypeRef* typeRef)
- {
- Visit((BfTypeReference*)typeRef); // Skip the Elemented part so we can put the element in the right spot
- VisitChild(typeRef->mElementType);
- VisitChild(typeRef->mOpenBracket);
- for (auto& val : typeRef->mParams)
- VisitChild(val);
- VisitChild(typeRef->mCloseBracket);
- }
- void BfElementVisitor::Visit(BfGenericInstanceTypeRef* typeRef)
- {
- Visit(typeRef->ToBase());
- VisitChild(typeRef->mOpenChevron);
- for (auto& val : typeRef->mGenericArguments)
- VisitChild(val);
- if (typeRef->mCommas.mVals != NULL)
- {
- for (auto& val : typeRef->mCommas)
- VisitChild(val);
- }
- VisitChild(typeRef->mCloseChevron);
- }
- void BfElementVisitor::Visit(BfTupleTypeRef* typeRef)
- {
- Visit(typeRef->ToBase());
- VisitChild(typeRef->mOpenParen);
- for (auto& val : typeRef->mFieldNames)
- VisitChild(val);
- for (auto& val : typeRef->mFieldTypes)
- VisitChild(val);
- if (typeRef->mCommas.mVals != NULL)
- {
- for (auto& val : typeRef->mCommas)
- VisitChild(val);
- }
- VisitChild(typeRef->mCloseParen);
- }
- void BfElementVisitor::Visit(BfTagTypeRef* typeRef)
- {
- Visit(typeRef->ToBase());
- VisitChild(typeRef->mTagNode);
- VisitChild(typeRef->mNameNode);
- }
- void BfElementVisitor::Visit(BfExprModTypeRef* typeRef)
- {
- Visit(typeRef->ToBase());
- VisitChild(typeRef->mToken);
- VisitChild(typeRef->mOpenParen);
- VisitChild(typeRef->mTarget);
- VisitChild(typeRef->mCloseParen);
- }
- void BfElementVisitor::Visit(BfDelegateTypeRef* typeRef)
- {
- Visit((BfTypeReference*)typeRef);
- VisitChild(typeRef->mTypeToken);
- VisitChild(typeRef->mReturnType);
- VisitChild(typeRef->mAttributes);
- VisitChild(typeRef->mOpenParen);
- for (auto& param : typeRef->mParams)
- VisitChild(param);
- for (auto& comma : typeRef->mCommas)
- VisitChild(comma);
- VisitChild(typeRef->mCloseParen);
- }
- void BfElementVisitor::Visit(BfPointerTypeRef* typeRef)
- {
- Visit((BfTypeReference*)typeRef); // Skip the Elemented part so we can put the element in the right spot
- VisitChild(typeRef->mElementType);
- VisitChild(typeRef->mStarNode);
- }
- void BfElementVisitor::Visit(BfNullableTypeRef* typeRef)
- {
- Visit((BfTypeReference*)typeRef); // Skip the Elemented part so we can put the element in the right spot
- VisitChild(typeRef->mElementType);
- VisitChild(typeRef->mQuestionToken);
- }
- void BfElementVisitor::Visit(BfVariableDeclaration* varDecl)
- {
- Visit(varDecl->ToBase());
- VisitChild(varDecl->mAttributes);
- VisitChild(varDecl->mModSpecifier);
- VisitChild(varDecl->mTypeRef);
- VisitChild(varDecl->mPrecedingComma);
- VisitChild(varDecl->mNameNode); // Either BfIdentifierNode or BfTupleExpression
- VisitChild(varDecl->mEqualsNode);
- VisitChild(varDecl->mInitializer);
- }
- void BfElementVisitor::Visit(BfLocalMethodDeclaration* methodDecl)
- {
- Visit(methodDecl->ToBase());
- VisitChild(methodDecl->mMethodDeclaration);
- }
- void BfElementVisitor::Visit(BfParameterDeclaration* paramDecl)
- {
- Visit(paramDecl->ToBase());
- VisitChild(paramDecl->mModToken); // 'Params'
- }
- void BfElementVisitor::Visit(BfTypeAttrExpression* typeAttrExpr)
- {
- Visit(typeAttrExpr->ToBase());
- VisitChild(typeAttrExpr->mToken);
- VisitChild(typeAttrExpr->mOpenParen);
- VisitChild(typeAttrExpr->mTypeRef);
- VisitChild(typeAttrExpr->mCloseParen);
- }
- void BfElementVisitor::Visit(BfOffsetOfExpression* offsetOfExpr)
- {
- Visit(offsetOfExpr->ToBase());
- VisitChild(offsetOfExpr->mToken);
- VisitChild(offsetOfExpr->mOpenParen);
- VisitChild(offsetOfExpr->mTypeRef);
- VisitChild(offsetOfExpr->mCommaToken);
- VisitChild(offsetOfExpr->mMemberName);
- VisitChild(offsetOfExpr->mCloseParen);
- }
- void BfElementVisitor::Visit(BfNameOfExpression* nameOfExpr)
- {
- Visit(nameOfExpr->ToBase());
- VisitChild(nameOfExpr->mToken);
- VisitChild(nameOfExpr->mOpenParen);
- VisitChild(nameOfExpr->mTarget);
- VisitChild(nameOfExpr->mCloseParen);
- }
- void BfElementVisitor::Visit(BfDefaultExpression* defaultExpr)
- {
- Visit(defaultExpr->ToBase());
- VisitChild(defaultExpr->mDefaultToken);
- VisitChild(defaultExpr->mOpenParen);
- VisitChild(defaultExpr->mTypeRef);
- VisitChild(defaultExpr->mCloseParen);
- }
- void BfElementVisitor::Visit(BfIsConstExpression* isConstExpr)
- {
- Visit(isConstExpr->ToBase());
- VisitChild(isConstExpr->mIsConstToken);
- VisitChild(isConstExpr->mOpenParen);
- VisitChild(isConstExpr->mExpression);
- VisitChild(isConstExpr->mCloseParen);
- }
- void BfElementVisitor::Visit(BfUninitializedExpression* uninitializedExpr)
- {
- Visit(uninitializedExpr->ToBase());
- VisitChild(uninitializedExpr->mQuestionToken);
- }
- void BfElementVisitor::Visit(BfCheckTypeExpression* checkTypeExpr)
- {
- Visit(checkTypeExpr->ToBase());
- VisitChild(checkTypeExpr->mTarget);
- VisitChild(checkTypeExpr->mIsToken);
- VisitChild(checkTypeExpr->mTypeRef);
- }
- void BfElementVisitor::Visit(BfDynamicCastExpression* dynCastExpr)
- {
- Visit(dynCastExpr->ToBase());
- VisitChild(dynCastExpr->mTarget);
- VisitChild(dynCastExpr->mAsToken);
- VisitChild(dynCastExpr->mTypeRef);
- }
- void BfElementVisitor::Visit(BfCastExpression* castExpr)
- {
- Visit(castExpr->ToBase());
- VisitChild(castExpr->mOpenParen);
- VisitChild(castExpr->mTypeRef);
- VisitChild(castExpr->mCloseParen);
- }
- void BfElementVisitor::Visit(BfDelegateBindExpression* bindExpr)
- {
- Visit(bindExpr->ToBase());
- VisitChild(bindExpr->mNewToken);
- VisitChild(bindExpr->mFatArrowToken);
- VisitChild(bindExpr->mTarget);
- VisitChild(bindExpr->mGenericArgs);
- }
- void BfElementVisitor::Visit(BfLambdaBindExpression* lambdaBindExpr)
- {
- Visit(lambdaBindExpr->ToBase());
- VisitChild(lambdaBindExpr->mNewToken);
- VisitChild(lambdaBindExpr->mOpenParen);
- VisitChild(lambdaBindExpr->mCloseParen);
- for (auto& val : lambdaBindExpr->mParams)
- VisitChild(val);
- for (auto& val : lambdaBindExpr->mCommas)
- VisitChild(val);
- VisitChild(lambdaBindExpr->mFatArrowToken);
- VisitChild(lambdaBindExpr->mBody); // Either expression or block
- VisitChild(lambdaBindExpr->mDtor);
- }
- void BfElementVisitor::Visit(BfObjectCreateExpression* newExpr)
- {
- Visit(newExpr->ToBase());
- VisitChild(newExpr->mNewNode);
- VisitChild(newExpr->mStarToken);
- VisitChild(newExpr->mTypeRef);
- VisitChild(newExpr->mCtorExplicit);
- VisitChild(newExpr->mOpenToken);
- VisitChild(newExpr->mCloseToken);
- for (auto& val : newExpr->mArguments)
- VisitChild(val);
- for (auto& val : newExpr->mCommas)
- VisitChild(val);
- }
- void BfElementVisitor::Visit(BfBoxExpression* boxExpr)
- {
- Visit(boxExpr->ToBase());
- VisitChild(boxExpr->mAllocNode);
- VisitChild(boxExpr->mBoxToken);
- VisitChild(boxExpr->mExpression);
- }
- void BfElementVisitor::Visit(BfScopedInvocationTarget* scopedTarget)
- {
- Visit(scopedTarget->ToBase());
- VisitChild(scopedTarget->mTarget);
- VisitChild(scopedTarget->mColonToken);
- VisitChild(scopedTarget->mScopeName);
- }
- void BfElementVisitor::Visit(BfThrowStatement* throwStmt)
- {
- Visit(throwStmt->ToBase());
- VisitChild(throwStmt->mThrowToken);
- VisitChild(throwStmt->mExpression);
- }
- void BfElementVisitor::Visit(BfDeleteStatement* deleteStmt)
- {
- Visit(deleteStmt->ToBase());
- VisitChild(deleteStmt->mDeleteToken);
- VisitChild(deleteStmt->mTargetTypeToken);
- VisitChild(deleteStmt->mAllocExpr);
- VisitChild(deleteStmt->mExpression);
- }
- void BfElementVisitor::Visit(BfInvocationExpression* invocationExpr)
- {
- Visit(invocationExpr->ToBase());
- VisitChild(invocationExpr->mTarget);
- VisitChild(invocationExpr->mOpenParen);
- VisitChild(invocationExpr->mCloseParen);
- VisitChild(invocationExpr->mGenericArgs);
- for (auto& val : invocationExpr->mArguments)
- VisitChild(val);
- for (auto& val : invocationExpr->mCommas)
- VisitChild(val);
- }
- void BfElementVisitor::Visit(BfEnumCaseBindExpression* caseBindExpr)
- {
- Visit(caseBindExpr->ToBase());
- VisitChild(caseBindExpr->mBindToken);
- VisitChild(caseBindExpr->mEnumMemberExpr);
- VisitChild(caseBindExpr->mBindNames);
- }
- void BfElementVisitor::Visit(BfCaseExpression* caseExpr)
- {
- Visit(caseExpr->ToBase());
- VisitChild(caseExpr->mNotToken);
- VisitChild(caseExpr->mCaseToken);
- VisitChild(caseExpr->mCaseExpression);
- VisitChild(caseExpr->mEqualsNode);
- VisitChild(caseExpr->mValueExpression);
- }
- void BfElementVisitor::Visit(BfSwitchCase* switchCase)
- {
- Visit(switchCase->ToBase());
- VisitChild(switchCase->mCaseToken);
- for (auto& val : switchCase->mCaseExpressions)
- VisitChild(val);
- for (auto& val : switchCase->mCaseCommas)
- VisitChild(val);
- VisitChild(switchCase->mColonToken);
- VisitChild(switchCase->mCodeBlock);
- VisitChild(switchCase->mEndingToken);
- VisitChild(switchCase->mEndingSemicolonToken);
- }
- void BfElementVisitor::Visit(BfWhenExpression* whenExpr)
- {
- Visit(whenExpr->ToBase());
- VisitChild(whenExpr->mWhenToken);
- VisitChild(whenExpr->mExpression);
- }
- void BfElementVisitor::Visit(BfSwitchStatement* switchStmt)
- {
- Visit(switchStmt->ToBase());
- VisitChild(switchStmt->mSwitchToken);
- VisitChild(switchStmt->mOpenParen);
- VisitChild(switchStmt->mSwitchValue);
- VisitChild(switchStmt->mCloseParen);
- VisitChild(switchStmt->mOpenBrace);
- for (auto& val : switchStmt->mSwitchCases)
- VisitChild(val);
- VisitChild(switchStmt->mDefaultCase);
- VisitChild(switchStmt->mCloseBrace);
- }
- void BfElementVisitor::Visit(BfTryStatement* tryStmt)
- {
- Visit(tryStmt->ToBase());
- VisitChild(tryStmt->mTryToken);
- VisitChild(tryStmt->mStatement);
- }
- void BfElementVisitor::Visit(BfCatchStatement* catchStmt)
- {
- Visit(catchStmt->ToBase());
- VisitChild(catchStmt->mCatchToken);
- VisitChild(catchStmt->mStatement);
- }
- void BfElementVisitor::Visit(BfFinallyStatement* finallyStmt)
- {
- Visit(finallyStmt->ToBase());
- VisitChild(finallyStmt->mFinallyToken);
- VisitChild(finallyStmt->mStatement);
- }
- void BfElementVisitor::Visit(BfCheckedStatement* checkedStmt)
- {
- Visit(checkedStmt->ToBase());
- VisitChild(checkedStmt->mCheckedToken);
- VisitChild(checkedStmt->mStatement);
- }
- void BfElementVisitor::Visit(BfUncheckedStatement* uncheckedStmt)
- {
- Visit(uncheckedStmt->ToBase());
- VisitChild(uncheckedStmt->mUncheckedToken);
- VisitChild(uncheckedStmt->mStatement);
- }
- void BfElementVisitor::Visit(BfIfStatement* ifStmt)
- {
- Visit(ifStmt->ToBase());
- VisitChild(ifStmt->mIfToken);
- VisitChild(ifStmt->mOpenParen);
- VisitChild(ifStmt->mCondition);
- VisitChild(ifStmt->mCloseParen);
- VisitChild(ifStmt->mTrueStatement);
- VisitChild(ifStmt->mElseToken);
- VisitChild(ifStmt->mFalseStatement);
- }
- void BfElementVisitor::Visit(BfDeferStatement* deferStmt)
- {
- Visit(deferStmt->ToBase());
- VisitChild(deferStmt->mDeferToken);
- VisitChild(deferStmt->mColonToken);
- VisitChild(deferStmt->mScopeName);
- if (deferStmt->mBind != NULL)
- {
- auto bind = deferStmt->mBind;
- VisitChild(bind->mOpenBracket);
- VisitChild(bind->mCloseBracket);
- for (auto& val : bind->mParams)
- VisitChild(val);
- for (auto& val : bind->mCommas)
- VisitChild(val);
- }
- VisitChild(deferStmt->mOpenParen);
- VisitChild(deferStmt->mScopeToken);
- VisitChild(deferStmt->mCloseParen);
- VisitChild(deferStmt->mTargetNode);
- }
- void BfElementVisitor::Visit(BfReturnStatement* returnStmt)
- {
- Visit(returnStmt->ToBase());
- VisitChild(returnStmt->mReturnToken);
- VisitChild(returnStmt->mExpression);
- }
- void BfElementVisitor::Visit(BfYieldStatement* yieldStmt)
- {
- Visit(yieldStmt->ToBase());
- VisitChild(yieldStmt->mReturnOrBreakToken);
- VisitChild(yieldStmt->mExpression);
- }
- void BfElementVisitor::Visit(BfUsingStatement* usingStmt)
- {
- Visit(usingStmt->ToBase());
- VisitChild(usingStmt->mUsingToken);
- VisitChild(usingStmt->mOpenParen);
- VisitChild(usingStmt->mVariableDeclaration);
- VisitChild(usingStmt->mCloseParen);
- VisitChild(usingStmt->mEmbeddedStatement);
- }
- void BfElementVisitor::Visit(BfDoStatement* doStmt)
- {
- Visit(doStmt->ToBase());
- VisitChild(doStmt->mDoToken);
- VisitChild(doStmt->mEmbeddedStatement);
- }
- void BfElementVisitor::Visit(BfRepeatStatement* repeatStmt)
- {
- Visit(repeatStmt->ToBase());
- VisitChild(repeatStmt->mRepeatToken);
- VisitChild(repeatStmt->mEmbeddedStatement);
- VisitChild(repeatStmt->mWhileToken);
- VisitChild(repeatStmt->mOpenParen);
- VisitChild(repeatStmt->mCondition);
- VisitChild(repeatStmt->mCloseParen);
- }
- void BfElementVisitor::Visit(BfWhileStatement* whileStmt)
- {
- Visit(whileStmt->ToBase());
- VisitChild(whileStmt->mWhileToken);
- VisitChild(whileStmt->mOpenParen);
- VisitChild(whileStmt->mCondition);
- VisitChild(whileStmt->mCloseParen);
- VisitChild(whileStmt->mEmbeddedStatement);
- }
- void BfElementVisitor::Visit(BfBreakStatement* breakStmt)
- {
- Visit(breakStmt->ToBase());
- VisitChild(breakStmt->mBreakNode);
- VisitChild(breakStmt->mLabel);
- }
- void BfElementVisitor::Visit(BfContinueStatement* continueStmt)
- {
- Visit(continueStmt->ToBase());
- VisitChild(continueStmt->mContinueNode);
- VisitChild(continueStmt->mLabel);
- }
- void BfElementVisitor::Visit(BfFallthroughStatement* fallthroughStmt)
- {
- Visit(fallthroughStmt->ToBase());
- VisitChild(fallthroughStmt->mFallthroughToken);
- VisitChild(fallthroughStmt->mLabel);
- }
- void BfElementVisitor::Visit(BfForStatement* forStmt)
- {
- Visit(forStmt->ToBase());
- VisitChild(forStmt->mForToken);
- VisitChild(forStmt->mOpenParen);
- for (auto& val : forStmt->mInitializers)
- VisitChild(val);
- for (auto& val : forStmt->mInitializerCommas)
- VisitChild(val);
- VisitChild(forStmt->mInitializerSemicolon);
- VisitChild(forStmt->mCondition);
- VisitChild(forStmt->mConditionSemicolon);
- for (auto& val : forStmt->mIterators)
- VisitChild(val);
- for (auto& val : forStmt->mIteratorCommas)
- VisitChild(val);
- VisitChild(forStmt->mCloseParen);
- VisitChild(forStmt->mEmbeddedStatement);
- }
- void BfElementVisitor::Visit(BfForEachStatement* forEachStmt)
- {
- Visit(forEachStmt->ToBase());
- VisitChild(forEachStmt->mForToken);
- VisitChild(forEachStmt->mOpenParen);
- VisitChild(forEachStmt->mReadOnlyToken);
- VisitChild(forEachStmt->mVariableTypeRef);
- VisitChild(forEachStmt->mVariableName);
- VisitChild(forEachStmt->mInToken);
- VisitChild(forEachStmt->mCollectionExpression);
- VisitChild(forEachStmt->mCloseParen);
- VisitChild(forEachStmt->mEmbeddedStatement);
- }
- void BfElementVisitor::Visit(BfConditionalExpression* condExpr)
- {
- Visit(condExpr->ToBase());
- VisitChild(condExpr->mConditionExpression);
- VisitChild(condExpr->mQuestionToken);
- VisitChild(condExpr->mTrueExpression);
- VisitChild(condExpr->mColonToken);
- VisitChild(condExpr->mFalseExpression);
- }
- void BfElementVisitor::Visit(BfAssignmentExpression* assignExpr)
- {
- Visit(assignExpr->ToBase());
- VisitChild(assignExpr->mOpToken);
- VisitChild(assignExpr->mLeft);
- VisitChild(assignExpr->mRight);
- }
- void BfElementVisitor::Visit(BfParenthesizedExpression* parenExpr)
- {
- Visit(parenExpr->ToBase());
- VisitChild(parenExpr->mOpenParen);
- VisitChild(parenExpr->mExpression);
- VisitChild(parenExpr->mCloseParen);
- }
- void BfElementVisitor::Visit(BfTupleExpression* tupleExpr)
- {
- Visit(tupleExpr->ToBase());
- VisitChild(tupleExpr->mOpenParen);
- for (auto& val : tupleExpr->mNames)
- {
- if (val != NULL)
- {
- VisitChild(val->mNameNode);
- VisitChild(val->mColonToken);
- }
- }
- for (auto& val : tupleExpr->mValues)
- VisitChild(val);
- for (auto& val : tupleExpr->mCommas)
- VisitChild(val);
- VisitChild(tupleExpr->mCloseParen);
- }
- void BfElementVisitor::Visit(BfMemberReferenceExpression* memberRefExpr)
- {
- Visit(memberRefExpr->ToBase());
- VisitChild(memberRefExpr->mDotToken);
- VisitChild(memberRefExpr->mTarget);
- VisitChild(memberRefExpr->mMemberName);
- }
- void BfElementVisitor::Visit(BfIndexerExpression* indexerExpr)
- {
- Visit(indexerExpr->ToBase());
- VisitChild(indexerExpr->mTarget);
- VisitChild(indexerExpr->mOpenBracket);
- VisitChild(indexerExpr->mCloseBracket);
- for (auto& arg : indexerExpr->mArguments)
- VisitChild(arg);
- for (auto& comma : indexerExpr->mCommas)
- VisitChild(comma);
- }
- void BfElementVisitor::Visit(BfUnaryOperatorExpression* binOpExpr)
- {
- Visit(binOpExpr->ToBase());
- VisitChild(binOpExpr->mOpToken);
- VisitChild(binOpExpr->mExpression);
- }
- void BfElementVisitor::Visit(BfBinaryOperatorExpression* binOpExpr)
- {
- Visit(binOpExpr->ToBase());
- VisitChild(binOpExpr->mOpToken);
- VisitChild(binOpExpr->mLeft);
- VisitChild(binOpExpr->mRight);
- }
- void BfElementVisitor::Visit(BfConstructorDeclaration* ctorDeclaration)
- {
- Visit(ctorDeclaration->ToBase());
- VisitChild(ctorDeclaration->mThisToken);
- VisitChild(ctorDeclaration->mInitializerColonToken);
- VisitChild(ctorDeclaration->mInitializer);
- }
- void BfElementVisitor::Visit(BfAutoConstructorDeclaration* ctorDeclaration)
- {
- VisitChild(ctorDeclaration->mPrefix);
- Visit(ctorDeclaration->ToBase());
- }
- void BfElementVisitor::Visit(BfDestructorDeclaration* dtorDeclaration)
- {
- Visit(dtorDeclaration->ToBase());
- VisitChild(dtorDeclaration->mTildeToken);
- VisitChild(dtorDeclaration->mThisToken);
- }
- void BfElementVisitor::Visit(BfMethodDeclaration* methodDeclaration)
- {
- Visit(methodDeclaration->ToBase());
- VisitChild(methodDeclaration->mAttributes);
- VisitChild(methodDeclaration->mProtectionSpecifier);
- VisitChild(methodDeclaration->mReadOnlySpecifier);
- VisitChild(methodDeclaration->mStaticSpecifier);
- VisitChild(methodDeclaration->mExternSpecifier);
- VisitChild(methodDeclaration->mVirtualSpecifier); // either 'virtual', 'override', or 'abstract'
- VisitChild(methodDeclaration->mNewSpecifier);
- VisitChild(methodDeclaration->mMixinSpecifier);
- VisitChild(methodDeclaration->mPartialSpecifier);
- VisitChild(methodDeclaration->mMutSpecifier);
- VisitChild(methodDeclaration->mReturnType);
- VisitChild(methodDeclaration->mExplicitInterface);
- VisitChild(methodDeclaration->mExplicitInterfaceDotToken);
- VisitChild(methodDeclaration->mNameNode);
- VisitChild(methodDeclaration->mOpenParen);
- VisitChild(methodDeclaration->mThisToken);
- for (auto& param : methodDeclaration->mParams)
- VisitChild(param);
- for (auto& comma : methodDeclaration->mCommas)
- VisitChild(comma);
- VisitChild(methodDeclaration->mCloseParen);
- VisitChild(methodDeclaration->mGenericParams);
- VisitChild(methodDeclaration->mGenericConstraintsDeclaration);
- VisitChild(methodDeclaration->mEndSemicolon);
- VisitChild(methodDeclaration->mFatArrowToken);
- VisitChild(methodDeclaration->mBody);
- }
- void BfElementVisitor::Visit(BfOperatorDeclaration* operatorDeclaration)
- {
- Visit(operatorDeclaration->ToBase());
- VisitChild(operatorDeclaration->mExplicitToken);
- VisitChild(operatorDeclaration->mOperatorToken);
- VisitChild(operatorDeclaration->mOpTypeToken);
- }
- void BfElementVisitor::Visit(BfPropertyMethodDeclaration* propertyDeclaration)
- {
- Visit(propertyDeclaration->ToBase());
- VisitChild(propertyDeclaration->mAttributes);
- VisitChild(propertyDeclaration->mProtectionSpecifier);
- VisitChild(propertyDeclaration->mNameNode);
- VisitChild(propertyDeclaration->mSetRefSpecifier);
- VisitChild(propertyDeclaration->mMutSpecifier);
- VisitChild(propertyDeclaration->mFatArrowToken);
- VisitChild(propertyDeclaration->mBody);
- VisitChild(propertyDeclaration->mEndSemicolon);
- }
- void BfElementVisitor::Visit(BfPropertyBodyExpression* propertyBodyExpression)
- {
- Visit(propertyBodyExpression->ToBase());
- VisitChild(propertyBodyExpression->mMutSpecifier);
- VisitChild(propertyBodyExpression->mFatTokenArrow);
- }
- void BfElementVisitor::Visit(BfPropertyDeclaration* propertyDeclaration)
- {
- Visit(propertyDeclaration->ToBase());
- VisitChild(propertyDeclaration->mAttributes);
- VisitChild(propertyDeclaration->mProtectionSpecifier);
- VisitChild(propertyDeclaration->mStaticSpecifier);
- VisitChild(propertyDeclaration->mVirtualSpecifier); // either 'virtual', 'override', or 'abstract'
- VisitChild(propertyDeclaration->mExplicitInterface);
- VisitChild(propertyDeclaration->mExplicitInterfaceDotToken);
- if (auto block = BfNodeDynCast<BfBlock>(propertyDeclaration->mDefinitionBlock))
- {
- VisitChild(block->mOpenBrace);
- for (auto& method : propertyDeclaration->mMethods)
- VisitChild(method);
- VisitChild(block->mCloseBrace);
- }
- else
- {
- VisitChild(propertyDeclaration->mDefinitionBlock);
- for (auto& method : propertyDeclaration->mMethods)
- VisitChild(method);
- }
- }
- void BfElementVisitor::Visit(BfIndexerDeclaration* indexerDeclaration)
- {
- Visit(indexerDeclaration->ToBase());
- VisitChild(indexerDeclaration->mThisToken);
- VisitChild(indexerDeclaration->mOpenBracket);
- for (auto& param : indexerDeclaration->mParams)
- VisitChild(param);
- for (auto& comma : indexerDeclaration->mCommas)
- VisitChild(comma);
- VisitChild(indexerDeclaration->mCloseBracket);
- }
- void BfElementVisitor::Visit(BfFieldDeclaration* fieldDeclaration)
- {
- Visit(fieldDeclaration->ToBase());
- VisitChild(fieldDeclaration->mAttributes);
- VisitChild(fieldDeclaration->mProtectionSpecifier);
- VisitChild(fieldDeclaration->mStaticSpecifier);
- VisitChild(fieldDeclaration->mPrecedingComma);
- VisitChild(fieldDeclaration->mConstSpecifier);
- VisitChild(fieldDeclaration->mReadOnlySpecifier);
- VisitChild(fieldDeclaration->mVolatileSpecifier);
- VisitChild(fieldDeclaration->mNewSpecifier);
- VisitChild(fieldDeclaration->mExternSpecifier);
- VisitChild(fieldDeclaration->mTypeRef);
- VisitChild(fieldDeclaration->mNameNode);
- VisitChild(fieldDeclaration->mEqualsNode);
- VisitChild(fieldDeclaration->mInitializer);
- VisitChild(fieldDeclaration->mFieldDtor);
- }
- void BfElementVisitor::Visit(BfEnumCaseDeclaration* enumCaseDeclaration)
- {
- Visit(enumCaseDeclaration->ToBase());
- VisitChild(enumCaseDeclaration->mCaseToken);
- for (auto& entry : enumCaseDeclaration->mEntries)
- VisitChild(entry);
- for (auto& comma : enumCaseDeclaration->mCommas)
- VisitChild(comma);
- }
- void BfElementVisitor::Visit(BfFieldDtorDeclaration* fieldDtorDeclaration)
- {
- Visit(fieldDtorDeclaration->ToBase());
- VisitChild(fieldDtorDeclaration->mTildeToken);
- VisitChild(fieldDtorDeclaration->mBody);
- VisitChild(fieldDtorDeclaration->mNextFieldDtor);
- }
- void BfElementVisitor::Visit(BfTypeDeclaration* typeDeclaration)
- {
- Visit(typeDeclaration->ToBase());
- VisitChild(typeDeclaration->mAttributes);
- VisitChild(typeDeclaration->mAbstractSpecifier);
- VisitChild(typeDeclaration->mSealedSpecifier);
- VisitChild(typeDeclaration->mProtectionSpecifier);
- VisitChild(typeDeclaration->mStaticSpecifier);
- VisitChild(typeDeclaration->mPartialSpecifier);
- VisitChild(typeDeclaration->mTypeNode);
- VisitChild(typeDeclaration->mNameNode);
- VisitChild(typeDeclaration->mColonToken);
- VisitChild(typeDeclaration->mAutoCtor);
- for (auto& baseClass : typeDeclaration->mBaseClasses)
- VisitChild(baseClass);
- for (auto& comma : typeDeclaration->mBaseClassCommas)
- VisitChild(comma);
- VisitChild(typeDeclaration->mGenericParams);
- VisitChild(typeDeclaration->mGenericConstraintsDeclaration);
- VisitChild(typeDeclaration->mDefineNode);
- /*if (typeDeclaration->mDefineBlock != NULL)
- {
- for (auto& member : *typeDeclaration->mDefineBlock)
- VisitChild(member);
- }*/
- }
- void BfElementVisitor::Visit(BfTypeAliasDeclaration* typeDeclaration)
- {
- Visit(typeDeclaration->ToBase());
- VisitChild(typeDeclaration->mEqualsToken);
- VisitChild(typeDeclaration->mAliasToType);
- VisitChild(typeDeclaration->mEndSemicolon);
- }
- void BfElementVisitor::Visit(BfUsingDirective* usingDirective)
- {
- Visit(usingDirective->ToBase());
- VisitChild(usingDirective->mUsingToken);
- VisitChild(usingDirective->mNamespace);
- }
- void BfElementVisitor::Visit(BfUsingModDirective* usingDirective)
- {
- Visit(usingDirective->ToBase());
- VisitChild(usingDirective->mUsingToken);
- VisitChild(usingDirective->mModToken);
- VisitChild(usingDirective->mTypeRef);
- }
- void BfElementVisitor::Visit(BfNamespaceDeclaration* namespaceDeclaration)
- {
- Visit(namespaceDeclaration->ToBase());
- VisitChild(namespaceDeclaration->mNamespaceNode);
- VisitChild(namespaceDeclaration->mNameNode);
- VisitChild(namespaceDeclaration->mBody);
- }
- void BfElementVisitor::Visit(BfBlock* block)
- {
- Visit(block->ToBase());
- VisitChild(block->mOpenBrace);
- VisitMembers(block);
- VisitChild(block->mCloseBrace);
- }
- void BfElementVisitor::Visit(BfRootNode* rootNode)
- {
- Visit(rootNode->ToBase());
- VisitMembers(rootNode);
- }
- void BfElementVisitor::Visit(BfInlineAsmStatement* asmStmt)
- {
- Visit(asmStmt->ToBase());
- }
- void BfElementVisitor::Visit(BfInlineAsmInstruction* asmInst)
- {
- Visit(asmInst->ToBase());
- }
|