diff options
-rw-r--r-- | src/compiler/scala/reflect/internal/TreeGen.scala | 22 | ||||
-rw-r--r-- | test/files/run/bug4617.check | 1 | ||||
-rw-r--r-- | test/files/run/bug4617.scala | 15 |
3 files changed, 30 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 } diff --git a/test/files/run/bug4617.check b/test/files/run/bug4617.check new file mode 100644 index 0000000000..6bbcce30eb --- /dev/null +++ b/test/files/run/bug4617.check @@ -0,0 +1 @@ +Str 8.0 diff --git a/test/files/run/bug4617.scala b/test/files/run/bug4617.scala new file mode 100644 index 0000000000..2fea5e29ec --- /dev/null +++ b/test/files/run/bug4617.scala @@ -0,0 +1,15 @@ +object Test { + def f1 = new { def f { lazy val d = 0d } } + def f2 = { + lazy val d = 4D + lazy val f = 4f + + def bar = "Str " + (d + f) + bar + } + + def main(args: Array[String]): Unit = { + f1 + println(f2) + } +} |