diff options
author | paltherr <paltherr@epfl.ch> | 2003-09-03 08:17:19 +0000 |
---|---|---|
committer | paltherr <paltherr@epfl.ch> | 2003-09-03 08:17:19 +0000 |
commit | 7e8423ed479be6a71f5ba9a59143757cc8f284d1 (patch) | |
tree | 61df3acc47dbc0ff11fbf91463734b6b02b5f636 /sources/scalac/transformer | |
parent | d1746306e487c16ebfeb14d2c7b600004b49a870 (diff) | |
download | scala-7e8423ed479be6a71f5ba9a59143757cc8f284d1.tar.gz scala-7e8423ed479be6a71f5ba9a59143757cc8f284d1.tar.bz2 scala-7e8423ed479be6a71f5ba9a59143757cc8f284d1.zip |
- Fixed code generated for asInstanceOf[Array[....
- Fixed code generated for asInstanceOf[Array[...]/Boolean]
Diffstat (limited to 'sources/scalac/transformer')
-rw-r--r-- | sources/scalac/transformer/Erasure.java | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/sources/scalac/transformer/Erasure.java b/sources/scalac/transformer/Erasure.java index 7388f20079..e65e3c4a16 100644 --- a/sources/scalac/transformer/Erasure.java +++ b/sources/scalac/transformer/Erasure.java @@ -423,7 +423,7 @@ public class Erasure extends Transformer implements Modifiers { Symbol sym = fun.symbol(); if (sym == definitions.AS || sym == definitions.IS) { Type tp = args[0].type.erasure(); - if (isUnboxed(tp)) { + if (isUnboxed(tp) && (sym != definitions.IS || (!isUnboxedArray(tp) && !tp.isSameAs(Type.UnboxedType(TypeTags.BOOLEAN))))) { Tree qual1 = transform(getQualifier(currentClass, fun)); if (isUnboxed(qual1.type)) qual1 = box(qual1); Symbol primSym = (sym == definitions.AS) @@ -432,8 +432,7 @@ public class Erasure extends Transformer implements Modifiers { qual1 = coerce(qual1, primSym.owner().type()); return gen.Select(qual1, primSym); } else - return copy.TypeApply(tree, transform(fun), transform(args)) - .setType(owntype); + return copy.TypeApply(tree, transform(fun), tp.isSameAs(Type.UnboxedType(TypeTags.BOOLEAN)) ? args : transform(args)).setType(owntype); } else return transform(fun); @@ -453,6 +452,8 @@ public class Erasure extends Transformer implements Modifiers { case TypeApply(Tree poly, Tree[] targs): if (poly.symbol() == definitions.IS) { isSelectorType = targs[0].type.erasure(); + if (isSelectorType.isSameAs(Type.UnboxedType(TypeTags.BOOLEAN))) + isSelectorType = targs[0].type; isQualTree = poly; } } @@ -474,7 +475,7 @@ public class Erasure extends Transformer implements Modifiers { args1[i] = arg1; } Tree result = coerce(copy.Apply(tree, fun1, args1).setType(restpe), owntype); - if (isUnboxed(isSelectorType)) { + if (isUnboxed(isSelectorType) && !isUnboxedArray(isSelectorType)) { Symbol primSym = primitives.getInstanceTestSymbol(isSelectorType); Symbol ampAmpSym = definitions.AMPAMP(); result = make.Apply( |