diff --git a/IDEHelper/Compiler/BfReducer.cpp b/IDEHelper/Compiler/BfReducer.cpp index 34a3274b..96179d69 100644 --- a/IDEHelper/Compiler/BfReducer.cpp +++ b/IDEHelper/Compiler/BfReducer.cpp @@ -7559,20 +7559,64 @@ BfAstNode* BfReducer::CreateTopLevelObject(BfTokenNode* tokenNode, BfAttributeDi { SetAndRestoreValue prevVisitorPos(mVisitorPos, BfVisitorPos(block)); mVisitorPos.MoveNext(); + + bool hadIllegal = false; + bool inAssignment = false; - BfAstNode* headNode = block->mChildArr.GetAs(0); - if (auto nameNode = BfNodeDynCast(headNode)) + int checkIdx = 0; + while (true) { - auto nextNode = mVisitorPos.Get(1); - if (auto nextToken = BfNodeDynCast(nextNode)) + auto node = block->mChildArr.Get(checkIdx); + if (node == NULL) + break; + + if (auto identifierNode = BfNodeDynCast(node)) { - if ((nextToken->GetToken() == BfToken_Comma) || (nextToken->GetToken() == BfToken_AssignEquals)) - isSimpleEnum = true; + // Allow } - if (nextNode == NULL) - isSimpleEnum = true; + else if (auto tokenNode = BfNodeDynCast(node)) + { + if (tokenNode->mToken == BfToken_Comma) + { + // Allow + inAssignment = false; + } + else if (tokenNode->mToken == BfToken_AssignEquals) + { + inAssignment = true; + } + else if (tokenNode->mToken == BfToken_Semicolon) + { + hadIllegal = true; + break; + } + else + { + if (!inAssignment) + { + hadIllegal = true; + break; + } + } + } + else + { + if (!inAssignment) + { + hadIllegal = true; + break; + } + } + + checkIdx++; + } + + if (!hadIllegal) + { + isSimpleEnum = true; } - break; + + break; } checkReadPos++;