diff --git a/IDEHelper/Compiler/BfReducer.cpp b/IDEHelper/Compiler/BfReducer.cpp index 603cf882..ceee732d 100644 --- a/IDEHelper/Compiler/BfReducer.cpp +++ b/IDEHelper/Compiler/BfReducer.cpp @@ -404,7 +404,7 @@ bool BfReducer::IsTypeReference(BfAstNode* checkNode, BfToken successToken, int mVisitorPos.mReadPos = startNode; return true; } - else if ((checkToken == BfToken_Struct) || (checkToken == BfToken_Class) || (checkToken == BfToken_Interface) || (checkToken == BfToken_Enum)) + else if (BfTokenIsTypeDecl(checkToken)) { checkIdx++; auto nextNode = mVisitorPos.Get(checkIdx); @@ -5188,7 +5188,7 @@ BfTypeReference* BfReducer::DoCreateTypeRef(BfAstNode* firstNode, CreateTypeRefF String name; auto parserData = typeDecl->GetParserData(); - name = "Anon_"; + name = "_Anon_"; auto parseFileData = parserData->mParseFileData; int uniqueId = parseFileData->GetUniqueId(mCurUniqueIdx++); @@ -7190,7 +7190,7 @@ BfAstNode* BfReducer::ReadTypeMember(BfAstNode* node, bool declStarted, int dept } } - if ((token == BfToken_Struct) || (token == BfToken_Class) || (token == BfToken_Interface) || (token == BfToken_Enum)) + if (BfTokenIsTypeDecl(token)) { int endNodeIdx = -1; if (IsTypeReference(node, BfToken_None, -1, &endNodeIdx)) @@ -9310,7 +9310,6 @@ BfAstNode* BfReducer::CreateTopLevelObject(BfTokenNode* tokenNode, BfAttributeDi break; BfIdentifierNode* identifierNode = NULL; - if (!isAnonymous) { identifierNode = ExpectIdentifierAfter(tokenNode); @@ -9473,9 +9472,13 @@ BfAstNode* BfReducer::CreateTopLevelObject(BfTokenNode* tokenNode, BfAttributeDi if (isSimpleEnum) { - auto identifierNode = ExpectIdentifierAfter(tokenNode, "enum name"); - if (identifierNode == NULL) - return NULL; + BfIdentifierNode* identifierNode = NULL; + if (!isAnonymous) + { + identifierNode = ExpectIdentifierAfter(tokenNode, "enum name"); + if (identifierNode == NULL) + return NULL; + } // We put extra effort in here to continue after failure, since 'return NULL' failure // means we don't parse members inside type (messes up colorization and such) @@ -9487,7 +9490,8 @@ BfAstNode* BfReducer::CreateTopLevelObject(BfTokenNode* tokenNode, BfAttributeDi typeDeclaration->mTypeNode = tokenNode; typeDeclaration->mNameNode = identifierNode; ReplaceNode(tokenNode, typeDeclaration); - MoveNode(identifierNode, typeDeclaration); + if (identifierNode != NULL) + MoveNode(identifierNode, typeDeclaration); typeDeclaration->mDocumentation = FindDocumentation(typeDeclaration); auto nextNode = mVisitorPos.GetNext(); diff --git a/IDEHelper/Tests/src/Anonymous.bf b/IDEHelper/Tests/src/Anonymous.bf index 9a0d8b46..21332362 100644 --- a/IDEHelper/Tests/src/Anonymous.bf +++ b/IDEHelper/Tests/src/Anonymous.bf @@ -14,6 +14,10 @@ class Anonymous retVals.mB = 2; return retVals; } + + public enum { Left, Right } GetDirection() => .Right; + + public enum : int { A, B, C } Val => .C; } struct StructB @@ -37,6 +41,9 @@ class Anonymous Test.Assert(val.mA == 0); Test.Assert(val.mB == 0); + Test.Assert(sa.GetDirection() == .Right); + Test.Assert(sa.Val == .C); + StructB sb = default; sb.mX = 345; Test.Assert(sb.mY == 345);