aboutsummaryrefslogtreecommitdiff
path: root/src/dotty/tools/dotc/transform/MacroTransform.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2014-07-01 14:43:18 +0200
committerMartin Odersky <odersky@gmail.com>2014-07-17 11:01:59 +0200
commit3ab2784948d084557e88cd7eb5c55a29613742d0 (patch)
tree62ce5b62fc08afc070e9e705687e9fa05a6e1947 /src/dotty/tools/dotc/transform/MacroTransform.scala
parent8112a39d3a00f53a68af794d0a83cf995faf31e2 (diff)
downloaddotty-3ab2784948d084557e88cd7eb5c55a29613742d0.tar.gz
dotty-3ab2784948d084557e88cd7eb5c55a29613742d0.tar.bz2
dotty-3ab2784948d084557e88cd7eb5c55a29613742d0.zip
Added phase: SuperAccessors
Rewrote SuperAccessors (more to be done; see comments), and added stuff here and there to make it work smoother.
Diffstat (limited to 'src/dotty/tools/dotc/transform/MacroTransform.scala')
-rw-r--r--src/dotty/tools/dotc/transform/MacroTransform.scala15
1 files changed, 11 insertions, 4 deletions
diff --git a/src/dotty/tools/dotc/transform/MacroTransform.scala b/src/dotty/tools/dotc/transform/MacroTransform.scala
index 4113b2d8e..eacbd1717 100644
--- a/src/dotty/tools/dotc/transform/MacroTransform.scala
+++ b/src/dotty/tools/dotc/transform/MacroTransform.scala
@@ -21,9 +21,17 @@ abstract class MacroTransform extends Phase {
unit.tpdTree = newTransformer.transform(unit.tpdTree)
}
- def newTransformer: TransformerMap
+ protected def newTransformer(implicit ctx: Context): Transformer
- class TransformerMap extends TreeMap {
+ class Transformer extends TreeMap {
+
+ protected def localCtx(tree: Tree)(implicit ctx: Context) =
+ ctx.fresh.setTree(tree).setOwner(tree.symbol)
+
+ /** The current enclosing class
+ * @pre We must be inside a class
+ */
+ def currentClass(implicit ctx: Context): ClassSymbol = ctx.owner.enclosingClass.asClass
def transformStats(trees: List[Tree], exprOwner: Symbol)(implicit ctx: Context): List[Tree] = {
val exprCtx = ctx.withOwner(exprOwner)
@@ -36,10 +44,9 @@ abstract class MacroTransform extends Phase {
}
override def transform(tree: Tree)(implicit ctx: Context): Tree = {
- def localCtx = ctx.fresh.setTree(tree).setOwner(tree.symbol)
tree match {
case _: PackageDef | _: MemberDef =>
- super.transform(tree)(localCtx)
+ super.transform(tree)(localCtx(tree))
case Template(constr, parents, self, body) =>
cpy.Template(tree,
transformSub(constr),