Skip to content

Commit 9c1647b

Browse files
committed
Refine previous fix
We cannot pull the try that catches the type error over both parts of `tryExtensionOrConversion` since a failed extension should still cause a conversion to be tried. We need to try both parts separately instead.
1 parent b2e62b6 commit 9c1647b

File tree

2 files changed

+16
-5
lines changed

2 files changed

+16
-5
lines changed

compiler/src/dotty/tools/dotc/typer/Typer.scala

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3055,6 +3055,10 @@ class Typer extends Namer
30553055
case _ =>
30563056
EmptyTree
30573057

3058+
def nestedFailure(ex: TypeError) =
3059+
rememberSearchFailure(qual,
3060+
SearchFailure(qual.withType(NestedFailure(ex.toMessage, selectionProto))))
3061+
30583062
// try an extension method in scope
30593063
try
30603064
val nestedCtx = ctx.fresh.setNewTyperState()
@@ -3065,9 +3069,11 @@ class Typer extends Namer
30653069
for err <- nestedCtx.reporter.allErrors.take(1) do
30663070
rememberSearchFailure(qual,
30673071
SearchFailure(app.withType(FailedExtension(app, selectionProto, err.msg))))
3072+
catch case ex: TypeError => nestedFailure(ex)
30683073

3069-
// try an implicit conversion or given extension
3070-
if ctx.mode.is(Mode.ImplicitsEnabled) && !tree.name.isConstructorName && qual.tpe.isValueType then
3074+
// try an implicit conversion or given extension
3075+
if ctx.mode.is(Mode.ImplicitsEnabled) && !tree.name.isConstructorName && qual.tpe.isValueType then
3076+
try
30713077
trace(i"try insert impl on qualifier $tree $pt") {
30723078
val selProto = selectionProto
30733079
inferView(qual, selProto) match
@@ -3086,9 +3092,8 @@ class Typer extends Namer
30863092
)
30873093
rememberSearchFailure(qual, failure)
30883094
}
3089-
catch case ex: TypeError =>
3090-
rememberSearchFailure(qual,
3091-
SearchFailure(qual.withType(NestedFailure(ex.toMessage, selectionProto))))
3095+
catch case ex: TypeError => nestedFailure(ex)
3096+
30923097
EmptyTree
30933098
end tryExtensionOrConversion
30943099

tests/pos/i11994.scala

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
class WeirdNumber(v: Double) extends java.lang.Number {
2+
override def doubleValue = v
3+
override def intValue = v.intValue
4+
override def longValue = v.longValue
5+
override def floatValue = v.floatValue
6+
}

0 commit comments

Comments
 (0)