aboutsummaryrefslogtreecommitdiff
path: root/src/dotty/tools/dotc/transform/TreeChecker.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2015-08-22 22:03:32 +0200
committerMartin Odersky <odersky@gmail.com>2015-08-22 22:05:24 +0200
commit22c42dd5f5333285f1898b25cf322a1ce6bd7a0c (patch)
treefdba80e90b970f64cb3e1298419dba093f249d59 /src/dotty/tools/dotc/transform/TreeChecker.scala
parent3a203c8cef16fa458bdd24d66ae7835372596d3f (diff)
downloaddotty-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/tools/dotc/transform/TreeChecker.scala')
-rw-r--r--src/dotty/tools/dotc/transform/TreeChecker.scala9
1 files changed, 7 insertions, 2 deletions
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) = {