@@ -3056,6 +3056,10 @@ class Typer extends Namer
3056
3056
case _ =>
3057
3057
EmptyTree
3058
3058
3059
+ def nestedFailure (ex : TypeError ) =
3060
+ rememberSearchFailure(qual,
3061
+ SearchFailure (qual.withType(NestedFailure (ex.toMessage, selectionProto))))
3062
+
3059
3063
// try an extension method in scope
3060
3064
try
3061
3065
val nestedCtx = ctx.fresh.setNewTyperState()
@@ -3066,30 +3070,31 @@ class Typer extends Namer
3066
3070
for err <- nestedCtx.reporter.allErrors.take(1 ) do
3067
3071
rememberSearchFailure(qual,
3068
3072
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)
3072
3074
3073
3075
// try an implicit conversion or given extension
3074
3076
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
+
3093
3098
EmptyTree
3094
3099
end tryExtensionOrConversion
3095
3100
0 commit comments