File tree Expand file tree Collapse file tree 5 files changed +21
-2
lines changed
test/dotty/tools/dotc/typer
library/src/scala/runtime/stdLibPatches Expand file tree Collapse file tree 5 files changed +21
-2
lines changed Original file line number Diff line number Diff line change @@ -28,6 +28,7 @@ object Feature:
28
28
29
29
val dependent = experimental(" dependent" )
30
30
val erasedDefinitions = experimental(" erasedDefinitions" )
31
+ val strictEqualityPatternMatching = experimental(" strictEqualityPatternMatching" )
31
32
val symbolLiterals = deprecated(" symbolLiterals" )
32
33
val saferExceptions = experimental(" saferExceptions" )
33
34
val pureFunctions = experimental(" pureFunctions" )
@@ -58,6 +59,7 @@ object Feature:
58
59
(scala2macros, " Allow Scala 2 macros" ),
59
60
(dependent, " Allow dependent method types" ),
60
61
(erasedDefinitions, " Allow erased definitions" ),
62
+ (strictEqualityPatternMatching, " relaxed CanEqual checks for ADT pattern matching" ),
61
63
(symbolLiterals, " Allow symbol literals" ),
62
64
(saferExceptions, " Enable safer exceptions" ),
63
65
(pureFunctions, " Enable pure functions for capture checking" ),
Original file line number Diff line number Diff line change @@ -31,7 +31,7 @@ case class Mode(val bits: Int) extends AnyVal {
31
31
object Mode {
32
32
val None : Mode = Mode (0 )
33
33
34
- private val modeName = new Array [String ](32 )
34
+ private val modeName = new Array [String ](33 )
35
35
36
36
def newMode (bit : Int , name : String ): Mode = {
37
37
modeName(bit) = name
@@ -206,4 +206,7 @@ object Mode {
206
206
207
207
/** Skip inlining of methods. */
208
208
val NoInline : Mode = newMode(31 , " NoInline" )
209
+
210
+ /** strictEquality pattern matching (SIP-67) */
211
+ val StrictEqualityPatternMatching : Mode = newMode(32 , " strictEqualityPatternMatching" )
209
212
}
Original file line number Diff line number Diff line change @@ -84,6 +84,9 @@ object Implicits:
84
84
def strictEquality (using Context ): Boolean =
85
85
ctx.mode.is(Mode .StrictEquality ) || Feature .enabled(nme.strictEquality)
86
86
87
+ def strictEqualityPatternMatching (using Context ): Boolean =
88
+ ctx.mode.is(Mode .StrictEqualityPatternMatching ) || Feature .enabled(Feature .strictEqualityPatternMatching)
89
+
87
90
88
91
/** A common base class of contextual implicits and of-type implicits which
89
92
* represents a set of references to implicit definitions.
@@ -1065,7 +1068,9 @@ trait Implicits:
1065
1068
|| locally :
1066
1069
if strictEquality then
1067
1070
leftTreeOption.exists: leftTree =>
1068
- leftTree.symbol.flags.isAllOf(Flags .EnumValue ) || (leftTree.symbol.flags.isAllOf(Flags .Module | Flags .Case ))
1071
+ strictEqualityPatternMatching && (
1072
+ leftTree.symbol.flags.isAllOf(Flags .EnumValue ) || (leftTree.symbol.flags.isAllOf(Flags .Module | Flags .Case ))
1073
+ )
1069
1074
else
1070
1075
(ltp <:< lift(rtp) || rtp <:< lift(ltp))
1071
1076
}
Original file line number Diff line number Diff line change @@ -12,6 +12,7 @@ class SIP67Tests extends DottyTest:
12
12
def sip67test1 : Unit =
13
13
val source = """
14
14
import scala.language.strictEquality
15
+ import scala.language.experimental.strictEqualityPatternMatching
15
16
enum Foo:
16
17
case Bar
17
18
@@ -28,6 +29,7 @@ class SIP67Tests extends DottyTest:
28
29
def sip67test2 : Unit =
29
30
val source = """
30
31
import scala.language.strictEquality
32
+ import scala.language.experimental.strictEqualityPatternMatching
31
33
32
34
sealed trait Foo
33
35
Original file line number Diff line number Diff line change @@ -50,6 +50,13 @@ object language:
50
50
@ compileTimeOnly(" `erasedDefinitions` can only be used at compile time in import statements" )
51
51
object erasedDefinitions
52
52
53
+ /** Experimental support for relaxed CanEqual checks for ADT pattern matching
54
+ *
55
+ * @see [[https://github.com/scala/improvement-proposals/pull/97 ]]
56
+ */
57
+ @ compileTimeOnly(" `strictEqualityPatternMatching` can only be used at compile time in import statements" )
58
+ object strictEqualityPatternMatching
59
+
53
60
/** Experimental support for using indentation for arguments
54
61
*/
55
62
@ compileTimeOnly(" `fewerBraces` can only be used at compile time in import statements" )
You can’t perform that action at this time.
0 commit comments