Description
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.