aboutsummaryrefslogtreecommitdiff
path: root/src/dotty/tools/dotc/core/tasty/TreeUnpickler.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2016-11-21 10:22:07 +0100
committerMartin Odersky <odersky@gmail.com>2016-11-21 10:22:07 +0100
commit7f0637ce073131d8603c567329885e4443cd48d5 (patch)
treef94fa7e704b901d51fec272176090e174ffbb106 /src/dotty/tools/dotc/core/tasty/TreeUnpickler.scala
parent5c7617b006fe4446a105b3db4916956a92826304 (diff)
downloaddotty-7f0637ce073131d8603c567329885e4443cd48d5.tar.gz
dotty-7f0637ce073131d8603c567329885e4443cd48d5.tar.bz2
dotty-7f0637ce073131d8603c567329885e4443cd48d5.zip
Make This and Super take idents as qualifier/mixin
The qualifier of a This and the mixin of a Super were names, which meant that their positions were lost. Now they are untyped idents.
Diffstat (limited to 'src/dotty/tools/dotc/core/tasty/TreeUnpickler.scala')
-rw-r--r--src/dotty/tools/dotc/core/tasty/TreeUnpickler.scala13
1 files changed, 10 insertions, 3 deletions
diff --git a/src/dotty/tools/dotc/core/tasty/TreeUnpickler.scala b/src/dotty/tools/dotc/core/tasty/TreeUnpickler.scala
index 1f0bbca19..eba9ab533 100644
--- a/src/dotty/tools/dotc/core/tasty/TreeUnpickler.scala
+++ b/src/dotty/tools/dotc/core/tasty/TreeUnpickler.scala
@@ -885,6 +885,11 @@ class TreeUnpickler(reader: TastyReader, tastyName: TastyName.Table, posUnpickle
untpd.Select(qual, unshadowed).withType(tpf(qual.tpe.widenIfUnstable))
}
+ def readQualId(): (untpd.Ident, TypeRef) = {
+ val qual = readTerm().asInstanceOf[untpd.Ident]
+ (untpd.Ident(qual.name).withPos(qual.pos), qual.tpe.asInstanceOf[TypeRef])
+ }
+
def readSimpleTerm(): Tree = tag match {
case SHARED =>
forkAt(readAddr()).readTerm()
@@ -902,6 +907,9 @@ class TreeUnpickler(reader: TastyReader, tastyName: TastyName.Table, posUnpickle
case SELECTtpt =>
val name = readName().toTypeName
completeSelect(name, TypeRef(_, name))
+ case QUALTHIS =>
+ val (qual, tref) = readQualId()
+ untpd.This(qual).withType(ThisType.raw(tref))
case NEW =>
New(readTpt())
case SINGLETONtpt =>
@@ -933,9 +941,8 @@ class TreeUnpickler(reader: TastyReader, tastyName: TastyName.Table, posUnpickle
(tag: @switch) match {
case SUPER =>
val qual = readTerm()
- val mixClass = ifBefore(end)(readType().typeSymbol, NoSymbol)
- val mixName = if (mixClass.exists) mixClass.name.asTypeName else tpnme.EMPTY
- tpd.Super(qual, mixName, ctx.mode.is(Mode.InSuperCall), mixClass)
+ val (mixId, mixTpe) = ifBefore(end)(readQualId(), (untpd.EmptyTypeIdent, NoType))
+ tpd.Super(qual, mixId, ctx.mode.is(Mode.InSuperCall), mixTpe.typeSymbol)
case APPLY =>
val fn = readTerm()
val isJava = fn.symbol.is(JavaDefined)