mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-09-24 22:02:23 +01:00
High level, replacing `Id::Invalid` with `Id::None` and `Id::is_valid` with `Id::has_value` for clarity, as discussed [here](https://discord.com/channels/655572317891461132/655578254970716160/1331664574545395794). The `IntId` refactoring is needed together with `AnyIdBase` because it's also used with `ValueStore`. Note, trying to be careful not to rewrite `EnumBase::InvalidIndex`, or `is_valid` in general (e.g., `IdKind::is_valid`). I've tried to sequence commits here: 1. Automatic replacements: - `((?:Id|Index)(?: |::|\(|Base(?:\(|::)))Invalid((?:Index)?\W)` -> `$1None$2` - `<invalid>` -> `<none>` - `InvalidNodeId` -> `NoneNodeId` - `/\*invalid\*/` -> `/*none*/` - `id((?:_|\(\))(?:\.|->))is_valid` -> `id$1has_value` 2. Manual edits: - In `int.h` and `int_test.cpp` - `IntT` has `is_value`, which I'm renaming to `is_embedded_value`. - Manual edits to comments in this file. - `AnyIdBase` and `IdBase` - Declaration of `is_valid` -> `has_value`, `InvalidIndex` -> `NoneIndex`. - In `ids.h` and `ids.cpp` - `is_valid` -> `has_value` - `// An explicitly invalid ID.` -> `// An ID with no value.`; similar for index - Various math on `InvalidIndex` -> `NoneIndex` - Various mentions of "valid" in comments - In `value_store.h`, for `IdT::Invalid`, plus one comment - In `impl.h` and `tokenized_buffer.h`, we had different initialization of `::None` values (versus `ids.h` syntax) that I fixed manually. - Spot checks to compile - Particularly where `is_valid` replacements didn't catch spots due to different naming. 3. Autoupdate tests 4. verbose.carbon (NOAUTOUPDATE) 5. Comment spot checks Note there are probably other mentions of "Invalid" that should be swept up, but I'd like to argue for merging and separating out remaining cleanup since this is so sweeping (and likely to hit merge conflicts from churn). We'll probably have lingering mentions of "invalid" for a bit regardless, just because there are uses of "invalid" in non-Id APIs.
66 lines
2.1 KiB
C++
66 lines
2.1 KiB
C++
// 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
|
|
|
|
#ifndef CARBON_TOOLCHAIN_CHECK_NAME_COMPONENT_H_
|
|
#define CARBON_TOOLCHAIN_CHECK_NAME_COMPONENT_H_
|
|
|
|
#include "toolchain/check/node_stack.h"
|
|
#include "toolchain/parse/node_ids.h"
|
|
#include "toolchain/sem_ir/ids.h"
|
|
|
|
namespace Carbon::Check {
|
|
|
|
class Context;
|
|
|
|
// A component in a declaration name, such as `C[T:! type](N:! T)` in
|
|
// `fn C[T:! type](N:! T).F() {}`.
|
|
struct NameComponent {
|
|
// The name of the declaration.
|
|
Parse::NodeId name_loc_id;
|
|
SemIR::NameId name_id;
|
|
|
|
// Parse tree bounds for the parameters, including both implicit and explicit
|
|
// parameters. These will be compared to match between declaration and
|
|
// definition.
|
|
Parse::NodeId first_param_node_id;
|
|
Parse::NodeId last_param_node_id;
|
|
|
|
// The implicit parameter list.
|
|
Parse::NodeId implicit_params_loc_id;
|
|
SemIR::InstBlockId implicit_param_patterns_id;
|
|
|
|
// The explicit parameter list.
|
|
Parse::NodeId params_loc_id;
|
|
SemIR::InstBlockId param_patterns_id;
|
|
|
|
// The `Call` parameters of the entity, if it's a function (see the
|
|
// corresponding member of SemIR::EntityWithParamsBase).
|
|
// TODO: This is only used for function declarations. Should it go somewhere
|
|
// else?
|
|
SemIR::InstBlockId call_params_id;
|
|
|
|
// The return slot.
|
|
// TODO: This is only used for function declarations. Should it go
|
|
// somewhere else?
|
|
SemIR::InstId return_slot_pattern_id;
|
|
|
|
// The pattern block.
|
|
SemIR::InstBlockId pattern_block_id;
|
|
};
|
|
|
|
// Pops a name component from the node stack (and pattern block stack, if it has
|
|
// parameters).
|
|
auto PopNameComponent(Context& context, SemIR::InstId return_slot_pattern_id =
|
|
SemIR::InstId::None)
|
|
-> NameComponent;
|
|
|
|
// Equivalent to PopNameComponent, but also diagnoses if the name component has
|
|
// parameters.
|
|
auto PopNameComponentWithoutParams(Context& context, Lex::TokenKind introducer)
|
|
-> NameComponent;
|
|
|
|
} // namespace Carbon::Check
|
|
|
|
#endif // CARBON_TOOLCHAIN_CHECK_NAME_COMPONENT_H_
|