diff options
author | Gilles Dubochet <gilles.dubochet@epfl.ch> | 2005-12-19 13:49:03 +0000 |
---|---|---|
committer | Gilles Dubochet <gilles.dubochet@epfl.ch> | 2005-12-19 13:49:03 +0000 |
commit | ac849228490d5a0e2d3f048d649297d5c59b6ade (patch) | |
tree | 6314f2c06f37e67dec5827c3f94e25cf844a085c /src/compiler/scala/tools/nsc/transform/SampleTransform.scala | |
parent | d6c0efe5b4b89a0337f1cdcdabf8c607d81f4ae1 (diff) | |
download | scala-ac849228490d5a0e2d3f048d649297d5c59b6ade.tar.gz scala-ac849228490d5a0e2d3f048d649297d5c59b6ade.tar.bz2 scala-ac849228490d5a0e2d3f048d649297d5c59b6ade.zip |
Switching to the new build system and to the ne...
Switching to the new build system and to the new build system. This is a
MAJOR commit, so be careful when updating.
Diffstat (limited to 'src/compiler/scala/tools/nsc/transform/SampleTransform.scala')
-rw-r--r-- | src/compiler/scala/tools/nsc/transform/SampleTransform.scala | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/src/compiler/scala/tools/nsc/transform/SampleTransform.scala b/src/compiler/scala/tools/nsc/transform/SampleTransform.scala new file mode 100644 index 0000000000..404e03e572 --- /dev/null +++ b/src/compiler/scala/tools/nsc/transform/SampleTransform.scala @@ -0,0 +1,45 @@ +/* NSC -- new scala compiler + * Copyright 2005 LAMP/EPFL + * @author + */ +// $Id$ +package scala.tools.nsc.transform; + +/** A sample transform. + */ +abstract class SampleTransform extends Transform { + // inherits abstract value `global' and class `Phase' from Transform + + import global._; // the global environment + import definitions._; // standard classes and methods + import typer.{typed, atOwner}; // methods to type trees + import posAssigner.atPos; // for filling in tree positions + + /** the following two members override abstract members in Transform */ + val phaseName: String = "sample-phase"; + protected def newTransformer(unit: CompilationUnit): Transformer = new SampleTransformer(unit); + + class SampleTransformer(unit: CompilationUnit) extends Transformer { + + override def transform(tree: Tree): Tree = { + val tree1 = super.transform(tree); // transformers always maintain `currentOwner'. + tree1 match { + case Block(List(), expr) => // a simple optimization + expr + case Block(defs, sup @ Super(qual, mix)) => // A hypthothetic transformation, which replaces + // {super} by {super.sample} + copy.Block( // `copy' is the usual lazy tree copier + tree1, defs, + typed( // `typed' assigns types to its tree argument + atPos(tree1.pos)( // `atPos' fills in position of its tree argument + Select( // The `Select' factory method is defined in class `Trees' + sup, + currentOwner.newValue( // creates a new term symbol owned by `currentowner' + tree1.pos, + newTermName("sample")))))) // The standard term name creator + case _ => + tree1 + } + } + } +} |