Clean up handling of Call params (#5061)

- Explicitly document that `*Param` and `*ParamPattern` insts represent
`Call` parameters.
- Stop wrapping compile-time parameter patterns in `ValueParamPattern`
insts (because they aren't `Call` parameters).
- Document how `MatchContext::results_` relates to the `Call`
parameters, and be more consistent about when it's written to.
- Remove `RuntimeParamIndex::Unknown`: we no longer need to distinguish
"this `Param`'s runtime index is unknown" from "this `Param` isn't a
runtime param", because we no longer use `Param`s at all in the latter
case.
- Rename `RuntimeParamIndex` to `CallParamIndex`.

As a side effect of removing the `ValueParamPattern` insts, this fixes a
minor diagnostic bug where `NoteInitializingParam` didn't identify the
specific parameter that led to a deduction failure, because it expects
generic parameters to only be represented by `SymbolicBindingPattern`s,
but before this change they could be wrapped in `ValueParamPattern`s.
This commit is contained in:
Geoff Romer
2025-03-04 21:01:59 +00:00
committed by GitHub
parent 4e21c0c1fc
commit d264f14027
148 changed files with 1424 additions and 2410 deletions
+1
View File
@@ -11,6 +11,7 @@ namespace Carbon::Check {
auto ScopeStack::VerifyOnFinish() const -> void {
CARBON_CHECK(scope_stack_.empty(), "{0}", scope_stack_.size());
full_pattern_stack_.VerifyOnFinish();
}
auto ScopeStack::VerifyNextCompileTimeBindIndex(llvm::StringLiteral label,