summaryrefslogtreecommitdiff
path: root/source/slang/slang-check-overload.cpp
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2023-11-10 13:55:14 -0800
committerGitHub <noreply@github.com>2023-11-10 13:55:14 -0800
commit011d4281647e3a2a3cf0dbdda1fa65cc1b8ed881 (patch)
tree70f91655e86d30529eda0a683e15f378eeae2cb5 /source/slang/slang-check-overload.cpp
parentbfd3f39d04047d7a46e75206cd125ed87b3f3f99 (diff)
Cleanup builtin arithmetic interfaces. (#3317)
* wip: clean up IArithmetic * wip. * Cleanup builtin arithmetic interfaces. * Fix. * Fixes. * Fix. * Fix. * Fix. --------- Co-authored-by: Yong He <yhe@nvidia.com>
Diffstat (limited to 'source/slang/slang-check-overload.cpp')
-rw-r--r--source/slang/slang-check-overload.cpp14
1 files changed, 14 insertions, 0 deletions
diff --git a/source/slang/slang-check-overload.cpp b/source/slang/slang-check-overload.cpp
index c668155df..27062fc0c 100644
--- a/source/slang/slang-check-overload.cpp
+++ b/source/slang/slang-check-overload.cpp
@@ -1070,6 +1070,15 @@ namespace Slang
return 0;
}
+ int getOverloadRank(DeclRef<Decl> declRef)
+ {
+ if (!declRef.getDecl())
+ return 0;
+ if (auto attr = declRef.getDecl()->findModifier<OverloadRankAttribute>())
+ return attr->rank;
+ return 0;
+ }
+
int SemanticsVisitor::CompareOverloadCandidates(
OverloadCandidate* left,
OverloadCandidate* right)
@@ -1142,6 +1151,11 @@ namespace Slang
auto specificityDiff = compareOverloadCandidateSpecificity(left->item, right->item);
if(specificityDiff)
return specificityDiff;
+
+ // If we reach here, we will attempt to use overload rank to break the ties.
+ auto overloadRankDiff = getOverloadRank(right->item.declRef) - getOverloadRank(left->item.declRef);
+ if (overloadRankDiff)
+ return overloadRankDiff;
}
return 0;