diff --git a/IDEHelper/Compiler/BfExprEvaluator.cpp b/IDEHelper/Compiler/BfExprEvaluator.cpp index b5145ac3..5d77dae5 100644 --- a/IDEHelper/Compiler/BfExprEvaluator.cpp +++ b/IDEHelper/Compiler/BfExprEvaluator.cpp @@ -6103,26 +6103,7 @@ void BfExprEvaluator::ResolveArgValues(BfResolvedArgs& resolvedArgs, BfResolveAr { resolvedArg.mArgFlags = (BfArgFlags)(resolvedArg.mArgFlags | BfArgFlag_LambdaBindAttempt); handled = true; - } - else if (auto memberRef = BfNodeDynCast(argExpr)) - { - if (memberRef->mTarget == NULL) - { - resolvedArg.mArgFlags = (BfArgFlags)(resolvedArg.mArgFlags | BfArgFlag_UnqualifiedDotAttempt); - handled = true; - } - } - else if (auto invokeExpr = BfNodeDynCast(argExpr)) - { - if (auto memberRef = BfNodeDynCast(invokeExpr->mTarget)) - { - if (memberRef->mTarget == NULL) - { - resolvedArg.mArgFlags = (BfArgFlags)(resolvedArg.mArgFlags | BfArgFlag_UnqualifiedDotAttempt); - handled = true; - } - } - } + } else if (auto defaultExpr = BfNodeDynCast(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(checkArgExpr)) + { + if (memberRef->mTarget == NULL) + { + resolvedArg.mArgFlags = (BfArgFlags)(resolvedArg.mArgFlags | BfArgFlag_UnqualifiedDotAttempt); + handled = true; + break; + } + else + checkArgExpr = memberRef->mTarget; + } + else if (auto invokeExpr = BfNodeDynCast(checkArgExpr)) + { + checkArgExpr = invokeExpr->mTarget; + } + else if (auto parenExpr = BfNodeDynCast(checkArgExpr)) + { + checkArgExpr = parenExpr->mExpression; + } + else + break; + } + } + if ((argExpr != NULL) && (!handled)) { bool deferParamValues = (flags & BfResolveArgsFlag_DeferParamValues) != 0;