mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-10-05 22:02:55 +01:00
Refactor LocId to merge in SemIRLoc (#5284)
The main goal of this is to collapse the LocId and SemIRLoc types into a single type, eliminating the need for APIs to decide which to use. This originated from discussion about UnwrapSemIRLoc in #5169. Although that was removed in #5202, it's probably still a good direction for LocId. This changes the packing of LocId to allow adding InstId, making it tri-modal: ImportIRInstId, InstId, or NodeId. This has a side-effect of reducing the available space for ImportIRInstId, although not by much due to the pre-existing `ImplicitBit` behavior. If needed, we could also probably play with packing a bit more since `ImplicitBit` really only applies to `NodeId`, but I was trying to keep the logic a little simpler. Note `TokenOnlyBit` can still apply to `ImportIRInstId`. This leaves in place a typedef for SemIRLoc -- I intend to clean that up separately. Some Discord discussion is [here](https://discord.com/channels/655572317891461132/655578254970716160/1353755830058745959).
This commit is contained in:
@@ -733,7 +733,7 @@ auto FileContext::BuildVtable(const SemIR::Class& class_info)
|
||||
|
||||
auto first_owning_decl_loc =
|
||||
sem_ir().insts().GetLocId(class_info.first_owning_decl_id);
|
||||
if (first_owning_decl_loc.is_import_ir_inst_id()) {
|
||||
if (first_owning_decl_loc.kind() == SemIR::LocId::Kind::ImportIRInstId) {
|
||||
// Emit a declaration of an imported vtable using a(n opaque) pointer type.
|
||||
// This doesn't have to match the definition that appears elsewhere, it'll
|
||||
// still get merged correctly.
|
||||
|
||||
Reference in New Issue
Block a user