diff options
author | Hirokazu Hata <[email protected]> | 2019-01-13 13:46:36 +0000 |
---|---|---|
committer | Hirokazu Hata <[email protected]> | 2019-01-16 14:35:06 +0000 |
commit | d665acbbec39ffd26eb56b1194653459a0c495e7 (patch) | |
tree | b3c271849eefa4cb35ed1d737d1977613ecf86d0 /crates/ra_hir/src/expr.rs | |
parent | 4729a1b05427aa7d63b1dcb9ee6dceef2cfc613e (diff) |
Implement array inference
Diffstat (limited to 'crates/ra_hir/src/expr.rs')
-rw-r--r-- | crates/ra_hir/src/expr.rs | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/crates/ra_hir/src/expr.rs b/crates/ra_hir/src/expr.rs index 663338844..6e98ebc69 100644 --- a/crates/ra_hir/src/expr.rs +++ b/crates/ra_hir/src/expr.rs | |||
@@ -197,6 +197,9 @@ pub enum Expr { | |||
197 | Tuple { | 197 | Tuple { |
198 | exprs: Vec<ExprId>, | 198 | exprs: Vec<ExprId>, |
199 | }, | 199 | }, |
200 | Array { | ||
201 | exprs: Vec<ExprId>, | ||
202 | }, | ||
200 | Literal(Literal), | 203 | Literal(Literal), |
201 | } | 204 | } |
202 | 205 | ||
@@ -312,7 +315,7 @@ impl Expr { | |||
312 | | Expr::UnaryOp { expr, .. } => { | 315 | | Expr::UnaryOp { expr, .. } => { |
313 | f(*expr); | 316 | f(*expr); |
314 | } | 317 | } |
315 | Expr::Tuple { exprs } => { | 318 | Expr::Tuple { exprs } | Expr::Array { exprs } => { |
316 | for expr in exprs { | 319 | for expr in exprs { |
317 | f(*expr); | 320 | f(*expr); |
318 | } | 321 | } |
@@ -649,6 +652,10 @@ impl ExprCollector { | |||
649 | let exprs = e.exprs().map(|expr| self.collect_expr(expr)).collect(); | 652 | let exprs = e.exprs().map(|expr| self.collect_expr(expr)).collect(); |
650 | self.alloc_expr(Expr::Tuple { exprs }, syntax_ptr) | 653 | self.alloc_expr(Expr::Tuple { exprs }, syntax_ptr) |
651 | } | 654 | } |
655 | ast::ExprKind::ArrayExpr(e) => { | ||
656 | let exprs = e.exprs().map(|expr| self.collect_expr(expr)).collect(); | ||
657 | self.alloc_expr(Expr::Array { exprs }, syntax_ptr) | ||
658 | } | ||
652 | ast::ExprKind::Literal(e) => { | 659 | ast::ExprKind::Literal(e) => { |
653 | let child = if let Some(child) = e.literal_expr() { | 660 | let child = if let Some(child) = e.literal_expr() { |
654 | child | 661 | child |
@@ -691,7 +698,6 @@ impl ExprCollector { | |||
691 | // TODO implement HIR for these: | 698 | // TODO implement HIR for these: |
692 | ast::ExprKind::Label(_e) => self.alloc_expr(Expr::Missing, syntax_ptr), | 699 | ast::ExprKind::Label(_e) => self.alloc_expr(Expr::Missing, syntax_ptr), |
693 | ast::ExprKind::IndexExpr(_e) => self.alloc_expr(Expr::Missing, syntax_ptr), | 700 | ast::ExprKind::IndexExpr(_e) => self.alloc_expr(Expr::Missing, syntax_ptr), |
694 | ast::ExprKind::ArrayExpr(_e) => self.alloc_expr(Expr::Missing, syntax_ptr), | ||
695 | ast::ExprKind::RangeExpr(_e) => self.alloc_expr(Expr::Missing, syntax_ptr), | 701 | ast::ExprKind::RangeExpr(_e) => self.alloc_expr(Expr::Missing, syntax_ptr), |
696 | } | 702 | } |
697 | } | 703 | } |