Skip to content

Commit b15ef15

Browse files
committed
[ConstraintSystem] Change missingArgument callback to produce an index of synthesized argument
In diagnostic mode allow argument matcher to synthesize new arguments, which makes it much easier to diagnose problems related to missing arguments.
1 parent 4203c2f commit b15ef15

File tree

4 files changed

+9
-4
lines changed

4 files changed

+9
-4
lines changed

lib/Sema/CSDiag.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2211,7 +2211,7 @@ class ArgumentMatcher : public MatchCallArgumentListener {
22112211
Diagnosed = true;
22122212
}
22132213

2214-
void missingArgument(unsigned missingParamIdx) override {
2214+
Optional<unsigned> missingArgument(unsigned missingParamIdx) override {
22152215
auto &param = Parameters[missingParamIdx];
22162216
Identifier name = param.getLabel();
22172217

@@ -2341,6 +2341,7 @@ class ArgumentMatcher : public MatchCallArgumentListener {
23412341
candidate.getDecl()->getFullName());
23422342

23432343
Diagnosed = true;
2344+
return None;
23442345
}
23452346

23462347
bool isPropertyWrapperImplicitInit() {

lib/Sema/CSSimplify.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,10 @@ MatchCallArgumentListener::~MatchCallArgumentListener() { }
3636

3737
void MatchCallArgumentListener::extraArgument(unsigned argIdx) { }
3838

39-
void MatchCallArgumentListener::missingArgument(unsigned paramIdx) { }
39+
Optional<unsigned>
40+
MatchCallArgumentListener::missingArgument(unsigned paramIdx) {
41+
return None;
42+
}
4043

4144
bool MatchCallArgumentListener::missingLabel(unsigned paramIdx) { return true; }
4245
bool MatchCallArgumentListener::extraneousLabel(unsigned paramIdx) {

lib/Sema/CalleeCandidateInfo.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -284,8 +284,9 @@ CalleeCandidateInfo::ClosenessResultTy CalleeCandidateInfo::evaluateCloseness(
284284
void extraArgument(unsigned argIdx) override {
285285
result = CC_ArgumentCountMismatch;
286286
}
287-
void missingArgument(unsigned paramIdx) override {
287+
Optional<unsigned> missingArgument(unsigned paramIdx) override {
288288
result = CC_ArgumentCountMismatch;
289+
return None;
289290
}
290291
bool missingLabel(unsigned paramIdx) override {
291292
result = CC_ArgumentLabelMismatch;

lib/Sema/ConstraintSystem.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3858,7 +3858,7 @@ class MatchCallArgumentListener {
38583858
/// indices.
38593859
///
38603860
/// \param paramIdx The index of the parameter that is missing an argument.
3861-
virtual void missingArgument(unsigned paramIdx);
3861+
virtual Optional<unsigned> missingArgument(unsigned paramIdx);
38623862

38633863
/// Indicate that there was no label given when one was expected by parameter.
38643864
///

0 commit comments

Comments
 (0)