diff options
Diffstat (limited to 'crates/ra_hir_def/src/body')
-rw-r--r-- | crates/ra_hir_def/src/body/lower.rs | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/crates/ra_hir_def/src/body/lower.rs b/crates/ra_hir_def/src/body/lower.rs index e08d62dd6..905c0cf5d 100644 --- a/crates/ra_hir_def/src/body/lower.rs +++ b/crates/ra_hir_def/src/body/lower.rs | |||
@@ -28,7 +28,7 @@ use crate::{ | |||
28 | }, | 28 | }, |
29 | item_scope::BuiltinShadowMode, | 29 | item_scope::BuiltinShadowMode, |
30 | path::{GenericArgs, Path}, | 30 | path::{GenericArgs, Path}, |
31 | type_ref::{Mutability, TypeRef}, | 31 | type_ref::{Mutability, Rawness, TypeRef}, |
32 | AdtId, ConstLoc, ContainerId, DefWithBodyId, EnumLoc, FunctionLoc, Intern, ModuleDefId, | 32 | AdtId, ConstLoc, ContainerId, DefWithBodyId, EnumLoc, FunctionLoc, Intern, ModuleDefId, |
33 | StaticLoc, StructLoc, TraitLoc, TypeAliasLoc, UnionLoc, | 33 | StaticLoc, StructLoc, TraitLoc, TypeAliasLoc, UnionLoc, |
34 | }; | 34 | }; |
@@ -378,8 +378,21 @@ impl ExprCollector<'_> { | |||
378 | } | 378 | } |
379 | ast::Expr::RefExpr(e) => { | 379 | ast::Expr::RefExpr(e) => { |
380 | let expr = self.collect_expr_opt(e.expr()); | 380 | let expr = self.collect_expr_opt(e.expr()); |
381 | let mutability = Mutability::from_mutable(e.mut_token().is_some()); | 381 | let raw_tok = e.raw_token().is_some(); |
382 | self.alloc_expr(Expr::Ref { expr, mutability }, syntax_ptr) | 382 | let mutability = if raw_tok { |
383 | if e.mut_token().is_some() { | ||
384 | Mutability::Mut | ||
385 | } else if e.const_token().is_some() { | ||
386 | Mutability::Shared | ||
387 | } else { | ||
388 | unreachable!("parser only remaps to raw_token() if matching mutability token follows") | ||
389 | } | ||
390 | } else { | ||
391 | Mutability::from_mutable(e.mut_token().is_some()) | ||
392 | }; | ||
393 | let rawness = Rawness::from_raw(raw_tok); | ||
394 | |||
395 | self.alloc_expr(Expr::Ref { expr, rawness, mutability }, syntax_ptr) | ||
383 | } | 396 | } |
384 | ast::Expr::PrefixExpr(e) => { | 397 | ast::Expr::PrefixExpr(e) => { |
385 | let expr = self.collect_expr_opt(e.expr()); | 398 | let expr = self.collect_expr_opt(e.expr()); |