Closed
Description
./tests/pos/t1237.scala
class HelloWorld {
def main(args: Array[String]): Unit = {
object TypeBool;
trait Fct {
def g(x : Int) = TypeBool // breaks.
}
}
}
result of A2.scala after TreeTransform:{patternMatcher, explicitOuter, splitter}:
class HelloWorld() extends Object() {
def main(args: Array[String]): Unit = {
final lazy module val TypeBool: TypeBool$ = new TypeBool$()
final module class TypeBool$() extends Object() { this: TypeBool.type =>}
<trait> trait Fct() extends Object {
def g(x: Int): TypeBool$ = TypeBool
}
()
}
}
trait Fct
references TypeBool()
, a getter that will be lifted to HelloWorld
(with environment added, but still).
If one replaced object TypeBool
by def
it works.
class HelloWorld() extends Object() {
def main(args: Array[String]): Unit = {
def TypeBool: HelloWorld = this
<trait> trait Fct() extends Object() {
def g(x: Int): HelloWorld = TypeBool
final def HelloWorld$$Fct$$$outer: HelloWorld
}
final lazy module val Fct: Fct$ = new Fct$()
final module class Fct$() extends Object() { this: Fct.type =>}
()
}
}