summaryrefslogtreecommitdiff
path: root/sources
diff options
context:
space:
mode:
authorBurak Emir <emir@epfl.ch>2005-12-01 09:24:05 +0000
committerBurak Emir <emir@epfl.ch>2005-12-01 09:24:05 +0000
commit0be4dbe484e400d4c53a97f4419b77b93bb487b1 (patch)
treecb97c0c4061ef301f65c18d5ec625e6e40aebaae /sources
parentd0b1b0f44ef8ff6b679fbff2b820d444eef136cf (diff)
downloadscala-0be4dbe484e400d4c53a97f4419b77b93bb487b1.tar.gz
scala-0be4dbe484e400d4c53a97f4419b77b93bb487b1.tar.bz2
scala-0be4dbe484e400d4c53a97f4419b77b93bb487b1.zip
test code generating forward jumps
Diffstat (limited to 'sources')
-rw-r--r--sources/scala/tools/nsc/matching/TransMatcher.scala47
1 files changed, 33 insertions, 14 deletions
diff --git a/sources/scala/tools/nsc/matching/TransMatcher.scala b/sources/scala/tools/nsc/matching/TransMatcher.scala
index b811385ed3..bca478b0dc 100644
--- a/sources/scala/tools/nsc/matching/TransMatcher.scala
+++ b/sources/scala/tools/nsc/matching/TransMatcher.scala
@@ -252,28 +252,47 @@ with RightTracers {
}
}
override def transform(tree: Tree): Tree = tree match {
+ /* // test code to generate forward jumps
+ case Match(selector, CaseDef(Ident(nme.WILDCARD), EmptyTree, exp)::Nil) => // inserting test-code
+
+ val target1 = currentOwner.newLabel(tree.pos, "target1")
+ .setInfo(new MethodType(List(definitions.IntClass.tpe), definitions.IntClass.tpe));
+
+ val a = currentOwner.newValue(tree.pos, "a").setInfo(definitions.IntClass.tpe);
+ val x = currentOwner.newValueParameter(tree.pos, "x").setInfo(definitions.IntClass.tpe);
+ val y = currentOwner.newValueParameter(tree.pos, "y").setInfo(definitions.IntClass.tpe);
+ val target2 = currentOwner.newLabel(tree.pos, "target2")
+ .setInfo(new MethodType(List(definitions.IntClass.tpe, definitions.IntClass.tpe), definitions.IntClass.tpe));
+
+ val z = currentOwner.newValueParameter(tree.pos, "z").setInfo(definitions.IntClass.tpe);
+ typed { atPos(tree.pos) { Block(
+ List(
+ Apply(Ident(target2), List(Literal(Constant(1)),Literal(Constant(2)))),
+ LabelDef(target1, List(x), exp)),
+ LabelDef(target2, List(y,z), Apply(Select(Ident(y), nme.PLUS), List(Ident(z))))
+ )}};
+*/
+
case Match(selector, cases) =>
val nselector = transform(selector).setType(selector.tpe);
val ncases = cases map { transform };
- /*
- Console.println("TransMatch translating cases: ");
- for(val t <- cases) {
- Console.println(t.pat.toString());
- Console.println("BODY "+t.body.toString());
- }
- */
+/*
+ Console.println("TransMatch translating cases: ");
+ for(val t <- cases) {
+ Console.println(t.pat.toString());
+ Console.println("BODY "+t.body.toString());
+ }
+*/
// @todo: remove from partial matcher
TransMatcher.this.currentOwner = currentOwner;
TransMatcher.this.resultType = tree.tpe;
+ //Console.println("TransMatcher currentOwner ="+currentOwner+")");
//Console.println("TransMatcher selector.tpe ="+selector.tpe+")");
//Console.println("TransMatcher resultType ="+resultType+")");
- val t =
- typed {
- atPos(tree.pos) {
- handle(nselector, ncases.asInstanceOf[List[CaseDef]])
- }
- }
- //Console.println(t.toString());
+ val t_untyped = handle(nselector, ncases.asInstanceOf[List[CaseDef]]);
+ //Console.println("t_untyped "+t_untyped.toString());
+ val t = typed { atPos(tree.pos) (t_untyped) };
+ //Console.println("t typed "+t.toString());
t
case _ =>
super.transform(tree);