aboutsummaryrefslogtreecommitdiff
path: root/compiler/src/dotty/tools/dotc/core/NameOps.scala
diff options
context:
space:
mode:
Diffstat (limited to 'compiler/src/dotty/tools/dotc/core/NameOps.scala')
-rw-r--r--compiler/src/dotty/tools/dotc/core/NameOps.scala24
1 files changed, 20 insertions, 4 deletions
diff --git a/compiler/src/dotty/tools/dotc/core/NameOps.scala b/compiler/src/dotty/tools/dotc/core/NameOps.scala
index a6e5fefc7..38eb21446 100644
--- a/compiler/src/dotty/tools/dotc/core/NameOps.scala
+++ b/compiler/src/dotty/tools/dotc/core/NameOps.scala
@@ -9,6 +9,7 @@ import Decorators.PreNamedString
import util.{Chars, NameTransformer}
import Chars.isOperatorPart
import Definitions._
+import config.Config
object NameOps {
@@ -73,7 +74,9 @@ object NameOps {
def isTraitSetterName = name containsSlice TRAIT_SETTER_SEPARATOR
def isSetterName = name endsWith SETTER_SUFFIX
def isSingletonName = name endsWith SINGLETON_SUFFIX
- def isModuleClassName = name endsWith MODULE_SUFFIX
+ def isModuleClassName =
+ if (Config.semanticNames) name.is(NameInfo.ModuleClass.kind)
+ else name endsWith MODULE_SUFFIX
def isAvoidClashName = name endsWith AVOID_CLASH_SUFFIX
def isImportName = name startsWith IMPORT
def isFieldName = name endsWith LOCAL_SUFFIX
@@ -119,14 +122,19 @@ object NameOps {
}
/** Convert this module name to corresponding module class name */
- def moduleClassName: TypeName = (name ++ tpnme.MODULE_SUFFIX).toTypeName
+ def moduleClassName: TypeName =
+ if (Config.semanticNames) name.derived(NameInfo.ModuleClass).toTypeName
+ else (name ++ tpnme.MODULE_SUFFIX).toTypeName
/** Convert this module class name to corresponding source module name */
def sourceModuleName: TermName = stripModuleClassSuffix.toTermName
/** If name ends in module class suffix, drop it */
def stripModuleClassSuffix: Name =
- if (isModuleClassName) name dropRight MODULE_SUFFIX.length else name
+ if (isModuleClassName)
+ if (Config.semanticNames) name.without(NameInfo.ModuleClass.kind)
+ else name dropRight MODULE_SUFFIX.length
+ else name
/** Append a suffix so that this name does not clash with another name in the same scope */
def avoidClashName: TermName = (name ++ AVOID_CLASH_SUFFIX).toTermName
@@ -194,7 +202,7 @@ object NameOps {
likeTyped(
if (name.isModuleClassName) name.stripModuleClassSuffix.freshened.moduleClassName
else likeTyped(ctx.freshName(name ++ NameTransformer.NAME_JOIN_STRING)))
-
+/*
/** Name with variance prefix: `+` for covariant, `-` for contravariant */
def withVariance(v: Int): N =
if (hasVariance) dropVariance.withVariance(v)
@@ -220,6 +228,14 @@ object NameOps {
case _ => 0
}
+*/
+ def unmangleClassName: N =
+ if (Config.semanticNames)
+ if (name.endsWith(MODULE_SUFFIX))
+ likeTyped(name.dropRight(MODULE_SUFFIX.length).moduleClassName)
+ else name
+ else name
+
/** Translate a name into a list of simple TypeNames and TermNames.
* In all segments before the last, type/term is determined by whether
* the following separator char is '.' or '#'. The last segment