From ff56034eb2590d69fcb474e833fa9bab36ea863e Mon Sep 17 00:00:00 2001 From: Brian Fiete Date: Mon, 14 Sep 2020 11:54:54 -0700 Subject: [PATCH] Fixed some classify flashing --- IDEHelper/Compiler/BfModuleTypeUtils.cpp | 9 ++++++--- IDEHelper/Compiler/BfReducer.cpp | 25 +++++++++++++----------- IDEHelper/Compiler/BfReducer.h | 8 ++++---- 3 files changed, 24 insertions(+), 18 deletions(-) diff --git a/IDEHelper/Compiler/BfModuleTypeUtils.cpp b/IDEHelper/Compiler/BfModuleTypeUtils.cpp index d2d8f19b..f515cc4c 100644 --- a/IDEHelper/Compiler/BfModuleTypeUtils.cpp +++ b/IDEHelper/Compiler/BfModuleTypeUtils.cpp @@ -3757,9 +3757,12 @@ void BfModule::DoPopulateType(BfType* resolvedTypeRef, BfPopulateType populateTy } }; - _HandleTypeDeclaration(typeDef->mTypeDeclaration); - for (auto partial : typeDef->mPartials) - _HandleTypeDeclaration(partial->mTypeDeclaration); + if (!typeInstance->IsBoxed()) + { + _HandleTypeDeclaration(typeDef->mTypeDeclaration); + for (auto partial : typeDef->mPartials) + _HandleTypeDeclaration(partial->mTypeDeclaration); + } if (populateType == BfPopulateType_Data) return; diff --git a/IDEHelper/Compiler/BfReducer.cpp b/IDEHelper/Compiler/BfReducer.cpp index b32ffc37..c66be498 100644 --- a/IDEHelper/Compiler/BfReducer.cpp +++ b/IDEHelper/Compiler/BfReducer.cpp @@ -111,6 +111,9 @@ bool BfReducer::IsNodeRelevant(BfAstNode* astNode) bool BfReducer::IsNodeRelevant(BfAstNode* startNode, BfAstNode* endNode) { + if (startNode == NULL) + return IsNodeRelevant(endNode); + BfParser* bfParser = startNode->GetSourceData()->ToParser(); if (bfParser == NULL) return true; @@ -5685,7 +5688,7 @@ BfFieldDeclaration* BfReducer::CreateFieldDeclaration(BfTokenNode* tokenNode, Bf return fieldDeclaration; } -BfAstNode* BfReducer::ReadTypeMember(BfTokenNode* tokenNode, int depth) +BfAstNode* BfReducer::ReadTypeMember(BfTokenNode* tokenNode, int depth, BfAstNode* deferredHeadNode) { BfToken token = tokenNode->GetToken(); @@ -5706,7 +5709,7 @@ BfAstNode* BfReducer::ReadTypeMember(BfTokenNode* tokenNode, int depth) } mVisitorPos.MoveNext(); - auto memberNode = ReadTypeMember(nextNode); + auto memberNode = ReadTypeMember(nextNode, 0, (deferredHeadNode != NULL) ? deferredHeadNode : attributes); if (memberNode == NULL) return NULL; auto member = BfNodeDynCast(memberNode); @@ -5905,7 +5908,7 @@ BfAstNode* BfReducer::ReadTypeMember(BfTokenNode* tokenNode, int depth) BfAstNode* startNode = mVisitorPos.GetCurrent(); auto startToken = BfNodeDynCast(startNode); - auto topLevelObject = CreateTopLevelObject(startToken, NULL); + auto topLevelObject = CreateTopLevelObject(startToken, NULL, deferredHeadNode); auto typeDecl = BfNodeDynCast(topLevelObject); if (typeDecl == NULL) { @@ -6392,7 +6395,7 @@ void BfReducer::ReadPropertyBlock(BfPropertyDeclaration* propertyDeclaration, Bf } } -BfAstNode* BfReducer::ReadTypeMember(BfAstNode* node, int depth) +BfAstNode* BfReducer::ReadTypeMember(BfAstNode* node, int depth, BfAstNode* deferredHeadNode) { SetAndRestoreValue prevTypeMemberNodeStart(mTypeMemberNodeStart, node, false); if (depth == 0) @@ -6437,7 +6440,7 @@ BfAstNode* BfReducer::ReadTypeMember(BfAstNode* node, int depth) // Read type member } else - return ReadTypeMember(tokenNode, depth); + return ReadTypeMember(tokenNode, depth, deferredHeadNode); } else if (auto block = BfNodeDynCast(node)) { @@ -7796,7 +7799,7 @@ BfAstNode* BfReducer::HandleTopLevel(BfBlock* node) return node; } -BfAstNode* BfReducer::CreateTopLevelObject(BfTokenNode* tokenNode, BfAttributeDirective* attributes) +BfAstNode* BfReducer::CreateTopLevelObject(BfTokenNode* tokenNode, BfAttributeDirective* attributes, BfAstNode* deferredHeadNode) { AssertCurrentNode(tokenNode); @@ -8024,7 +8027,7 @@ BfAstNode* BfReducer::CreateTopLevelObject(BfTokenNode* tokenNode, BfAttributeDi MEMBER_SET(typeDeclaration, mDefineNode, block); mVisitorPos.MoveNext(); - HandleTypeDeclaration(typeDeclaration, attributes); + HandleTypeDeclaration(typeDeclaration, attributes, deferredHeadNode); return typeDeclaration; } @@ -8204,7 +8207,7 @@ BfAstNode* BfReducer::CreateTopLevelObject(BfTokenNode* tokenNode, BfAttributeDi } } - if (!IsNodeRelevant(typeDeclaration)) + if (!IsNodeRelevant(deferredHeadNode, typeDeclaration)) typeDeclaration->mIgnoreDeclaration = true; return typeDeclaration; @@ -8319,7 +8322,7 @@ BfAstNode* BfReducer::CreateTopLevelObject(BfTokenNode* tokenNode, BfAttributeDi { typeDeclaration->mDefineNode = blockNode; MoveNode(blockNode, typeDeclaration); - HandleTypeDeclaration(typeDeclaration, attributes); + HandleTypeDeclaration(typeDeclaration, attributes, (deferredHeadNode != NULL) ? deferredHeadNode : attributes); } return typeDeclaration; @@ -9526,7 +9529,7 @@ void BfReducer::HandleBlock(BfBlock* block, bool allowEndingExpression) mVisitorPos.Trim(); } -void BfReducer::HandleTypeDeclaration(BfTypeDeclaration* typeDecl, BfAttributeDirective* attributes) +void BfReducer::HandleTypeDeclaration(BfTypeDeclaration* typeDecl, BfAttributeDirective* attributes, BfAstNode* deferredHeadNode) { SetAndRestoreValue prevTypeDecl(mCurTypeDecl, typeDecl); SetAndRestoreValue prevVisitorPos(mVisitorPos, BfVisitorPos(BfNodeDynCast(typeDecl->mDefineNode))); @@ -9536,7 +9539,7 @@ void BfReducer::HandleTypeDeclaration(BfTypeDeclaration* typeDecl, BfAttributeDi MEMBER_SET(typeDecl, mAttributes, attributes); } - if (!IsNodeRelevant(typeDecl)) + if (!IsNodeRelevant(deferredHeadNode, typeDecl)) { typeDecl->mIgnoreDeclaration = true; return; diff --git a/IDEHelper/Compiler/BfReducer.h b/IDEHelper/Compiler/BfReducer.h index ff4ce6c1..7b22d10b 100644 --- a/IDEHelper/Compiler/BfReducer.h +++ b/IDEHelper/Compiler/BfReducer.h @@ -184,8 +184,8 @@ public: BfTokenNode* ParseMethodParams(BfAstNode* node, SizedArrayImpl* params, SizedArrayImpl* commas, BfToken endToken, bool requireNames); BfTokenNode* ReadArguments(BfAstNode* parentNode, BfAstNode* afterNode, SizedArrayImpl* arguments, SizedArrayImpl* commas, BfToken endToken, bool allowSkippedArgs = false, CreateExprFlags createExprFlags = CreateExprFlags_None); void ReadPropertyBlock(BfPropertyDeclaration* propertyDeclaration, BfBlock* block); - BfAstNode* ReadTypeMember(BfTokenNode* node, int depth = 0); - BfAstNode* ReadTypeMember(BfAstNode* node, int depth = 0); + BfAstNode* ReadTypeMember(BfTokenNode* node, int depth = 0, BfAstNode* deferredHeadNode = NULL); + BfAstNode* ReadTypeMember(BfAstNode* node, int depth = 0, BfAstNode* deferredHeadNode = NULL); BfIdentifierNode* CompactQualifiedName(BfAstNode* leftNode); void TryIdentifierConvert(int readPos); void CreateQualifiedNames(BfAstNode* node); @@ -231,12 +231,12 @@ public: BfWhileStatement* CreateWhileStatement(BfAstNode* node); BfDoStatement* CreateDoStatement(BfAstNode* node); BfRepeatStatement* CreateRepeatStatement(BfAstNode* node); - BfAstNode* CreateTopLevelObject(BfTokenNode* tokenNode, BfAttributeDirective* attributes); + BfAstNode* CreateTopLevelObject(BfTokenNode* tokenNode, BfAttributeDirective* attributes, BfAstNode* deferredHeadNode = NULL); BfAstNode* HandleTopLevel(BfBlock* node); BfInlineAsmStatement* CreateInlineAsmStatement(BfAstNode* asmNode); void HandleBlock(BfBlock* block, bool allowEndingExpression = false); - void HandleTypeDeclaration(BfTypeDeclaration* typeDecl, BfAttributeDirective* attributes); + void HandleTypeDeclaration(BfTypeDeclaration* typeDecl, BfAttributeDirective* attributes, BfAstNode* deferredHeadNode = NULL); public: BfReducer();