diff options
author | Paul Phillips <paulp@improving.org> | 2009-09-22 17:53:19 +0000 |
---|---|---|
committer | Paul Phillips <paulp@improving.org> | 2009-09-22 17:53:19 +0000 |
commit | 4d8093722af1ada1842b189fcba8da99f8f7d92f (patch) | |
tree | 777252d67f74a6bf05d7d0fc8d544506418c466e /src | |
parent | 3a98614bd1e5507d03bbaf7fa274d874ba63c0af (diff) | |
download | scala-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.
Diffstat (limited to 'src')
-rw-r--r-- | src/compiler/scala/tools/nsc/symtab/Definitions.scala | 7 | ||||
-rw-r--r-- | src/compiler/scala/tools/nsc/symtab/StdNames.scala | 25 | ||||
-rw-r--r-- | src/library/scala/runtime/BoxesRunTime.java | 207 |
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 */ |