diff options
author | Iulian Dragos <jaguarul@gmail.com> | 2007-11-13 15:48:10 +0000 |
---|---|---|
committer | Iulian Dragos <jaguarul@gmail.com> | 2007-11-13 15:48:10 +0000 |
commit | 4cd5e4812e254ccb2011ad7ccd6c6d48d63ef603 (patch) | |
tree | 2a1f8a335b1d282d2c84164f8df3ad907809aeb0 | |
parent | 35c966b024039908def95ea9a2a5091cf16419bb (diff) | |
download | scala-4cd5e4812e254ccb2011ad7ccd6c6d48d63ef603.tar.gz scala-4cd5e4812e254ccb2011ad7ccd6c6d48d63ef603.tar.bz2 scala-4cd5e4812e254ccb2011ad7ccd6c6d48d63ef603.zip |
Imported patch to improve anonymous function na...
Imported patch to improve anonymous function names (ticket #101).
-rw-r--r-- | src/compiler/scala/tools/nsc/transform/LambdaLift.scala | 6 | ||||
-rw-r--r-- | src/compiler/scala/tools/nsc/util/FreshNameCreator.scala | 10 |
2 files changed, 9 insertions, 7 deletions
diff --git a/src/compiler/scala/tools/nsc/transform/LambdaLift.scala b/src/compiler/scala/tools/nsc/transform/LambdaLift.scala index da5d83989c..99ca903e05 100644 --- a/src/compiler/scala/tools/nsc/transform/LambdaLift.scala +++ b/src/compiler/scala/tools/nsc/transform/LambdaLift.scala @@ -244,7 +244,11 @@ abstract class LambdaLift extends InfoTransform { } while (changedFreeVars); for (sym <- renamable.elements) { - sym.name = unit.fresh.newName(sym.name.toString() + "$") + val base = + if (sym.isAnonymousFunction && sym.owner.isMethod) + sym.owner.name.toString() + sym.name.toString() + "$" + else sym.name.toString() + "$" + sym.name = unit.fresh.newName(base) if (settings.debug.value) log("renamed: " + sym.name) } diff --git a/src/compiler/scala/tools/nsc/util/FreshNameCreator.scala b/src/compiler/scala/tools/nsc/util/FreshNameCreator.scala index a4c257a996..72be4c4ecd 100644 --- a/src/compiler/scala/tools/nsc/util/FreshNameCreator.scala +++ b/src/compiler/scala/tools/nsc/util/FreshNameCreator.scala @@ -25,12 +25,10 @@ object FreshNameCreator { * call to this function (provided the prefix does not end in a digit). */ def newName(prefix: String): String = { - val count = counters.get(prefix) match { - case Some(last) => last + 1 - case None => 0 - } - counters.update(prefix, count) - prefix + count + val safePrefix = prefix.replace("<", "$").replace(">", "$") + val count = counters.getOrElse(safePrefix, 0) + 1 + counters(safePrefix) = count + safePrefix + count } def newName(pos : util.Position, prefix : String) = newName(prefix) |