diff options
-rw-r--r-- | src/library/scala/math/ScalaNumericConversions.scala | 15 | ||||
-rw-r--r-- | src/library/scala/runtime/ScalaNumberProxy.scala | 6 | ||||
-rw-r--r-- | test/files/pos/t6600.scala | 8 |
3 files changed, 23 insertions, 6 deletions
diff --git a/src/library/scala/math/ScalaNumericConversions.scala b/src/library/scala/math/ScalaNumericConversions.scala index edf243e5df..08c4118b00 100644 --- a/src/library/scala/math/ScalaNumericConversions.scala +++ b/src/library/scala/math/ScalaNumericConversions.scala @@ -10,15 +10,22 @@ package scala.math import java.{ lang => jl } +/** A slightly more specific conversion trait for classes which + * extend ScalaNumber (which excludes value classes.) + */ +trait ScalaNumericConversions extends ScalaNumber with ScalaNumericAnyConversions { + def underlying(): Object +} + /** Conversions which present a consistent conversion interface - * across all the numeric types. + * across all the numeric types, suitable for use in value classes. */ -trait ScalaNumericConversions extends Any { +trait ScalaNumericAnyConversions extends Any { def isWhole(): Boolean def underlying(): Any - def byteValue(): Byte = intValue().toByte - def shortValue(): Short = intValue().toShort + def byteValue(): Byte + def shortValue(): Short def intValue(): Int def longValue(): Long def floatValue(): Float diff --git a/src/library/scala/runtime/ScalaNumberProxy.scala b/src/library/scala/runtime/ScalaNumberProxy.scala index df2d209e3e..e461783423 100644 --- a/src/library/scala/runtime/ScalaNumberProxy.scala +++ b/src/library/scala/runtime/ScalaNumberProxy.scala @@ -9,7 +9,7 @@ package scala.runtime import scala.collection.{ mutable, immutable } -import scala.math.ScalaNumericConversions +import scala.math.{ ScalaNumericConversions, ScalaNumericAnyConversions } import immutable.NumericRange import Proxy.Typed @@ -20,7 +20,7 @@ import Proxy.Typed * @version 2.9 * @since 2.9 */ -trait ScalaNumberProxy[T] extends Any with ScalaNumericConversions with Typed[T] with OrderedProxy[T] { +trait ScalaNumberProxy[T] extends Any with ScalaNumericAnyConversions with Typed[T] with OrderedProxy[T] { protected implicit def num: Numeric[T] def underlying() = self.asInstanceOf[AnyRef] @@ -28,6 +28,8 @@ trait ScalaNumberProxy[T] extends Any with ScalaNumericConversions with Typed[T] def floatValue() = num.toFloat(self) def longValue() = num.toLong(self) def intValue() = num.toInt(self) + def byteValue() = intValue.toByte + def shortValue() = intValue.toShort def min(that: T): T = num.min(self, that) def max(that: T): T = num.max(self, that) diff --git a/test/files/pos/t6600.scala b/test/files/pos/t6600.scala new file mode 100644 index 0000000000..1e8137894c --- /dev/null +++ b/test/files/pos/t6600.scala @@ -0,0 +1,8 @@ +final class Natural extends scala.math.ScalaNumber with scala.math.ScalaNumericConversions { + def intValue(): Int = 0 + def longValue(): Long = 0L + def floatValue(): Float = 0.0F + def doubleValue(): Double = 0.0D + def isWhole(): Boolean = false + def underlying() = this +} |