diff options
Diffstat (limited to 'source')
| -rw-r--r-- | source/slang/slang.cpp | 29 |
1 files changed, 28 insertions, 1 deletions
diff --git a/source/slang/slang.cpp b/source/slang/slang.cpp index 29ca2328b..839ba7938 100644 --- a/source/slang/slang.cpp +++ b/source/slang/slang.cpp @@ -3039,7 +3039,34 @@ Expr* ComponentType::findDeclFromStringInType( } auto checkedTerm = visitor.CheckTerm(expr); - auto resolvedTerm = visitor.maybeResolveOverloadedExpr(checkedTerm, mask, sink); + + // Check if checkedTerm is overloaded functions and avoid resolving if so + // to preserve all function overloads with different signatures + Expr* resolvedTerm = checkedTerm; + if (auto overloadedExpr = as<OverloadedExpr>(checkedTerm)) + { + // Check if all candidates are function references + bool allAreFunctions = true; + for (auto item : overloadedExpr->lookupResult2.items) + { + if (!as<FunctionDeclBase>(item.declRef.getDecl())) + { + allAreFunctions = false; + break; + } + } + + // If not all are functions, resolve the overload as usual + if (!allAreFunctions) + { + resolvedTerm = visitor.maybeResolveOverloadedExpr(checkedTerm, mask, sink); + } + } + else + { + // Not overloaded, resolve as usual + resolvedTerm = visitor.maybeResolveOverloadedExpr(checkedTerm, mask, sink); + } if (auto overloadedExpr = as<OverloadedExpr>(resolvedTerm)) |
