summaryrefslogtreecommitdiff
path: root/src/reflect/scala/reflect/internal/TreeGen.scala
diff options
context:
space:
mode:
authorDen Shabalin <den.shabalin@gmail.com>2013-11-01 17:14:20 +0100
committerDen Shabalin <den.shabalin@gmail.com>2013-11-12 14:04:42 +0100
commitd89bfbbaa4d86cd9ebd2dfd874ae4a3509533df0 (patch)
treea05d81542356dc0e25f3e18d211139095b5bf2b3 /src/reflect/scala/reflect/internal/TreeGen.scala
parentc3e766e0b255f8fc202d027406c7efd76c82b49d (diff)
downloadscala-d89bfbbaa4d86cd9ebd2dfd874ae4a3509533df0.tar.gz
scala-d89bfbbaa4d86cd9ebd2dfd874ae4a3509533df0.tar.bz2
scala-d89bfbbaa4d86cd9ebd2dfd874ae4a3509533df0.zip
change intermidiate representation of for loop enumerators
Encode values into real trees rather than non-tree case classes. This is needed for re-usability of desugaring code between quasiquotes and parser.
Diffstat (limited to 'src/reflect/scala/reflect/internal/TreeGen.scala')
-rw-r--r--src/reflect/scala/reflect/internal/TreeGen.scala23
1 files changed, 16 insertions, 7 deletions
diff --git a/src/reflect/scala/reflect/internal/TreeGen.scala b/src/reflect/scala/reflect/internal/TreeGen.scala
index c87eeea8e0..b75368717f 100644
--- a/src/reflect/scala/reflect/internal/TreeGen.scala
+++ b/src/reflect/scala/reflect/internal/TreeGen.scala
@@ -4,6 +4,7 @@ package internal
import Flags._
import util._
+import scala.collection.mutable.ListBuffer
abstract class TreeGen extends macros.TreeBuilder {
val global: SymbolTable
@@ -311,7 +312,7 @@ abstract class TreeGen extends macros.TreeBuilder {
}
def mkSeqApply(arg: Tree): Apply = {
- val factory = Select(gen.mkAttributedRef(SeqModule), nme.apply)
+ val factory = Select(mkAttributedRef(SeqModule), nme.apply)
Apply(factory, List(arg))
}
@@ -448,17 +449,15 @@ abstract class TreeGen extends macros.TreeBuilder {
else Block(stats.init, stats.last)
def mkTreeOrBlock(stats: List[Tree]) = stats match {
- case Nil => EmptyTree
+ case Nil => EmptyTree
case head :: Nil => head
- case _ => gen.mkBlock(stats)
+ case _ => mkBlock(stats)
}
/** Create a tree representing an assignment <lhs = rhs> */
def mkAssign(lhs: Tree, rhs: Tree): Tree = lhs match {
- case Apply(fn, args) =>
- Apply(atPos(fn.pos)(Select(fn, nme.update)), args :+ rhs)
- case _ =>
- Assign(lhs, rhs)
+ case Apply(fn, args) => Apply(atPos(fn.pos)(Select(fn, nme.update)), args :+ rhs)
+ case _ => Assign(lhs, rhs)
}
def mkPackageObject(defn: ModuleDef, pidPos: Position = NoPosition, pkgPos: Position = NoPosition) = {
@@ -466,4 +465,14 @@ abstract class TreeGen extends macros.TreeBuilder {
val pid = atPos(pidPos)(Ident(defn.name))
atPos(pkgPos)(PackageDef(pid, module :: Nil))
}
+
+ // annotate the expression with @unchecked
+ def mkUnchecked(expr: Tree): Tree = atPos(expr.pos) {
+ // This can't be "Annotated(New(UncheckedClass), expr)" because annotations
+ // are very picky about things and it crashes the compiler with "unexpected new".
+ Annotated(New(scalaDot(tpnme.unchecked), Nil), expr)
+ }
+
+ def mkSyntheticParam(pname: TermName) =
+ ValDef(Modifiers(PARAM | SYNTHETIC), pname, TypeTree(), EmptyTree)
}