summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIulian Dragos <jaguarul@gmail.com>2007-11-13 15:48:10 +0000
committerIulian Dragos <jaguarul@gmail.com>2007-11-13 15:48:10 +0000
commit4cd5e4812e254ccb2011ad7ccd6c6d48d63ef603 (patch)
tree2a1f8a335b1d282d2c84164f8df3ad907809aeb0
parent35c966b024039908def95ea9a2a5091cf16419bb (diff)
downloadscala-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.scala6
-rw-r--r--src/compiler/scala/tools/nsc/util/FreshNameCreator.scala10
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)