aboutsummaryrefslogtreecommitdiff
path: root/src/dotty/tools/dotc/core/NameOps.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2014-12-19 16:43:05 +0100
committerMartin Odersky <odersky@gmail.com>2014-12-19 16:43:05 +0100
commitcf6b62f11815fc98fe69e25875668c8709631656 (patch)
tree6a0efcff52ef0a94398b2f817f20946d92ebcdea /src/dotty/tools/dotc/core/NameOps.scala
parent848714377b68eedf0c66b59ff8c57cd0da10109c (diff)
downloaddotty-cf6b62f11815fc98fe69e25875668c8709631656.tar.gz
dotty-cf6b62f11815fc98fe69e25875668c8709631656.tar.bz2
dotty-cf6b62f11815fc98fe69e25875668c8709631656.zip
Avoid name clashes when generating synthetic companion objects.
Diffstat (limited to 'src/dotty/tools/dotc/core/NameOps.scala')
-rw-r--r--src/dotty/tools/dotc/core/NameOps.scala15
1 files changed, 12 insertions, 3 deletions
diff --git a/src/dotty/tools/dotc/core/NameOps.scala b/src/dotty/tools/dotc/core/NameOps.scala
index a6b40fe66..240447e6d 100644
--- a/src/dotty/tools/dotc/core/NameOps.scala
+++ b/src/dotty/tools/dotc/core/NameOps.scala
@@ -72,6 +72,7 @@ object NameOps {
def isSetterName = name endsWith SETTER_SUFFIX
def isSingletonName = name endsWith SINGLETON_SUFFIX
def isModuleClassName = name endsWith MODULE_SUFFIX
+ def isAvoidClashName = name endsWith AVOID_CLASH_SUFFIX
def isImportName = name startsWith IMPORT
def isFieldName = name endsWith LOCAL_SUFFIX
def isInheritedName = name.length > 0 && name.head == '(' && name.startsWith(nme.INHERITED)
@@ -129,11 +130,19 @@ object NameOps {
/** If name ends in module class suffix, drop it */
def stripModuleClassSuffix: Name =
if (isModuleClassName) 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
+
+ /** If name ends in "avoid clash" suffix, drop it */
+ def stripAvoidClashSuffix: Name =
+ if (isAvoidClashName) name dropRight AVOID_CLASH_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
+ def adjustIfModuleClass(flags: Flags.FlagSet): N = {
+ if (flags is (ModuleClass, butNot = Package)) name.asTypeName.moduleClassName
+ else stripAvoidClashSuffix
+ }.asInstanceOf[N]
/** The superaccessor for method with given name */
def superName: TermName = (nme.SUPER_PREFIX ++ name).toTermName