aboutsummaryrefslogtreecommitdiff
path: root/src/dotty/tools/dotc/ast/Trees.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2013-06-03 11:33:53 +0200
committerMartin Odersky <odersky@gmail.com>2013-06-03 11:33:53 +0200
commit339809ed82e14699681a5a7765c87133cd681ec0 (patch)
tree283b653e9260d3feb01e19b955033de74bc53790 /src/dotty/tools/dotc/ast/Trees.scala
parent17d0e7008f62882c10193ea0db09c9b90736c320 (diff)
downloaddotty-339809ed82e14699681a5a7765c87133cd681ec0.tar.gz
dotty-339809ed82e14699681a5a7765c87133cd681ec0.tar.bz2
dotty-339809ed82e14699681a5a7765c87133cd681ec0.zip
More solid design of Namer with some Typer bits added.
Diffstat (limited to 'src/dotty/tools/dotc/ast/Trees.scala')
-rw-r--r--src/dotty/tools/dotc/ast/Trees.scala17
1 files changed, 14 insertions, 3 deletions
diff --git a/src/dotty/tools/dotc/ast/Trees.scala b/src/dotty/tools/dotc/ast/Trees.scala
index 6dfaa9c7b..7e1e70d57 100644
--- a/src/dotty/tools/dotc/ast/Trees.scala
+++ b/src/dotty/tools/dotc/ast/Trees.scala
@@ -313,6 +313,12 @@ object Trees {
override def envelope: Position = mods.pos union pos union initialPos
}
+ /** A ValDef or DefDef tree */
+ trait ValOrDefDef[T >: Untyped] extends ModDefTree[T] {
+ def tpt: Tree[T]
+ def rhs: Tree[T]
+ }
+
// ----------- Tree case classes ------------------------------------
/** name */
@@ -550,14 +556,14 @@ object Trees {
/** mods val name: tpt = rhs */
case class ValDef[T >: Untyped](mods: Modifiers[T], name: TermName, tpt: Tree[T], rhs: Tree[T])
- extends ModDefTree[T] {
+ extends ValOrDefDef[T] {
type ThisTree[T >: Untyped] = ValDef[T]
def withName(name: Name) = this.derivedValDef(mods, name.toTermName, tpt, rhs)
}
/** mods def name[tparams](vparams_1)...(vparams_n): tpt = rhs */
case class DefDef[T >: Untyped](mods: Modifiers[T], name: TermName, tparams: List[TypeDef[T]], vparamss: List[List[ValDef[T]]], tpt: Tree[T], rhs: Tree[T])
- extends ModDefTree[T] {
+ extends ValOrDefDef[T] {
type ThisTree[T >: Untyped] = DefDef[T]
def withName(name: Name) = this.derivedDefDef(mods, name.toTermName, tparams, vparamss, tpt, rhs)
}
@@ -650,9 +656,13 @@ object Trees {
}
object Thicket {
- def apply[T >: Untyped](): Tree[T] = emptyTree()
+ def apply[T >: Untyped](): Thicket[T] = emptyTree()
def apply[T >: Untyped](x1: Tree[T], x2: Tree[T]): Thicket[T] = Thicket(List(x1, x2))
def apply[T >: Untyped](x1: Tree[T], x2: Tree[T], x3: Tree[T]): Thicket[T] = Thicket(List(x1, x2, x3))
+ def make[T >: Untyped](xs: List[Tree[T]]): Tree[T] = flatten(xs) match {
+ case x :: Nil => x
+ case _ => apply(xs)
+ }
}
// ----- Auxiliary creation methods ------------------
@@ -678,6 +688,7 @@ object Trees {
type RefTree = Trees.RefTree[T]
type DefTree = Trees.DefTree[T]
type ModDefTree = Trees.ModDefTree[T]
+ type ValOrDefDef = Trees.ValOrDefDef[T]
type Ident = Trees.Ident[T]
type Select = Trees.Select[T]