/
githubmirror
/
carbon-lang
Обзор
Документация
Войти
/
githubmirror
/
carbon-lang
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
trunk
toolchain/parse/handle_match_first.cpp
37 строк
1 KB
Dana Jansens
Avoid consuming a token after an invalid match_first opening (#7538)
20 июл 2026, 22:09
Не верифицирован
20 июл 2026, 22:09
085e450
Код
Авторство
О чём код?
// Part of the Carbon Language project, under the Apache License v2.0 with LLVM // Exceptions. See /LICENSE for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception #include "toolchain/lex/token_kind.h" #include "toolchain/parse/context.h" #include "toolchain/parse/handle.h" namespace Carbon::Parse { auto HandleMatchFirst(Context& context) -> void { auto state = context.PopState(); // MatchFirstIntroducer node is automatically added for the MatchFirst state. if (auto open_curly = context.ConsumeAndAddOpenCurlyBrace( state.token, NodeKind::MatchFirstDefinitionStart)) { state.token = *open_curly; } else { state.has_error = true; } context.PushState(state, StateKind::MatchFirstFinish); if (!state.has_error) { context.PushState(StateKind::DeclScopeLoopAsRegular); } } auto HandleMatchFirstFinish(Context& context) -> void { auto state = context.PopState(); if (auto closing_token = context.ConsumeIf(Lex::TokenKind::CloseCurlyBrace)) { context.AddNode(NodeKind::MatchFirst, *closing_token, state.has_error); } else { // Recover from error by just moving on. context.AddNode(NodeKind::MatchFirst, state.token, state.has_error); } } } // namespace Carbon::Parse