aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir/src/expr.rs
diff options
context:
space:
mode:
authorbors[bot] <26634292+bors[bot]@users.noreply.github.com>2019-09-03 07:50:46 +0100
committerGitHub <[email protected]>2019-09-03 07:50:46 +0100
commitf5b60a53f68100937d561acae51e06b5ebb6bd18 (patch)
tree652969521ed93d8b30d80bfd47f35f60d0a3d2a8 /crates/ra_hir/src/expr.rs
parent6c64f68d4a235e4ea7cc974711dcd181d10c55dc (diff)
parent4b51c92feeda0078033508ceee7345c6ac1a97e6 (diff)
Merge #1754
1754: slightly simplify expr lowering flow r=matklad a=matklad Co-authored-by: Aleksey Kladov <[email protected]>
Diffstat (limited to 'crates/ra_hir/src/expr.rs')
-rw-r--r--crates/ra_hir/src/expr.rs33
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
18pub use self::scope::ExprScopes; 18pub use self::scope::ExprScopes;
@@ -524,3 +524,34 @@ impl Pat {
524 } 524 }
525 } 525 }
526} 526}
527
528// Queries
529pub(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
555pub(crate) fn body_hir_query(db: &impl HirDatabase, def: DefWithBody) -> Arc<Body> {
556 db.body_with_source_map(def).0
557}