Skip to content

crash for nested class with message: "no path exists from class Inner to class..." #1644

Closed
@helloqirun

Description

@helloqirun

$ cat abc.scala

class X(val i: Int) extends AnyVal { class Inner(val q: Int) { def plus = i + q } }
object Test extends App {
  val x = new X(11)
  val i = new x.Inner(22)
  assert(i.plus == 33)
}

$ dotc abc.scala

exception while typing X.this of class class dotty.tools.dotc.ast.Trees$This # 151
exception while typing X.this.i of class class dotty.tools.dotc.ast.Trees$Select # 152
exception while typing X.this.i.+ of class class dotty.tools.dotc.ast.Trees$Select # 153
exception while typing X.this.i.+(Inner.this.q) of class class dotty.tools.dotc.ast.Trees$Apply # 367
exception while typing def plus: Int = X.this.i.+(Inner.this.q) of class class dotty.tools.dotc.ast.Trees$DefDef # 368
exception while typing class Inner(q: Int) extends Object() { 
  <accessor> def q: Int
  def plus: Int = X.this.i.+(Inner.this.q)
  private <accessor> def $outer: X
  final def X$Inner$$$outer: X = Inner.this.$outer
} of class class dotty.tools.dotc.ast.Trees$TypeDef # 463
exception while typing @scala.annotation.internal.SourceFile("abc.scala") final class X(i: Int) extends AnyVal() { 
  <accessor> def i: Int
  class Inner(q: Int) extends Object() { 
    <accessor> def q: Int
    def plus: Int = X.this.i.+(Inner.this.q)
    private <accessor> def $outer: X
    final def X$Inner$$$outer: X = Inner.this.$outer
  }
  override def hashCode(): Int = X.hashCode$extension(this)()
  override def equals(x$0: Any): Boolean = X.equals$extension(this)(x$0)
} of class class dotty.tools.dotc.ast.Trees$TypeDef # 465
exception while typing package <empty> {
  @scala.annotation.internal.SourceFile("abc.scala") final class X(i: Int) extends AnyVal() { 
    <accessor> def i: Int
    class Inner(q: Int) extends Object() { 
      <accessor> def q: Int
      def plus: Int = X.this.i.+(Inner.this.q)
      private <accessor> def $outer: X
      final def X$Inner$$$outer: X = Inner.this.$outer
    }
    override def hashCode(): Int = X.hashCode$extension(this)()
    override def equals(x$0: Any): Boolean = X.equals$extension(this)(x$0)
  }
  final lazy module val X: X$ = new X$()
  @scala.annotation.internal.SourceFile("abc.scala") final module class X$() extends Object() { 
    override final def hashCode$extension($this: X)(): Int = $this.i.hashCode()
    override final def equals$extension($this: X)(x$0: Any): Boolean = 
      {
        case val selector11: Any = x$0
        {
          def case11(): Boolean = 
            {
              def case21(): Boolean = 
                {
                  def matchFail11(): Boolean = throw new MatchError(selector11)
                  if selector11.isInstanceOf[Any] then 
                    {
                      false
                    }
                   else matchFail11()
                }
              if selector11.isInstanceOf[X] then 
                {
                  val x$0: X = selector11.asInstanceOf[ErasedValueType(X, Int)(x$0)]
                  {
                    $this.i.==(x$0.i)
                  }
                }
               else case21()
            }
          case11()
        }
      }
  }
  final lazy module val Test: Test$ = new Test$()
  @scala.annotation.internal.SourceFile("abc.scala") final module class Test$() extends Object() with App { 
    @deprecatedOverriding("args should not be overridden", "2.11.0") protected def args: Array{scala$Array$$T = String}
       = 
    super[App].args
    @deprecated("The delayedInit mechanism will disappear.", "2.11.0") override def delayedInit(body: => Unit): Unit = 
      super[App].delayedInit(body)
    @deprecatedOverriding("main should not be overridden", "2.11.0") def main(args: Array{scala$Array$$T = String}): 
      Unit
     = super[App].main(args)
    <accessor> def x: X = new X(11)
    <accessor> def i: Test.x.Inner = new Test.x.Inner(22)
    assert(Test.i.plus.==(33))
  }
} of class class dotty.tools.dotc.ast.Trees$PackageDef # 496

