summaryrefslogtreecommitdiff
path: root/sources
diff options
context:
space:
mode:
authorpaltherr <paltherr@epfl.ch>2003-08-26 07:28:35 +0000
committerpaltherr <paltherr@epfl.ch>2003-08-26 07:28:35 +0000
commit24884fed2fc614581c86e147a221d5737506ff29 (patch)
tree2bb510a1a11af77c150af8a33bb2eb80c2d783b5 /sources
parent904390c6403d9a7798636484af33c2cc537c6b61 (diff)
downloadscala-24884fed2fc614581c86e147a221d5737506ff29.tar.gz
scala-24884fed2fc614581c86e147a221d5737506ff29.tar.bz2
scala-24884fed2fc614581c86e147a221d5737506ff29.zip
- Added special case for Switch
Diffstat (limited to 'sources')
-rw-r--r--sources/scalac/transformer/Erasure.java19
1 files changed, 18 insertions, 1 deletions
diff --git a/sources/scalac/transformer/Erasure.java b/sources/scalac/transformer/Erasure.java
index c2690a9c67..e0bd2ac922 100644
--- a/sources/scalac/transformer/Erasure.java
+++ b/sources/scalac/transformer/Erasure.java
@@ -375,6 +375,12 @@ public class Erasure extends Transformer implements Modifiers {
Tree elsep1 = (elsep == Tree.Empty) ? elsep : transform(elsep, owntype);
return copy.If(tree, cond1, thenp1, elsep1).setType(owntype);
+ case Switch(Tree test, int[] tags, Tree[] bodies, Tree otherwise):
+ test = transform(test, Type.unboxedType(TypeTags.INT));
+ bodies = transform(bodies, owntype);
+ otherwise = transform(otherwise, owntype);
+ return copy.Switch(tree, test, tags, bodies, otherwise).setType(owntype);
+
case New(Template templ):
if (tree.type.symbol() == definitions.UNIT_CLASS)
// !!! return Tree.Literal(UNIT, null).setType(owntype);
@@ -522,7 +528,6 @@ public class Erasure extends Transformer implements Modifiers {
case This(_):
case Literal(_):
case TypeTerm():
- case Switch(_, _, _, _): // MZ: this this right?
return super.transform(tree).setType(owntype);
case Bad():
@@ -606,6 +611,18 @@ public class Erasure extends Transformer implements Modifiers {
Tree transform(Tree expr, Type pt) {
return coerce(transform(expr), pt);
}
+ Tree[] transform(Tree[] exprs, Type pt) {
+ for (int i = 0; i < exprs.length; i++) {
+ Tree tree = transform(exprs[i], pt);
+ if (tree == exprs[i]) continue;
+ Tree[] trees = new Tree[exprs.length];
+ for (int j = 0; j < i ; j++) trees[j] = exprs[j];
+ trees[i] = tree;
+ while (++i < exprs.length) trees[i] = transform(exprs[i], pt);
+ return trees;
+ }
+ return exprs;
+ }
/** Transform an array length */
Tree transformLength(Tree tree) {