summaryrefslogtreecommitdiff
path: root/sources/scalac
diff options
context:
space:
mode:
authormihaylov <mihaylov@epfl.ch>2004-07-20 16:30:42 +0000
committermihaylov <mihaylov@epfl.ch>2004-07-20 16:30:42 +0000
commitf2db31c140249a38858fb70607b774f5315598a5 (patch)
treef8cf2de92c0e855dd5af6b7b9c8851ee834cb7cc /sources/scalac
parentba6a39aa670d7c53922330217a658e84e13538c1 (diff)
downloadscala-f2db31c140249a38858fb70607b774f5315598a5.tar.gz
scala-f2db31c140249a38858fb70607b774f5315598a5.tar.bz2
scala-f2db31c140249a38858fb70607b774f5315598a5.zip
- For the value types, do not consider the ==(O...
- For the value types, do not consider the ==(Object) method as primitive
Diffstat (limited to 'sources/scalac')
-rw-r--r--sources/scalac/backend/Primitives.java73
1 files changed, 57 insertions, 16 deletions
diff --git a/sources/scalac/backend/Primitives.java b/sources/scalac/backend/Primitives.java
index 845c33fd72..ccb5f7a251 100644
--- a/sources/scalac/backend/Primitives.java
+++ b/sources/scalac/backend/Primitives.java
@@ -484,8 +484,10 @@ public class Primitives {
// !!! addAll(defs.UNIT_CLASS, Names.ADD, Primitive.CONCAT, 1);
// scala.Boolean
- addAll(defs.BOOLEAN_CLASS, Names.EQ, Primitive.EQ, 2);
- addAll(defs.BOOLEAN_CLASS, Names.NE, Primitive.NE, 2);
+ //addAll(defs.BOOLEAN_CLASS, Names.EQ, Primitive.EQ, 2);
+ addAllPrimitive(defs.BOOLEAN_CLASS, Names.EQ, Primitive.EQ, 1);
+ //addAll(defs.BOOLEAN_CLASS, Names.NE, Primitive.NE, 2);
+ addAllPrimitive(defs.BOOLEAN_CLASS, Names.NE, Primitive.NE, 1);
addAll(defs.BOOLEAN_CLASS, Names.equals, Primitive.EQUALS, 1);
addAll(defs.BOOLEAN_CLASS, Names.hashCode, Primitive.HASHCODE, 1);
addAll(defs.BOOLEAN_CLASS, Names.toString, Primitive.TOSTRING, 1);
@@ -499,8 +501,10 @@ public class Primitives {
// scala.Byte
addAll(defs.BYTE_CLASS, Names.coerce, Primitive.COERCE, 5);
- addAll(defs.BYTE_CLASS, Names.EQ, Primitive.EQ, 5);
- addAll(defs.BYTE_CLASS, Names.NE, Primitive.NE, 5);
+ //addAll(defs.BYTE_CLASS, Names.EQ, Primitive.EQ, 5);
+ addAllPrimitive(defs.BYTE_CLASS, Names.EQ, Primitive.EQ, 4);
+ //addAll(defs.BYTE_CLASS, Names.NE, Primitive.NE, 5);
+ addAllPrimitive(defs.BYTE_CLASS, Names.NE, Primitive.NE, 4);
//addAll(defs.BYTE_CLASS, Names.equals, Primitive.EQUALS, 1);
addAll(defs.BYTE_CLASS, Names.hashCode, Primitive.HASHCODE, 1);
addAll(defs.BYTE_CLASS, Names.toString, Primitive.TOSTRING, 1);
@@ -523,8 +527,10 @@ public class Primitives {
// scala.Short
addAll(defs.SHORT_CLASS, Names.coerce, Primitive.COERCE, 4);
- addAll(defs.SHORT_CLASS, Names.EQ, Primitive.EQ, 5);
- addAll(defs.SHORT_CLASS, Names.NE, Primitive.NE, 5);
+ //addAll(defs.SHORT_CLASS, Names.EQ, Primitive.EQ, 5);
+ addAllPrimitive(defs.SHORT_CLASS, Names.EQ, Primitive.EQ, 4);
+ //addAll(defs.SHORT_CLASS, Names.NE, Primitive.NE, 5);
+ addAllPrimitive(defs.SHORT_CLASS, Names.NE, Primitive.NE, 4);
//addAll(defs.SHORT_CLASS, Names.equals, Primitive.EQUALS, 1);
addAll(defs.SHORT_CLASS, Names.hashCode, Primitive.HASHCODE, 1);
addAll(defs.SHORT_CLASS, Names.toString, Primitive.TOSTRING, 1);
@@ -547,8 +553,10 @@ public class Primitives {
// scala.Char
addAll(defs.CHAR_CLASS, Names.coerce, Primitive.COERCE, 4);
- addAll(defs.CHAR_CLASS, Names.EQ, Primitive.EQ, 5);
- addAll(defs.CHAR_CLASS, Names.NE, Primitive.NE, 5);
+ //addAll(defs.CHAR_CLASS, Names.EQ, Primitive.EQ, 5);
+ addAllPrimitive(defs.CHAR_CLASS, Names.EQ, Primitive.EQ, 4);
+ //addAll(defs.CHAR_CLASS, Names.NE, Primitive.NE, 5);
+ addAllPrimitive(defs.CHAR_CLASS, Names.NE, Primitive.NE, 4);
//addAll(defs.CHAR_CLASS, Names.equals, Primitive.EQUALS, 1);
addAll(defs.CHAR_CLASS, Names.hashCode, Primitive.HASHCODE, 1);
addAll(defs.CHAR_CLASS, Names.toString, Primitive.TOSTRING, 1);
@@ -571,8 +579,10 @@ public class Primitives {
// scala.Int
addAll(defs.INT_CLASS, Names.coerce, Primitive.COERCE, 3);
- addAll(defs.INT_CLASS, Names.EQ, Primitive.EQ, 5);
- addAll(defs.INT_CLASS, Names.NE, Primitive.NE, 5);
+ //addAll(defs.INT_CLASS, Names.EQ, Primitive.EQ, 5);
+ addAllPrimitive(defs.INT_CLASS, Names.EQ, Primitive.EQ, 4);
+ //addAll(defs.INT_CLASS, Names.NE, Primitive.NE, 5);
+ addAllPrimitive(defs.INT_CLASS, Names.NE, Primitive.NE, 4);
//addAll(defs.INT_CLASS, Names.equals, Primitive.EQUALS, 1);
addAll(defs.INT_CLASS, Names.hashCode, Primitive.HASHCODE, 1);
addAll(defs.INT_CLASS, Names.toString, Primitive.TOSTRING, 1);
@@ -595,8 +605,10 @@ public class Primitives {
// scala.Long
addAll(defs.LONG_CLASS, Names.coerce, Primitive.COERCE, 2);
- addAll(defs.LONG_CLASS, Names.EQ, Primitive.EQ, 4);
- addAll(defs.LONG_CLASS, Names.NE, Primitive.NE, 4);
+ //addAll(defs.LONG_CLASS, Names.EQ, Primitive.EQ, 4);
+ addAllPrimitive(defs.LONG_CLASS, Names.EQ, Primitive.EQ, 3);
+ //addAll(defs.LONG_CLASS, Names.NE, Primitive.NE, 4);
+ addAllPrimitive(defs.LONG_CLASS, Names.NE, Primitive.NE, 3);
//addAll(defs.LONG_CLASS, Names.equals, Primitive.EQUALS, 1);
addAll(defs.LONG_CLASS, Names.hashCode, Primitive.HASHCODE, 1);
addAll(defs.LONG_CLASS, Names.toString, Primitive.TOSTRING, 1);
@@ -619,8 +631,10 @@ public class Primitives {
// scala.Float
addAll(defs.FLOAT_CLASS, Names.coerce, Primitive.COERCE, 1);
- addAll(defs.FLOAT_CLASS, Names.EQ, Primitive.EQ, 3);
- addAll(defs.FLOAT_CLASS, Names.NE, Primitive.NE, 3);
+ //addAll(defs.FLOAT_CLASS, Names.EQ, Primitive.EQ, 3);
+ addAllPrimitive(defs.FLOAT_CLASS, Names.EQ, Primitive.EQ, 2);
+ //addAll(defs.FLOAT_CLASS, Names.NE, Primitive.NE, 3);
+ addAllPrimitive(defs.FLOAT_CLASS, Names.NE, Primitive.NE, 2);
//addAll(defs.FLOAT_CLASS, Names.equals, Primitive.EQUALS, 1);
addAll(defs.FLOAT_CLASS, Names.hashCode, Primitive.HASHCODE, 1);
addAll(defs.FLOAT_CLASS, Names.toString, Primitive.TOSTRING, 1);
@@ -635,8 +649,10 @@ public class Primitives {
addAll(defs.FLOAT_CLASS, Names.GE, Primitive.GE, 2);
// scala.Double
- addAll(defs.DOUBLE_CLASS, Names.EQ, Primitive.EQ, 2);
- addAll(defs.DOUBLE_CLASS, Names.NE, Primitive.NE, 2);
+ //addAll(defs.DOUBLE_CLASS, Names.EQ, Primitive.EQ, 2);
+ addAllPrimitive(defs.DOUBLE_CLASS, Names.EQ, Primitive.EQ, 1);
+ //addAll(defs.DOUBLE_CLASS, Names.NE, Primitive.NE, 2);
+ addAllPrimitive(defs.DOUBLE_CLASS, Names.NE, Primitive.NE, 1);
//addAll(defs.DOUBLE_CLASS, Names.equals, Primitive.EQUALS, 1);
addAll(defs.DOUBLE_CLASS, Names.hashCode, Primitive.HASHCODE, 1);
addAll(defs.DOUBLE_CLASS, Names.toString, Primitive.TOSTRING, 1);
@@ -860,6 +876,31 @@ public class Primitives {
for (int i = 0; i < alts.length; i++) addPrimitive(alts[i], primitive);
}
+ private void addAllPrimitive(Symbol clasz, Name name, Primitive primitive, int count) {
+ Symbol symbol = clasz.lookup(name);
+ assert symbol != Symbol.NONE : Debug.show(clasz) + "." + name;
+ Symbol[] alts = symbol.alternativeSymbols();
+ int cnt = 0;
+ loop:
+ for (int i = 0; i < alts.length; i++) {
+ switch (alts[i].info()) {
+ case MethodType(Symbol[] vparams, _):
+ for (int j = 0; j < vparams.length; j++) {
+ if (!isValueType(vparams[j].info()))
+ continue loop;
+ }
+ addPrimitive(alts[i], primitive);
+ cnt++;
+ break;
+ }
+ }
+ assert cnt == count : "" + cnt + " != " + count;
+ }
+
+ private boolean isValueType(Type t) {
+ return t.isSubType(definitions.ANYVAL_TYPE());
+ }
+
private void addPrimitive(Symbol symbol, Primitive primitive) {
assert !primitives.containsKey(symbol) : Debug.show(symbol);
primitives.put(symbol, primitive);