diff options
author | Martin Odersky <odersky@gmail.com> | 2007-01-30 09:51:20 +0000 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2007-01-30 09:51:20 +0000 |
commit | c1822e42d2eed5fa307d828a4cff90efa58fb24a (patch) | |
tree | df7aa178b98df85901e9b762fe6fcf1eb8c73444 /src/library | |
parent | 8c38668c95c10c02bfcd05cc037bd1b5acc16a02 (diff) | |
download | scala-c1822e42d2eed5fa307d828a4cff90efa58fb24a.tar.gz scala-c1822e42d2eed5fa307d828a4cff90efa58fb24a.tar.bz2 scala-c1822e42d2eed5fa307d828a4cff90efa58fb24a.zip |
fixed bug in FlatHashTable; intern Symbols; rem...
fixed bug in FlatHashTable; intern Symbols; removed view bound in
Set.empty
Diffstat (limited to 'src/library')
-rw-r--r-- | src/library/scala/Symbol.scala | 14 | ||||
-rw-r--r-- | src/library/scala/collection/immutable/Set.scala | 3 | ||||
-rwxr-xr-x | src/library/scala/collection/mutable/FlatHashTable.scala | 8 |
3 files changed, 21 insertions, 4 deletions
diff --git a/src/library/scala/Symbol.scala b/src/library/scala/Symbol.scala index 4eaabd71da..4d30ef0fd6 100644 --- a/src/library/scala/Symbol.scala +++ b/src/library/scala/Symbol.scala @@ -11,6 +11,9 @@ package scala; +import collection.jcl.WeakHashMap + +private[scala] object internedSymbols extends WeakHashMap[String, Symbol] /** Instances of <code>Symbol</code> can be created easily with * Scala's built-in quote mechanism. For instance, the Scala term @@ -29,4 +32,15 @@ final case class Symbol(name: String) { "'" + name } + /** Makes this symbol into a unique reference. + * If two interened symbols are equal (i.e. they have the same name) + * then they must be identical (wrt reference equality) + */ + def intern: Symbol = internedSymbols get name match { + case Some(sym) => + sym + case None => + internedSymbols(name) = this + this + } } diff --git a/src/library/scala/collection/immutable/Set.scala b/src/library/scala/collection/immutable/Set.scala index 3ecd3df5e2..1e80023199 100644 --- a/src/library/scala/collection/immutable/Set.scala +++ b/src/library/scala/collection/immutable/Set.scala @@ -22,6 +22,7 @@ package scala.collection.immutable * <code>+</code> method for arbitrary types. * * @author Matthias Zenger + * @author Martin Odersky * @version 1.1, 03/05/2004 */ object Set { @@ -31,7 +32,7 @@ object Set { /** The canonical factory for this type */ - def apply[A <% Ordered[A]](elems: A*) = empty[A] ++ elems + def apply[A](elems: A*) = empty[A] ++ elems } trait Set[A] extends AnyRef with collection.Set[A] { diff --git a/src/library/scala/collection/mutable/FlatHashTable.scala b/src/library/scala/collection/mutable/FlatHashTable.scala index cd34cbc807..b6400f6b09 100755 --- a/src/library/scala/collection/mutable/FlatHashTable.scala +++ b/src/library/scala/collection/mutable/FlatHashTable.scala @@ -72,9 +72,11 @@ trait FlatHashTable[A] { while (null != entry) { if (entry == elem) { var h1 = (h + 1) % table.length - while (null != table(h1) && (index(elemHashCode(table(h1).asInstanceOf[A])) != h1)) { - table(h) = table(h1) - h = h1 + while (null != table(h1)) { + if (index(elemHashCode(table(h1).asInstanceOf[A])) != h1) { + table(h) = table(h1) + h = h1 + } h1 = (h + 1) % table.length } table(h) = null |