Disallow :? within var (#6812)

Co-authored-by: David Blaikie <dblaikie@gmail.com>
This commit is contained in:
Geoff Romer
2026-03-06 21:08:22 +00:00
committed by GitHub
co-authored by David Blaikie
parent 53729325a0
commit 2e155567bd
6 changed files with 35 additions and 10 deletions
+8 -5
View File
@@ -112,7 +112,7 @@ auto HandleBindingPattern(Context& context) -> void {
}
}
// Handles BindingPatternFinishAs(Generic|Regular).
// Handles BindingPatternFinishAs(Generic|Regular|Form).
static auto HandleBindingPatternFinish(Context& context, StateKind finish_kind)
-> void {
auto state = context.PopState();
@@ -120,10 +120,13 @@ static auto HandleBindingPatternFinish(Context& context, StateKind finish_kind)
auto node_kind = NodeKind::InvalidParse;
if (state.in_var_pattern) {
node_kind = NodeKind::VarBindingPattern;
if (finish_kind == StateKind::BindingPatternFinishAsGeneric) {
CARBON_DIAGNOSTIC(CompileTimeBindingInVarDecl, Error,
"`var` pattern cannot declare a compile-time binding");
context.emitter().Emit(*context.position(), CompileTimeBindingInVarDecl);
if (finish_kind != StateKind::BindingPatternFinishAsRegular) {
CARBON_DIAGNOSTIC(NonRegularBindingInVarDecl, Error,
"found {0:`:!`|`:?`} pattern inside `var` pattern",
Diagnostics::BoolAsSelect);
context.emitter().Emit(
*context.position(), NonRegularBindingInVarDecl,
finish_kind == StateKind::BindingPatternFinishAsGeneric);
state.has_error = true;
}
} else {