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

Support for 'decltype(val).MemberName' expressions

This commit is contained in:
Brian Fiete 2020-09-19 10:02:51 -07:00
parent adb0bc4b85
commit 7f9e0c4f5b
2 changed files with 16 additions and 3 deletions

View file

@ -2182,6 +2182,14 @@ BfExpression* BfReducer::CreateExpression(BfAstNode* node, CreateExprFlags creat
}
}
}
else if (tokenNode->GetToken() == BfToken_Decltype)
{
auto typeRef = CreateTypeRef(tokenNode, CreateTypeRefFlags_EarlyExit);
if (typeRef != NULL)
{
exprLeft = CreateMemberReferenceExpression(typeRef);
}
}
if (exprLeft == NULL)
{
@ -4685,6 +4693,9 @@ BfTypeReference* BfReducer::DoCreateTypeRef(BfAstNode* firstNode, CreateTypeRefF
isHandled = true;
firstNode = delegateTypeRef;
if ((createTypeRefFlags & CreateTypeRefFlags_EarlyExit) != 0)
return delegateTypeRef;
}
else if (token == BfToken_Decltype)
{
@ -4701,7 +4712,8 @@ BfTypeReference* BfReducer::DoCreateTypeRef(BfAstNode* firstNode, CreateTypeRefF
isHandled = true;
firstNode = declTypeRef;
//return declTypeRef;
if ((createTypeRefFlags & CreateTypeRefFlags_EarlyExit) != 0)
return declTypeRef;
}
else if (token == BfToken_LParen)
{
@ -4770,7 +4782,7 @@ BfTypeReference* BfReducer::DoCreateTypeRef(BfAstNode* firstNode, CreateTypeRefF
{
Fail("Expected type", firstNode);
return NULL;
}
}
}
}

View file

@ -46,7 +46,8 @@ public:
CreateTypeRefFlags_None,
CreateTypeRefFlags_NoParseArrayBrackets = 1,
CreateTypeRefFlags_SafeGenericParse = 2,
CreateTypeRefFlags_AllowSingleMemberTuple = 4
CreateTypeRefFlags_AllowSingleMemberTuple = 4,
CreateTypeRefFlags_EarlyExit = 8
};
struct BfVisitorPos