summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorburaq <buraq@epfl.ch>2004-05-17 12:15:53 +0000
committerburaq <buraq@epfl.ch>2004-05-17 12:15:53 +0000
commit4db594575a43d855364ec22b3244a11b0b2ccb21 (patch)
treec6ac3f8c4899512656bae29abb17bd3e8138a24b
parent5ddd74a408df692ed183afbbf6dc89bf02af1942 (diff)
downloadscala-4db594575a43d855364ec22b3244a11b0b2ccb21.tar.gz
scala-4db594575a43d855364ec22b3244a11b0b2ccb21.tar.bz2
scala-4db594575a43d855364ec22b3244a11b0b2ccb21.zip
fixed typos
-rw-r--r--sources/scala/tools/scalac/transformer/TransMatch.scala45
-rw-r--r--sources/scala/tools/scalac/transformer/TransMatchPhase.scala8
2 files changed, 37 insertions, 16 deletions
diff --git a/sources/scala/tools/scalac/transformer/TransMatch.scala b/sources/scala/tools/scalac/transformer/TransMatch.scala
index 5304b68e4b..b541ca8682 100644
--- a/sources/scala/tools/scalac/transformer/TransMatch.scala
+++ b/sources/scala/tools/scalac/transformer/TransMatch.scala
@@ -21,14 +21,13 @@ import scalac.transformer.matching.PartialMatcher ;
import scalac.transformer.matching.PatternMatcher ;
import scalac.transformer.matching.TestRegTraverser ;
import scalac.transformer.matching.AlgebraicMatcher ;
-import scalac.transformer.{ TransMatch$Matcher => scalac_transformer_TransMatch_Matcher }
/** A transformer for expanding match expressions into
* flat sequences of .is and .as method calls
*
* @author Matthias Zenger, Burak Emir
* @version 1.1
*/
-package scalac.tools.transformer {
+package scala.tools.scalac.transformer {
class TransMatch( global:scalac_Global )
extends scalac_transformer_OwnerTransformer( global ) {
@@ -40,21 +39,24 @@ class TransMatch( global:scalac_Global )
super.apply( cunit );
}
- protected def transform( root:Tree, cases:Array[Tree$CaseDef], restpe:Type ):Tree = {
+ def transform( root:Tree, cases:Array[Tree$CaseDef], restpe:Type ):Tree = {
+ if( global.newMatch ) {
+ throw new ApplicationError("not implemented");
+ };
var containsReg = false;
var i = 0;
while (i < cases.length) {
containsReg = TestRegTraverser.apply(cases( i )) || containsReg;
var nilvars:Set = TestRegTraverser.getNilVariables();
if( !nilvars.isEmpty() ) {
- //System.err.println("nilvars present");
val newBody = new Array[Tree]( nilvars.size() );
var j=0;
var it:Iterator = nilvars.iterator();
while( it.hasNext() ) {
val v:Symbol = it.next().asInstanceOf[ Symbol ];
val n = gen.mkNil(cases(i).pos);
- newBody.update( {j = j + 1; j} , gen.ValDef(v, n));
+ newBody( j ) = gen.ValDef(v, n);
+ j = j + 1;
}
cases(i).body = gen.mkBlock( newBody, cases(i).body );
}
@@ -75,26 +77,47 @@ class TransMatch( global:scalac_Global )
pm.toTree();
}
}
+ /** evil hack. OwnerTransformer should have this function */
+ def transform1(ts:Array[Tree$CaseDef]):Array[Tree$CaseDef] = {
+ var i = 0;
+ while( i < ts.length ) {
+ val t = transform(ts( i ));
+ if (t != ts( i )) {
+ val res = new Array[Tree$CaseDef](ts.length);
+ System.arraycopy(ts, 0, res, 0, i);
+ res( i ) = t.asInstanceOf[Tree$CaseDef];
+ i = i + 1;
+ while(i < ts.length) {
+ res( i ) = transform(ts( i )).asInstanceOf[Tree$CaseDef];
+ i = i + 1
+ };
+ return res;
+ };
+ i = i + 1;
+ }
+ return ts;
+ }
override def transform( tree:Tree ):Tree = {
if (tree == null)
- null;
+ return null;
else
tree match {
case Tree$Apply(Tree$Select( receiver, Names.match ), args) =>
if ((args != null) && (args.length == 1))
args( 0 ) match {
case Tree$Visitor( cases ) =>
- transform(transform(receiver), cases, tree.getType());
+ return transform(transform(receiver), transform1(cases), tree.getType());
}
- tree;
+ return tree;
+
case Tree$Apply(Tree$TypeApply(Tree$Select( receiver, Names.match ), targs), args) =>
if ((args != null) && (args.length == 1))
args( 0 ) match {
case Tree$Visitor( cases ) =>
- transform(transform(receiver), cases, tree.getType());
- };
- tree;
+ return transform(transform(receiver), transform1(cases), tree.getType());
+ }
+ return tree;
case _ =>
super.transform(tree);
}
diff --git a/sources/scala/tools/scalac/transformer/TransMatchPhase.scala b/sources/scala/tools/scalac/transformer/TransMatchPhase.scala
index bcf6bca958..092221313c 100644
--- a/sources/scala/tools/scalac/transformer/TransMatchPhase.scala
+++ b/sources/scala/tools/scalac/transformer/TransMatchPhase.scala
@@ -11,20 +11,18 @@ import scalac.Phase;
import scalac.PhaseDescriptor;
import scalac.Unit;
import scalac.checkers._;
-import scalac.transformer.TransMatch ;
package scala.tools.scalac.transformer {
class TransMatchPhase(global:scalac_Global, descriptor:PhaseDescriptor )
extends Phase(global, descriptor) {
-
/** Applies this phase to the given compilation units. */
- def apply( units:Array[Unit] ):unit =
+ def apply( units:Array[Unit] ):unit = {
for(val u <- units) {
- new TransMatch(global).apply( u );
+ new TransMatch( global ).apply( u );
}
-
+ }
override def postCheckers( global:scalac_Global ):Array[Checker] = {
val a = new Array[Checker](2);
a.update(0, new CheckSymbols(global) );