1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-08 11:38:21 +02:00
Beef/IDEHelper/Compiler/BfSourceClassifier.h

135 lines
5 KiB
C
Raw Normal View History

2019-08-23 11:56:54 -07:00
#pragma once
#include "BeefySysLib/Common.h"
#include "BfAst.h"
#include "BfSystem.h"
#include "BfElementVisitor.h"
NS_BF_BEGIN
enum BfSourceElementType
{
BfSourceElementType_Normal,
BfSourceElementType_Keyword,
BfSourceElementType_Literal,
2020-08-13 06:28:31 -07:00
BfSourceElementType_Identifier,
2019-08-23 11:56:54 -07:00
BfSourceElementType_Comment,
BfSourceElementType_Method,
2020-08-13 06:28:31 -07:00
BfSourceElementType_Type,
BfSourceElementType_PrimitiveType,
BfSourceElementType_Struct,
BfSourceElementType_GenericParam,
2020-08-13 06:28:31 -07:00
BfSourceElementType_RefType,
2020-08-13 07:00:49 -07:00
BfSourceElementType_Interface,
2019-08-23 11:56:54 -07:00
BfSourceElementType_Namespace
};
enum BfSourceElementFlags
{
BfSourceElementFlag_Error = 1,
BfSourceElementFlag_Warning = 2,
BfSourceElementFlag_IsAfter = 4,
BfSourceElementFlag_Skipped = 8,
BfSourceElementFlag_CompilerFlags_Mask = 0x0F,
BfSourceElementFlag_MASK = 0xFF
};
enum BfSourceDisplayId : uint8
{
BfSourceDisplayId_Cleared,
BfSourceDisplayId_AutoComplete,
BfSourceDisplayId_SpellCheck,
BfSourceDisplayId_FullClassify,
BfSourceDisplayId_SkipResult
};
class BfSourceClassifier : public BfElementVisitor
{
public:
struct CharData
{
char mChar;
uint8 mDisplayPassId;
uint8 mDisplayTypeId;
uint8 mDisplayFlags;
#ifdef INCLUDE_CHARDATA_CHARID
uint32 mCharId; // Unique ID for each character, for tracking moving text
#endif
};
public:
BfParser* mParser;
CharData* mCharData;
bool mEnabled;
bool mSkipMethodInternals;
bool mSkipTypeDeclarations;
bool mSkipAttributes;
bool mIsSideChannel;
bool mPreserveFlags;
uint8 mClassifierPassId;
BfAstNode* mPrevNode;
BfAstNode* mCurMember;
public:
void HandleLeafNode(BfAstNode* node);
void VisitMembers(BfBlock* node);
void ModifyFlags(BfAstNode* node, uint8 andFlags, uint8 orFlags);
void ModifyFlags(int startPos, int endPos, uint8 andFlags, uint8 orFlags);
void SetElementType(BfAstNode* node, BfSourceElementType elementType);
2020-08-31 14:16:22 -07:00
void SetElementType(BfAstNode* node, BfTypeCode typeCode);
2019-08-23 11:56:54 -07:00
void SetElementType(int startPos, int endPos, BfSourceElementType elementType);
2020-08-13 06:28:31 -07:00
void SetHighestElementType(BfAstNode* node, BfSourceElementType elementType);
void SetHighestElementType(int startPos, int endPos, BfSourceElementType elementType);
2019-08-23 11:56:54 -07:00
bool IsInterestedInMember(BfAstNode* node, bool forceSkip = false);
bool WantsSkipParentMethod(BfAstNode* node);
void Handle(BfTypeDeclaration* typeDeclaration);
void MarkSkipped(int startPos, int endPos);
void MarkSkipped(BfAstNode* node);
public:
BfSourceClassifier(BfParser* bfParser, CharData* charData);
virtual void Visit(BfGenericConstraintsDeclaration* genericConstraints) override;
virtual void Visit(BfAstNode* node) override;
virtual void Visit(BfErrorNode* errorNode) override;
virtual void Visit(BfFieldDeclaration* fieldDecl) override;
virtual void Visit(BfFieldDtorDeclaration* fieldDtorDecl) override;
virtual void Visit(BfPreprocesorIgnoredSectionNode* preprocesorIgnoredSection) override;
virtual void Visit(BfPreprocessorNode* preprocessorNode) override;
virtual void Visit(BfCommentNode* commentNode) override;
virtual void Visit(BfAttributeDirective* attributeDirective) override;
virtual void Visit(BfIdentifierNode* identifier) override;
virtual void Visit(BfQualifiedNameNode* identifier) override;
virtual void Visit(BfThisExpression* thisExpr) override;
virtual void Visit(BfBaseExpression* baseExpr) override;
virtual void Visit(BfMemberReferenceExpression* memberRefExpr) override;
virtual void Visit(BfQualifiedTypeReference* qualifiedType) override;
virtual void Visit(BfRefTypeRef* typeRef) override;
virtual void Visit(BfArrayTypeRef* arrayType) override;
virtual void Visit(BfPointerTypeRef* pointerType) override;
virtual void Visit(BfNamedTypeReference* typeRef) override;
virtual void Visit(BfGenericInstanceTypeRef* typeRef) override;
virtual void Visit(BfLocalMethodDeclaration * methodDecl) override;
virtual void Visit(BfLiteralExpression* literalExpr) override;
2020-11-11 05:46:52 -08:00
virtual void Visit(BfStringInterpolationExpression* stringInterpolationExpression) override;
2019-08-23 11:56:54 -07:00
virtual void Visit(BfTokenNode* tokenNode) override;
virtual void Visit(BfInvocationExpression* invocationExpr) override;
virtual void Visit(BfIndexerExpression* indexerExpr) override;
virtual void Visit(BfConstructorDeclaration* ctorDeclaration) override;
virtual void Visit(BfDestructorDeclaration* dtorDeclaration) override;
virtual void Visit(BfMethodDeclaration* methodDeclaration) override;
virtual void Visit(BfPropertyMethodDeclaration* propertyMethodDeclaration) override;
virtual void Visit(BfPropertyDeclaration* propertyDeclaration) override;
virtual void Visit(BfTypeDeclaration* typeDeclaration) override;
virtual void Visit(BfTypeAliasDeclaration* typeDeclaration) override;
virtual void Visit(BfUsingDirective* usingDirective) override;
virtual void Visit(BfUsingModDirective* usingDirective) override;
2019-08-23 11:56:54 -07:00
virtual void Visit(BfNamespaceDeclaration* namespaceDeclaration) override;
virtual void Visit(BfBlock* block) override;
virtual void Visit(BfRootNode* rootNode) override;
virtual void Visit(BfInlineAsmStatement* asmStmt) override;
virtual void Visit(BfInlineAsmInstruction* asmInst) override;
};
NS_BF_END