summaryrefslogtreecommitdiff
path: root/src/compiler/scala/tools/nsc/transform/TypingTransformers.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2006-07-12 16:28:49 +0000
committerMartin Odersky <odersky@gmail.com>2006-07-12 16:28:49 +0000
commitcc8ee691afc9d18f2f7ea3e1b5e881fb0feb9149 (patch)
tree15227bb939ed37ee09c0904cfb5e6c5d47b59a92 /src/compiler/scala/tools/nsc/transform/TypingTransformers.scala
parentbafe0251286459b2b2259eba1a7d6dabf1c41f72 (diff)
downloadscala-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.scala40
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)
+ }
+ }
+ }
+}
+