summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2009-11-12 17:22:51 +0000
committerMartin Odersky <odersky@gmail.com>2009-11-12 17:22:51 +0000
commit6599b4dc6081fb4961d07bdb83a1bcd764c59058 (patch)
tree6e1bf447a0a644491a6420b7dae9d2c2e70084c4
parente7bc7737c72dff381cfc93d2387a66565de1968b (diff)
downloadscala-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.
-rw-r--r--src/library/scala/math/BigDecimal.scala15
-rw-r--r--src/library/scala/math/BigInt.scala3
-rw-r--r--src/library/scala/math/ScalaNumber.java20
-rw-r--r--src/library/scala/math/ScalaNumericConversions.scala22
-rw-r--r--src/library/scala/runtime/BoxesRunTime.java6
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;
}