File tree 2 files changed +32
-2
lines changed
compiler/src/dotty/tools/dotc/typer
2 files changed +32
-2
lines changed Original file line number Diff line number Diff line change @@ -1010,9 +1010,14 @@ class RefChecks extends MiniPhase { thisPhase =>
1010
1010
}
1011
1011
1012
1012
override def transformNew (tree : New )(implicit ctx : Context ) = {
1013
- val sym = tree.tpe.typeSymbol
1013
+ val tpe = tree.tpe
1014
+ val sym = tpe.typeSymbol
1014
1015
checkUndesiredProperties(sym, tree.pos)
1015
1016
currentLevel.enterReference(sym, tree.pos)
1017
+ tpe.dealias.foreachPart {
1018
+ case TermRef (_, s : Symbol ) => currentLevel.enterReference(s, tree.pos)
1019
+ case _ =>
1020
+ }
1016
1021
tree
1017
1022
}
1018
1023
}
@@ -1643,4 +1648,3 @@ class RefChecks extends MiniPhase { thisPhase =>
1643
1648
}
1644
1649
}
1645
1650
*/
1646
-
Original file line number Diff line number Diff line change
1
+ class I0 {
2
+ class I1
3
+ def test0 = {
4
+ val x = new y.I1 // error: `y` is a forward reference extending over the definition of `x`
5
+ val y = new I0
6
+ }
7
+
8
+ def test1 = {
9
+ type T = y.I1
10
+ val x = new T // error: `y` is a forward reference extending over the definition of `x`
11
+ val y = new I0
12
+ }
13
+
14
+ class I2 [T1 , T2 ]
15
+ def test2 = {
16
+ type A [T ] = y.I2 [T , String ]
17
+ val x = new A [Int ] // error: `y` is a forward reference extending over the definition of `x`
18
+ val y = new I0
19
+ }
20
+
21
+ def test3 = {
22
+ val x = new T // error: `T` is a forward reference extending over the definition of `x`
23
+ val y = new I0
24
+ type T = y.I1
25
+ }
26
+ }
You can’t perform that action at this time.
0 commit comments