diff options
author | paltherr <paltherr@epfl.ch> | 2003-08-26 07:28:35 +0000 |
---|---|---|
committer | paltherr <paltherr@epfl.ch> | 2003-08-26 07:28:35 +0000 |
commit | 24884fed2fc614581c86e147a221d5737506ff29 (patch) | |
tree | 2bb510a1a11af77c150af8a33bb2eb80c2d783b5 /sources/scalac/transformer | |
parent | 904390c6403d9a7798636484af33c2cc537c6b61 (diff) | |
download | scala-24884fed2fc614581c86e147a221d5737506ff29.tar.gz scala-24884fed2fc614581c86e147a221d5737506ff29.tar.bz2 scala-24884fed2fc614581c86e147a221d5737506ff29.zip |
- Added special case for Switch
Diffstat (limited to 'sources/scalac/transformer')
-rw-r--r-- | sources/scalac/transformer/Erasure.java | 19 |
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) { |