diff options
author | Martin Odersky <odersky@gmail.com> | 2006-07-12 16:28:49 +0000 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2006-07-12 16:28:49 +0000 |
commit | cc8ee691afc9d18f2f7ea3e1b5e881fb0feb9149 (patch) | |
tree | 15227bb939ed37ee09c0904cfb5e6c5d47b59a92 /src/compiler/scala/tools/nsc/transform/TypingTransformers.scala | |
parent | bafe0251286459b2b2259eba1a7d6dabf1c41f72 (diff) | |
download | scala-cc8ee691afc9d18f2f7ea3e1b5e881fb0feb9149.tar.gz scala-cc8ee691afc9d18f2f7ea3e1b5e881fb0feb9149.tar.bz2 scala-cc8ee691afc9d18f2f7ea3e1b5e881fb0feb9149.zip |
Added typing tree transformer framework
Diffstat (limited to 'src/compiler/scala/tools/nsc/transform/TypingTransformers.scala')
-rw-r--r-- | src/compiler/scala/tools/nsc/transform/TypingTransformers.scala | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/src/compiler/scala/tools/nsc/transform/TypingTransformers.scala b/src/compiler/scala/tools/nsc/transform/TypingTransformers.scala new file mode 100644 index 0000000000..99337f9db9 --- /dev/null +++ b/src/compiler/scala/tools/nsc/transform/TypingTransformers.scala @@ -0,0 +1,40 @@ +/* NSC -- new scala compiler + * Copyright 2005 LAMP/EPFL + * @author + */ +// $Id: TypingTransformers.scala 5359 2005-12-16 15:33:49Z dubochet $ +package scala.tools.nsc.transform; + +/** A base class for transforms. + * A transform contains a compiler phase which applies a tree transformer. + */ +trait TypingTransformers { + + val global: Global + import global._ + + abstract class TypingTransformer(unit: CompilationUnit) extends Transformer { + var localTyper: analyzer.Typer = analyzer.newTyper(analyzer.rootContext(unit)) + private var curTree: Tree = _ + + override def atOwner[A](owner: Symbol)(trans: => A): A = { + val savedLocalTyper = localTyper + localTyper = localTyper.atOwner(curTree, owner) + val result = super.atOwner(owner)(trans) + localTyper = savedLocalTyper + result + } + + override def transform(tree: Tree): Tree = { + curTree = tree + tree match { + case Template(_, _) => + // enter template into context chain + atOwner(currentOwner) { super.transform(tree) } + case _ => + super.transform(tree) + } + } + } +} + |