diff options
author | Martin Odersky <odersky@gmail.com> | 2009-11-12 17:22:51 +0000 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2009-11-12 17:22:51 +0000 |
commit | 6599b4dc6081fb4961d07bdb83a1bcd764c59058 (patch) | |
tree | 6e1bf447a0a644491a6420b7dae9d2c2e70084c4 /src/library | |
parent | e7bc7737c72dff381cfc93d2387a66565de1968b (diff) | |
download | scala-6599b4dc6081fb4961d07bdb83a1bcd764c59058.tar.gz scala-6599b4dc6081fb4961d07bdb83a1bcd764c59058.tar.bz2 scala-6599b4dc6081fb4961d07bdb83a1bcd764c59058.zip |
added hooks so that BigInt, BigDecimal can do t...
added hooks so that BigInt, BigDecimal can do the right thign for
equality.
Diffstat (limited to 'src/library')
-rw-r--r-- | src/library/scala/math/BigDecimal.scala | 15 | ||||
-rw-r--r-- | src/library/scala/math/BigInt.scala | 3 | ||||
-rw-r--r-- | src/library/scala/math/ScalaNumber.java | 20 | ||||
-rw-r--r-- | src/library/scala/math/ScalaNumericConversions.scala | 22 | ||||
-rw-r--r-- | src/library/scala/runtime/BoxesRunTime.java | 6 |
5 files changed, 50 insertions, 16 deletions
diff --git a/src/library/scala/math/BigDecimal.scala b/src/library/scala/math/BigDecimal.scala index 677dfa7e17..c379b83abf 100644 --- a/src/library/scala/math/BigDecimal.scala +++ b/src/library/scala/math/BigDecimal.scala @@ -14,19 +14,6 @@ import java.{ lang => jl } import java.math.{ MathContext, BigDecimal => BigDec } import scala.collection.immutable.NumericRange -/** Conversions which present a consistent conversion interface - * across all the numeric types. - */ -trait ScalaNumericConversions extends jl.Number { - def toChar = intValue.toChar - def toByte = byteValue - def toShort = shortValue - def toInt = intValue - def toLong = longValue - def toFloat = floatValue - def toDouble = doubleValue -} - /** * @author Stephane Micheloud * @version 1.0 @@ -164,7 +151,7 @@ object BigDecimal class BigDecimal( val bigDecimal: BigDec, val mc: MathContext) -extends jl.Number with ScalaNumericConversions +extends ScalaNumber with ScalaNumericConversions { def this(bigDecimal: BigDec) = this(bigDecimal, BigDecimal.defaultMathContext) import BigDecimal.RoundingMode._ diff --git a/src/library/scala/math/BigInt.scala b/src/library/scala/math/BigInt.scala index 5415a29489..f1e89f4f53 100644 --- a/src/library/scala/math/BigInt.scala +++ b/src/library/scala/math/BigInt.scala @@ -12,7 +12,6 @@ package scala.math import java.math.BigInteger -import java.{ lang => jl } /** * @author Martin Odersky @@ -110,7 +109,7 @@ object BigInt { * @version 1.0, 15/07/2003 */ @serializable -class BigInt(val bigInteger: BigInteger) extends jl.Number with ScalaNumericConversions +class BigInt(val bigInteger: BigInteger) extends ScalaNumber with ScalaNumericConversions { /** Returns the hash code for this BigInt. */ override def hashCode(): Int = this.bigInteger.hashCode() diff --git a/src/library/scala/math/ScalaNumber.java b/src/library/scala/math/ScalaNumber.java new file mode 100644 index 0000000000..bb54a5d9c0 --- /dev/null +++ b/src/library/scala/math/ScalaNumber.java @@ -0,0 +1,20 @@ +/* __ *\ +** ________ ___ / / ___ Scala API ** +** / __/ __// _ | / / / _ | (c) 2006-2009, LAMP/EPFL ** +** __\ \/ /__/ __ |/ /__/ __ | http://scala-lang.org/ ** +** /____/\___/_/ |_/____/_/ | | ** +** |/ ** +\* */ + +// $Id: ScalaNumber.java 19428 2009-11-06 23:59:26Z extempore $ + + +package scala.math; + +/** A marker class for Number types introduced by Scala + * @author Martin Odersky, Paul Phillips + * @version 2.8 + * @since 2.8 + */ +public abstract class ScalaNumber extends java.lang.Number { +} diff --git a/src/library/scala/math/ScalaNumericConversions.scala b/src/library/scala/math/ScalaNumericConversions.scala new file mode 100644 index 0000000000..53465c7438 --- /dev/null +++ b/src/library/scala/math/ScalaNumericConversions.scala @@ -0,0 +1,22 @@ +/* __ *\ +** ________ ___ / / ___ Scala API ** +** / __/ __// _ | / / / _ | (c) 2007-2009, LAMP/EPFL ** +** __\ \/ /__/ __ |/ /__/ __ | http://scala-lang.org/ ** +** /____/\___/_/ |_/____/_/ | | ** +** |/ ** +\* */ + +package scala.math + +/** Conversions which present a consistent conversion interface + * across all the numeric types. + */ +trait ScalaNumericConversions extends java.lang.Number { + def toChar = intValue.toChar + def toByte = byteValue + def toShort = shortValue + def toInt = intValue + def toLong = longValue + def toFloat = floatValue + def toDouble = doubleValue +} diff --git a/src/library/scala/runtime/BoxesRunTime.java b/src/library/scala/runtime/BoxesRunTime.java index b4252ed647..39ea9abcdd 100644 --- a/src/library/scala/runtime/BoxesRunTime.java +++ b/src/library/scala/runtime/BoxesRunTime.java @@ -12,6 +12,7 @@ package scala.runtime; import java.io.*; +import scala.math.ScalaNumber; /** An object (static class) that defines methods used for creating, * reverting, and calculating with, boxed values. There are four classes @@ -145,6 +146,9 @@ public class BoxesRunTime Number xn = (Number)x; if (y instanceof Number) { Number yn = (Number)y; + if ((y instanceof ScalaNumber) && !(x instanceof ScalaNumber)) { + return y.equals(x); + } if ((xn instanceof Double) || (yn instanceof Double)) return xn.doubleValue() == yn.doubleValue(); if ((xn instanceof Float) || (yn instanceof Float)) @@ -175,6 +179,8 @@ public class BoxesRunTime return x.floatValue() == ch; if (x instanceof Long) return x.longValue() == ch; + if (x instanceof ScalaNumber) + return x.equals(y); return x.intValue() == ch; } |