Skip to content

Commit 45aec3c

Browse files
committed
[ConstraintSystem] NFC: Extract logic related to forming locator for argument info retrieval
1 parent 7e1eae4 commit 45aec3c

File tree

3 files changed

+18
-19
lines changed

3 files changed

+18
-19
lines changed

lib/Sema/CSGen.cpp

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3227,18 +3227,11 @@ namespace {
32273227
void associateArgumentLabels(Expr *expr,
32283228
ConstraintSystem::ArgumentInfo info,
32293229
bool labelsArePermanent = true) {
3230-
ConstraintLocator *locator = nullptr;
3231-
if (auto *apply = dyn_cast<ApplyExpr>(expr)) {
3232-
auto *fnExpr = getArgumentLabelTargetExpr(apply->getFn());
3233-
locator = CS.getConstraintLocator(fnExpr);
3234-
} else {
3235-
locator = CS.getCalleeLocator(expr);
3236-
}
3237-
3230+
assert(expr);
32383231
// Record the labels.
32393232
if (!labelsArePermanent)
32403233
info.Labels = CS.allocateCopy(info.Labels);
3241-
CS.ArgumentInfos[locator] = info;
3234+
CS.ArgumentInfos[CS.getArgumentInfoLocator(expr)] = info;
32423235
}
32433236
};
32443237

lib/Sema/ConstraintSystem.cpp

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2780,23 +2780,25 @@ void ConstraintSystem::generateConstraints(
27802780
}
27812781
}
27822782

2783-
Optional<ConstraintSystem::ArgumentInfo>
2784-
ConstraintSystem::getArgumentInfo(ConstraintLocator *locator) {
2785-
Expr *anchor = locator->getAnchor();
2783+
ConstraintLocator *ConstraintSystem::getArgumentInfoLocator(Expr *anchor) {
27862784
if (!anchor)
2787-
return None;
2785+
return nullptr;
27882786

27892787
if (auto *apply = dyn_cast<ApplyExpr>(anchor)) {
27902788
auto *fnExpr = getArgumentLabelTargetExpr(apply->getFn());
2791-
locator = getConstraintLocator(fnExpr);
2792-
} else {
2793-
locator = getCalleeLocator(anchor);
2789+
return getConstraintLocator(fnExpr);
27942790
}
27952791

2796-
auto known = ArgumentInfos.find(locator);
2797-
if (known != ArgumentInfos.end())
2798-
return known->second;
2792+
return getCalleeLocator(anchor);
2793+
}
27992794

2795+
Optional<ConstraintSystem::ArgumentInfo>
2796+
ConstraintSystem::getArgumentInfo(ConstraintLocator *locator) {
2797+
if (auto *infoLocator = getArgumentInfoLocator(locator->getAnchor())) {
2798+
auto known = ArgumentInfos.find(infoLocator);
2799+
if (known != ArgumentInfos.end())
2800+
return known->second;
2801+
}
28002802
return None;
28012803
}
28022804

lib/Sema/ConstraintSystem.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1559,6 +1559,10 @@ class ConstraintSystem {
15591559
/// that locator.
15601560
llvm::DenseMap<ConstraintLocator *, ArgumentInfo> ArgumentInfos;
15611561

1562+
/// Form a locator with given anchor which then could be used
1563+
/// to retrieve argument information cached in the constraint system.
1564+
ConstraintLocator *getArgumentInfoLocator(Expr *anchor);
1565+
15621566
/// Retrieve the argument info that is associated with a member
15631567
/// reference at the given locator.
15641568
Optional<ArgumentInfo> getArgumentInfo(ConstraintLocator *locator);

0 commit comments

Comments
 (0)