Skip to content

Commit c9941a8

Browse files
committed
Refactor mod/check (part v)
1 parent e812b55 commit c9941a8

File tree

2 files changed

+23
-27
lines changed

2 files changed

+23
-27
lines changed

src/librustc_typeck/check/method/confirm.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -315,8 +315,7 @@ impl<'a, 'gcx, 'tcx> ConfirmContext<'a, 'gcx, 'tcx> {
315315
// If they were not explicitly supplied, just construct fresh
316316
// variables.
317317
let method_generics = self.tcx.generics_of(pick.item.def_id);
318-
let fn_segment = Some((segment, method_generics));
319-
let supress_mismatch = self.fcx.check_impl_trait(self.span, fn_segment);
318+
let supress_mismatch = self.fcx.check_impl_trait(self.span, segment, &method_generics);
320319
self.fcx.check_generic_arg_count(self.span, &segment, &method_generics, true, supress_mismatch);
321320

322321
// Create subst for early-bound lifetime parameters, combining

src/librustc_typeck/check/mod.rs

Lines changed: 22 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -4984,10 +4984,10 @@ impl<'a, 'gcx, 'tcx> FnCtxt<'a, 'gcx, 'tcx> {
49844984
// to add defaults. If the user provided *too many* types, that's
49854985
// a problem.
49864986
let mut infer_lifetimes = FxHashMap();
4987-
let supress_mismatch = self.check_impl_trait(span, fn_segment);
49884987
for &PathSeg(def_id, index) in &path_segs {
4989-
let generics = self.tcx.generics_of(def_id);
49904988
let seg = &segments[index];
4989+
let generics = self.tcx.generics_of(def_id);
4990+
let supress_mismatch = self.check_impl_trait(span, seg, &generics);
49914991
self.check_generic_arg_count(span, seg, &generics, false, supress_mismatch);
49924992
infer_lifetimes.insert(index, if let Some(ref data) = seg.args {
49934993
!data.args.iter().any(|arg| match arg {
@@ -5284,33 +5284,30 @@ impl<'a, 'gcx, 'tcx> FnCtxt<'a, 'gcx, 'tcx> {
52845284
/// Report error if there is an explicit type parameter when using `impl Trait`.
52855285
fn check_impl_trait(&self,
52865286
span: Span,
5287-
segment: Option<(&hir::PathSegment, &ty::Generics)>)
5287+
seg: &hir::PathSegment,
5288+
generics: &ty::Generics)
52885289
-> bool {
5289-
let segment = segment.map(|(path_segment, generics)| {
5290-
let explicit = !path_segment.infer_types;
5291-
let impl_trait = generics.params.iter().any(|param| match param.kind {
5292-
ty::GenericParamDefKind::Type {
5293-
synthetic: Some(hir::SyntheticTyParamKind::ImplTrait), ..
5294-
} => true,
5295-
_ => false,
5296-
});
5297-
5298-
if explicit && impl_trait {
5299-
let mut err = struct_span_err! {
5300-
self.tcx.sess,
5301-
span,
5302-
E0632,
5303-
"cannot provide explicit type parameters when `impl Trait` is \
5304-
used in argument position."
5305-
};
5290+
let explicit = !seg.infer_types;
5291+
let impl_trait = generics.params.iter().any(|param| match param.kind {
5292+
ty::GenericParamDefKind::Type {
5293+
synthetic: Some(hir::SyntheticTyParamKind::ImplTrait), ..
5294+
} => true,
5295+
_ => false,
5296+
});
53065297

5307-
err.emit();
5308-
}
5298+
if explicit && impl_trait {
5299+
let mut err = struct_span_err! {
5300+
self.tcx.sess,
5301+
span,
5302+
E0632,
5303+
"cannot provide explicit type parameters when `impl Trait` is \
5304+
used in argument position."
5305+
};
53095306

5310-
impl_trait
5311-
});
5307+
err.emit();
5308+
}
53125309

5313-
segment.unwrap_or(false)
5310+
impl_trait
53145311
}
53155312

53165313
// Resolves `typ` by a single level if `typ` is a type variable.

0 commit comments

Comments
 (0)