summaryrefslogtreecommitdiff
path: root/src/compiler/scala/tools/nsc/transform/LambdaLift.scala
diff options
context:
space:
mode:
authorPaul Phillips <paulp@improving.org>2012-05-14 14:01:34 -0700
committerPaul Phillips <paulp@improving.org>2012-05-14 14:03:12 -0700
commite722bb1c70fed83257aa1c1fc9276ae8b7839c60 (patch)
treeee14de8d0ca96f517aa81d4910a042419d1ac53a /src/compiler/scala/tools/nsc/transform/LambdaLift.scala
parentb3f7bc996b7a59b951cd0f199a056b6ad99d153b (diff)
downloadscala-e722bb1c70fed83257aa1c1fc9276ae8b7839c60.tar.gz
scala-e722bb1c70fed83257aa1c1fc9276ae8b7839c60.tar.bz2
scala-e722bb1c70fed83257aa1c1fc9276ae8b7839c60.zip
Debugging output tweaks.
And undeprecated Positional.
Diffstat (limited to 'src/compiler/scala/tools/nsc/transform/LambdaLift.scala')
-rw-r--r--src/compiler/scala/tools/nsc/transform/LambdaLift.scala49
1 files changed, 27 insertions, 22 deletions
diff --git a/src/compiler/scala/tools/nsc/transform/LambdaLift.scala b/src/compiler/scala/tools/nsc/transform/LambdaLift.scala
index 618a1cbba4..718e58b855 100644
--- a/src/compiler/scala/tools/nsc/transform/LambdaLift.scala
+++ b/src/compiler/scala/tools/nsc/transform/LambdaLift.scala
@@ -108,28 +108,30 @@ abstract class LambdaLift extends InfoTransform {
* }
*/
private def markFree(sym: Symbol, enclosure: Symbol): Boolean = {
- debuglog("mark free: " + sym + " of " + sym.owner + " marked free in " + enclosure)
- if (enclosure == sym.owner.logicallyEnclosingMember) true
- else if (enclosure.isPackageClass || !markFree(sym, enclosure.skipConstructor.owner.logicallyEnclosingMember)) false
- else {
- val ss = symSet(free, enclosure)
- if (!ss(sym)) {
- ss addEntry sym
- renamable addEntry sym
- beforePickler {
- // The param symbol in the MethodType should not be renamed, only the symbol in scope. This way,
- // parameter names for named arguments are not changed. Example: without cloning the MethodType,
- // def closure(x: Int) = { () => x }
- // would have the signature
- // closure: (x$1: Int)() => Int
- if (sym.isParameter && sym.owner.info.paramss.exists(_ contains sym))
- sym.owner modifyInfo (_ cloneInfo sym.owner)
+ debuglog("mark free: " + sym.fullLocationString + " marked free in " + enclosure)
+ (enclosure == sym.owner.logicallyEnclosingMember) || {
+ debuglog("%s != %s".format(enclosure, sym.owner.logicallyEnclosingMember))
+ if (enclosure.isPackageClass || !markFree(sym, enclosure.skipConstructor.owner.logicallyEnclosingMember)) false
+ else {
+ val ss = symSet(free, enclosure)
+ if (!ss(sym)) {
+ ss addEntry sym
+ renamable addEntry sym
+ beforePickler {
+ // The param symbol in the MethodType should not be renamed, only the symbol in scope. This way,
+ // parameter names for named arguments are not changed. Example: without cloning the MethodType,
+ // def closure(x: Int) = { () => x }
+ // would have the signature
+ // closure: (x$1: Int)() => Int
+ if (sym.isParameter && sym.owner.info.paramss.exists(_ contains sym))
+ sym.owner modifyInfo (_ cloneInfo sym.owner)
+ }
+ changedFreeVars = true
+ debuglog("" + sym + " is free in " + enclosure);
+ if (sym.isVariable) sym setFlag CAPTURED
}
- changedFreeVars = true
- debuglog("" + sym + " is free in " + enclosure);
- if (sym.isVariable) sym setFlag CAPTURED
+ !enclosure.isClass
}
- !enclosure.isClass
}
}
@@ -273,8 +275,11 @@ abstract class LambdaLift extends InfoTransform {
if (ps.isEmpty) searchIn(enclosure.skipConstructor.owner)
else ps.head
}
- debuglog("proxy " + sym + " in " + sym.owner + " from " + currentOwner.ownerChain.mkString(" -> ") +
- " " + sym.owner.logicallyEnclosingMember)
+ debuglog("proxy %s from %s has logical enclosure %s".format(
+ sym.debugLocationString,
+ currentOwner.debugLocationString,
+ sym.owner.logicallyEnclosingMember.debugLocationString)
+ )
if (isSameOwnerEnclosure(sym)) sym
else searchIn(currentOwner)