summaryrefslogtreecommitdiff
path: root/src/library
diff options
context:
space:
mode:
authorPaul Phillips <paulp@improving.org>2011-07-23 20:50:24 +0000
committerPaul Phillips <paulp@improving.org>2011-07-23 20:50:24 +0000
commit5c61410fe5b8fd636bde6484f04a2d1160ed7eb4 (patch)
tree7d6d8068b148e0282bc5156d3e8fde1f9ac4fb7f /src/library
parentf9f164d3c71aee897e7885e4c991866bd1c0c339 (diff)
downloadscala-5c61410fe5b8fd636bde6484f04a2d1160ed7eb4.tar.gz
scala-5c61410fe5b8fd636bde6484f04a2d1160ed7eb4.tar.bz2
scala-5c61410fe5b8fd636bde6484f04a2d1160ed7eb4.zip
Start of an attempt to abstract above some hard...
Start of an attempt to abstract above some hardcoded name mangling decisions so they can be modified, something we need to do to fix long-standing problems with inner classes. It's not easy. This commit doesn't actually change much, it's primarily setup. No review.
Diffstat (limited to 'src/library')
-rw-r--r--src/library/scala/Enumeration.scala9
-rwxr-xr-xsrc/library/scala/reflect/NameTransformer.scala6
2 files changed, 13 insertions, 2 deletions
diff --git a/src/library/scala/Enumeration.scala b/src/library/scala/Enumeration.scala
index 563b2d70c4..22bb98ba46 100644
--- a/src/library/scala/Enumeration.scala
+++ b/src/library/scala/Enumeration.scala
@@ -10,6 +10,8 @@ package scala
import scala.collection.{ mutable, immutable, generic, SetLike }
import java.lang.reflect.{ Modifier, Method => JMethod, Field => JField }
+import scala.reflect.NameTransformer._
+import java.util.regex.Pattern
/** Defines a finite set of values specific to the enumeration. Typically
* these values enumerate all possible forms something can take and provide
@@ -59,11 +61,14 @@ abstract class Enumeration(initial: Int, names: String*) extends Serializable {
/* Note that `readResolve` cannot be private, since otherwise
the JVM does not invoke it when deserializing subclasses. */
- protected def readResolve(): AnyRef = thisenum.getClass.getField("MODULE$").get()
+ protected def readResolve(): AnyRef = thisenum.getClass.getField(MODULE_INSTANCE_NAME).get()
/** The name of this enumeration.
*/
- override def toString = (getClass.getName stripSuffix "$" split '.' last) split '$' last
+ override def toString = (
+ (getClass.getName stripSuffix MODULE_SUFFIX_STRING split '.' last)
+ split Pattern.quote(NAME_JOIN_STRING) last
+ )
/** The mapping from the integer used to identify values to the actual
* values. */
diff --git a/src/library/scala/reflect/NameTransformer.scala b/src/library/scala/reflect/NameTransformer.scala
index 6c12c8db33..38fbbc98f2 100755
--- a/src/library/scala/reflect/NameTransformer.scala
+++ b/src/library/scala/reflect/NameTransformer.scala
@@ -12,6 +12,12 @@ package scala.reflect
* @author Martin Odersky
*/
object NameTransformer {
+ // XXX Short term: providing a way to alter these without having to recompile
+ // the compiler before recompiling the compiler.
+ val MODULE_SUFFIX_STRING = sys.props.getOrElse("SCALA_MODULE_SUFFIX_STRING", "$")
+ val NAME_JOIN_STRING = sys.props.getOrElse("SCALA_NAME_JOIN_STRING", "$")
+ val MODULE_INSTANCE_NAME = "MODULE$"
+
private val nops = 128
private val ncodes = 26 * 26