From 68e734d000dfbea805c752a20c473121039a8c97 Mon Sep 17 00:00:00 2001 From: paltherr Date: Fri, 14 Mar 2003 10:26:55 +0000 Subject: - Fixed erasure of new arrays --- sources/scalac/transformer/Erasure.java | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) (limited to 'sources') 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); -- cgit v1.2.3