aboutsummaryrefslogtreecommitdiff
path: root/src/dotty/tools/dotc/ast/Trees.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2013-08-09 17:53:20 +0200
committerMartin Odersky <odersky@gmail.com>2013-08-09 17:53:20 +0200
commit2fffa023502cbaffe0e282495e18aefe2bff0d22 (patch)
tree006358958080a55ff7f156443faeb33c22d767c3 /src/dotty/tools/dotc/ast/Trees.scala
parent73525ada82375ef0ff4be61a3bfbae8c74963ad0 (diff)
downloaddotty-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.scala11
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))
}