summaryrefslogtreecommitdiff
path: root/src/reflect/scala/reflect/internal/BuildUtils.scala
diff options
context:
space:
mode:
authorDen Shabalin <den.shabalin@gmail.com>2013-09-05 13:35:42 +0200
committerDen Shabalin <den.shabalin@gmail.com>2013-09-05 20:42:10 +0200
commita455858fc19e47dca10f446df0f61297d0d60276 (patch)
tree002b867b22f973757c76ca70b506451987f6cf73 /src/reflect/scala/reflect/internal/BuildUtils.scala
parent546e94099d667c6395582fcba321ef95578121a5 (diff)
downloadscala-a455858fc19e47dca10f446df0f61297d0d60276.tar.gz
scala-a455858fc19e47dca10f446df0f61297d0d60276.tar.bz2
scala-a455858fc19e47dca10f446df0f61297d0d60276.zip
SI-7723 better support for deconstruction of new expressions
Diffstat (limited to 'src/reflect/scala/reflect/internal/BuildUtils.scala')
-rw-r--r--src/reflect/scala/reflect/internal/BuildUtils.scala15
1 files changed, 15 insertions, 0 deletions
diff --git a/src/reflect/scala/reflect/internal/BuildUtils.scala b/src/reflect/scala/reflect/internal/BuildUtils.scala
index 936ca91c68..eaa4f7cba8 100644
--- a/src/reflect/scala/reflect/internal/BuildUtils.scala
+++ b/src/reflect/scala/reflect/internal/BuildUtils.scala
@@ -343,6 +343,21 @@ trait BuildUtils { self: SymbolTable =>
case _ => None
}
}
+
+ object SyntacticNew extends SyntacticNewExtractor {
+ def apply(earlyDefs: List[Tree], parents: List[Tree], selfdef: ValDef, body: List[Tree]): Tree =
+ gen.mkNew(parents, selfdef, earlyDefs ::: body, NoPosition, NoPosition)
+
+ def unapply(tree: Tree): Option[(List[Tree], List[Tree], ValDef, List[Tree])] = tree match {
+ case SyntacticApplied(Select(New(SyntacticTypeApplied(ident, targs)), nme.CONSTRUCTOR), argss) =>
+ Some((Nil, SyntacticApplied(SyntacticTypeApplied(ident, targs), argss) :: Nil, emptyValDef, Nil))
+ case SyntacticBlock(SyntacticClassDef(_, tpnme.ANON_CLASS_NAME, Nil, _, List(Nil), earlyDefs, parents, selfdef, body) ::
+ Apply(Select(New(Ident(tpnme.ANON_CLASS_NAME)), nme.CONSTRUCTOR), Nil) :: Nil) =>
+ Some((earlyDefs, parents, selfdef, body))
+ case _ =>
+ None
+ }
+ }
}
val build: BuildApi = new BuildImpl