Skip to content

Separate definitions and HIR owners in the type system #83158

Closed
@cjgillot

Description

@cjgillot

Both definitions and HIR owners are represented by a LocalDefId,
but they don't have the same semantics.

HIR owners are the owner field of a HirId,
and the argument passed to the hir_owner* queries.
HIR owners contain the following HIR nodes: Item, TraitItem, ImplItem, ForeignItem, MacroDef,
and GenericParams which come from impl Trait desugaring.

LocalDefId enumerate definitions in the local crate.
Definitions are a broader concept than HIR owners.
For instance, closures are definitions but not HIR owners.

On the other hand, all HIR owners are definitions.

We need to introduce a new type HirOwner type (name to bikeshed),
whose usage will be the following:

  • HirOwner is defined as struct HirOwner { def_id: LocalDefId };
  • HirId becomes { owner: HirOwner, local_id: ItemLocalId };
  • Item, TraitItem, ImplItem, ForeignItem, MacroDef have a HirOwner as their def_id field;
  • hir_owner* queries take a HirOwner as argument;
  • the passage between HirOwner and LocalDefId happens through
    the local_def_id_to_hir_id: LocalDefId -> HirId
    and local_def_id: HirId -> LocalDefId methods.

I am available on Zulip for further information.

Metadata

Metadata

Labels

A-HIRArea: The high-level intermediate representation (HIR)E-help-wantedCall for participation: Help is requested to fix this issue.E-mediumCall for participation: Medium difficulty. Experience needed to fix: Intermediate.E-mentorCall for participation: This issue has a mentor. Use #t-compiler/help on Zulip for discussion.T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions