aboutsummaryrefslogtreecommitdiff
path: root/src/dotty/tools/dotc/ast/Trees.scala
diff options
context:
space:
mode:
Diffstat (limited to 'src/dotty/tools/dotc/ast/Trees.scala')
-rw-r--r--src/dotty/tools/dotc/ast/Trees.scala246
1 files changed, 152 insertions, 94 deletions
diff --git a/src/dotty/tools/dotc/ast/Trees.scala b/src/dotty/tools/dotc/ast/Trees.scala
index e19221841..41ef88b54 100644
--- a/src/dotty/tools/dotc/ast/Trees.scala
+++ b/src/dotty/tools/dotc/ast/Trees.scala
@@ -422,7 +422,7 @@ object Trees {
case class Ident[-T >: Untyped] private[ast] (name: Name)
extends RefTree[T] {
type ThisTree[-T >: Untyped] = Ident[T]
- def withName(name: Name)(implicit ctx: Context): untpd.Ident = untpd.cpy.Ident(this, name)
+ def withName(name: Name)(implicit ctx: Context): untpd.Ident = untpd.cpy.Ident(this)(name)
def qualifier: Tree[T] = genericEmptyTree
}
@@ -433,7 +433,7 @@ object Trees {
case class Select[-T >: Untyped] private[ast] (qualifier: Tree[T], name: Name)
extends RefTree[T] {
type ThisTree[-T >: Untyped] = Select[T]
- def withName(name: Name)(implicit ctx: Context): untpd.Select = untpd.cpy.Select(this, qualifier, name)
+ def withName(name: Name)(implicit ctx: Context): untpd.Select = untpd.cpy.Select(this)(qualifier, name)
}
class SelectWithSig[-T >: Untyped] private[ast] (qualifier: Tree[T], name: Name, val sig: Signature)
@@ -620,7 +620,7 @@ object Trees {
case class SelectFromTypeTree[-T >: Untyped] private[ast] (qualifier: Tree[T], name: Name)
extends RefTree[T] {
type ThisTree[-T >: Untyped] = SelectFromTypeTree[T]
- def withName(name: Name)(implicit ctx: Context): untpd.SelectFromTypeTree = untpd.cpy.SelectFromTypeTree(this, qualifier, name)
+ def withName(name: Name)(implicit ctx: Context): untpd.SelectFromTypeTree = untpd.cpy.SelectFromTypeTree(this)(qualifier, name)
}
/** left & right */
@@ -666,7 +666,7 @@ object Trees {
extends NameTree[T] with DefTree[T] with PatternTree[T] {
type ThisTree[-T >: Untyped] = Bind[T]
override def envelope: Position = pos union initialPos
- def withName(name: Name)(implicit ctx: Context): untpd.Bind = untpd.cpy.Bind(this, name, body)
+ def withName(name: Name)(implicit ctx: Context): untpd.Bind = untpd.cpy.Bind(this)(name, body)
}
/** tree_1 | ... | tree_n */
@@ -697,7 +697,7 @@ object Trees {
case class ValDef[-T >: Untyped] private[ast] (mods: Modifiers[T], name: TermName, tpt: Tree[T], rhs: Tree[T])
extends ValOrDefDef[T] {
type ThisTree[-T >: Untyped] = ValDef[T]
- def withName(name: Name)(implicit ctx: Context): untpd.ValDef = untpd.cpy.ValDef(this, mods, name.toTermName, tpt, rhs)
+ def withName(name: Name)(implicit ctx: Context): untpd.ValDef = untpd.cpy.ValDef(this)(mods, name.toTermName, tpt, rhs)
assert(isEmpty || tpt != genericEmptyTree)
}
@@ -705,7 +705,7 @@ object Trees {
case class DefDef[-T >: Untyped] private[ast] (mods: Modifiers[T], name: TermName, tparams: List[TypeDef[T]], vparamss: List[List[ValDef[T]]], tpt: Tree[T], rhs: Tree[T])
extends ValOrDefDef[T] {
type ThisTree[-T >: Untyped] = DefDef[T]
- def withName(name: Name)(implicit ctx: Context): untpd.DefDef = untpd.cpy.DefDef(this, mods, name.toTermName, tparams, vparamss, tpt, rhs)
+ def withName(name: Name)(implicit ctx: Context): untpd.DefDef = untpd.cpy.DefDef(this)(name = name.toTermName)
assert(tpt != genericEmptyTree)
}
@@ -717,7 +717,7 @@ object Trees {
case class TypeDef[-T >: Untyped] private[ast] (mods: Modifiers[T], name: TypeName, rhs: Tree[T])
extends MemberDef[T] {
type ThisTree[-T >: Untyped] = TypeDef[T]
- def withName(name: Name)(implicit ctx: Context): untpd.TypeDef = untpd.cpy.TypeDef(this, mods, name.toTypeName, rhs, tparams)
+ def withName(name: Name)(implicit ctx: Context): untpd.TypeDef = untpd.cpy.TypeDef(this)(mods, name.toTypeName, rhs, tparams)
/** Is this a definition of a class? */
def isClassDef = rhs.isInstanceOf[Template[_]]
@@ -919,179 +919,237 @@ object Trees {
def finalize(tree: Tree, copied: untpd.Tree): copied.ThisTree[T] =
postProcess(tree, copied withPos tree.pos)
- def Ident(tree: Tree, name: Name): Ident = tree match {
+ def Ident(tree: Tree)(name: Name): Ident = tree match {
case tree: BackquotedIdent =>
if (name == tree.name) tree
else finalize(tree, new BackquotedIdent(name))
case tree: Ident if (name == tree.name) => tree
case _ => finalize(tree, untpd.Ident(name))
}
- def Select(tree: Tree, qualifier: Tree, name: Name): Select = tree match {
+ def Select(tree: Tree)(qualifier: Tree, name: Name): Select = tree match {
case tree: SelectWithSig =>
if ((qualifier eq tree.qualifier) && (name == tree.name)) tree
else finalize(tree, new SelectWithSig(qualifier, name, tree.sig))
case tree: Select if (qualifier eq tree.qualifier) && (name == tree.name) => tree
case _ => finalize(tree, untpd.Select(qualifier, name))
}
- def This(tree: Tree, qual: TypeName): This = tree match {
+ def This(tree: Tree)(qual: TypeName): This = tree match {
case tree: This if (qual == tree.qual) => tree
case _ => finalize(tree, untpd.This(qual))
}
- def Super(tree: Tree, qual: Tree, mix: TypeName): Super = tree match {
+ def Super(tree: Tree)(qual: Tree, mix: TypeName): Super = tree match {
case tree: Super if (qual eq tree.qual) && (mix == tree.mix) => tree
case _ => finalize(tree, untpd.Super(qual, mix))
}
- def Apply(tree: Tree, fun: Tree, args: List[Tree]): Apply = tree match {
+ def Apply(tree: Tree)(fun: Tree, args: List[Tree]): Apply = tree match {
case tree: Apply if (fun eq tree.fun) && (args eq tree.args) => tree
case _ => finalize(tree, untpd.Apply(fun, args))
}
- def TypeApply(tree: Tree, fun: Tree, args: List[Tree]): TypeApply = tree match {
+ def TypeApply(tree: Tree)(fun: Tree, args: List[Tree]): TypeApply = tree match {
case tree: TypeApply if (fun eq tree.fun) && (args eq tree.args) => tree
case _ => finalize(tree, untpd.TypeApply(fun, args))
}
- def Literal(tree: Tree, const: Constant): Literal = tree match {
+ def Literal(tree: Tree)(const: Constant): Literal = tree match {
case tree: Literal if (const == tree.const) => tree
case _ => finalize(tree, untpd.Literal(const))
}
- def New(tree: Tree, tpt: Tree): New = tree match {
+ def New(tree: Tree)(tpt: Tree): New = tree match {
case tree: New if (tpt eq tree.tpt) => tree
case _ => finalize(tree, untpd.New(tpt))
}
- def Pair(tree: Tree, left: Tree, right: Tree): Pair = tree match {
+ def Pair(tree: Tree)(left: Tree, right: Tree): Pair = tree match {
case tree: Pair if (left eq tree.left) && (right eq tree.right) => tree
case _ => finalize(tree, untpd.Pair(left, right))
}
- def Typed(tree: Tree, expr: Tree, tpt: Tree): Typed = tree match {
+ def Typed(tree: Tree)(expr: Tree, tpt: Tree): Typed = tree match {
case tree: Typed if (expr eq tree.expr) && (tpt eq tree.tpt) => tree
case _ => finalize(tree, untpd.Typed(expr, tpt))
}
- def NamedArg(tree: Tree, name: Name, arg: Tree): NamedArg = tree match {
+ def NamedArg(tree: Tree)(name: Name, arg: Tree): NamedArg = tree match {
case tree: NamedArg if (name == tree.name) && (arg eq tree.arg) => tree
case _ => finalize(tree, untpd.NamedArg(name, arg))
}
- def Assign(tree: Tree, lhs: Tree, rhs: Tree): Assign = tree match {
+ def Assign(tree: Tree)(lhs: Tree, rhs: Tree): Assign = tree match {
case tree: Assign if (lhs eq tree.lhs) && (rhs eq tree.rhs) => tree
case _ => finalize(tree, untpd.Assign(lhs, rhs))
}
- def Block(tree: Tree, stats: List[Tree], expr: Tree): Block = tree match {
+ def Block(tree: Tree)(stats: List[Tree], expr: Tree): Block = tree match {
case tree: Block if (stats eq tree.stats) && (expr eq tree.expr) => tree
case _ => finalize(tree, untpd.Block(stats, expr))
}
- def If(tree: Tree, cond: Tree, thenp: Tree, elsep: Tree): If = tree match {
+ def If(tree: Tree)(cond: Tree, thenp: Tree, elsep: Tree): If = tree match {
case tree: If if (cond eq tree.cond) && (thenp eq tree.thenp) && (elsep eq tree.elsep) => tree
case _ => finalize(tree, untpd.If(cond, thenp, elsep))
}
- def Closure(tree: Tree, env: List[Tree], meth: Tree, tpt: Tree): Closure = tree match {
+ def Closure(tree: Tree)(env: List[Tree], meth: Tree, tpt: Tree): Closure = tree match {
case tree: Closure if (env eq tree.env) && (meth eq tree.meth) && (tpt eq tree.tpt) => tree
case _ => finalize(tree, untpd.Closure(env, meth, tpt))
}
- def Match(tree: Tree, selector: Tree, cases: List[CaseDef]): Match = tree match {
+ def Match(tree: Tree)(selector: Tree, cases: List[CaseDef]): Match = tree match {
case tree: Match if (selector eq tree.selector) && (cases eq tree.cases) => tree
case _ => finalize(tree, untpd.Match(selector, cases))
}
- def CaseDef(tree: Tree, pat: Tree, guard: Tree, body: Tree): CaseDef = tree match {
+ def CaseDef(tree: Tree)(pat: Tree, guard: Tree, body: Tree): CaseDef = tree match {
case tree: CaseDef if (pat eq tree.pat) && (guard eq tree.guard) && (body eq tree.body) => tree
case _ => finalize(tree, untpd.CaseDef(pat, guard, body))
}
- def Return(tree: Tree, expr: Tree, from: Tree): Return = tree match {
+ def Return(tree: Tree)(expr: Tree, from: Tree): Return = tree match {
case tree: Return if (expr eq tree.expr) && (from eq tree.from) => tree
case _ => finalize(tree, untpd.Return(expr, from))
}
- def Try(tree: Tree, expr: Tree, handler: Tree, finalizer: Tree): Try = tree match {
+ def Try(tree: Tree)(expr: Tree, handler: Tree, finalizer: Tree): Try = tree match {
case tree: Try if (expr eq tree.expr) && (handler eq tree.handler) && (finalizer eq tree.finalizer) => tree
case _ => finalize(tree, untpd.Try(expr, handler, finalizer))
}
- def Throw(tree: Tree, expr: Tree): Throw = tree match {
+ def Throw(tree: Tree)(expr: Tree): Throw = tree match {
case tree: Throw if (expr eq tree.expr) => tree
case _ => finalize(tree, untpd.Throw(expr))
}
- def SeqLiteral(tree: Tree, elems: List[Tree]): SeqLiteral = tree match {
+ 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))
}
- def TypeTree(tree: Tree, original: Tree): TypeTree = tree match {
+ def TypeTree(tree: Tree)(original: Tree): TypeTree = tree match {
case tree: TypeTree if original eq tree.original => tree
case _ => finalize(tree, untpd.TypeTree(original))
}
- def SingletonTypeTree(tree: Tree, ref: Tree): SingletonTypeTree = tree match {
+ def SingletonTypeTree(tree: Tree)(ref: Tree): SingletonTypeTree = tree match {
case tree: SingletonTypeTree if (ref eq tree.ref) => tree
case _ => finalize(tree, untpd.SingletonTypeTree(ref))
}
- def SelectFromTypeTree(tree: Tree, qualifier: Tree, name: Name): SelectFromTypeTree = tree match {
+ def SelectFromTypeTree(tree: Tree)(qualifier: Tree, name: Name): SelectFromTypeTree = tree match {
case tree: SelectFromTypeTree if (qualifier eq tree.qualifier) && (name == tree.name) => tree
case _ => finalize(tree, untpd.SelectFromTypeTree(qualifier, name))
}
- def AndTypeTree(tree: Tree, left: Tree, right: Tree): AndTypeTree = tree match {
+ def AndTypeTree(tree: Tree)(left: Tree, right: Tree): AndTypeTree = tree match {
case tree: AndTypeTree if (left eq tree.left) && (right eq tree.right) => tree
case _ => finalize(tree, untpd.AndTypeTree(left, right))
}
- def OrTypeTree(tree: Tree, left: Tree, right: Tree): OrTypeTree = tree match {
+ def OrTypeTree(tree: Tree)(left: Tree, right: Tree): OrTypeTree = tree match {
case tree: OrTypeTree if (left eq tree.left) && (right eq tree.right) => tree
case _ => finalize(tree, untpd.OrTypeTree(left, right))
}
- def RefinedTypeTree(tree: Tree, tpt: Tree, refinements: List[Tree]): RefinedTypeTree = tree match {
+ def RefinedTypeTree(tree: Tree)(tpt: Tree, refinements: List[Tree]): RefinedTypeTree = tree match {
case tree: RefinedTypeTree if (tpt eq tree.tpt) && (refinements eq tree.refinements) => tree
case _ => finalize(tree, untpd.RefinedTypeTree(tpt, refinements))
}
- def AppliedTypeTree(tree: Tree, tpt: Tree, args: List[Tree]): AppliedTypeTree = tree match {
+ def AppliedTypeTree(tree: Tree)(tpt: Tree, args: List[Tree]): AppliedTypeTree = tree match {
case tree: AppliedTypeTree if (tpt eq tree.tpt) && (args eq tree.args) => tree
case _ => finalize(tree, untpd.AppliedTypeTree(tpt, args))
}
- def ByNameTypeTree(tree: Tree, result: Tree): ByNameTypeTree = tree match {
+ def ByNameTypeTree(tree: Tree)(result: Tree): ByNameTypeTree = tree match {
case tree: ByNameTypeTree if (result eq tree.result) => tree
case _ => finalize(tree, untpd.ByNameTypeTree(result))
}
- def TypeBoundsTree(tree: Tree, lo: Tree, hi: Tree): TypeBoundsTree = tree match {
+ def TypeBoundsTree(tree: Tree)(lo: Tree, hi: Tree): TypeBoundsTree = tree match {
case tree: TypeBoundsTree if (lo eq tree.lo) && (hi eq tree.hi) => tree
case _ => finalize(tree, untpd.TypeBoundsTree(lo, hi))
}
- def Bind(tree: Tree, name: Name, body: Tree): Bind = tree match {
+ def Bind(tree: Tree)(name: Name, body: Tree): Bind = tree match {
case tree: Bind if (name eq tree.name) && (body eq tree.body) => tree
case _ => finalize(tree, untpd.Bind(name, body))
}
- def Alternative(tree: Tree, trees: List[Tree]): Alternative = tree match {
+ def Alternative(tree: Tree)(trees: List[Tree]): Alternative = tree match {
case tree: Alternative if (trees eq tree.trees) => tree
case _ => finalize(tree, untpd.Alternative(trees))
}
- def UnApply(tree: Tree, fun: Tree, implicits: List[Tree], patterns: List[Tree]): UnApply = tree match {
+ def UnApply(tree: Tree)(fun: Tree, implicits: List[Tree], patterns: List[Tree]): UnApply = tree match {
case tree: UnApply if (fun eq tree.fun) && (implicits eq tree.implicits) && (patterns eq tree.patterns) => tree
case _ => finalize(tree, untpd.UnApply(fun, implicits, patterns))
}
- def ValDef(tree: Tree, mods: Modifiers, name: TermName, tpt: Tree, rhs: Tree): ValDef = tree match {
+ def ValDef(tree: Tree)(mods: Modifiers, name: TermName, tpt: Tree, rhs: Tree): ValDef = tree match {
case tree: ValDef if (mods == tree.mods) && (name == tree.name) && (tpt eq tree.tpt) && (rhs eq tree.rhs) => tree
case _ => finalize(tree, untpd.ValDef(mods, name, tpt, rhs))
}
- def DefDef(tree: Tree, mods: Modifiers, name: TermName, tparams: List[TypeDef], vparamss: List[List[ValDef]], tpt: Tree, rhs: Tree): DefDef = tree match {
+ def DefDef(tree: Tree)(mods: Modifiers, name: TermName, tparams: List[TypeDef], vparamss: List[List[ValDef]], tpt: Tree, rhs: Tree): DefDef = tree match {
case tree: DefDef if (mods == tree.mods) && (name == tree.name) && (tparams eq tree.tparams) && (vparamss eq tree.vparamss) && (tpt eq tree.tpt) && (rhs eq tree.rhs) => tree
case _ => finalize(tree, untpd.DefDef(mods, name, tparams, vparamss, tpt, rhs))
}
- def TypeDef(tree: Tree, mods: Modifiers, name: TypeName, rhs: Tree, tparams: List[untpd.TypeDef] = Nil): TypeDef = tree match {
+ def TypeDef(tree: Tree)(mods: Modifiers, name: TypeName, rhs: Tree, tparams: List[untpd.TypeDef]): TypeDef = tree match {
case tree: TypeDef if (mods == tree.mods) && (name == tree.name) && (rhs eq tree.rhs) && (tparams eq tree.tparams) => tree
case _ => finalize(tree, untpd.TypeDef(mods, name, tparams, rhs))
}
- def Template(tree: Tree, constr: DefDef, parents: List[Tree], self: ValDef, body: List[Tree]): Template = tree match {
+ def Template(tree: Tree)(constr: DefDef, parents: List[Tree], self: ValDef, body: List[Tree]): Template = tree match {
case tree: Template if (constr eq tree.constr) && (parents eq tree.parents) && (self eq tree.self) && (body eq tree.body) => tree
case _ => finalize(tree, untpd.Template(constr, parents, self, body))
}
- def Import(tree: Tree, expr: Tree, selectors: List[untpd.Tree]): Import = tree match {
+ def Import(tree: Tree)(expr: Tree, selectors: List[untpd.Tree]): Import = tree match {
case tree: Import if (expr eq tree.expr) && (selectors eq tree.selectors) => tree
case _ => finalize(tree, untpd.Import(expr, selectors))
}
- def PackageDef(tree: Tree, pid: RefTree, stats: List[Tree]): PackageDef = tree match {
+ def PackageDef(tree: Tree)(pid: RefTree, stats: List[Tree]): PackageDef = tree match {
case tree: PackageDef if (pid eq tree.pid) && (stats eq tree.stats) => tree
case _ => finalize(tree, untpd.PackageDef(pid, stats))
}
- def Annotated(tree: Tree, annot: Tree, arg: Tree): Annotated = tree match {
+ def Annotated(tree: Tree)(annot: Tree, arg: Tree): Annotated = tree match {
case tree: Annotated if (annot eq tree.annot) && (arg eq tree.arg) => tree
case _ => finalize(tree, untpd.Annotated(annot, arg))
}
- def Thicket(tree: Tree, trees: List[Tree]): Thicket = tree match {
+ def Thicket(tree: Tree)(trees: List[Tree]): Thicket = tree match {
case tree: Thicket if (trees eq tree.trees) => tree
case _ => finalize(tree, untpd.Thicket(trees))
}
+
+ // Copier methods with default arguments; these demand that the original tree
+ // is of the same class as the copy
+
+ def Select(tree: Select)(qualifier: Tree = tree.qualifier, name: Name = tree.name): Select =
+ Select(tree: Tree)(qualifier, name)
+ def Super(tree: Super)(qual: Tree = tree.qual, mix: TypeName = tree.mix): Super =
+ Super(tree: Tree)(qual, mix)
+ def Apply(tree: Apply)(fun: Tree = tree.fun, args: List[Tree] = tree.args): Apply =
+ Apply(tree: Tree)(fun, args)
+ def TypeApply(tree: TypeApply)(fun: Tree = tree.fun, args: List[Tree] = tree.args): TypeApply =
+ TypeApply(tree: Tree)(fun, args)
+ def Typed(tree: Typed)(expr: Tree = tree.expr, tpt: Tree = tree.tpt): Typed =
+ Typed(tree: Tree)(expr, tpt)
+ def NamedArg(tree: NamedArg)(name: Name = tree.name, arg: Tree = tree.arg): NamedArg =
+ NamedArg(tree: Tree)(name, arg)
+ def Assign(tree: Assign)(lhs: Tree = tree.lhs, rhs: Tree = tree.rhs): Assign =
+ Assign(tree: Tree)(lhs, rhs)
+ def Block(tree: Block)(stats: List[Tree] = tree.stats, expr: Tree = tree.expr): Block =
+ Block(tree: Tree)(stats, expr)
+ def If(tree: If)(cond: Tree = tree.cond, thenp: Tree = tree.thenp, elsep: Tree = tree.elsep): If =
+ If(tree: Tree)(cond, thenp, elsep)
+ def Closure(tree: Closure)(env: List[Tree] = tree.env, meth: Tree = tree.meth, tpt: Tree = tree.tpt): Closure =
+ Closure(tree: Tree)(env, meth, tpt)
+ def Match(tree: Match)(selector: Tree = tree.selector, cases: List[CaseDef] = tree.cases): Match =
+ Match(tree: Tree)(selector, cases)
+ def CaseDef(tree: CaseDef)(pat: Tree = tree.pat, guard: Tree = tree.guard, body: Tree = tree.body): CaseDef =
+ CaseDef(tree: Tree)(pat, guard, body)
+ def Return(tree: Return)(expr: Tree = tree.expr, from: Tree = tree.from): Return =
+ Return(tree: Tree)(expr, from)
+ def Try(tree: Try)(expr: Tree = tree.expr, handler: Tree = tree.handler, finalizer: Tree = tree.finalizer): Try =
+ Try(tree: Tree)(expr, handler, finalizer)
+ def SelectFromTypeTree(tree: SelectFromTypeTree)(qualifier: Tree = tree.qualifier, name: Name = tree.name):
+ SelectFromTypeTree = SelectFromTypeTree(tree: Tree)(qualifier, name)
+ def RefinedTypeTree(tree: RefinedTypeTree)(tpt: Tree = tree.tpt, refinements: List[Tree] = tree.refinements):
+ RefinedTypeTree = RefinedTypeTree(tree: Tree)(tpt, refinements)
+ def AppliedTypeTree(tree: AppliedTypeTree)(tpt: Tree = tree.tpt, args: List[Tree] = tree.args): AppliedTypeTree =
+ AppliedTypeTree(tree: Tree)(tpt, args)
+ def TypeBoundsTree(tree: TypeBoundsTree)(lo: Tree = tree.lo, hi: Tree = tree.hi): TypeBoundsTree =
+ TypeBoundsTree(tree: Tree)(lo, hi)
+ def Bind(tree: Bind)(name: Name = tree.name, body: Tree = tree.body): Bind =
+ Bind(tree: Tree)(name, body)
+ def UnApply(tree: UnApply)(fun: Tree = tree.fun, implicits: List[Tree] = tree.implicits, patterns: List[Tree] = tree.patterns): UnApply =
+ UnApply(tree: Tree)(fun, implicits, patterns)
+ def ValDef(tree: ValDef)(mods: Modifiers = tree.mods, name: TermName = tree.name, tpt: Tree = tree.tpt, rhs: Tree = tree.rhs): ValDef =
+ ValDef(tree: Tree)(mods, name, tpt, rhs)
+ def DefDef(tree: DefDef)(mods: Modifiers = tree.mods, name: TermName = tree.name, tparams: List[TypeDef] = tree.tparams, vparamss: List[List[ValDef]] = tree.vparamss, tpt: Tree = tree.tpt, rhs: Tree = tree.rhs): DefDef =
+ DefDef(tree: Tree)(mods, name, tparams, vparamss, tpt, rhs)
+ def TypeDef(tree: TypeDef)(mods: Modifiers = tree.mods, name: TypeName = tree.name, rhs: Tree = tree.rhs, tparams: List[untpd.TypeDef] = tree.tparams): TypeDef =
+ TypeDef(tree: Tree)(mods, name, rhs, tparams)
+ def Template(tree: Template)(constr: DefDef = tree.constr, parents: List[Tree] = tree.parents, self: ValDef = tree.self, body: List[Tree] = tree.body): Template =
+ Template(tree: Tree)(constr, parents, self, body)
+ def Import(tree: Import)(expr: Tree = tree.expr, selectors: List[untpd.Tree] = tree.selectors): Import =
+ Import(tree: Tree)(expr, selectors)
+ def PackageDef(tree: PackageDef)(pid: RefTree = tree.pid, stats: List[Tree] = tree.stats): PackageDef =
+ PackageDef(tree: Tree)(pid, stats)
+ def Annotated(tree: Annotated)(annot: Tree = tree.annot, arg: Tree = tree.arg): Annotated =
+ Annotated(tree: Tree)(annot, arg)
}
abstract class TreeMap(val cpy: TreeCopier = inst.cpy) {
@@ -1100,88 +1158,88 @@ object Trees {
case Ident(name) =>
tree
case Select(qualifier, name) =>
- cpy.Select(tree, transform(qualifier), name)
+ cpy.Select(tree)(transform(qualifier), name)
case This(qual) =>
tree
case Super(qual, mix) =>
- cpy.Super(tree, transform(qual), mix)
+ cpy.Super(tree)(transform(qual), mix)
case Apply(fun, args) =>
- cpy.Apply(tree, transform(fun), transform(args))
+ cpy.Apply(tree)(transform(fun), transform(args))
case TypeApply(fun, args) =>
- cpy.TypeApply(tree, transform(fun), transform(args))
+ cpy.TypeApply(tree)(transform(fun), transform(args))
+ case Literal(const) =>
+ tree
case New(tpt) =>
- cpy.New(tree, transform(tpt))
+ cpy.New(tree)(transform(tpt))
+ case Pair(left, right) =>
+ cpy.Pair(tree)(transform(left), transform(right))
case Typed(expr, tpt) =>
- cpy.Typed(tree, transform(expr), transform(tpt))
+ cpy.Typed(tree)(transform(expr), transform(tpt))
case NamedArg(name, arg) =>
- cpy.NamedArg(tree, name, transform(arg))
+ cpy.NamedArg(tree)(name, transform(arg))
case Assign(lhs, rhs) =>
- cpy.Assign(tree, transform(lhs), transform(rhs))
+ cpy.Assign(tree)(transform(lhs), transform(rhs))
+ case Block(stats, expr) =>
+ cpy.Block(tree)(transformStats(stats), transform(expr))
+ case If(cond, thenp, elsep) =>
+ cpy.If(tree)(transform(cond), transform(thenp), transform(elsep))
case Closure(env, meth, tpt) =>
- cpy.Closure(tree, transform(env), transform(meth), transform(tpt))
+ cpy.Closure(tree)(transform(env), transform(meth), transform(tpt))
+ case Match(selector, cases) =>
+ cpy.Match(tree)(transform(selector), transformSub(cases))
+ case CaseDef(pat, guard, body) =>
+ cpy.CaseDef(tree)(transform(pat), transform(guard), transform(body))
case Return(expr, from) =>
- cpy.Return(tree, transform(expr), transformSub(from))
+ cpy.Return(tree)(transform(expr), transformSub(from))
+ case Try(block, handler, finalizer) =>
+ cpy.Try(tree)(transform(block), transform(handler), transform(finalizer))
case Throw(expr) =>
- cpy.Throw(tree, transform(expr))
+ cpy.Throw(tree)(transform(expr))
+ case SeqLiteral(elems) =>
+ cpy.SeqLiteral(tree)(transform(elems))
case TypeTree(original) =>
tree
case SingletonTypeTree(ref) =>
- cpy.SingletonTypeTree(tree, transform(ref))
+ cpy.SingletonTypeTree(tree)(transform(ref))
case SelectFromTypeTree(qualifier, name) =>
- cpy.SelectFromTypeTree(tree, transform(qualifier), name)
+ cpy.SelectFromTypeTree(tree)(transform(qualifier), name)
case AndTypeTree(left, right) =>
- cpy.AndTypeTree(tree, transform(left), transform(right))
+ cpy.AndTypeTree(tree)(transform(left), transform(right))
case OrTypeTree(left, right) =>
- cpy.OrTypeTree(tree, transform(left), transform(right))
+ cpy.OrTypeTree(tree)(transform(left), transform(right))
case RefinedTypeTree(tpt, refinements) =>
- cpy.RefinedTypeTree(tree, transform(tpt), transformSub(refinements))
+ cpy.RefinedTypeTree(tree)(transform(tpt), transformSub(refinements))
case AppliedTypeTree(tpt, args) =>
- cpy.AppliedTypeTree(tree, transform(tpt), transform(args))
+ cpy.AppliedTypeTree(tree)(transform(tpt), transform(args))
case ByNameTypeTree(result) =>
- cpy.ByNameTypeTree(tree, transform(result))
+ cpy.ByNameTypeTree(tree)(transform(result))
case TypeBoundsTree(lo, hi) =>
- cpy.TypeBoundsTree(tree, transform(lo), transform(hi))
+ cpy.TypeBoundsTree(tree)(transform(lo), transform(hi))
case Bind(name, body) =>
- cpy.Bind(tree, name, transform(body))
+ cpy.Bind(tree)(name, transform(body))
case Alternative(trees) =>
- cpy.Alternative(tree, transform(trees))
+ cpy.Alternative(tree)(transform(trees))
case UnApply(fun, implicits, patterns) =>
- cpy.UnApply(tree, transform(fun), transform(implicits), transform(patterns))
+ cpy.UnApply(tree)(transform(fun), transform(implicits), transform(patterns))
case EmptyValDef =>
tree
case ValDef(mods, name, tpt, rhs) =>
- cpy.ValDef(tree, mods, name, transform(tpt), transform(rhs))
+ cpy.ValDef(tree)(mods, name, transform(tpt), transform(rhs))
case DefDef(mods, name, tparams, vparamss, tpt, rhs) =>
- cpy.DefDef(tree, mods, name, transformSub(tparams), vparamss mapConserve (transformSub(_)), transform(tpt), transform(rhs))
+ cpy.DefDef(tree)(mods, name, transformSub(tparams), vparamss mapConserve (transformSub(_)), transform(tpt), transform(rhs))
case tree @ TypeDef(mods, name, rhs) =>
- cpy.TypeDef(tree, mods, name, transform(rhs), tree.tparams)
+ cpy.TypeDef(tree)(mods, name, transform(rhs), tree.tparams)
case Template(constr, parents, self, body) =>
- cpy.Template(tree, transformSub(constr), transform(parents), transformSub(self), transformStats(body))
+ cpy.Template(tree)(transformSub(constr), transform(parents), transformSub(self), transformStats(body))
case Import(expr, selectors) =>
- cpy.Import(tree, transform(expr), selectors)
+ cpy.Import(tree)(transform(expr), selectors)
case PackageDef(pid, stats) =>
- cpy.PackageDef(tree, transformSub(pid), transformStats(stats))
+ cpy.PackageDef(tree)(transformSub(pid), transformStats(stats))
+ case Annotated(annot, arg) =>
+ cpy.Annotated(tree)(transform(annot), transform(arg))
case Thicket(trees) =>
val trees1 = transform(trees)
if (trees1 eq trees) tree else Thicket(trees1)
- case Literal(const) =>
- tree
- case Pair(left, right) =>
- cpy.Pair(tree, transform(left), transform(right))
- case Block(stats, expr) =>
- cpy.Block(tree, transformStats(stats), transform(expr))
- case If(cond, thenp, elsep) =>
- cpy.If(tree, transform(cond), transform(thenp), transform(elsep))
- case Match(selector, cases) =>
- cpy.Match(tree, transform(selector), transformSub(cases))
- case CaseDef(pat, guard, body) =>
- cpy.CaseDef(tree, transform(pat), transform(guard), transform(body))
- case Try(block, handler, finalizer) =>
- cpy.Try(tree, transform(block), transform(handler), transform(finalizer))
- case SeqLiteral(elems) =>
- cpy.SeqLiteral(tree, transform(elems))
- case Annotated(annot, arg) =>
- cpy.Annotated(tree, transform(annot), transform(arg))
}
def transformStats(trees: List[Tree])(implicit ctx: Context): List[Tree] =