diff options
author | Paul Phillips <paulp@improving.org> | 2012-05-14 14:01:34 -0700 |
---|---|---|
committer | Paul Phillips <paulp@improving.org> | 2012-05-14 14:03:12 -0700 |
commit | e722bb1c70fed83257aa1c1fc9276ae8b7839c60 (patch) | |
tree | ee14de8d0ca96f517aa81d4910a042419d1ac53a /src/compiler/scala/tools/nsc/transform/LambdaLift.scala | |
parent | b3f7bc996b7a59b951cd0f199a056b6ad99d153b (diff) | |
download | scala-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.scala | 49 |
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) |