diff options
author | Paul Phillips <paulp@improving.org> | 2011-05-19 18:08:15 +0000 |
---|---|---|
committer | Paul Phillips <paulp@improving.org> | 2011-05-19 18:08:15 +0000 |
commit | ccceeeb179c4d60155b6c5c9a96c8497ce25398f (patch) | |
tree | 69ed00ab743146cb9a5f406e020b323b7c71acb6 /src | |
parent | 63735b31ef24092bec5aa117e45ff582fab82dc8 (diff) | |
download | scala-ccceeeb179c4d60155b6c5c9a96c8497ce25398f.tar.gz scala-ccceeeb179c4d60155b6c5c9a96c8497ce25398f.tar.bz2 scala-ccceeeb179c4d60155b6c5c9a96c8497ce25398f.zip |
Apparent assumption that Literal(0) would be ad...
Apparent assumption that Literal(0) would be adapted to Literal(0.0f) as
necessary mercilessly invalidated. Fixed mkZero to account for all types
explicitly. Closes #4617, no review.
Diffstat (limited to 'src')
-rw-r--r-- | src/compiler/scala/reflect/internal/TreeGen.scala | 22 |
1 files changed, 14 insertions, 8 deletions
diff --git a/src/compiler/scala/reflect/internal/TreeGen.scala b/src/compiler/scala/reflect/internal/TreeGen.scala index d2e09aeaca..faf793527e 100644 --- a/src/compiler/scala/reflect/internal/TreeGen.scala +++ b/src/compiler/scala/reflect/internal/TreeGen.scala @@ -206,14 +206,20 @@ abstract class TreeGen { * which is appropriate to the given Type. */ def mkZero(tp: Type): Tree = { - val sym = tp.typeSymbol - val tree = - if (sym == UnitClass) Literal(()) - else if (sym == BooleanClass) Literal(false) - else if (isValueClass(sym)) Literal(0) - else if (NullClass.tpe <:< tp) Literal(null: Any) - else abort("Cannot determine zero for " + tp) - + val tree = tp.typeSymbol match { + case UnitClass => Literal(()) + case BooleanClass => Literal(false) + case FloatClass => Literal(0.0f) + case DoubleClass => Literal(0.0d) + case ByteClass => Literal(0.toByte) + case ShortClass => Literal(0.toShort) + case IntClass => Literal(0) + case LongClass => Literal(0L) + case CharClass => Literal(0.toChar) + case _ => + if (NullClass.tpe <:< tp) Literal(null: Any) + else abort("Cannot determine zero for " + tp) + } tree setType tp } |