diff options
author | Martin Odersky <odersky@gmail.com> | 2005-12-02 14:41:02 +0000 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2005-12-02 14:41:02 +0000 |
commit | 4720d45a832b3a8c818ae81cb0a15353fd16e372 (patch) | |
tree | d48e71316c67feb5aaa1b3b85b1b71ee220b47cd | |
parent | 0ca9ad8078d5ca0a163b360ef02e25aeb47b3664 (diff) | |
download | scala-4720d45a832b3a8c818ae81cb0a15353fd16e372.tar.gz scala-4720d45a832b3a8c818ae81cb0a15353fd16e372.tar.bz2 scala-4720d45a832b3a8c818ae81cb0a15353fd16e372.zip |
*** empty log message ***
-rw-r--r-- | sources/scala/tools/nsc/ast/Trees.scala | 3 | ||||
-rwxr-xr-x | sources/scala/tools/nsc/symtab/Constants.scala | 6 | ||||
-rwxr-xr-x | sources/scala/tools/nsc/symtab/Types.scala | 1 | ||||
-rwxr-xr-x | sources/scala/tools/nsc/typechecker/ConstantFolder.scala | 3 | ||||
-rwxr-xr-x | sources/scala/tools/nsc/typechecker/Typers.scala | 4 |
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)); |