123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260 |
- #include "BeefySysLib/Common.h"
- //#include "llvm/Support/raw_ostream.h"
- #include "BfAst.h"
- #include "BfElementVisitor.h"
- NS_BF_BEGIN
- class BfPrinter : public BfElementVisitor
- {
- public:
- struct BlockState
- {
- int mLastSpaceOffset;
- bool mDoInlineBlock;
- bool mIsCompact;
- int mIndentStart;
- BlockState()
- {
- mLastSpaceOffset = 0;
- mDoInlineBlock = false;
- mIsCompact = false;
- mIndentStart = 0;
- }
- };
- struct StateModify
- {
- public:
- bool mExpectingSpace;
- int mWantNewLineIdx;
- bool mDoingBlockOpen;
- bool mDoingBlockClose;
- int mWantVirtualIndent;
- BfAstNode* mQueuedNode;
- public:
- StateModify()
- {
- Clear();
- mWantVirtualIndent = 0;
- mWantNewLineIdx = 0;
- }
- void Clear()
- {
- mExpectingSpace = false;
- mDoingBlockOpen = false;
- mDoingBlockClose = false;
- mQueuedNode = NULL;
- }
- };
- struct ChildQueueState
- {
- Array<StateModify>* mQueue;
- int mIdx;
- ChildQueueState()
- {
- mQueue = NULL;
- mIdx = 0;
- }
- };
- BfSourceData* mSource;
- BfParserData* mParser;
- BfBlock::Iterator mSidechannelItr;
- BfAstNode* mSidechannelNextNode;
- BfBlock::Iterator mErrorItr;
- BfAstNode* mErrorNextNode;
- BfAstNode* mCurBlockMember;
- BfTypeDeclaration* mCurTypeDecl;
- int mTriviaIdx;
- int mCurSrcIdx;
- Array<ChildQueueState*> mActiveChildQueues;
- Array<StateModify> mChildNodeQueue;
- int mFormatStart;
- int mFormatEnd;
- int mFormatDisableCount;
- StateModify mNextStateModify;
- String mOutString;
- bool mReformatting;
- bool mIgnoreTrivia;
- bool mDocPrep;
- BlockState* mCurBlockState;
- int mCurIndentLevel;
- int mQueuedSpaceCount;
- int mLastSpaceOffset; // Indent difference from original to new
- bool mExpectingNewLine;
- int mCurCol;
- int mMaxCol;
- int mTabSize;
- bool mWantsTabsAsSpaces;
- bool mIndentCaseLabels;
- bool mIsFirstStatementInBlock;
- bool mForceUseTrivia;
- bool mInSideChannel;
- int mStateModifyVirtualIndentLevel;
- int mVirtualIndentLevel;
- int mVirtualNewLineIdx;
- Array<int>* mCharMapping;
- int mHighestCharId;
- public:
- BfPrinter(BfRootNode* rootNode, BfRootNode* sidechannelRootNode, BfRootNode* errorRootNode);
- public:
- void Update(BfAstNode* bfAstNode);
- bool CheckReplace(BfAstNode* astNode);
- void FlushIndent();
- void Write(const StringView& str);
- void Write(BfAstNode* node, int start, int len);
- void WriteSourceString(BfAstNode* node);
- void QueueVisitChild(BfAstNode* astNode);
- void QueueVisitErrorNodes(BfRootNode* astNode);
- void FlushVisitChild();
- void VisitChildWithPrecedingSpace(BfAstNode* bfAstNode);
- void VisitChildWithProceedingSpace(BfAstNode* bfAstNode);
- void ExpectSpace();
- void ExpectNewLine();
- void ExpectIndent();
- void ExpectUnindent();
- void VisitChildNextLine(BfAstNode* node);
- void DoBlockOpen(BfAstNode* prevNode, BfTokenNode* blockOpen, BfTokenNode* blockClose, bool queue, BlockState& blockState);
- void DoBlockClose(BfAstNode* prevNode, BfTokenNode* blockOpen, BfTokenNode* blockClose, bool queue, BlockState& blockState);
- void HandleBlock(BfBlock* block, bool isCompact = false);
- void QueueMethodDeclaration(BfMethodDeclaration* methodDeclaration);
- int CalcOrigLineSpacing(BfAstNode* bfAstNode, int* lineStartIdx);
- void WriteIgnoredNode(BfAstNode* node);
- void CheckRawNode(BfAstNode* node);
- virtual void Visit(BfAstNode* bfAstNode) override;
- virtual void Visit(BfErrorNode* bfErrorNode) override;
- virtual void Visit(BfScopeNode * scopeNode) override;
- virtual void Visit(BfNewNode * newNode) override;
- virtual void Visit(BfExpression* expr) override;
- virtual void Visit(BfExpressionStatement* exprStmt) override;
- virtual void Visit(BfNamedExpression* namedExpr) override;
- virtual void Visit(BfAttributedExpression* attribExpr) override;
- virtual void Visit(BfStatement* stmt) override;
- virtual void Visit(BfLabelableStatement* labelableStmt) override;
- virtual void Visit(BfCommentNode* commentNode) override;
- virtual void Visit(BfPreprocesorIgnoredSectionNode* preprocesorIgnoredSection) override;
- virtual void Visit(BfPreprocessorNode* preprocessorNode) override;
- virtual void Visit(BfAttributeDirective* attributeDirective) override;
- virtual void Visit(BfGenericParamsDeclaration* genericParams) override;
- virtual void Visit(BfGenericOperatorConstraint* genericConstraints) override;
- virtual void Visit(BfGenericConstraintsDeclaration* genericConstraints) override;
- virtual void Visit(BfGenericArgumentsNode* genericArgumentsNode) override;
- virtual void Visit(BfEmptyStatement* emptyStmt) override;
- virtual void Visit(BfTokenNode* tokenNode) override;
- virtual void Visit(BfTokenPairNode* tokenPairNode) override;
- virtual void Visit(BfUsingSpecifierNode* usingSpecifier) override;
- virtual void Visit(BfLiteralExpression* literalExpr) override;
- virtual void Visit(BfStringInterpolationExpression* stringInterpolationExpression) override;
- virtual void Visit(BfIdentifierNode* identifierNode) override;
- virtual void Visit(BfQualifiedNameNode* nameNode) override;
- virtual void Visit(BfThisExpression* thisExpr) override;
- virtual void Visit(BfBaseExpression* baseExpr) override;
- virtual void Visit(BfMixinExpression* mixinExpr) override;
- virtual void Visit(BfSizedArrayCreateExpression* createExpr) override;
- virtual void Visit(BfInitializerExpression* initExpr) override;
- virtual void Visit(BfCollectionInitializerExpression* initExpr) override;
- virtual void Visit(BfTypeReference* typeRef) override;
- virtual void Visit(BfNamedTypeReference* typeRef) override;
- virtual void Visit(BfQualifiedTypeReference* qualifiedType) override;
- virtual void Visit(BfVarTypeReference* typeRef) override;
- virtual void Visit(BfLetTypeReference * typeRef) override;
- virtual void Visit(BfConstTypeRef* typeRef) override;
- virtual void Visit(BfConstExprTypeRef* typeRef) override;
- virtual void Visit(BfRefTypeRef* typeRef) override;
- virtual void Visit(BfArrayTypeRef* typeRef) override;
- virtual void Visit(BfGenericInstanceTypeRef* typeRef) override;
- virtual void Visit(BfTupleTypeRef * typeRef) override;
- virtual void Visit(BfTagTypeRef* typeRef) override;
- virtual void Visit(BfDelegateTypeRef* typeRef) override;
- virtual void Visit(BfPointerTypeRef* typeRef) override;
- virtual void Visit(BfNullableTypeRef* typeRef) override;
- virtual void Visit(BfInlineTypeReference* typeRef) override;
- virtual void Visit(BfVariableDeclaration* varDecl) override;
- virtual void Visit(BfParameterDeclaration* paramDecl) override;
- virtual void Visit(BfTypeOfExpression* typeOfExpr) override;
- virtual void Visit(BfSizeOfExpression* sizeOfExpr) override;
- virtual void Visit(BfOffsetOfExpression* offsetOfExpr) override;
- virtual void Visit(BfDefaultExpression* defaultExpr) override;
- virtual void Visit(BfIsConstExpression* isConstExpr) override;
- virtual void Visit(BfCheckTypeExpression* checkTypeExpr) override;
- virtual void Visit(BfDynamicCastExpression* dynCastExpr) override;
- virtual void Visit(BfCastExpression* castExpr) override;
- virtual void Visit(BfDelegateBindExpression* invocationExpr) override;
- virtual void Visit(BfLambdaBindExpression* lambdaBindExpr) override;
- virtual void Visit(BfObjectCreateExpression* invocationExpr) override;
- virtual void Visit(BfBoxExpression* boxExpr) override;
- virtual void Visit(BfInvocationExpression* invocationExpr) override;
- virtual void Visit(BfSwitchCase* switchCase) override;
- virtual void Visit(BfWhenExpression* whenExpr) override;
- virtual void Visit(BfSwitchStatement* switchStmt) override;
- virtual void Visit(BfTryStatement* tryStmt) override;
- virtual void Visit(BfCatchStatement* catchStmt) override;
- virtual void Visit(BfFinallyStatement* finallyStmt) override;
- virtual void Visit(BfCheckedStatement* checkedStmt) override;
- virtual void Visit(BfUncheckedStatement* uncheckedStmt) override;
- virtual void Visit(BfIfStatement* ifStmt) override;
- virtual void Visit(BfThrowStatement* throwStmt) override;
- virtual void Visit(BfDeleteStatement* deleteStmt) override;
- virtual void Visit(BfReturnStatement* returnStmt) override;
- virtual void Visit(BfBreakStatement* breakStmt) override;
- virtual void Visit(BfContinueStatement* continueStmt) override;
- virtual void Visit(BfFallthroughStatement* fallthroughStmt) override;
- virtual void Visit(BfUsingStatement* whileStmt) override;
- virtual void Visit(BfDoStatement* whileStmt) override;
- virtual void Visit(BfRepeatStatement* repeatStmt) override;
- virtual void Visit(BfWhileStatement* whileStmt) override;
- virtual void Visit(BfForStatement* forStmt) override;
- virtual void Visit(BfForEachStatement* forEachStmt) override;
- virtual void Visit(BfDeferStatement* deferStmt) override;
- virtual void Visit(BfEnumCaseBindExpression * caseBindExpr) override;
- virtual void Visit(BfCaseExpression * caseExpr) override;
- virtual void Visit(BfConditionalExpression* condExpr) override;
- virtual void Visit(BfAssignmentExpression* assignExpr) override;
- virtual void Visit(BfParenthesizedExpression* parenExpr) override;
- virtual void Visit(BfTupleExpression * tupleExpr) override;
- virtual void Visit(BfMemberReferenceExpression* memberRefExpr) override;
- virtual void Visit(BfIndexerExpression* indexerExpr) override;
- virtual void Visit(BfUnaryOperatorExpression* binOpExpr) override;
- virtual void Visit(BfBinaryOperatorExpression* binOpExpr) override;
- virtual void Visit(BfConstructorDeclaration* ctorDeclaration) override;
- virtual void Visit(BfAutoConstructorDeclaration* ctorDeclaration) override;
- virtual void Visit(BfDestructorDeclaration* dtorDeclaration) override;
- virtual void Visit(BfMethodDeclaration* methodDeclaration) override;
- virtual void Visit(BfOperatorDeclaration* opreratorDeclaration) override;
- virtual void Visit(BfPropertyMethodDeclaration* propertyDeclaration) override;
- virtual void Visit(BfPropertyBodyExpression* propertyBodyExpression) override;
- virtual void Visit(BfPropertyDeclaration* propertyDeclaration) override;
- virtual void Visit(BfIndexerDeclaration* indexerDeclaration) override;
- virtual void Visit(BfFieldDeclaration* fieldDeclaration) override;
- virtual void Visit(BfEnumCaseDeclaration* enumCaseDeclaration) override;
- virtual void Visit(BfTypeAliasDeclaration* typeDeclaration) override;
- virtual void Visit(BfFieldDtorDeclaration* fieldDtorDeclaration) override;
- virtual void Visit(BfTypeDeclaration* typeDeclaration) override;
- virtual void Visit(BfUsingDirective* usingDirective) override;
- virtual void Visit(BfUsingModDirective* usingDirective) override;
- virtual void Visit(BfNamespaceDeclaration* namespaceDeclaration) override;
- virtual void Visit(BfBlock* block) override;
- virtual void Visit(BfRootNode* rootNode) override;
- virtual void Visit(BfInlineAsmStatement* asmStmt) override;
- };
- NS_BF_END
|