Skip to content

Commit bb93488

Browse files
committed
typeck/expr.rs: extract out check_expr_tuple.
1 parent 82cac15 commit bb93488

File tree

1 file changed

+37
-28
lines changed

1 file changed

+37
-28
lines changed

src/librustc_typeck/check/expr.rs

Lines changed: 37 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -131,34 +131,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
131131
self.check_expr_repeat(element, count, expected, expr)
132132
}
133133
ExprKind::Tup(ref elts) => {
134-
let flds = expected.only_has_type(self).and_then(|ty| {
135-
let ty = self.resolve_type_vars_with_obligations(ty);
136-
match ty.sty {
137-
ty::Tuple(ref flds) => Some(&flds[..]),
138-
_ => None
139-
}
140-
});
141-
142-
let elt_ts_iter = elts.iter().enumerate().map(|(i, e)| {
143-
let t = match flds {
144-
Some(ref fs) if i < fs.len() => {
145-
let ety = fs[i].expect_ty();
146-
self.check_expr_coercable_to_type(&e, ety);
147-
ety
148-
}
149-
_ => {
150-
self.check_expr_with_expectation(&e, NoExpectation)
151-
}
152-
};
153-
t
154-
});
155-
let tuple = tcx.mk_tup(elt_ts_iter);
156-
if tuple.references_error() {
157-
tcx.types.err
158-
} else {
159-
self.require_type_is_sized(tuple, expr.span, traits::TupleInitializerSized);
160-
tuple
161-
}
134+
self.check_expr_tuple(elts, expected, expr)
162135
}
163136
ExprKind::Struct(ref qpath, ref fields, ref base_expr) => {
164137
self.check_expr_struct(expr, expected, qpath, fields, base_expr)
@@ -835,4 +808,40 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
835808
tcx.types.err
836809
}
837810
}
811+
812+
fn check_expr_tuple(
813+
&self,
814+
elts: &'tcx [hir::Expr],
815+
expected: Expectation<'tcx>,
816+
expr: &'tcx hir::Expr,
817+
) -> Ty<'tcx> {
818+
let flds = expected.only_has_type(self).and_then(|ty| {
819+
let ty = self.resolve_type_vars_with_obligations(ty);
820+
match ty.sty {
821+
ty::Tuple(ref flds) => Some(&flds[..]),
822+
_ => None
823+
}
824+
});
825+
826+
let elt_ts_iter = elts.iter().enumerate().map(|(i, e)| {
827+
let t = match flds {
828+
Some(ref fs) if i < fs.len() => {
829+
let ety = fs[i].expect_ty();
830+
self.check_expr_coercable_to_type(&e, ety);
831+
ety
832+
}
833+
_ => {
834+
self.check_expr_with_expectation(&e, NoExpectation)
835+
}
836+
};
837+
t
838+
});
839+
let tuple = self.tcx.mk_tup(elt_ts_iter);
840+
if tuple.references_error() {
841+
self.tcx.types.err
842+
} else {
843+
self.require_type_is_sized(tuple, expr.span, traits::TupleInitializerSized);
844+
tuple
845+
}
846+
}
838847
}

0 commit comments

Comments
 (0)