diff options
Diffstat (limited to 'crates/ra_hir/src/expr.rs')
-rw-r--r-- | crates/ra_hir/src/expr.rs | 20 |
1 files changed, 7 insertions, 13 deletions
diff --git a/crates/ra_hir/src/expr.rs b/crates/ra_hir/src/expr.rs index dd2bae9b4..ddf605111 100644 --- a/crates/ra_hir/src/expr.rs +++ b/crates/ra_hir/src/expr.rs | |||
@@ -22,8 +22,6 @@ pub use hir_def::expr::{ | |||
22 | /// The body of an item (function, const etc.). | 22 | /// The body of an item (function, const etc.). |
23 | #[derive(Debug, Eq, PartialEq)] | 23 | #[derive(Debug, Eq, PartialEq)] |
24 | pub struct Body { | 24 | pub struct Body { |
25 | /// The def of the item this body belongs to | ||
26 | owner: DefWithBody, | ||
27 | exprs: Arena<ExprId, Expr>, | 25 | exprs: Arena<ExprId, Expr>, |
28 | pats: Arena<PatId, Pat>, | 26 | pats: Arena<PatId, Pat>, |
29 | /// The patterns for the function's parameters. While the parameter types are | 27 | /// The patterns for the function's parameters. While the parameter types are |
@@ -86,7 +84,7 @@ impl Body { | |||
86 | } | 84 | } |
87 | }; | 85 | }; |
88 | 86 | ||
89 | let (body, source_map) = lower::lower(db, def.resolver(db), file_id, def, params, body); | 87 | let (body, source_map) = lower::lower(db, def.resolver(db), file_id, params, body); |
90 | (Arc::new(body), Arc::new(source_map)) | 88 | (Arc::new(body), Arc::new(source_map)) |
91 | } | 89 | } |
92 | 90 | ||
@@ -102,10 +100,6 @@ impl Body { | |||
102 | self.body_expr | 100 | self.body_expr |
103 | } | 101 | } |
104 | 102 | ||
105 | pub fn owner(&self) -> DefWithBody { | ||
106 | self.owner | ||
107 | } | ||
108 | |||
109 | pub fn exprs(&self) -> impl Iterator<Item = (ExprId, &Expr)> { | 103 | pub fn exprs(&self) -> impl Iterator<Item = (ExprId, &Expr)> { |
110 | self.exprs.iter() | 104 | self.exprs.iter() |
111 | } | 105 | } |
@@ -117,21 +111,21 @@ impl Body { | |||
117 | 111 | ||
118 | // needs arbitrary_self_types to be a method... or maybe move to the def? | 112 | // needs arbitrary_self_types to be a method... or maybe move to the def? |
119 | pub(crate) fn resolver_for_expr( | 113 | pub(crate) fn resolver_for_expr( |
120 | body: Arc<Body>, | ||
121 | db: &impl HirDatabase, | 114 | db: &impl HirDatabase, |
115 | owner: DefWithBody, | ||
122 | expr_id: ExprId, | 116 | expr_id: ExprId, |
123 | ) -> Resolver { | 117 | ) -> Resolver { |
124 | let scopes = db.expr_scopes(body.owner); | 118 | let scopes = db.expr_scopes(owner); |
125 | resolver_for_scope(body, db, scopes.scope_for(expr_id)) | 119 | resolver_for_scope(db, owner, scopes.scope_for(expr_id)) |
126 | } | 120 | } |
127 | 121 | ||
128 | pub(crate) fn resolver_for_scope( | 122 | pub(crate) fn resolver_for_scope( |
129 | body: Arc<Body>, | ||
130 | db: &impl HirDatabase, | 123 | db: &impl HirDatabase, |
124 | owner: DefWithBody, | ||
131 | scope_id: Option<scope::ScopeId>, | 125 | scope_id: Option<scope::ScopeId>, |
132 | ) -> Resolver { | 126 | ) -> Resolver { |
133 | let mut r = body.owner.resolver(db); | 127 | let mut r = owner.resolver(db); |
134 | let scopes = db.expr_scopes(body.owner); | 128 | let scopes = db.expr_scopes(owner); |
135 | let scope_chain = scopes.scope_chain(scope_id).collect::<Vec<_>>(); | 129 | let scope_chain = scopes.scope_chain(scope_id).collect::<Vec<_>>(); |
136 | for scope in scope_chain.into_iter().rev() { | 130 | for scope in scope_chain.into_iter().rev() { |
137 | r = r.push_expr_scope(Arc::clone(&scopes), scope); | 131 | r = r.push_expr_scope(Arc::clone(&scopes), scope); |