diff options
author | Dmitry Petrashko <dmitry.petrashko@gmail.com> | 2015-04-20 13:49:26 +0200 |
---|---|---|
committer | Dmitry Petrashko <dmitry.petrashko@gmail.com> | 2015-04-20 13:49:26 +0200 |
commit | 6dfeaa26c93e8110a54c6e2f6ebf6480dfc74257 (patch) | |
tree | 743cac97d29b93805cf4ccc3faa96c839313a194 /src/dotty/tools/dotc/core/NameOps.scala | |
parent | 9a80b7de405a1e3c41f39383daf9b5b68c737030 (diff) | |
download | dotty-6dfeaa26c93e8110a54c6e2f6ebf6480dfc74257.tar.gz dotty-6dfeaa26c93e8110a54c6e2f6ebf6480dfc74257.tar.bz2 dotty-6dfeaa26c93e8110a54c6e2f6ebf6480dfc74257.zip |
Specialization-specific names.
Diffstat (limited to 'src/dotty/tools/dotc/core/NameOps.scala')
-rw-r--r-- | src/dotty/tools/dotc/core/NameOps.scala | 26 |
1 files changed, 24 insertions, 2 deletions
diff --git a/src/dotty/tools/dotc/core/NameOps.scala b/src/dotty/tools/dotc/core/NameOps.scala index 35607cf74..ebf016acc 100644 --- a/src/dotty/tools/dotc/core/NameOps.scala +++ b/src/dotty/tools/dotc/core/NameOps.scala @@ -113,7 +113,7 @@ object NameOps { def stripAnonNumberSuffix: Name = { var pos = name.length while (pos > 0 && name(pos - 1).isDigit) - pos -= 1 + pos -= 1 if (pos > 0 && pos < name.length && name(pos - 1) == '$') name take (pos - 1) @@ -145,7 +145,7 @@ object NameOps { }.asInstanceOf[N] /** The superaccessor for method with given name */ - def superName: TermName = (nme.SUPER_PREFIX ++ name).toTermName + def superName: TermName = (nme.SUPER_PREFIX ++ name).toTermName /** The expanded name of `name` relative to given class `base`. */ @@ -224,6 +224,28 @@ object NameOps { case nme.clone_ => nme.clone_ } + def specializedFor(returnType: Types.Type, args: List[Types.Type])(implicit ctx: Context): name.ThisName = { + + def typeToTag(tp: Types.Type): Name = { + tp.classSymbol match { + case t if t eq defn.IntClass => nme.specializedTypeNames.Int + case t if t eq defn.BooleanClass => nme.specializedTypeNames.Boolean + case t if t eq defn.ByteClass => nme.specializedTypeNames.Byte + case t if t eq defn.LongClass => nme.specializedTypeNames.Long + case t if t eq defn.ShortClass => nme.specializedTypeNames.Short + case t if t eq defn.FloatClass => nme.specializedTypeNames.Float + case t if t eq defn.UnitClass => nme.specializedTypeNames.Void + case t if t eq defn.DoubleClass => nme.specializedTypeNames.Double + case t if t eq defn.CharClass => nme.specializedTypeNames.Char + case _ => nme.specializedTypeNames.Object + } + } + + name.fromName(name ++ nme.specializedTypeNames.prefix ++ + args.map(typeToTag).foldRight(typeToTag(returnType))(_ ++ _) ++ + nme.specializedTypeNames.suffix) + } + /** If name length exceeds allowable limit, replace part of it by hash */ def compactified(implicit ctx: Context): TermName = termName(compactify(name.toString)) } |