exception occurred while compiling abc.scala
Exception in thread "main" java.lang.ClassCastException: no path exists from class Inner to class X
    at dotty.tools.dotc.transform.ExplicitOuter$OuterOps$.path$extension(ExplicitOuter.scala:346)
    at dotty.tools.dotc.transform.Erasure$Typer.typedThis(Erasure.scala:395)
    at dotty.tools.dotc.typer.Typer.typedUnnamed$1(Typer.scala:1440)
    at dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:1480)
    at dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:95)
    at dotty.tools.dotc.typer.Typer$$anonfun$typed$2.apply(Typer.scala:1490)
    at dotty.tools.dotc.typer.Typer$$anonfun$typed$2.apply(Typer.scala:1488)
    at dotty.tools.dotc.reporting.Reporting$class.traceIndented(Reporter.scala:132)
    at dotty.tools.dotc.core.Contexts$Context.traceIndented(Contexts.scala:57)
    at dotty.tools.dotc.typer.Typer.typed(Typer.scala:1488)
    at dotty.tools.dotc.transform.Erasure$Typer.typedSelect(Erasure.scala:388)
    at dotty.tools.dotc.typer.Typer.typedNamed$1(Typer.scala:1420)
    at dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:1478)
    at dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:95)
    at dotty.tools.dotc.typer.Typer$$anonfun$typed$2.apply(Typer.scala:1490)
    at dotty.tools.dotc.typer.Typer$$anonfun$typed$2.apply(Typer.scala:1488)
    at dotty.tools.dotc.reporting.Reporting$class.traceIndented(Reporter.scala:132)
    at dotty.tools.dotc.core.Contexts$Context.traceIndented(Contexts.scala:57)
    at dotty.tools.dotc.typer.Typer.typed(Typer.scala:1488)
    at dotty.tools.dotc.transform.Erasure$Typer.typedSelect(Erasure.scala:388)
    at dotty.tools.dotc.typer.Typer.typedNamed$1(Typer.scala:1420)
    at dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:1478)
    at dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:95)
    at dotty.tools.dotc.typer.Typer$$anonfun$typed$2.apply(Typer.scala:1490)
    at dotty.tools.dotc.typer.Typer$$anonfun$typed$2.apply(Typer.scala:1488)
    at dotty.tools.dotc.reporting.Reporting$class.traceIndented(Reporter.scala:132)
    at dotty.tools.dotc.core.Contexts$Context.traceIndented(Contexts.scala:57)
    at dotty.tools.dotc.typer.Typer.typed(Typer.scala:1488)
    at dotty.tools.dotc.typer.Typer.typedExpr(Typer.scala:1540)
    at dotty.tools.dotc.transform.Erasure$Typer.typedApply(Erasure.scala:430)
    at dotty.tools.dotc.typer.Typer.typedUnnamed$1(Typer.scala:1439)
    at dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:1480)
    at dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:95)
    at dotty.tools.dotc.typer.Typer$$anonfun$typed$2.apply(Typer.scala:1490)
    at dotty.tools.dotc.typer.Typer$$anonfun$typed$2.apply(Typer.scala:1488)
    at dotty.tools.dotc.reporting.Reporting$class.traceIndented(Reporter.scala:132)
    at dotty.tools.dotc.core.Contexts$Context.traceIndented(Contexts.scala:57)
    at dotty.tools.dotc.typer.Typer.typed(Typer.scala:1488)
    at dotty.tools.dotc.typer.Typer.typedExpr(Typer.scala:1540)
    at dotty.tools.dotc.typer.Typer$$anonfun$typedDefDef$1.apply(Typer.scala:1171)
    at dotty.tools.dotc.typer.Typer$$anonfun$typedDefDef$1.apply(Typer.scala:1154)
    at dotty.tools.dotc.util.Stats$.track(Stats.scala:35)
    at dotty.tools.dotc.typer.Typer.typedDefDef(Typer.scala:1154)
    at dotty.tools.dotc.transform.Erasure$Typer.typedDefDef(Erasure.scala:485)
    at dotty.tools.dotc.typer.Typer.typedNamed$1(Typer.scala:1427)
    at dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:1478)
    at dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:95)
    at dotty.tools.dotc.typer.Typer$$anonfun$typed$2.apply(Typer.scala:1490)
    at dotty.tools.dotc.typer.Typer$$anonfun$typed$2.apply(Typer.scala:1488)
    at dotty.tools.dotc.reporting.Reporting$class.traceIndented(Reporter.scala:132)
    at dotty.tools.dotc.core.Contexts$Context.traceIndented(Contexts.scala:57)
    at dotty.tools.dotc.typer.Typer.typed(Typer.scala:1488)
    at dotty.tools.dotc.typer.Typer.traverse$1(Typer.scala:1512)
    at dotty.tools.dotc.typer.Typer.typedStats(Typer.scala:1528)
    at dotty.tools.dotc.transform.Erasure$Typer.typedStats(Erasure.scala:544)
    at dotty.tools.dotc.typer.Typer$$anonfun$typedClassDef$1.apply(Typer.scala:1246)
    at dotty.tools.dotc.typer.Typer$$anonfun$typedClassDef$1.apply(Typer.scala:1194)
    at dotty.tools.dotc.util.Stats$.track(Stats.scala:35)
    at dotty.tools.dotc.typer.Typer.typedClassDef(Typer.scala:1194)
    at dotty.tools.dotc.typer.Typer.typedNamed$1(Typer.scala:1430)
    at dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:1478)
    at dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:95)
    at dotty.tools.dotc.typer.Typer$$anonfun$typed$2.apply(Typer.scala:1490)
    at dotty.tools.dotc.typer.Typer$$anonfun$typed$2.apply(Typer.scala:1488)
    at dotty.tools.dotc.reporting.Reporting$class.traceIndented(Reporter.scala:132)
    at dotty.tools.dotc.core.Contexts$Context.traceIndented(Contexts.scala:57)
    at dotty.tools.dotc.typer.Typer.typed(Typer.scala:1488)
    at dotty.tools.dotc.typer.Typer.traverse$1(Typer.scala:1512)
    at dotty.tools.dotc.typer.Typer.typedStats(Typer.scala:1528)
    at dotty.tools.dotc.transform.Erasure$Typer.typedStats(Erasure.scala:544)
    at dotty.tools.dotc.typer.Typer$$anonfun$typedClassDef$1.apply(Typer.scala:1246)
    at dotty.tools.dotc.typer.Typer$$anonfun$typedClassDef$1.apply(Typer.scala:1194)
    at dotty.tools.dotc.util.Stats$.track(Stats.scala:35)
    at dotty.tools.dotc.typer.Typer.typedClassDef(Typer.scala:1194)
    at dotty.tools.dotc.typer.Typer.typedNamed$1(Typer.scala:1430)
    at dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:1478)
    at dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:95)
    at dotty.tools.dotc.typer.Typer$$anonfun$typed$2.apply(Typer.scala:1490)
    at dotty.tools.dotc.typer.Typer$$anonfun$typed$2.apply(Typer.scala:1488)
    at dotty.tools.dotc.reporting.Reporting$class.traceIndented(Reporter.scala:132)
    at dotty.tools.dotc.core.Contexts$Context.traceIndented(Contexts.scala:57)
    at dotty.tools.dotc.typer.Typer.typed(Typer.scala:1488)
    at dotty.tools.dotc.typer.Typer.traverse$1(Typer.scala:1512)
    at dotty.tools.dotc.typer.Typer.typedStats(Typer.scala:1528)
    at dotty.tools.dotc.transform.Erasure$Typer.typedStats(Erasure.scala:544)
    at dotty.tools.dotc.typer.Typer$$anonfun$typedPackageDef$1.apply(Typer.scala:1346)
    at dotty.tools.dotc.typer.Typer$$anonfun$typedPackageDef$1.apply(Typer.scala:1337)
    at dotty.tools.dotc.util.Stats$.track(Stats.scala:35)
    at dotty.tools.dotc.typer.Typer.typedPackageDef(Typer.scala:1337)
    at dotty.tools.dotc.typer.Typer.typedUnnamed$1(Typer.scala:1468)
    at dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:1480)
    at dotty.tools.dotc.typer.ReTyper.typedUnadapted(ReTyper.scala:95)
    at dotty.tools.dotc.typer.Typer$$anonfun$typed$2.apply(Typer.scala:1490)
    at dotty.tools.dotc.typer.Typer$$anonfun$typed$2.apply(Typer.scala:1488)
    at dotty.tools.dotc.reporting.Reporting$class.traceIndented(Reporter.scala:132)
    at dotty.tools.dotc.core.Contexts$Context.traceIndented(Contexts.scala:57)
    at dotty.tools.dotc.typer.Typer.typed(Typer.scala:1488)
    at dotty.tools.dotc.typer.Typer.typedExpr(Typer.scala:1540)
    at dotty.tools.dotc.transform.Erasure.run(Erasure.scala:78)
    at dotty.tools.dotc.core.Phases$Phase$$anonfun$runOn$1.apply(Phases.scala:276)
    at dotty.tools.dotc.core.Phases$Phase$$anonfun$runOn$1.apply(Phases.scala:274)
    at scala.collection.immutable.List.map(List.scala:273)
    at dotty.tools.dotc.core.Phases$Phase$class.runOn(Phases.scala:274)
    at dotty.tools.dotc.transform.Erasure.runOn(Erasure.scala:30)
    at dotty.tools.dotc.Run$$anonfun$compileUnits$1$$anonfun$apply$mcV$sp$1.apply(Run.scala:75)
    at dotty.tools.dotc.Run$$anonfun$compileUnits$1$$anonfun$apply$mcV$sp$1.apply(Run.scala:72)
    at scala.collection.IndexedSeqOptimized$class.foreach(IndexedSeqOptimized.scala:33)
    at scala.collection.mutable.ArrayOps$ofRef.foreach(ArrayOps.scala:186)
    at dotty.tools.dotc.Run$$anonfun$compileUnits$1.apply$mcV$sp(Run.scala:72)
    at dotty.tools.dotc.Run$$anonfun$compileUnits$1.apply(Run.scala:66)
    at dotty.tools.dotc.Run$$anonfun$compileUnits$1.apply(Run.scala:66)
    at dotty.tools.dotc.util.Stats$.monitorHeartBeat(Stats.scala:76)
    at dotty.tools.dotc.Run.compileUnits(Run.scala:66)
    at dotty.tools.dotc.Run.compileSources(Run.scala:63)
    at dotty.tools.dotc.Run.compile(Run.scala:47)
    at dotty.tools.dotc.Driver.doCompile(Driver.scala:26)
    at dotty.tools.dotc.Driver.process(Driver.scala:124)
    at dotty.tools.dotc.Driver.process(Driver.scala:93)
    at dotty.tools.dotc.Driver.process(Driver.scala:105)
    at dotty.tools.dotc.Driver.main(Driver.scala:132)
    at dotty.tools.dotc.Main.main(Main.scala)

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions