diff options
author | Martin Odersky <odersky@gmail.com> | 2014-07-01 14:43:18 +0200 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2014-07-17 11:01:59 +0200 |
commit | 3ab2784948d084557e88cd7eb5c55a29613742d0 (patch) | |
tree | 62ce5b62fc08afc070e9e705687e9fa05a6e1947 /src/dotty/tools/dotc/transform/MacroTransform.scala | |
parent | 8112a39d3a00f53a68af794d0a83cf995faf31e2 (diff) | |
download | dotty-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.scala | 15 |
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), |