Skip to content

Commit 95fa9cb

Browse files
authored
Merge pull request #11526 from dotty-staging/improve-11327
Harden type checking for enum values
2 parents 5184419 + f7e0d31 commit 95fa9cb

File tree

4 files changed

+21
-4
lines changed

4 files changed

+21
-4
lines changed

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -3809,7 +3809,7 @@ class Typer extends Namer
38093809
mapOver(tp)
38103810
}
38113811

3812-
if tree.symbol.is(Module)
3812+
if tree.symbol.isOneOf(Module | Enum)
38133813
&& !(tree.tpe frozen_<:< pt) // fast track
38143814
&& !(tree.tpe frozen_<:< approx(pt))
38153815
then

scaladoc/src/dotty/tools/scaladoc/translators/ScalaSignatureProvider.scala

-2
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,6 @@ object ScalaSignatureProvider:
2222
givenClassSignature(documentable, cls, builder)
2323
case Kind.Given(d: Kind.Def, _, _) =>
2424
givenMethodSignature(documentable, d, builder)
25-
case Kind.Given(Kind.Val, _, _) =>
26-
givenPropertySignature(documentable, builder)
2725
case cls: Kind.Class =>
2826
classSignature(documentable, cls, builder)
2927
case enm: Kind.Enum =>

tests/neg/i9740b.scala

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
enum Recovery:
2+
case RecoveryCompleted
3+
4+
enum TypedRecovery:
5+
case TypedRecoveryCompleted
6+
7+
import Recovery.*
8+
import TypedRecovery.*
9+
10+
class Test {
11+
TypedRecoveryCompleted match {
12+
case RecoveryCompleted => println("Recovery completed") // error
13+
case TypedRecoveryCompleted => println("Typed recovery completed")
14+
}
15+
16+
def foo(x: TypedRecovery) = x match
17+
case RecoveryCompleted => // error
18+
case TypedRecoveryCompleted =>
19+
}

tests/run/option-extract.scala

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ enum Option[+A]:
66
opaque type ExtractResult[B] = (=> B) => B
77

88
def extract[B](f: A => B): ExtractResult[B] =
9-
def result(default: => B): B = this match
9+
def result(default: => B): B = (this: Option[A]) match
1010
case None => default
1111
case Some(elem) => f(elem)
1212
result

0 commit comments

Comments
 (0)