mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-09-24 22:02:23 +01:00
Disallow :? within var (#6812)
Co-authored-by: David Blaikie <dblaikie@gmail.com>
This commit is contained in:
co-authored by
David Blaikie
parent
53729325a0
commit
2e155567bd
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user