File tree Expand file tree Collapse file tree 4 files changed +34
-7
lines changed
src/dotty/tools/dotc/transform
tests/neg-custom-args/fatal-warnings Expand file tree Collapse file tree 4 files changed +34
-7
lines changed Original file line number Diff line number Diff line change @@ -20,7 +20,13 @@ class CheckLoopingImplicits extends MiniPhase:
20
20
21
21
override def phaseName : String = CheckLoopingImplicits .name
22
22
23
- override def transformDefDef (mdef : DefDef )(using Context ): DefDef =
23
+ override def transformValDef (mdef : ValDef )(using Context ): Tree =
24
+ transform(mdef)
25
+
26
+ override def transformDefDef (mdef : DefDef )(using Context ): Tree =
27
+ transform(mdef)
28
+
29
+ def transform (mdef : ValOrDefDef )(using Context ): Tree =
24
30
val sym = mdef.symbol
25
31
26
32
def checkNotSelfRef (t : RefTree ) =
@@ -70,12 +76,12 @@ class CheckLoopingImplicits extends MiniPhase:
70
76
checkNotLooping(finalizer)
71
77
case SeqLiteral (elems, _) =>
72
78
elems.foreach(checkNotLooping)
73
- case t : ValDef =>
74
- if ! t.symbol.is( Lazy ) then checkNotLooping(t.rhs)
79
+ case t : ValDef =>
80
+ checkNotLooping(t.rhs)
75
81
case _ =>
76
82
77
- if sym.isOneOf(GivenOrImplicit ) then
83
+ if sym.isOneOf(GivenOrImplicit | Lazy ) then
78
84
checkNotLooping(mdef.rhs)
79
85
mdef
80
- end transformDefDef
86
+ end transform
81
87
end CheckLoopingImplicits
Original file line number Diff line number Diff line change @@ -3,7 +3,7 @@ scala> type Channel = "A" | "B"
3
3
4
4
scala> type SelChannel[C <: Tuple] = C match { case x *: xs => x | SelChannel[xs] case _ => Nothing }
5
5
6
- scala> lazy val a: SelChannel[("A", "B", "C")] = a
6
+ scala> lazy val a: SelChannel[("A", "B", "C")] = "A"
7
7
lazy val a: "A" | ("B" | ("C" | Nothing))
8
8
9
9
scala>:type a
Original file line number Diff line number Diff line change
1
+ class i13011 {
2
+ lazy implicit val simple1 : String = simple1 // error
3
+ def f : Unit = {
4
+ lazy val simple2 : String = simple2 // error
5
+ }
6
+
7
+ lazy val simple3 : String = if true then this .simple3 else " a" // error
8
+
9
+ def firstDigitIsEven (n : Int ): Boolean = if n % 10 == n then n % 2 == 0 else firstDigitIsEven(n / 10 )
10
+
11
+ lazy val simple4 : String = if firstDigitIsEven(22 ) then this .simple4 else " a" // ok
12
+
13
+ lazy val simple5 : String = identity(this .simple5) // error
14
+
15
+ lazy val simple6 : String = { // error
16
+ this .simple6
17
+ " aa"
18
+ }
19
+
20
+ lazy val simple7 : Function0 [Any ] = () => this .simple7 // Ok
21
+ }
Original file line number Diff line number Diff line change @@ -40,7 +40,7 @@ val x5 =
40
40
41
41
val x6 =
42
42
implicit def barToFoo4 (bar : Bar ): Foo =
43
- lazy val y = bar.toFoo // OK
43
+ lazy val y = bar.toFoo // error
44
44
if false then y else ???
45
45
val foo : Foo = Bar (1 )
46
46
You can’t perform that action at this time.
0 commit comments