aboutsummaryrefslogtreecommitdiff
path: root/src/dotty/tools/dotc/core/NameOps.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2013-04-05 16:54:10 +0200
committerMartin Odersky <odersky@gmail.com>2013-04-05 16:54:40 +0200
commit4ce196d8152f75163edb362fcd21fb37631b7fde (patch)
treeb1bfe19ab22935474b0be5939d61e93c8e86719a /src/dotty/tools/dotc/core/NameOps.scala
parent859840dd0662a12fbc1ba470438eca779b08ed89 (diff)
downloaddotty-4ce196d8152f75163edb362fcd21fb37631b7fde.tar.gz
dotty-4ce196d8152f75163edb362fcd21fb37631b7fde.tar.bz2
dotty-4ce196d8152f75163edb362fcd21fb37631b7fde.zip
Made module class names end in '$'.
If module classes have the same names as their companion classes there is the latent trap that TypeRefs refer to one or the other. To avoid cross-talk, module classes need to have a different name. Also, some fixes to baseType, isSubClass in SymDenotations.
Diffstat (limited to 'src/dotty/tools/dotc/core/NameOps.scala')
-rw-r--r--src/dotty/tools/dotc/core/NameOps.scala21
1 files changed, 17 insertions, 4 deletions
diff --git a/src/dotty/tools/dotc/core/NameOps.scala b/src/dotty/tools/dotc/core/NameOps.scala
index 1045d0de9..60ac3fba9 100644
--- a/src/dotty/tools/dotc/core/NameOps.scala
+++ b/src/dotty/tools/dotc/core/NameOps.scala
@@ -5,7 +5,7 @@ import java.security.MessageDigest
import Chars.isOperatorPart
import scala.annotation.switch
import scala.io.Codec
-import Names._, StdNames._, Contexts._, Symbols._
+import Names._, StdNames._, Contexts._, Symbols._, Flags._
import Decorators.StringDecorator
object NameOps {
@@ -60,7 +60,7 @@ object NameOps {
def isSetterName = name endsWith SETTER_SUFFIX
def isTraitSetterName = isSetterName && (name containsSlice TRAIT_SETTER_SEPARATOR)
def isSingletonName = name endsWith SINGLETON_SUFFIX
- def isModuleName = name endsWith MODULE_SUFFIX
+ def isModuleClassName = name endsWith MODULE_SUFFIX
def isModuleVarName(name: Name): Boolean =
name.stripAnonNumberSuffix endsWith MODULE_VAR_SUFFIX
@@ -106,8 +106,14 @@ object NameOps {
name
}
- def stripModuleSuffix: Name =
- if (isModuleName) name dropRight MODULE_SUFFIX.length else name
+ /** If name ends in module class suffix, drop it */
+ def stripModuleClassSuffix: Name =
+ if (isModuleClassName) name dropRight MODULE_SUFFIX.length else name
+
+ /** If flags is a ModuleClass but not a Package, add module class suffix */
+ def adjustIfModuleClass(flags: Flags.FlagSet): N =
+ if (flags is (ModuleClass, butNot = Package)) name.asTypeName.moduleClassName.asInstanceOf[N]
+ else name
/** The expanded name of `name` relative to this class `base` with given `separator`
*/
@@ -172,6 +178,13 @@ object NameOps {
tpnme.Float -> jtpnme.BoxedFloat,
tpnme.Double -> jtpnme.BoxedDouble)
+ implicit class TypeNameDecorator(val name: TypeName) extends AnyVal {
+ import nme._
+
+ /** Convert this name to a module name */
+ def moduleClassName = name ++ tpnme.MODULE_SUFFIX
+ }
+
implicit class TermNameDecorator(val name: TermName) extends AnyVal {
import nme._