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

Expanded detection of unqualified-dot-attempt in arguments

This commit is contained in:
Brian Fiete 2024-06-29 16:03:05 +02:00
parent ded495a07b
commit fe6d5fa16f

View file

@ -6104,25 +6104,6 @@ void BfExprEvaluator::ResolveArgValues(BfResolvedArgs& resolvedArgs, BfResolveAr
resolvedArg.mArgFlags = (BfArgFlags)(resolvedArg.mArgFlags | BfArgFlag_LambdaBindAttempt);
handled = true;
}
else if (auto memberRef = BfNodeDynCast<BfMemberReferenceExpression>(argExpr))
{
if (memberRef->mTarget == NULL)
{
resolvedArg.mArgFlags = (BfArgFlags)(resolvedArg.mArgFlags | BfArgFlag_UnqualifiedDotAttempt);
handled = true;
}
}
else if (auto invokeExpr = BfNodeDynCast<BfInvocationExpression>(argExpr))
{
if (auto memberRef = BfNodeDynCast<BfMemberReferenceExpression>(invokeExpr->mTarget))
{
if (memberRef->mTarget == NULL)
{
resolvedArg.mArgFlags = (BfArgFlags)(resolvedArg.mArgFlags | BfArgFlag_UnqualifiedDotAttempt);
handled = true;
}
}
}
else if (auto defaultExpr = BfNodeDynCast<BfDefaultExpression>(argExpr))
{
if (defaultExpr->mTypeRef == NULL)
@ -6161,6 +6142,35 @@ void BfExprEvaluator::ResolveArgValues(BfResolvedArgs& resolvedArgs, BfResolveAr
}
}*/
if (!handled)
{
BfAstNode* checkArgExpr = argExpr;
while (checkArgExpr != NULL)
{
if (auto memberRef = BfNodeDynCast<BfMemberReferenceExpression>(checkArgExpr))
{
if (memberRef->mTarget == NULL)
{
resolvedArg.mArgFlags = (BfArgFlags)(resolvedArg.mArgFlags | BfArgFlag_UnqualifiedDotAttempt);
handled = true;
break;
}
else
checkArgExpr = memberRef->mTarget;
}
else if (auto invokeExpr = BfNodeDynCast<BfInvocationExpression>(checkArgExpr))
{
checkArgExpr = invokeExpr->mTarget;
}
else if (auto parenExpr = BfNodeDynCast<BfParenthesizedExpression>(checkArgExpr))
{
checkArgExpr = parenExpr->mExpression;
}
else
break;
}
}
if ((argExpr != NULL) && (!handled))
{
bool deferParamValues = (flags & BfResolveArgsFlag_DeferParamValues) != 0;