Skip to content

Commit b01a9c0

Browse files
committed
Merge pull request #1165 from dotty-staging/fix-#1144
Pickle/unpickle SuperAccessor names
2 parents 01269e9 + ae49ebc commit b01a9c0

File tree

4 files changed

+32
-8
lines changed

4 files changed

+32
-8
lines changed

src/dotty/tools/dotc/core/tasty/TreePickler.scala

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -55,11 +55,22 @@ class TreePickler(pickler: TastyPickler) {
5555
pickleName(TastyName.Signed(nameIndex(name), params.map(fullNameIndex), fullNameIndex(result)))
5656
}
5757

58-
private def pickleName(sym: Symbol)(implicit ctx: Context): Unit =
59-
if (sym is Flags.ExpandedName)
60-
pickleName(TastyName.Expanded(
61-
nameIndex(sym.name.expandedPrefix), nameIndex(sym.name.unexpandedName)))
62-
else pickleName(sym.name)
58+
private def pickleName(sym: Symbol)(implicit ctx: Context): Unit = {
59+
def encodeSuper(name: Name): TastyName.NameRef =
60+
if (sym is Flags.SuperAccessor) {
61+
val SuperAccessorName(n) = name
62+
nameIndex(TastyName.SuperAccessor(nameIndex(n)))
63+
}
64+
else nameIndex(name)
65+
val nameRef =
66+
if (sym is Flags.ExpandedName)
67+
nameIndex(
68+
TastyName.Expanded(
69+
nameIndex(sym.name.expandedPrefix),
70+
encodeSuper(sym.name.unexpandedName)))
71+
else encodeSuper(sym.name)
72+
writeNat(nameRef.index)
73+
}
6374

6475
private def pickleSymRef(sym: Symbol)(implicit ctx: Context) = symRefs.get(sym) match {
6576
case Some(label) =>

src/dotty/tools/dotc/core/tasty/TreeUnpickler.scala

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ class TreeUnpickler(reader: TastyReader, tastyName: TastyName.Table) {
7878
case Shadowed(original) => toTermName(original).shadowedName
7979
case Expanded(prefix, original) => toTermName(original).expandedName(toTermName(prefix))
8080
case ModuleClass(original) => toTermName(original).moduleClassName.toTermName
81-
case SuperAccessor(accessed) => ???
81+
case SuperAccessor(accessed) => toTermName(accessed).superName
8282
case DefaultGetter(meth, num) => ???
8383
}
8484

@@ -378,9 +378,13 @@ class TreeUnpickler(reader: TastyReader, tastyName: TastyName.Table) {
378378
val rhsIsEmpty = noRhs(end)
379379
if (!rhsIsEmpty) skipTree()
380380
val (givenFlags, annots, privateWithin) = readModifiers(end)
381-
val expandedFlag = if (rawName.isInstanceOf[TastyName.Expanded]) ExpandedName else EmptyFlags
381+
def nameFlags(tname: TastyName): FlagSet = tname match {
382+
case TastyName.Expanded(_, original) => ExpandedName | nameFlags(tastyName(original))
383+
case TastyName.SuperAccessor(_) => Flags.SuperAccessor
384+
case _ => EmptyFlags
385+
}
382386
pickling.println(i"creating symbol $name at $start with flags $givenFlags")
383-
val flags = normalizeFlags(tag, givenFlags | expandedFlag, name, isAbstractType, rhsIsEmpty)
387+
val flags = normalizeFlags(tag, givenFlags | nameFlags(rawName), name, isAbstractType, rhsIsEmpty)
384388
def adjustIfModule(completer: LazyType) =
385389
if (flags is Module) ctx.adjustModuleCompleter(completer, name) else completer
386390
val sym =

tests/run/i1144/AB_1.scala

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
trait A {
2+
def x = 3
3+
}
4+
trait B extends A {
5+
override def x = super.x * 2
6+
}

tests/run/i1144/C_2.scala

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
object Test extends B {
2+
def main(args: Array[String]) = assert(x == 6, x)
3+
}

0 commit comments

Comments
 (0)