diff options
author | Martin Odersky <odersky@gmail.com> | 2013-06-03 11:33:53 +0200 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2013-06-03 11:33:53 +0200 |
commit | 339809ed82e14699681a5a7765c87133cd681ec0 (patch) | |
tree | 283b653e9260d3feb01e19b955033de74bc53790 /src/dotty/tools/dotc/ast/Trees.scala | |
parent | 17d0e7008f62882c10193ea0db09c9b90736c320 (diff) | |
download | dotty-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.scala | 17 |
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] |