diff options
author | Martin Odersky <odersky@gmail.com> | 2015-08-22 22:03:32 +0200 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2015-08-22 22:05:24 +0200 |
commit | 22c42dd5f5333285f1898b25cf322a1ce6bd7a0c (patch) | |
tree | fdba80e90b970f64cb3e1298419dba093f249d59 /src/dotty | |
parent | 3a203c8cef16fa458bdd24d66ae7835372596d3f (diff) | |
download | dotty-22c42dd5f5333285f1898b25cf322a1ce6bd7a0c.tar.gz dotty-22c42dd5f5333285f1898b25cf322a1ce6bd7a0c.tar.bz2 dotty-22c42dd5f5333285f1898b25cf322a1ce6bd7a0c.zip |
When unpickling, translate T* to Seq[T] unless it's a parameter type.
Dotty allows T* types only for parameter types of MethodTypes (and for
repeated arguments); all other ocurrences have to be translated to the underlying type.
TreeChecker now verifies that Ident and Select nodes never carry a repeated parameter
type.
Diffstat (limited to 'src/dotty')
-rw-r--r-- | src/dotty/tools/dotc/core/unpickleScala2/Scala2Unpickler.scala | 1 | ||||
-rw-r--r-- | src/dotty/tools/dotc/transform/TreeChecker.scala | 9 |
2 files changed, 8 insertions, 2 deletions
diff --git a/src/dotty/tools/dotc/core/unpickleScala2/Scala2Unpickler.scala b/src/dotty/tools/dotc/core/unpickleScala2/Scala2Unpickler.scala index 3eed1c6c2..a3c131427 100644 --- a/src/dotty/tools/dotc/core/unpickleScala2/Scala2Unpickler.scala +++ b/src/dotty/tools/dotc/core/unpickleScala2/Scala2Unpickler.scala @@ -548,6 +548,7 @@ class Scala2Unpickler(bytes: Array[Byte], classRoot: ClassDenotation, moduleClas if (tag == ALIASsym) TypeAlias(tp1) else if (denot.isType) checkNonCyclic(denot.symbol, tp1, reportErrors = false) // we need the checkNonCyclic call to insert LazyRefs for F-bounded cycles + else if (!denot.is(Param)) tp1.underlyingIfRepeated(isJava = false) else tp1 if (denot.isConstructor) addConstructorTypeParams(denot) if (atEnd) { diff --git a/src/dotty/tools/dotc/transform/TreeChecker.scala b/src/dotty/tools/dotc/transform/TreeChecker.scala index 6ae765480..f046226d1 100644 --- a/src/dotty/tools/dotc/transform/TreeChecker.scala +++ b/src/dotty/tools/dotc/transform/TreeChecker.scala @@ -228,16 +228,21 @@ class TreeChecker extends Phase with SymTransformer { } }.apply(tp) + def checkNotRepeated(tree: Tree)(implicit ctx: Context): tree.type = { + assert(!tree.tpe.widen.isRepeatedParam, i"repeated parameter type not allowed here: $tree") + tree + } + override def typedIdent(tree: untpd.Ident, pt: Type)(implicit ctx: Context): Tree = { assert(tree.isTerm || !ctx.isAfterTyper, tree.show + " at " + ctx.phase) assert(tree.isType || !needsSelect(tree.tpe), i"bad type ${tree.tpe} for $tree # ${tree.uniqueId}") assertDefined(tree) - super.typedIdent(tree, pt) + checkNotRepeated(super.typedIdent(tree, pt)) } override def typedSelect(tree: untpd.Select, pt: Type)(implicit ctx: Context): Tree = { assert(tree.isTerm || !ctx.isAfterTyper, tree.show + " at " + ctx.phase) - super.typedSelect(tree, pt) + checkNotRepeated(super.typedSelect(tree, pt)) } override def typedThis(tree: untpd.This)(implicit ctx: Context) = { |