@@ -3056,6 +3056,10 @@ class Typer extends Namer
30563056 case _ =>
30573057 EmptyTree
30583058
3059+ def nestedFailure (ex : TypeError ) =
3060+ rememberSearchFailure(qual,
3061+ SearchFailure (qual.withType(NestedFailure (ex.toMessage, selectionProto))))
3062+
30593063 // try an extension method in scope
30603064 try
30613065 val nestedCtx = ctx.fresh.setNewTyperState()
@@ -3066,30 +3070,31 @@ class Typer extends Namer
30663070 for err <- nestedCtx.reporter.allErrors.take(1 ) do
30673071 rememberSearchFailure(qual,
30683072 SearchFailure (app.withType(FailedExtension (app, selectionProto, err.msg))))
3069- catch case ex : TypeError =>
3070- rememberSearchFailure(qual,
3071- SearchFailure (qual.withType(NestedFailure (ex.toMessage, selectionProto))))
3073+ catch case ex : TypeError => nestedFailure(ex)
30723074
30733075 // try an implicit conversion or given extension
30743076 if ctx.mode.is(Mode .ImplicitsEnabled ) && ! tree.name.isConstructorName && qual.tpe.isValueType then
3075- trace(i " try insert impl on qualifier $tree $pt" ) {
3076- val selProto = selectionProto
3077- inferView(qual, selProto) match
3078- case SearchSuccess (found, _, _, isExtension) =>
3079- if isExtension then return found
3080- else
3081- checkImplicitConversionUseOK(found)
3082- return typedSelect(tree, pt, found)
3083- case failure : SearchFailure =>
3084- if failure.isAmbiguous then
3085- return (
3086- if canDefineFurther(qual.tpe.widen) then
3087- tryExtensionOrConversion(tree, pt, mbrProto, qual, locked, compat, privateOK)
3088- else
3089- err.typeMismatch(qual, selProto, failure.reason) // TODO: report NotAMember instead, but need to be aware of failure
3090- )
3091- rememberSearchFailure(qual, failure)
3092- }
3077+ try
3078+ trace(i " try insert impl on qualifier $tree $pt" ) {
3079+ val selProto = selectionProto
3080+ inferView(qual, selProto) match
3081+ case SearchSuccess (found, _, _, isExtension) =>
3082+ if isExtension then return found
3083+ else
3084+ checkImplicitConversionUseOK(found)
3085+ return typedSelect(tree, pt, found)
3086+ case failure : SearchFailure =>
3087+ if failure.isAmbiguous then
3088+ return (
3089+ if canDefineFurther(qual.tpe.widen) then
3090+ tryExtensionOrConversion(tree, pt, mbrProto, qual, locked, compat, privateOK)
3091+ else
3092+ err.typeMismatch(qual, selProto, failure.reason) // TODO: report NotAMember instead, but need to be aware of failure
3093+ )
3094+ rememberSearchFailure(qual, failure)
3095+ }
3096+ catch case ex : TypeError => nestedFailure(ex)
3097+
30933098 EmptyTree
30943099 end tryExtensionOrConversion
30953100
0 commit comments