Skip to content

local trait in class parent has no prefix #9670

Closed
@bishabosha

Description

@bishabosha

Minimized code

// compile with -Ycheck-init
object Outer {
  def foo = {
    trait Mixin
    class E extends Mixin
    object SomeObject {
      val A = E()
    }
  }
}

Output (click arrow to expand)

exception occurred while compiling sandbox/lazy/mixinobject.scala
java.lang.Exception: unexpected type: <noprefix> while compiling sandbox/lazy/mixinobject.scala
Exception in thread "main" java.lang.Exception: unexpected type: <noprefix>
	at dotty.tools.dotc.transform.init.Summarization$.op$proxy2$1(Summarization.scala:243)
	at dotty.tools.dotc.transform.init.Summarization$.analyze(Summarization.scala:248)
	at dotty.tools.dotc.transform.init.Summarization$.$anonfun$9(Summarization.scala:312)
	at scala.collection.LinearSeqOps.foldLeft(LinearSeq.scala:168)
	at scala.collection.LinearSeqOps.foldLeft$(LinearSeq.scala:164)
	at scala.collection.immutable.List.foldLeft(List.scala:79)
	at dotty.tools.dotc.transform.init.Summarization$.op$proxy4$1(Summarization.scala:315)
	at dotty.tools.dotc.transform.init.Summarization$.analyzeConstructor(Summarization.scala:324)
	at dotty.tools.dotc.transform.init.Summary$ClassSummary.op$proxy1$1(Summary.scala:38)
	at dotty.tools.dotc.transform.init.Summary$ClassSummary.summaryOf(Summary.scala:46)
	at dotty.tools.dotc.transform.init.Summary$ClassSummary.effectsOf(Summary.scala:48)
	at dotty.tools.dotc.transform.init.Potentials$Warm.op$proxy3$1(Potentials.scala:77)
	at dotty.tools.dotc.transform.init.Potentials$Warm.effectsOf(Potentials.scala:79)
	at dotty.tools.dotc.transform.init.Checking$.op$proxy1$1(Checking.scala:241)
	at dotty.tools.dotc.transform.init.Checking$.check(Checking.scala:262)
	at dotty.tools.dotc.transform.init.Checking$.checkEffectsIn$$anonfun$3$$anonfun$2(Checking.scala:146)
	at dotty.runtime.function.JProcedure1.apply(JProcedure1.java:15)
	at dotty.runtime.function.JProcedure1.apply(JProcedure1.java:10)
	at scala.collection.immutable.Set$Set1.foreach(Set.scala:168)
	at dotty.tools.dotc.transform.init.Checking$.checkEffectsIn$$anonfun$1(Checking.scala:147)
	at dotty.runtime.function.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:12)
	at dotty.tools.dotc.transform.init.Util$.traceOp(Util.scala:18)
	at dotty.tools.dotc.transform.init.Checking$.checkEffectsIn(Checking.scala:148)
	at dotty.tools.dotc.transform.init.Checking$.checkClassBodyStat$1$$anonfun$1(Checking.scala:71)
	at dotty.runtime.function.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:12)
	at dotty.tools.dotc.transform.init.Util$.traceOp(Util.scala:18)
	at dotty.tools.dotc.transform.init.Checking$.checkClassBodyStat$2(Checking.scala:80)
	at dotty.tools.dotc.transform.init.Checking$.checkClassBody$$anonfun$3(Checking.scala:140)
	at dotty.runtime.function.JProcedure1.apply(JProcedure1.java:15)
	at dotty.runtime.function.JProcedure1.apply(JProcedure1.java:10)
	at scala.collection.immutable.List.foreach(List.scala:333)
	at dotty.tools.dotc.transform.init.Checking$.checkClassBody(Checking.scala:140)
	at dotty.tools.dotc.transform.init.Checker.transformTypeDef(Checker.scala:58)
	at dotty.tools.dotc.transform.MegaPhase.goTypeDef(MegaPhase.scala:988)
	at dotty.tools.dotc.transform.MegaPhase.goTypeDef(MegaPhase.scala:989)
	at dotty.tools.dotc.transform.MegaPhase.transformNamed$1(MegaPhase.scala:256)
	at dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:426)
	at dotty.tools.dotc.transform.MegaPhase.transformStat$2(MegaPhase.scala:436)
	at dotty.tools.dotc.transform.MegaPhase.recur$1(MegaPhase.scala:441)
	at dotty.tools.dotc.transform.MegaPhase.recur$1(MegaPhase.scala:1060)
	at dotty.tools.dotc.transform.MegaPhase.recur$1(MegaPhase.scala:1060)
	at dotty.tools.dotc.transform.MegaPhase.recur$1(MegaPhase.scala:1060)
	at dotty.tools.dotc.transform.MegaPhase.transformStats(MegaPhase.scala:441)
	at dotty.tools.dotc.transform.MegaPhase.transformUnnamed$1(MegaPhase.scala:298)
	at dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:428)
	at dotty.tools.dotc.transform.MegaPhase.mapDefDef$1(MegaPhase.scala:248)
	at dotty.tools.dotc.transform.MegaPhase.transformNamed$1(MegaPhase.scala:251)
	at dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:426)
	at dotty.tools.dotc.transform.MegaPhase.transformStat$2(MegaPhase.scala:436)
	at dotty.tools.dotc.transform.MegaPhase.recur$1(MegaPhase.scala:441)
	at dotty.tools.dotc.transform.MegaPhase.recur$1(MegaPhase.scala:1060)
	at dotty.tools.dotc.transform.MegaPhase.transformStats(MegaPhase.scala:441)
	at dotty.tools.dotc.transform.MegaPhase.transformUnnamed$1(MegaPhase.scala:361)
	at dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:428)
	at dotty.tools.dotc.transform.MegaPhase.transformNamed$1(MegaPhase.scala:255)
	at dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:426)
	at dotty.tools.dotc.transform.MegaPhase.transformStat$2(MegaPhase.scala:436)
	at dotty.tools.dotc.transform.MegaPhase.recur$1(MegaPhase.scala:441)
	at dotty.tools.dotc.transform.MegaPhase.recur$1(MegaPhase.scala:1060)
	at dotty.tools.dotc.transform.MegaPhase.transformStats(MegaPhase.scala:441)
	at dotty.tools.dotc.transform.MegaPhase.mapPackage$1(MegaPhase.scala:381)
	at dotty.tools.dotc.transform.MegaPhase.transformUnnamed$1(MegaPhase.scala:384)
	at dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:428)
	at dotty.tools.dotc.transform.MegaPhase.transformUnit(MegaPhase.scala:447)
	at dotty.tools.dotc.transform.MegaPhase.run(MegaPhase.scala:459)
	at dotty.tools.dotc.core.Phases$Phase.runOn$$anonfun$1(Phases.scala:296)
	at scala.collection.immutable.List.map(List.scala:246)
	at dotty.tools.dotc.core.Phases$Phase.runOn(Phases.scala:297)
	at dotty.tools.dotc.Run.runPhases$4$$anonfun$4(Run.scala:180)
	at dotty.runtime.function.JProcedure1.apply(JProcedure1.java:15)
	at dotty.runtime.function.JProcedure1.apply(JProcedure1.java:10)
	at scala.collection.ArrayOps$.foreach$extension(ArrayOps.scala:1323)
	at dotty.tools.dotc.Run.runPhases$5(Run.scala:190)
	at dotty.tools.dotc.Run.compileUnits$$anonfun$1(Run.scala:198)
	at dotty.runtime.function.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:12)
	at dotty.tools.dotc.util.Stats$.maybeMonitored(Stats.scala:64)
	at dotty.tools.dotc.Run.compileUnits(Run.scala:205)
	at dotty.tools.dotc.Run.compileSources(Run.scala:142)
	at dotty.tools.dotc.Run.compile(Run.scala:124)
	at dotty.tools.dotc.Driver.doCompile(Driver.scala:38)
	at dotty.tools.dotc.Driver.process(Driver.scala:195)
	at dotty.tools.dotc.Driver.process(Driver.scala:164)
	at dotty.tools.dotc.Driver.process(Driver.scala:176)
	at dotty.tools.dotc.Driver.main(Driver.scala:203)
	at dotty.tools.dotc.Main.main(Main.scala)

When A is defined in an object and Mixin is a parent to E then the reference to Mixin has no prefix, it would seem that Mixin should have a prefix because there is no crash when it is changed to an abstract class

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions