diff options
author | Martin Odersky <odersky@gmail.com> | 2017-02-08 21:23:15 +1100 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2017-04-04 13:28:44 +0200 |
commit | cea243a4fc38dcc8831000d1066e10362df37576 (patch) | |
tree | 38bf1795d9c0d4ce973e405b842d80cec40ae215 /library | |
parent | 41d83d42650d0c0b54c47c1a9043d0b92315aa4e (diff) | |
download | dotty-cea243a4fc38dcc8831000d1066e10362df37576.tar.gz dotty-cea243a4fc38dcc8831000d1066e10362df37576.tar.bz2 dotty-cea243a4fc38dcc8831000d1066e10362df37576.zip |
Implement enum desugaring
Diffstat (limited to 'library')
-rw-r--r-- | library/src/scala/Enum.scala | 8 | ||||
-rw-r--r-- | library/src/scala/runtime/EnumValues.scala | 18 |
2 files changed, 26 insertions, 0 deletions
diff --git a/library/src/scala/Enum.scala b/library/src/scala/Enum.scala new file mode 100644 index 000000000..7d2eefb3d --- /dev/null +++ b/library/src/scala/Enum.scala @@ -0,0 +1,8 @@ +package scala + +/** A base trait of all enum classes */ +trait Enum { + + /** A number uniquely identifying a case of an enum */ + def enumTag: Int +} diff --git a/library/src/scala/runtime/EnumValues.scala b/library/src/scala/runtime/EnumValues.scala new file mode 100644 index 000000000..6d2e56cf3 --- /dev/null +++ b/library/src/scala/runtime/EnumValues.scala @@ -0,0 +1,18 @@ +package scala.runtime + +import scala.collection.immutable.Seq +import scala.collection.mutable.ResizableArray + +class EnumValues[E <: Enum] extends ResizableArray[E] { + private var valuesCache: List[E] = Nil + def register(v: E) = { + ensureSize(v.enumTag + 1) + size0 = size0 max (v.enumTag + 1) + array(v.enumTag) = v + valuesCache = null + } + def values: Seq[E] = { + if (valuesCache == null) valuesCache = array.filter(_ != null).toList.asInstanceOf[scala.List[E]] + valuesCache + } +} |