// Re-export lists automatically contain constructors when necessary.
match kind {
DefKind::Struct => {
- if let Some(ctor_def_id) = self.get_ctor_def_id(child_index) {
- let ctor_kind = self.get_ctor_kind(child_index);
+ if let Some((ctor_def_id, ctor_kind)) =
+ self.get_ctor_def_id_and_kind(child_index)
+ {
let ctor_res =
Res::Def(DefKind::Ctor(CtorOf::Struct, ctor_kind), ctor_def_id);
let vis = self.get_visibility(ctor_def_id.index);
// value namespace, they are reserved for possible future use.
// It's ok to use the variant's id as a ctor id since an
// error will be reported on any use of such resolution anyway.
- let ctor_def_id = self.get_ctor_def_id(child_index).unwrap_or(def_id);
- let ctor_kind = self.get_ctor_kind(child_index);
+ let (ctor_def_id, ctor_kind) = self
+ .get_ctor_def_id_and_kind(child_index)
+ .unwrap_or((def_id, CtorKind::Fictive));
let ctor_res =
Res::Def(DefKind::Ctor(CtorOf::Variant, ctor_kind), ctor_def_id);
let mut vis = self.get_visibility(ctor_def_id.index);
}
}
+ fn get_fn_has_self_parameter(&self, id: DefIndex) -> bool {
+ match self.kind(id) {
+ EntryKind::AssocFn(data) => data.decode(self).has_self,
+ _ => false,
+ }
+ }
+
fn get_associated_item(&self, id: DefIndex, sess: &Session) -> ty::AssocItem {
let def_key = self.def_key(id);
let parent = self.local_def_id(def_key.parent.unwrap());
self.root.tables.variances.get(self, id).unwrap_or_else(Lazy::empty).decode(self)
}
- fn get_ctor_kind(&self, node_id: DefIndex) -> CtorKind {
+ fn get_ctor_def_id_and_kind(&self, node_id: DefIndex) -> Option<(DefId, CtorKind)> {
match self.kind(node_id) {
- EntryKind::Struct(data, _) | EntryKind::Union(data, _) | EntryKind::Variant(data) => {
- data.decode(self).ctor_kind
- }
- _ => CtorKind::Fictive,
- }
- }
-
- fn get_ctor_def_id(&self, node_id: DefIndex) -> Option<DefId> {
- match self.kind(node_id) {
- EntryKind::Struct(data, _) => {
- data.decode(self).ctor.map(|index| self.local_def_id(index))
- }
- EntryKind::Variant(data) => {
- data.decode(self).ctor.map(|index| self.local_def_id(index))
+ EntryKind::Struct(data, _) | EntryKind::Variant(data) => {
+ let vdata = data.decode(self);
+ vdata.ctor.map(|index| (self.local_def_id(index), vdata.ctor_kind))
}
_ => None,
}
}
pub fn ctor_def_id_and_kind_untracked(&self, def: DefId) -> Option<(DefId, CtorKind)> {
- self.get_crate_data(def.krate).get_ctor_def_id(def.index).map(|ctor_def_id| {
- (ctor_def_id, self.get_crate_data(def.krate).get_ctor_kind(def.index))
- })
+ self.get_crate_data(def.krate).get_ctor_def_id_and_kind(def.index)
}
pub fn visibility_untracked(&self, def: DefId) -> Visibility {
)
}
- pub fn associated_item_cloned_untracked(&self, def: DefId, sess: &Session) -> ty::AssocItem {
- self.get_crate_data(def.krate).get_associated_item(def.index, sess)
+ pub fn fn_has_self_parameter_untracked(&self, def: DefId) -> bool {
+ self.get_crate_data(def.krate).get_fn_has_self_parameter(def.index)
}
pub fn crate_source_untracked(&self, cnum: CrateNum) -> CrateSource {