Support for nested statics, consts and type aliases

This commit is contained in:
Aleksey Kladov 2019-12-20 12:22:55 +01:00
parent ac5a3f611b
commit fe1b160dcf
3 changed files with 18 additions and 5 deletions

View file

@ -25,7 +25,8 @@ use crate::{
path::GenericArgs, path::GenericArgs,
path::Path, path::Path,
type_ref::{Mutability, TypeRef}, type_ref::{Mutability, TypeRef},
ContainerId, DefWithBodyId, EnumLoc, FunctionLoc, Intern, ModuleDefId, StructLoc, UnionLoc, ConstLoc, ContainerId, DefWithBodyId, EnumLoc, FunctionLoc, Intern, ModuleDefId, StaticLoc,
StructLoc, TypeAliasLoc, UnionLoc,
}; };
pub(super) fn lower( pub(super) fn lower(
@ -497,6 +498,18 @@ where
let ast_id = self.expander.ast_id(&def); let ast_id = self.expander.ast_id(&def);
FunctionLoc { container: container.into(), ast_id }.intern(self.db).into() FunctionLoc { container: container.into(), ast_id }.intern(self.db).into()
} }
ast::ModuleItem::TypeAliasDef(def) => {
let ast_id = self.expander.ast_id(&def);
TypeAliasLoc { container: container.into(), ast_id }.intern(self.db).into()
}
ast::ModuleItem::ConstDef(def) => {
let ast_id = self.expander.ast_id(&def);
ConstLoc { container: container.into(), ast_id }.intern(self.db).into()
}
ast::ModuleItem::StaticDef(def) => {
let ast_id = self.expander.ast_id(&def);
StaticLoc { container, ast_id }.intern(self.db).into()
}
ast::ModuleItem::StructDef(def) => { ast::ModuleItem::StructDef(def) => {
let ast_id = self.expander.ast_id(&def); let ast_id = self.expander.ast_id(&def);
StructLoc { container, ast_id }.intern(self.db).into() StructLoc { container, ast_id }.intern(self.db).into()

View file

@ -211,7 +211,7 @@ impl_intern_key!(StaticId);
#[derive(Debug, Clone, PartialEq, Eq, Hash)] #[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub struct StaticLoc { pub struct StaticLoc {
pub container: ModuleId, pub container: ContainerId,
pub ast_id: AstId<ast::StaticDef>, pub ast_id: AstId<ast::StaticDef>,
} }
@ -558,7 +558,7 @@ impl HasModule for GenericDefId {
} }
impl HasModule for StaticLoc { impl HasModule for StaticLoc {
fn module(&self, _db: &impl db::DefDatabase) -> ModuleId { fn module(&self, db: &impl db::DefDatabase) -> ModuleId {
self.container self.container.module(db)
} }
} }

View file

@ -796,7 +796,7 @@ where
PerNs::values(def.into()) PerNs::values(def.into())
} }
raw::DefKind::Static(ast_id) => { raw::DefKind::Static(ast_id) => {
let def = StaticLoc { container: module, ast_id: AstId::new(self.file_id, ast_id) } let def = StaticLoc { container, ast_id: AstId::new(self.file_id, ast_id) }
.intern(self.def_collector.db); .intern(self.def_collector.db);
PerNs::values(def.into()) PerNs::values(def.into())