mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-10-05 20:51:16 +01:00
Restructure ArgAndKind as a type-safe generic ID. (#7172)
The key changes here are: - Relocating and renaming it to align with `IdKind` (and relocating `ToRaw` and `FromRaw` to follow it). - Adding a `Dispatch` method that provides a generic overload-based API for expressing per-ID-kind dispatch, and rewriting existing code to use it. Note in particular that using overloads instead of switch cases makes it possible to generically handle all specializations of a templated ID type, e.g. `SomeIdType<T>` for all `T`. We have no such templated ID types yet, but I'm introducing one in a follow-up PR that needs this capability.
This commit is contained in:
@@ -87,7 +87,7 @@ class Worklist {
|
||||
|
||||
// Pushes the specified operand onto the worklist.
|
||||
static auto PushOperand(Context& context, Worklist& worklist,
|
||||
SemIR::Inst::ArgAndKind arg) -> void {
|
||||
SemIR::IdAndKind arg) -> void {
|
||||
auto push_block = [&](SemIR::InstBlockId block_id) {
|
||||
for (auto inst_id :
|
||||
context.inst_blocks().Get(SemIR::InstBlockId(block_id))) {
|
||||
@@ -182,7 +182,7 @@ static auto ExpandOperands(Context& context, Worklist& worklist,
|
||||
|
||||
// Pops the specified operand from the worklist and returns it.
|
||||
static auto PopOperand(Context& context, Worklist& worklist,
|
||||
SemIR::Inst::ArgAndKind arg) -> int32_t {
|
||||
SemIR::IdAndKind arg) -> int32_t {
|
||||
auto pop_block_id = [&](SemIR::InstBlockId old_inst_block_id) {
|
||||
auto size = context.inst_blocks().Get(old_inst_block_id).size();
|
||||
SemIR::CopyOnWriteInstBlock new_inst_block(&context.sem_ir(),
|
||||
|
||||
Reference in New Issue
Block a user