Skip to content

Self alias in object nested in class breaks pickler #11648

Closed
@prolativ

Description

@prolativ

Compiler version

3.0.0-RC1

Minimized code

class A {
  object B { b =>

  }
}

compiled with -Xprint-types -Ytest-pickler

Output (click arrow to expand)

Exception in thread "main" scala.MatchError: ThisType(TypeRef(ThisType(TypeRef(ThisType(TypeRef(ThisType(TypeRef(NoPrefix,module class <root>)),module class <empty>)),class A)),module class B$)) (of class dotty.tools.dotc.core.Types$CachedThisType)
	at dotty.tools.dotc.core.SymDenotations$SymDenotation.sourceOfSelf$1(SymDenotations.scala:1019)
	at dotty.tools.dotc.core.SymDenotations$SymDenotation.sourceModule(SymDenotations.scala:1021)
	at dotty.tools.dotc.printing.RefinedPrinter.toTextRef$$anonfun$1(RefinedPrinter.scala:99)
	at dotty.tools.dotc.printing.MessageLimiter.controlled(MessageLimiter.scala:23)
	at dotty.tools.dotc.printing.PlainPrinter.controlled(PlainPrinter.scala:36)
	at dotty.tools.dotc.printing.RefinedPrinter.toTextRef(RefinedPrinter.scala:104)
	at dotty.tools.dotc.printing.PlainPrinter.toTextSingleton(PlainPrinter.scala:251)
	at dotty.tools.dotc.printing.PlainPrinter.toText$$anonfun$1(PlainPrinter.scala:161)
	at dotty.tools.dotc.printing.MessageLimiter.controlled(MessageLimiter.scala:23)
	at dotty.tools.dotc.printing.PlainPrinter.controlled(PlainPrinter.scala:36)
	at dotty.tools.dotc.printing.PlainPrinter.toText(PlainPrinter.scala:248)
	at dotty.tools.dotc.printing.RefinedPrinter.toText$$anonfun$1(RefinedPrinter.scala:266)
	at dotty.tools.dotc.printing.MessageLimiter.controlled(MessageLimiter.scala:23)
	at dotty.tools.dotc.printing.PlainPrinter.controlled(PlainPrinter.scala:36)
	at dotty.tools.dotc.printing.RefinedPrinter.toText(RefinedPrinter.scala:268)
	at dotty.tools.dotc.printing.RefinedPrinter.toText$$anonfun$2(RefinedPrinter.scala:720)
	at dotty.tools.dotc.printing.MessageLimiter.controlled(MessageLimiter.scala:23)
	at dotty.tools.dotc.printing.PlainPrinter.controlled(PlainPrinter.scala:36)
	at dotty.tools.dotc.printing.RefinedPrinter.toText(RefinedPrinter.scala:745)
	at dotty.tools.dotc.ast.Trees$Tree.toText(Trees.scala:197)
	at dotty.tools.dotc.printing.Printer.toTextLocal$$anonfun$1(Printer.scala:155)
	at dotty.tools.dotc.printing.Printer.atPrec(Printer.scala:42)
	at dotty.tools.dotc.printing.Printer.toTextLocal(Printer.scala:155)
	at dotty.tools.dotc.printing.RefinedPrinter.toTextCore(RefinedPrinter.scala:494)
	at dotty.tools.dotc.printing.RefinedPrinter.toText$$anonfun$2(RefinedPrinter.scala:674)
	at dotty.tools.dotc.printing.MessageLimiter.controlled(MessageLimiter.scala:23)
	at dotty.tools.dotc.printing.PlainPrinter.controlled(PlainPrinter.scala:36)
	at dotty.tools.dotc.printing.RefinedPrinter.toText(RefinedPrinter.scala:745)
	at dotty.tools.dotc.printing.RefinedPrinter.optText(RefinedPrinter.scala:941)
	at dotty.tools.dotc.printing.RefinedPrinter.$anonfun$8(RefinedPrinter.scala:867)
	at dotty.tools.dotc.printing.Texts$Text$.provided(Texts.scala:172)
	at dotty.tools.dotc.printing.RefinedPrinter.toTextTemplate(RefinedPrinter.scala:868)
	at dotty.tools.dotc.printing.RefinedPrinter.templateText$$anonfun$1(RefinedPrinter.scala:892)
	at dotty.tools.dotc.printing.RefinedPrinter.withEnclosingDef(RefinedPrinter.scala:47)
	at dotty.tools.dotc.printing.RefinedPrinter.templateText(RefinedPrinter.scala:892)
	at dotty.tools.dotc.printing.RefinedPrinter.recur$1(RefinedPrinter.scala:551)
	at dotty.tools.dotc.printing.RefinedPrinter.toTextCore(RefinedPrinter.scala:561)
	at dotty.tools.dotc.printing.RefinedPrinter.toText$$anonfun$2(RefinedPrinter.scala:674)
	at dotty.tools.dotc.printing.MessageLimiter.controlled(MessageLimiter.scala:23)
	at dotty.tools.dotc.printing.PlainPrinter.controlled(PlainPrinter.scala:36)
	at dotty.tools.dotc.printing.RefinedPrinter.toText(RefinedPrinter.scala:745)
	at dotty.tools.dotc.ast.Trees$Tree.toText(Trees.scala:197)
	at dotty.tools.dotc.printing.Printer.toText$$anonfun$1(Printer.scala:163)
	at scala.collection.immutable.List.map(List.scala:250)
	at scala.collection.immutable.List.map(List.scala:79)
	at dotty.tools.dotc.printing.Printer.toText(Printer.scala:163)
	at dotty.tools.dotc.printing.Printer.toTextGlobal$$anonfun$2(Printer.scala:171)
	at dotty.tools.dotc.printing.Printer.atPrec(Printer.scala:42)
	at dotty.tools.dotc.printing.Printer.toTextGlobal(Printer.scala:171)
	at dotty.tools.dotc.printing.RefinedPrinter.toTextTemplate(RefinedPrinter.scala:881)
	at dotty.tools.dotc.printing.RefinedPrinter.templateText$$anonfun$1(RefinedPrinter.scala:892)
	at dotty.tools.dotc.printing.RefinedPrinter.withEnclosingDef(RefinedPrinter.scala:47)
	at dotty.tools.dotc.printing.RefinedPrinter.templateText(RefinedPrinter.scala:892)
	at dotty.tools.dotc.printing.RefinedPrinter.recur$1(RefinedPrinter.scala:551)
	at dotty.tools.dotc.printing.RefinedPrinter.toTextCore(RefinedPrinter.scala:561)
	at dotty.tools.dotc.printing.RefinedPrinter.toText$$anonfun$2(RefinedPrinter.scala:674)
	at dotty.tools.dotc.printing.MessageLimiter.controlled(MessageLimiter.scala:23)
	at dotty.tools.dotc.printing.PlainPrinter.controlled(PlainPrinter.scala:36)
	at dotty.tools.dotc.printing.RefinedPrinter.toText(RefinedPrinter.scala:745)
	at dotty.tools.dotc.ast.Trees$Tree.toText(Trees.scala:197)
	at dotty.tools.dotc.printing.Printer.toText$$anonfun$1(Printer.scala:163)
	at scala.collection.immutable.List.map(List.scala:246)
	at scala.collection.immutable.List.map(List.scala:79)
	at dotty.tools.dotc.printing.Printer.toText(Printer.scala:163)
	at dotty.tools.dotc.printing.Printer.toTextGlobal$$anonfun$2(Printer.scala:171)
	at dotty.tools.dotc.printing.Printer.atPrec(Printer.scala:42)
	at dotty.tools.dotc.printing.Printer.toTextGlobal(Printer.scala:171)
	at dotty.tools.dotc.printing.RefinedPrinter.packageDefText(RefinedPrinter.scala:904)
	at dotty.tools.dotc.printing.RefinedPrinter.toTextCore(RefinedPrinter.scala:570)
	at dotty.tools.dotc.printing.RefinedPrinter.toText$$anonfun$2(RefinedPrinter.scala:674)
	at dotty.tools.dotc.printing.MessageLimiter.controlled(MessageLimiter.scala:23)
	at dotty.tools.dotc.printing.PlainPrinter.controlled(PlainPrinter.scala:36)
	at dotty.tools.dotc.printing.RefinedPrinter.toText(RefinedPrinter.scala:745)
	at dotty.tools.dotc.ast.Trees$Tree.toText(Trees.scala:197)
	at dotty.tools.dotc.printing.Showable.show(Showable.scala:23)
	at dotty.tools.dotc.printing.Showable.show$(Showable.scala:9)
	at dotty.tools.dotc.ast.Trees$Tree.show(Trees.scala:56)
	at dotty.tools.dotc.printing.Formatting$StringFormatter.showArg(Formatting.scala:28)
	at dotty.tools.dotc.printing.Formatting$StringFormatter.treatArg$$anonfun$1(Formatting.scala:46)
	at scala.collection.immutable.List.map(List.scala:246)
	at scala.collection.immutable.List.map(List.scala:79)
	at dotty.tools.dotc.printing.Formatting$StringFormatter.treatArg(Formatting.scala:46)
	at dotty.tools.dotc.printing.Formatting$StringFormatter.$anonfun$2(Formatting.scala:62)
	at scala.collection.LazyZip2$$anon$1$$anon$2.next(LazyZipOps.scala:42)
	at scala.collection.mutable.Growable.addAll(Growable.scala:65)
	at scala.collection.mutable.Growable.addAll$(Growable.scala:60)
	at scala.collection.mutable.ArrayBuilder.addAll(ArrayBuilder.scala:66)
	at scala.collection.IterableOnceOps.toArray(IterableOnce.scala:1282)
	at scala.collection.IterableOnceOps.toArray$(IterableOnce.scala:1276)
	at scala.collection.AbstractIterable.toArray(Iterable.scala:919)
	at scala.Array$.from(Array.scala:72)
	at scala.collection.immutable.ArraySeq$.from(ArraySeq.scala:274)
	at scala.collection.immutable.ArraySeq$.from(ArraySeq.scala:265)
	at scala.collection.ClassTagIterableFactory$AnyIterableDelegate.from(Factory.scala:671)
	at scala.collection.BuildFromLowPriority2$$anon$11.fromSpecific(BuildFrom.scala:112)
	at scala.collection.BuildFromLowPriority2$$anon$11.fromSpecific(BuildFrom.scala:109)
	at scala.collection.LazyZip2.map(LazyZipOps.scala:37)
	at dotty.tools.dotc.printing.Formatting$StringFormatter.assemble(Formatting.scala:62)
	at dotty.tools.dotc.core.Decorators$.i(Decorators.scala:263)
	at dotty.tools.dotc.transform.Pickler.testUnpickler$$anonfun$2(Pickler.scala:135)
	at scala.runtime.function.JProcedure1.apply(JProcedure1.java:15)
	at scala.runtime.function.JProcedure1.apply(JProcedure1.java:10)
	at scala.collection.IterableOnceOps.foreach(IterableOnce.scala:563)
	at scala.collection.IterableOnceOps.foreach$(IterableOnce.scala:561)
	at scala.collection.AbstractIterable.foreach(Iterable.scala:919)
	at scala.collection.IterableOps$WithFilter.foreach(Iterable.scala:889)
	at dotty.tools.dotc.transform.Pickler.testUnpickler(Pickler.scala:136)
	at dotty.tools.dotc.transform.Pickler.runOn(Pickler.scala:119)
	at dotty.tools.dotc.Run.runPhases$4$$anonfun$4(Run.scala:205)
	at scala.runtime.function.JProcedure1.apply(JProcedure1.java:15)
	at scala.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:215)
	at dotty.tools.dotc.Run.compileUnits$$anonfun$1(Run.scala:223)
	at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.scala:18)
	at dotty.tools.dotc.util.Stats$.maybeMonitored(Stats.scala:67)
	at dotty.tools.dotc.Run.compileUnits(Run.scala:230)
	at dotty.tools.dotc.Run.compileSources(Run.scala:166)
	at dotty.tools.dotc.Run.compile(Run.scala:150)
	at dotty.tools.dotc.Driver.doCompile(Driver.scala:39)
	at dotty.tools.dotc.Driver.process(Driver.scala:186)
	at dotty.tools.dotc.Driver.process(Driver.scala:155)
	at dotty.tools.dotc.Driver.process(Driver.scala:167)
	at dotty.tools.dotc.Driver.main(Driver.scala:194)
	at dotty.tools.dotc.Main.main(Main.scala)

There are no errors when there's no self alias

class A {
  object B {

  }
}

or if the inner object is nested in another object instead of a class

object A {
  object B { b =>

  }
}

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions