summaryrefslogtreecommitdiff
path: root/examples/scala-js/scalalib/overrides/scala/Symbol.scala
diff options
context:
space:
mode:
Diffstat (limited to 'examples/scala-js/scalalib/overrides/scala/Symbol.scala')
-rw-r--r--examples/scala-js/scalalib/overrides/scala/Symbol.scala117
1 files changed, 0 insertions, 117 deletions
diff --git a/examples/scala-js/scalalib/overrides/scala/Symbol.scala b/examples/scala-js/scalalib/overrides/scala/Symbol.scala
deleted file mode 100644
index 1af9d28..0000000
--- a/examples/scala-js/scalalib/overrides/scala/Symbol.scala
+++ /dev/null
@@ -1,117 +0,0 @@
-/* __ *\
-** ________ ___ / / ___ Scala API **
-** / __/ __// _ | / / / _ | (c) 2003-2013, LAMP/EPFL **
-** __\ \/ /__/ __ |/ /__/ __ | http://scala-lang.org/ **
-** /____/\___/_/ |_/____/_/ | | **
-** |/ **
-\* */
-
-package scala
-
-import scala.scalajs.js
-
-/** This class provides a simple way to get unique objects for equal strings.
- * Since symbols are interned, they can be compared using reference equality.
- * Instances of `Symbol` can be created easily with Scala's built-in quote
- * mechanism.
- *
- * For instance, the [[http://scala-lang.org/#_top Scala]] term `'mysym` will
- * invoke the constructor of the `Symbol` class in the following way:
- * `Symbol("mysym")`.
- *
- * @author Martin Odersky, Iulian Dragos
- * @version 1.8
- */
-final class Symbol private (val name: String) extends Serializable {
- /** Converts this symbol to a string.
- */
- override def toString(): String = "'" + name
-
- @throws(classOf[java.io.ObjectStreamException])
- private def readResolve(): Any = Symbol.apply(name)
- override def hashCode = name.hashCode()
- override def equals(other: Any) = this eq other.asInstanceOf[AnyRef]
-}
-
-// Modified to use Scala.js specific cache
-object Symbol extends JSUniquenessCache[Symbol] {
- override def apply(name: String): Symbol = super.apply(name)
- protected def valueFromKey(name: String): Symbol = new Symbol(name)
- protected def keyFromValue(sym: Symbol): Option[String] = Some(sym.name)
-}
-
-private[scala] abstract class JSUniquenessCache[V]
-{
- private val map = js.Dictionary.empty[js.Any] // V | js.Undefined
-
- protected def valueFromKey(k: String): V
- protected def keyFromValue(v: V): Option[String]
-
- def apply(name: String): V = {
- val cachedSym = map(name)
- if (js.isUndefined(cachedSym)) {
- val sym = valueFromKey(name)
- map(name) = sym.asInstanceOf[js.Any]
- sym.asInstanceOf[V]
- } else {
- cachedSym.asInstanceOf[V]
- }
- }
-
- def unapply(other: V): Option[String] = keyFromValue(other)
-}
-
-/** This is private so it won't appear in the library API, but
- * abstracted to offer some hope of reusability. */
-/* DELETED for Scala.js
-private[scala] abstract class UniquenessCache[K >: js.String, V >: Null]
-{
-
- import java.lang.ref.WeakReference
- import java.util.WeakHashMap
- import java.util.concurrent.locks.ReentrantReadWriteLock
-
- private val rwl = new ReentrantReadWriteLock()
- private val rlock = rwl.readLock
- private val wlock = rwl.writeLock
- private val map = new WeakHashMap[K, WeakReference[V]]
-
- protected def valueFromKey(k: K): V
- protected def keyFromValue(v: V): Option[K]
-
- def apply(name: K): V = {
- def cached(): V = {
- rlock.lock
- try {
- val reference = map get name
- if (reference == null) null
- else reference.get // will be null if we were gc-ed
- }
- finally rlock.unlock
- }
- def updateCache(): V = {
- wlock.lock
- try {
- val res = cached()
- if (res != null) res
- else {
- // If we don't remove the old String key from the map, we can
- // wind up with one String as the key and a different String as
- // as the name field in the Symbol, which can lead to surprising
- // GC behavior and duplicate Symbols. See SI-6706.
- map remove name
- val sym = valueFromKey(name)
- map.put(name, new WeakReference(sym))
- sym
- }
- }
- finally wlock.unlock
- }
-
- val res = cached()
- if (res == null) updateCache()
- else res
- }
- def unapply(other: V): Option[K] = keyFromValue(other)
-}
-*/