Skip to content

Commit 0741441

Browse files
committed
typeck: restructure check_field a bit
1 parent 01e96dc commit 0741441

File tree

1 file changed

+31
-25
lines changed

1 file changed

+31
-25
lines changed

src/librustc_typeck/check/expr.rs

+31-25
Original file line numberDiff line numberDiff line change
@@ -1338,36 +1338,42 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
13381338

13391339
if let Some((did, field_ty)) = private_candidate {
13401340
self.ban_private_field_access(expr, expr_t, field, did);
1341-
field_ty
1342-
} else if field.name == kw::Invalid {
1343-
self.tcx().types.err
1341+
return field_ty;
1342+
}
1343+
1344+
if field.name == kw::Invalid {
13441345
} else if self.method_exists(field, expr_t, expr.hir_id, true) {
13451346
self.ban_take_value_of_method(expr, expr_t, field);
1346-
self.tcx().types.err
1347-
} else {
1348-
if !expr_t.is_primitive_ty() {
1349-
let mut err = self.no_such_field_err(field.span, field, expr_t);
1347+
} else if !expr_t.is_primitive_ty() {
1348+
let mut err = self.no_such_field_err(field.span, field, expr_t);
13501349

1351-
match expr_t.sty {
1352-
ty::Adt(def, _) if !def.is_enum() => {
1353-
self.suggest_fields_on_recordish(&mut err, def, field);
1354-
}
1355-
ty::Array(_, len) => {
1356-
self.maybe_suggest_array_indexing(&mut err, expr, base, field, len);
1357-
}
1358-
ty::RawPtr(..) => {
1359-
self.suggest_first_deref_field(&mut err, expr, base, field);
1360-
}
1361-
_ => {}
1350+
match expr_t.sty {
1351+
ty::Adt(def, _) if !def.is_enum() => {
1352+
self.suggest_fields_on_recordish(&mut err, def, field);
13621353
}
1363-
err
1364-
} else {
1365-
type_error_struct!(self.tcx().sess, field.span, expr_t, E0610,
1366-
"`{}` is a primitive type and therefore doesn't have fields",
1367-
expr_t)
1368-
}.emit();
1369-
self.tcx().types.err
1354+
ty::Array(_, len) => {
1355+
self.maybe_suggest_array_indexing(&mut err, expr, base, field, len);
1356+
}
1357+
ty::RawPtr(..) => {
1358+
self.suggest_first_deref_field(&mut err, expr, base, field);
1359+
}
1360+
_ => {}
1361+
}
1362+
1363+
err.emit();
1364+
} else {
1365+
type_error_struct!(
1366+
self.tcx().sess,
1367+
field.span,
1368+
expr_t,
1369+
E0610,
1370+
"`{}` is a primitive type and therefore doesn't have fields",
1371+
expr_t
1372+
)
1373+
.emit();
13701374
}
1375+
1376+
self.tcx().types.err
13711377
}
13721378

13731379
fn ban_private_field_access(

0 commit comments

Comments
 (0)