1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-10 04:22:20 +02:00

Anonymous type improvements

This commit is contained in:
Brian Fiete 2025-01-02 16:19:26 -08:00
parent 97c119cbc7
commit 01c2c35fc3
2 changed files with 19 additions and 8 deletions

View file

@ -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");
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,6 +9490,7 @@ BfAstNode* BfReducer::CreateTopLevelObject(BfTokenNode* tokenNode, BfAttributeDi
typeDeclaration->mTypeNode = tokenNode;
typeDeclaration->mNameNode = identifierNode;
ReplaceNode(tokenNode, typeDeclaration);
if (identifierNode != NULL)
MoveNode(identifierNode, typeDeclaration);
typeDeclaration->mDocumentation = FindDocumentation(typeDeclaration);

View file

@ -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);