summaryrefslogtreecommitdiff
path: root/sources
diff options
context:
space:
mode:
authorpaltherr <paltherr@epfl.ch>2003-09-03 08:17:19 +0000
committerpaltherr <paltherr@epfl.ch>2003-09-03 08:17:19 +0000
commit7e8423ed479be6a71f5ba9a59143757cc8f284d1 (patch)
tree61df3acc47dbc0ff11fbf91463734b6b02b5f636 /sources
parentd1746306e487c16ebfeb14d2c7b600004b49a870 (diff)
downloadscala-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')
-rw-r--r--sources/scalac/transformer/Erasure.java9
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(