summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2005-12-02 14:41:02 +0000
committerMartin Odersky <odersky@gmail.com>2005-12-02 14:41:02 +0000
commit4720d45a832b3a8c818ae81cb0a15353fd16e372 (patch)
treed48e71316c67feb5aaa1b3b85b1b71ee220b47cd
parent0ca9ad8078d5ca0a163b360ef02e25aeb47b3664 (diff)
downloadscala-4720d45a832b3a8c818ae81cb0a15353fd16e372.tar.gz
scala-4720d45a832b3a8c818ae81cb0a15353fd16e372.tar.bz2
scala-4720d45a832b3a8c818ae81cb0a15353fd16e372.zip
*** empty log message ***
-rw-r--r--sources/scala/tools/nsc/ast/Trees.scala3
-rwxr-xr-xsources/scala/tools/nsc/symtab/Constants.scala6
-rwxr-xr-xsources/scala/tools/nsc/symtab/Types.scala1
-rwxr-xr-xsources/scala/tools/nsc/typechecker/ConstantFolder.scala3
-rwxr-xr-xsources/scala/tools/nsc/typechecker/Typers.scala4
5 files changed, 13 insertions, 4 deletions
diff --git a/sources/scala/tools/nsc/ast/Trees.scala b/sources/scala/tools/nsc/ast/Trees.scala
index dfa5c42d16..3ff630da12 100644
--- a/sources/scala/tools/nsc/ast/Trees.scala
+++ b/sources/scala/tools/nsc/ast/Trees.scala
@@ -488,7 +488,8 @@ import symtab.Flags._;
assert(value != null)
}
- def Literal(value: Any): Literal = Literal(Constant(value));
+ def Literal(value: Any): Literal =
+ Literal(Constant(value));
/** General type term, introduced by RefCheck. */
case class TypeTree() extends TypTree {
diff --git a/sources/scala/tools/nsc/symtab/Constants.scala b/sources/scala/tools/nsc/symtab/Constants.scala
index a2dd8d749a..3a6746cf61 100755
--- a/sources/scala/tools/nsc/symtab/Constants.scala
+++ b/sources/scala/tools/nsc/symtab/Constants.scala
@@ -55,6 +55,12 @@ import classfile.PickleFormat._;
case NullTag => AllRefClass.tpe
}
+ /** We need the equals method to take account of tags as well as values */
+ override def equals(other: Any): boolean = other match {
+ case that: Constant => this.value == that.value && this.tag == that.tag
+ case _ => false
+ }
+
def booleanValue: boolean =
if (tag == BooleanTag) value.asInstanceOf$erased[boolean]
else throw new Error("value " + value + " is not a boolean");
diff --git a/sources/scala/tools/nsc/symtab/Types.scala b/sources/scala/tools/nsc/symtab/Types.scala
index a041b207c2..640366545d 100755
--- a/sources/scala/tools/nsc/symtab/Types.scala
+++ b/sources/scala/tools/nsc/symtab/Types.scala
@@ -407,7 +407,6 @@ import Flags._;
// Subclasses ------------------------------------------------------------
-
[_trait_] abstract class UniqueType {
private val hashcode = { val h = super.hashCode(); if (h < 0) -h else h }
override def hashCode() = hashcode;
diff --git a/sources/scala/tools/nsc/typechecker/ConstantFolder.scala b/sources/scala/tools/nsc/typechecker/ConstantFolder.scala
index 7e4864e2ea..0afb18d8d5 100755
--- a/sources/scala/tools/nsc/typechecker/ConstantFolder.scala
+++ b/sources/scala/tools/nsc/typechecker/ConstantFolder.scala
@@ -25,7 +25,8 @@ abstract class ConstantFolder {
});
private def fold(tree: Tree, x: Constant): Tree =
- if (x != null && x.tag != UnitTag) tree setType ConstantType(x) else tree;
+ if (x != null && x.tag != UnitTag) tree setType ConstantType(x)
+ else tree;
private def foldUnop(op: Name, x: Constant): Constant = Pair(op, x.tag) match {
case Pair(nme.ZNOT, BooleanTag) => Constant(!x.booleanValue)
diff --git a/sources/scala/tools/nsc/typechecker/Typers.scala b/sources/scala/tools/nsc/typechecker/Typers.scala
index e8e51d1ab7..ae3947299e 100755
--- a/sources/scala/tools/nsc/typechecker/Typers.scala
+++ b/sources/scala/tools/nsc/typechecker/Typers.scala
@@ -1314,7 +1314,9 @@ import collection.mutable.HashMap;
// todo: try with case Literal(Constant(()))
case Literal(value) =>
- tree setType (if (value.tag == UnitTag) UnitClass.tpe else ConstantType(value))
+ tree setType (
+ if (value.tag == UnitTag) UnitClass.tpe
+ else ConstantType(value))
case SingletonTypeTree(ref) =>
val ref1 = checkStable(typed(ref, EXPRmode | QUALmode, AnyRefClass.tpe));