Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP

Loading…

refactor how impl self type vs iface type is stored (at least for classes) #2434

Closed
nikomatsakis opened this Issue · 1 comment

2 participants

@nikomatsakis

Near as I can tell, this is how things stand now:

  • Both impls and classes make use of an iface_ref, which has an id, a path and so forth
  • The type that the iface_ref refers to is stored in the node_types table under the id of the iface_ref
  • (So far this all makes sense)

But this is where things go off the rails.

  • For impls, the self type is stored in the tcache under the item id.
  • For classes, the self type seems to be stored in the tcache under the iface_ref's id.

(This is based on the "impl_id" that is stored in resolve.)

The idea of encapsulating an iface+impl pair into an iface-ref seems to make sense, but we probably want to either use separate tables to store the self type (i.e., not the tcache) or else use a separate id. Right now classes end up with different types in the tcache table and node_types table under the same ID. This seems unusual and I think it is the only place that it occurs.

Also, impls + classes should be as similar as possible. I think this was the original idea of introducing iface-ref, but there still seem to be some significant differences in how things work between the two. So we should erase that.

@catamorphism

Any differences between impls and classes that were introduced by me were for expedience (as I saw it at the time), not by design, so I definitely support simplifying the code in any way possible. (I'm on vacation until Tuesday, so, whoever gets to it first...)

@olsonjeffery olsonjeffery referenced this issue from a commit
Commit has since been removed from the repository and is no longer available.
@catamorphism catamorphism was assigned
@catamorphism catamorphism closed this issue from a commit
@catamorphism catamorphism Refactor how impl self types are stored
In order to avoid a confusing use of the tcache, I added an extra
node ID field to trait refs. Now trait refs have a "ref ID" (the one
that resolve3 resolves) and an "impl ID" (the one that you look up
in the tcache to get the self type).

Closes #2434
07a81ad
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Something went wrong with that request. Please try again.