diff options
author | Aleksey Kladov <[email protected]> | 2019-09-03 07:40:34 +0100 |
---|---|---|
committer | Aleksey Kladov <[email protected]> | 2019-09-03 07:41:21 +0100 |
commit | 4b51c92feeda0078033508ceee7345c6ac1a97e6 (patch) | |
tree | 652969521ed93d8b30d80bfd47f35f60d0a3d2a8 /crates/ra_hir/src/expr.rs | |
parent | da850361ba22c78ed3579c33d6748735dcd2885c (diff) |
slightly simplify expr lowering flow
Diffstat (limited to 'crates/ra_hir/src/expr.rs')
-rw-r--r-- | crates/ra_hir/src/expr.rs | 33 |
1 files changed, 32 insertions, 1 deletions
diff --git a/crates/ra_hir/src/expr.rs b/crates/ra_hir/src/expr.rs index bfd250f38..5f6a4b320 100644 --- a/crates/ra_hir/src/expr.rs +++ b/crates/ra_hir/src/expr.rs | |||
@@ -12,7 +12,7 @@ use crate::{ | |||
12 | path::GenericArgs, | 12 | path::GenericArgs, |
13 | ty::primitive::{UncertainFloatTy, UncertainIntTy}, | 13 | ty::primitive::{UncertainFloatTy, UncertainIntTy}, |
14 | type_ref::{Mutability, TypeRef}, | 14 | type_ref::{Mutability, TypeRef}, |
15 | DefWithBody, Either, HirDatabase, Name, Path, Resolver, | 15 | DefWithBody, Either, HasSource, HirDatabase, Name, Path, Resolver, |
16 | }; | 16 | }; |
17 | 17 | ||
18 | pub use self::scope::ExprScopes; | 18 | pub use self::scope::ExprScopes; |
@@ -524,3 +524,34 @@ impl Pat { | |||
524 | } | 524 | } |
525 | } | 525 | } |
526 | } | 526 | } |
527 | |||
528 | // Queries | ||
529 | pub(crate) fn body_with_source_map_query( | ||
530 | db: &impl HirDatabase, | ||
531 | def: DefWithBody, | ||
532 | ) -> (Arc<Body>, Arc<BodySourceMap>) { | ||
533 | let mut params = None; | ||
534 | |||
535 | let (file_id, body) = match def { | ||
536 | DefWithBody::Function(f) => { | ||
537 | let src = f.source(db); | ||
538 | params = src.ast.param_list(); | ||
539 | (src.file_id, src.ast.body().map(ast::Expr::from)) | ||
540 | } | ||
541 | DefWithBody::Const(c) => { | ||
542 | let src = c.source(db); | ||
543 | (src.file_id, src.ast.body()) | ||
544 | } | ||
545 | DefWithBody::Static(s) => { | ||
546 | let src = s.source(db); | ||
547 | (src.file_id, src.ast.body()) | ||
548 | } | ||
549 | }; | ||
550 | |||
551 | let (body, source_map) = lower::lower(db, def.resolver(db), file_id, def, params, body); | ||
552 | (Arc::new(body), Arc::new(source_map)) | ||
553 | } | ||
554 | |||
555 | pub(crate) fn body_hir_query(db: &impl HirDatabase, def: DefWithBody) -> Arc<Body> { | ||
556 | db.body_with_source_map(def).0 | ||
557 | } | ||