summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Phillips <paulp@improving.org>2009-09-22 17:53:19 +0000
committerPaul Phillips <paulp@improving.org>2009-09-22 17:53:19 +0000
commit4d8093722af1ada1842b189fcba8da99f8f7d92f (patch)
tree777252d67f74a6bf05d7d0fc8d544506418c466e
parent3a98614bd1e5507d03bbaf7fa274d874ba63c0af (diff)
downloadscala-4d8093722af1ada1842b189fcba8da99f8f7d92f.tar.gz
scala-4d8093722af1ada1842b189fcba8da99f8f7d92f.tar.bz2
scala-4d8093722af1ada1842b189fcba8da99f8f7d92f.zip
Support code I need for certain equality strate...
Support code I need for certain equality strategies; it's not called by anything in the mainline as yet.
-rw-r--r--src/compiler/scala/tools/nsc/symtab/Definitions.scala7
-rw-r--r--src/compiler/scala/tools/nsc/symtab/StdNames.scala25
-rw-r--r--src/library/scala/runtime/BoxesRunTime.java207
3 files changed, 228 insertions, 11 deletions
diff --git a/src/compiler/scala/tools/nsc/symtab/Definitions.scala b/src/compiler/scala/tools/nsc/symtab/Definitions.scala
index 6131d145f2..33cf985dcd 100644
--- a/src/compiler/scala/tools/nsc/symtab/Definitions.scala
+++ b/src/compiler/scala/tools/nsc/symtab/Definitions.scala
@@ -364,6 +364,13 @@ trait Definitions {
lazy val BoxedNumberClass = getClass(sn.BoxedNumber)
lazy val BoxedCharacterClass = getClass(sn.BoxedCharacter)
lazy val BoxedBooleanClass = getClass(sn.BoxedBoolean)
+ lazy val BoxedByteClass = getClass("java.lang.Byte")
+ lazy val BoxedShortClass = getClass("java.lang.Short")
+ lazy val BoxedIntClass = getClass("java.lang.Integer")
+ lazy val BoxedLongClass = getClass("java.lang.Long")
+ lazy val BoxedFloatClass = getClass("java.lang.Float")
+ lazy val BoxedDoubleClass = getClass("java.lang.Double")
+
lazy val BoxedUnitClass = getClass("scala.runtime.BoxedUnit")
lazy val BoxedUnitModule = getModule("scala.runtime.BoxedUnit")
def BoxedUnit_UNIT = getMember(BoxedUnitModule, "UNIT")
diff --git a/src/compiler/scala/tools/nsc/symtab/StdNames.scala b/src/compiler/scala/tools/nsc/symtab/StdNames.scala
index fa7f088ef2..867b13b243 100644
--- a/src/compiler/scala/tools/nsc/symtab/StdNames.scala
+++ b/src/compiler/scala/tools/nsc/symtab/StdNames.scala
@@ -448,17 +448,24 @@ trait StdNames {
final val IOOBException = newTermName("java.lang.IndexOutOfBoundsException")
final val BoxedNumber = newTermName("java.lang.Number")
final val BoxedCharacter = newTermName("java.lang.Character")
- final val BoxedBoolean = newTermName("java.lang.Boolean")
+ final val BoxedBoolean = newTermName("java.lang.Boolean")
+ final val BoxedByte = newTermName("java.lang.Byte")
+ final val BoxedShort = newTermName("java.lang.Short")
+ final val BoxedInteger = newTermName("java.lang.Integer")
+ final val BoxedLong = newTermName("java.lang.Long")
+ final val BoxedFloat = newTermName("java.lang.Float")
+ final val BoxedDouble = newTermName("java.lang.Double")
+
final val MethodAsObject = newTermName("java.lang.reflect.Method")
- Boxed += (nme.Boolean -> newTermName("java.lang.Boolean"))
- Boxed += (nme.Byte -> newTermName("java.lang.Byte"))
- Boxed += (nme.Char -> newTermName("java.lang.Character"))
- Boxed += (nme.Short -> newTermName("java.lang.Short"))
- Boxed += (nme.Int -> newTermName("java.lang.Integer"))
- Boxed += (nme.Long -> newTermName("java.lang.Long"))
- Boxed += (nme.Float -> newTermName("java.lang.Float"))
- Boxed += (nme.Double -> newTermName("java.lang.Double"))
+ Boxed += (nme.Boolean -> BoxedBoolean)
+ Boxed += (nme.Byte -> BoxedByte)
+ Boxed += (nme.Char -> BoxedCharacter)
+ Boxed += (nme.Short -> BoxedShort)
+ Boxed += (nme.Int -> BoxedInteger)
+ Boxed += (nme.Long -> BoxedLong)
+ Boxed += (nme.Float -> BoxedFloat)
+ Boxed += (nme.Double -> BoxedDouble)
}
private class MSILNames extends SymbolNames {
diff --git a/src/library/scala/runtime/BoxesRunTime.java b/src/library/scala/runtime/BoxesRunTime.java
index 885022c01c..17a1729467 100644
--- a/src/library/scala/runtime/BoxesRunTime.java
+++ b/src/library/scala/runtime/BoxesRunTime.java
@@ -160,7 +160,211 @@ public class BoxesRunTime
return d == null ? 0.0d : ((Double)d).doubleValue();
}
- /**************************************/
+ /* COMPARISON ... COMPARISON ... COMPARISON ... COMPARISON ... COMPARISON ... COMPARISON */
+
+ /** These methods manually implement "overloading" among boxed primitives.
+ * The compiler is capable of inserting (but does not presently) the specific
+ * equals method based on the statically known types of the boxes.
+ */
+
+ public static boolean equalsCharacterCharacter(Character a, Character b) {
+ if (a == null || b == null) return (Object)a == (Object)b;
+ else return a.charValue() == b.charValue();
+ }
+ public static boolean equalsCharacterByte(Character a, Byte b) {
+ if (a == null || b == null) return (Object)a == (Object)b;
+ else return a.charValue() == b.byteValue();
+ }
+ public static boolean equalsCharacterShort(Character a, Short b) {
+ if (a == null || b == null) return (Object)a == (Object)b;
+ else return a.charValue() == b.shortValue();
+ }
+ public static boolean equalsCharacterInteger(Character a, Integer b) {
+ if (a == null || b == null) return (Object)a == (Object)b;
+ else return a.charValue() == b.intValue();
+ }
+ public static boolean equalsCharacterLong(Character a, Long b) {
+ if (a == null || b == null) return (Object)a == (Object)b;
+ else return a.charValue() == b.longValue();
+ }
+ public static boolean equalsCharacterFloat(Character a, Float b) {
+ if (a == null || b == null) return (Object)a == (Object)b;
+ else return a.charValue() == b.floatValue();
+ }
+ public static boolean equalsCharacterDouble(Character a, Double b) {
+ if (a == null || b == null) return (Object)a == (Object)b;
+ else return a.charValue() == b.doubleValue();
+ }
+ public static boolean equalsByteCharacter(Byte a, Character b) {
+ if (a == null || b == null) return (Object)a == (Object)b;
+ else return a.byteValue() == b.charValue();
+ }
+ public static boolean equalsByteByte(Byte a, Byte b) {
+ if (a == null || b == null) return (Object)a == (Object)b;
+ else return a.byteValue() == b.byteValue();
+ }
+ public static boolean equalsByteShort(Byte a, Short b) {
+ if (a == null || b == null) return (Object)a == (Object)b;
+ else return a.byteValue() == b.shortValue();
+ }
+ public static boolean equalsByteInteger(Byte a, Integer b) {
+ if (a == null || b == null) return (Object)a == (Object)b;
+ else return a.byteValue() == b.intValue();
+ }
+ public static boolean equalsByteLong(Byte a, Long b) {
+ if (a == null || b == null) return (Object)a == (Object)b;
+ else return a.byteValue() == b.longValue();
+ }
+ public static boolean equalsByteFloat(Byte a, Float b) {
+ if (a == null || b == null) return (Object)a == (Object)b;
+ else return a.byteValue() == b.floatValue();
+ }
+ public static boolean equalsByteDouble(Byte a, Double b) {
+ if (a == null || b == null) return (Object)a == (Object)b;
+ else return a.byteValue() == b.doubleValue();
+ }
+ public static boolean equalsShortCharacter(Short a, Character b) {
+ if (a == null || b == null) return (Object)a == (Object)b;
+ else return a.shortValue() == b.charValue();
+ }
+ public static boolean equalsShortByte(Short a, Byte b) {
+ if (a == null || b == null) return (Object)a == (Object)b;
+ else return a.shortValue() == b.byteValue();
+ }
+ public static boolean equalsShortShort(Short a, Short b) {
+ if (a == null || b == null) return (Object)a == (Object)b;
+ else return a.shortValue() == b.shortValue();
+ }
+ public static boolean equalsShortInteger(Short a, Integer b) {
+ if (a == null || b == null) return (Object)a == (Object)b;
+ else return a.shortValue() == b.intValue();
+ }
+ public static boolean equalsShortLong(Short a, Long b) {
+ if (a == null || b == null) return (Object)a == (Object)b;
+ else return a.shortValue() == b.longValue();
+ }
+ public static boolean equalsShortFloat(Short a, Float b) {
+ if (a == null || b == null) return (Object)a == (Object)b;
+ else return a.shortValue() == b.floatValue();
+ }
+ public static boolean equalsShortDouble(Short a, Double b) {
+ if (a == null || b == null) return (Object)a == (Object)b;
+ else return a.shortValue() == b.doubleValue();
+ }
+ public static boolean equalsIntegerCharacter(Integer a, Character b) {
+ if (a == null || b == null) return (Object)a == (Object)b;
+ else return a.intValue() == b.charValue();
+ }
+ public static boolean equalsIntegerByte(Integer a, Byte b) {
+ if (a == null || b == null) return (Object)a == (Object)b;
+ else return a.intValue() == b.byteValue();
+ }
+ public static boolean equalsIntegerShort(Integer a, Short b) {
+ if (a == null || b == null) return (Object)a == (Object)b;
+ else return a.intValue() == b.shortValue();
+ }
+ public static boolean equalsIntegerInteger(Integer a, Integer b) {
+ if (a == null || b == null) return (Object)a == (Object)b;
+ else return a.intValue() == b.intValue();
+ }
+ public static boolean equalsIntegerLong(Integer a, Long b) {
+ if (a == null || b == null) return (Object)a == (Object)b;
+ else return a.intValue() == b.longValue();
+ }
+ public static boolean equalsIntegerFloat(Integer a, Float b) {
+ if (a == null || b == null) return (Object)a == (Object)b;
+ else return a.intValue() == b.floatValue();
+ }
+ public static boolean equalsIntegerDouble(Integer a, Double b) {
+ if (a == null || b == null) return (Object)a == (Object)b;
+ else return a.intValue() == b.doubleValue();
+ }
+ public static boolean equalsLongCharacter(Long a, Character b) {
+ if (a == null || b == null) return (Object)a == (Object)b;
+ else return a.longValue() == b.charValue();
+ }
+ public static boolean equalsLongByte(Long a, Byte b) {
+ if (a == null || b == null) return (Object)a == (Object)b;
+ else return a.longValue() == b.byteValue();
+ }
+ public static boolean equalsLongShort(Long a, Short b) {
+ if (a == null || b == null) return (Object)a == (Object)b;
+ else return a.longValue() == b.shortValue();
+ }
+ public static boolean equalsLongInteger(Long a, Integer b) {
+ if (a == null || b == null) return (Object)a == (Object)b;
+ else return a.longValue() == b.intValue();
+ }
+ public static boolean equalsLongLong(Long a, Long b) {
+ if (a == null || b == null) return (Object)a == (Object)b;
+ else return a.longValue() == b.longValue();
+ }
+ public static boolean equalsLongFloat(Long a, Float b) {
+ if (a == null || b == null) return (Object)a == (Object)b;
+ else return a.longValue() == b.floatValue();
+ }
+ public static boolean equalsLongDouble(Long a, Double b) {
+ if (a == null || b == null) return (Object)a == (Object)b;
+ else return a.longValue() == b.doubleValue();
+ }
+ public static boolean equalsFloatCharacter(Float a, Character b) {
+ if (a == null || b == null) return (Object)a == (Object)b;
+ else return a.floatValue() == b.charValue();
+ }
+ public static boolean equalsFloatByte(Float a, Byte b) {
+ if (a == null || b == null) return (Object)a == (Object)b;
+ else return a.floatValue() == b.byteValue();
+ }
+ public static boolean equalsFloatShort(Float a, Short b) {
+ if (a == null || b == null) return (Object)a == (Object)b;
+ else return a.floatValue() == b.shortValue();
+ }
+ public static boolean equalsFloatInteger(Float a, Integer b) {
+ if (a == null || b == null) return (Object)a == (Object)b;
+ else return a.floatValue() == b.intValue();
+ }
+ public static boolean equalsFloatLong(Float a, Long b) {
+ if (a == null || b == null) return (Object)a == (Object)b;
+ else return a.floatValue() == b.longValue();
+ }
+ public static boolean equalsFloatFloat(Float a, Float b) {
+ if (a == null || b == null) return (Object)a == (Object)b;
+ else return a.floatValue() == b.floatValue();
+ }
+ public static boolean equalsFloatDouble(Float a, Double b) {
+ if (a == null || b == null) return (Object)a == (Object)b;
+ else return a.floatValue() == b.doubleValue();
+ }
+ public static boolean equalsDoubleCharacter(Double a, Character b) {
+ if (a == null || b == null) return (Object)a == (Object)b;
+ else return a.doubleValue() == b.charValue();
+ }
+ public static boolean equalsDoubleByte(Double a, Byte b) {
+ if (a == null || b == null) return (Object)a == (Object)b;
+ else return a.doubleValue() == b.byteValue();
+ }
+ public static boolean equalsDoubleShort(Double a, Short b) {
+ if (a == null || b == null) return (Object)a == (Object)b;
+ else return a.doubleValue() == b.shortValue();
+ }
+ public static boolean equalsDoubleInteger(Double a, Integer b) {
+ if (a == null || b == null) return (Object)a == (Object)b;
+ else return a.doubleValue() == b.intValue();
+ }
+ public static boolean equalsDoubleLong(Double a, Long b) {
+ if (a == null || b == null) return (Object)a == (Object)b;
+ else return a.doubleValue() == b.longValue();
+ }
+ public static boolean equalsDoubleFloat(Double a, Float b) {
+ if (a == null || b == null) return (Object)a == (Object)b;
+ else return a.doubleValue() == b.floatValue();
+ }
+ public static boolean equalsDoubleDouble(Double a, Double b) {
+ if (a == null || b == null) return (Object)a == (Object)b;
+ else return a.doubleValue() == b.doubleValue();
+ }
+
+ /** The current equals method, whose logic is under review. **/
public static boolean equals(Object a, Object b) {
if ((a instanceof Number || a instanceof Character) && (b instanceof Number || b instanceof Character)) {
@@ -211,7 +415,6 @@ public class BoxesRunTime
return false;
}
-
/* OPERATORS ... OPERATORS ... OPERATORS ... OPERATORS ... OPERATORS ... OPERATORS ... OPERATORS ... OPERATORS */
/** arg1 + arg2 */