diff options
author | Martin Odersky <odersky@gmail.com> | 2013-08-09 17:53:20 +0200 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2013-08-09 17:53:20 +0200 |
commit | 2fffa023502cbaffe0e282495e18aefe2bff0d22 (patch) | |
tree | 006358958080a55ff7f156443faeb33c22d767c3 /src/dotty/tools/dotc/ast/Trees.scala | |
parent | 73525ada82375ef0ff4be61a3bfbae8c74963ad0 (diff) | |
download | dotty-2fffa023502cbaffe0e282495e18aefe2bff0d22.tar.gz dotty-2fffa023502cbaffe0e282495e18aefe2bff0d22.tar.bz2 dotty-2fffa023502cbaffe0e282495e18aefe2bff0d22.zip |
Typing of SeqLiterals
Also revised handling of SeqLiterals by replacing additional type member with split into SeqLiteral and JavaSeqLiteral.
Diffstat (limited to 'src/dotty/tools/dotc/ast/Trees.scala')
-rw-r--r-- | src/dotty/tools/dotc/ast/Trees.scala | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/src/dotty/tools/dotc/ast/Trees.scala b/src/dotty/tools/dotc/ast/Trees.scala index 5ae87d9ad..f31f7373c 100644 --- a/src/dotty/tools/dotc/ast/Trees.scala +++ b/src/dotty/tools/dotc/ast/Trees.scala @@ -501,12 +501,17 @@ object Trees { type ThisTree[-T >: Untyped] = Throw[T] } - /** Array[elemtpt](elems) */ + /** Seq(elems) */ case class SeqLiteral[-T >: Untyped] private[ast] (elems: List[Tree[T]]) extends Tree[T] { type ThisTree[-T >: Untyped] = SeqLiteral[T] } + /** Array(elems) */ + class JavaSeqLiteral[T >: Untyped] private[ast] (elems: List[Tree[T]]) + extends SeqLiteral(elems) { + } + /** A type tree that represents an existing or inferred type */ case class TypeTree[-T >: Untyped] private[ast] (original: Tree[T]) extends DenotingTree[T] with TypTree[T] { @@ -725,6 +730,7 @@ object Trees { type Try = Trees.Try[T] type Throw = Trees.Throw[T] type SeqLiteral = Trees.SeqLiteral[T] + type JavaSeqLiteral = Trees.JavaSeqLiteral[T] type TypeTree = Trees.TypeTree[T] type SingletonTypeTree = Trees.SingletonTypeTree[T] type SelectFromTypeTree = Trees.SelectFromTypeTree[T] @@ -910,6 +916,9 @@ object Trees { case _ => finalize(tree, untpd.Throw(expr)) } def SeqLiteral(tree: Tree, elems: List[Tree]): SeqLiteral = tree match { + case tree: JavaSeqLiteral => + if (elems eq tree.elems) tree + else finalize(tree, new JavaSeqLiteral(elems)) case tree: SeqLiteral if (elems eq tree.elems) => tree case _ => finalize(tree, untpd.SeqLiteral(elems)) } |