diff options
author | paltherr <paltherr@epfl.ch> | 2003-03-14 10:26:55 +0000 |
---|---|---|
committer | paltherr <paltherr@epfl.ch> | 2003-03-14 10:26:55 +0000 |
commit | 68e734d000dfbea805c752a20c473121039a8c97 (patch) | |
tree | 4c3fef5a1cf9f506af941915e78e3fa603cfa539 /sources/scalac | |
parent | 23f2da861524eb4bbe34429207f171d0e93d9e9c (diff) | |
download | scala-68e734d000dfbea805c752a20c473121039a8c97.tar.gz scala-68e734d000dfbea805c752a20c473121039a8c97.tar.bz2 scala-68e734d000dfbea805c752a20c473121039a8c97.zip |
- Fixed erasure of new arrays
Diffstat (limited to 'sources/scalac')
-rw-r--r-- | sources/scalac/transformer/Erasure.java | 23 |
1 files changed, 13 insertions, 10 deletions
diff --git a/sources/scalac/transformer/Erasure.java b/sources/scalac/transformer/Erasure.java index 62181f920f..552404eaa9 100644 --- a/sources/scalac/transformer/Erasure.java +++ b/sources/scalac/transformer/Erasure.java @@ -378,20 +378,23 @@ public class Erasure extends Transformer implements Modifiers { if (tree.type.symbol() == definitions.UNIT_CLASS) // !!! return Tree.Literal(UNIT, null).setType(owntype); throw Debug.abort("found unit literal"); - switch (owntype) { - case UnboxedArrayType(Type elemtp): - Tree apply = transform(templ.parents[0]); - switch (apply) { + if (tree.type.symbol() == definitions.ARRAY_CLASS) { + switch (templ.parents[0]) { case Apply(_, Tree[] args): - assert args.length == 1; - switch (elemtp) { - case UnboxedType(int kind): - return genNewArray(tree.pos,args[0],kind); + args = transform(args); + switch (owntype) { + case UnboxedArrayType(Type elemtp): + switch (elemtp) { + case UnboxedType(int kind): + return genNewArray(tree.pos,args[0],kind); + default: + return genNewArray(tree.pos,args[0],elemtp); + } default: - return genNewArray(tree.pos,args[0],elemtp); + throw Debug.abort("illegal case", owntype); } default: - throw Debug.abort("illegal case", apply); + throw Debug.abort("illegal case", templ.parents[0]); } } return super.transform(tree).setType(owntype); |