diff options
author | Paul Phillips <paulp@improving.org> | 2011-07-23 20:50:24 +0000 |
---|---|---|
committer | Paul Phillips <paulp@improving.org> | 2011-07-23 20:50:24 +0000 |
commit | 5c61410fe5b8fd636bde6484f04a2d1160ed7eb4 (patch) | |
tree | 7d6d8068b148e0282bc5156d3e8fde1f9ac4fb7f /src/library | |
parent | f9f164d3c71aee897e7885e4c991866bd1c0c339 (diff) | |
download | scala-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.scala | 9 | ||||
-rwxr-xr-x | src/library/scala/reflect/NameTransformer.scala | 6 |
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 |