diff options
author | Lukas Rytz <lukas.rytz@typesafe.com> | 2015-05-04 11:17:59 +0200 |
---|---|---|
committer | Lukas Rytz <lukas.rytz@typesafe.com> | 2015-05-04 11:17:59 +0200 |
commit | 6c75bc40c71d8688fb62759b6e1a23e5e0ba5e93 (patch) | |
tree | 2368ed2115504180cea8dd112bd73ec96e62d8af /src/compiler/scala/tools/nsc/transform/SpecializeTypes.scala | |
parent | 9e29061fb75a71c271c5e0a9824aabe93bc269fe (diff) | |
parent | 3bf208fd26e0ff272e9aaf9e35446daac4a99901 (diff) | |
download | scala-6c75bc40c71d8688fb62759b6e1a23e5e0ba5e93.tar.gz scala-6c75bc40c71d8688fb62759b6e1a23e5e0ba5e93.tar.bz2 scala-6c75bc40c71d8688fb62759b6e1a23e5e0ba5e93.zip |
Merge pull request #4463 from retronym/topic/indylambda-emit-indy
Use LambdaMetafactory where possible for lambda creation.
Diffstat (limited to 'src/compiler/scala/tools/nsc/transform/SpecializeTypes.scala')
-rw-r--r-- | src/compiler/scala/tools/nsc/transform/SpecializeTypes.scala | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/src/compiler/scala/tools/nsc/transform/SpecializeTypes.scala b/src/compiler/scala/tools/nsc/transform/SpecializeTypes.scala index 1a24c668ba..53a1347a48 100644 --- a/src/compiler/scala/tools/nsc/transform/SpecializeTypes.scala +++ b/src/compiler/scala/tools/nsc/transform/SpecializeTypes.scala @@ -303,6 +303,17 @@ abstract class SpecializeTypes extends InfoTransform with TypingTransformers { } } + def specializedFunctionName(sym: Symbol, args: List[Type]) = exitingSpecialize { + require(isFunctionSymbol(sym), sym) + val env: TypeEnv = TypeEnv.fromSpecialization(sym, args) + specializedClass.get((sym, env)) match { + case Some(x) => + x.name + case None => + sym.name + } + } + /** Return the specialized name of 'sym' in the given environment. It * guarantees the same result regardless of the map order by sorting * type variables alphabetically. @@ -315,10 +326,14 @@ abstract class SpecializeTypes extends InfoTransform with TypingTransformers { if (sym.isClass) env.keySet else specializedTypeVars(sym).intersect(env.keySet) ) + specializedName(sym.name, tvars, env) + } + + private def specializedName(name: Name, tvars: immutable.Set[Symbol], env: TypeEnv): TermName = { val (methparams, others) = tvars.toList sortBy ("" + _.name) partition (_.owner.isMethod) // debuglog("specName(" + sym + ") env: " + env + " tvars: " + tvars) - specializedName(sym.name, methparams map env, others map env) + specializedName(name, methparams map env, others map env) } /** Specialize name for the two list of types. The first one denotes |