diff options
author | Martin Odersky <odersky@gmail.com> | 2014-12-19 16:43:05 +0100 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2014-12-19 16:43:05 +0100 |
commit | cf6b62f11815fc98fe69e25875668c8709631656 (patch) | |
tree | 6a0efcff52ef0a94398b2f817f20946d92ebcdea /src/dotty/tools/dotc/core/NameOps.scala | |
parent | 848714377b68eedf0c66b59ff8c57cd0da10109c (diff) | |
download | dotty-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.scala | 15 |
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 |