diff options
-rw-r--r-- | src/compiler/scala/tools/nsc/transform/Constructors.scala | 30 | ||||
-rw-r--r-- | test/files/run/bug428.check | 12 |
2 files changed, 28 insertions, 14 deletions
diff --git a/src/compiler/scala/tools/nsc/transform/Constructors.scala b/src/compiler/scala/tools/nsc/transform/Constructors.scala index 6b69eb059a..a09eaa8ebf 100644 --- a/src/compiler/scala/tools/nsc/transform/Constructors.scala +++ b/src/compiler/scala/tools/nsc/transform/Constructors.scala @@ -65,22 +65,36 @@ abstract class Constructors extends Transform { val intoConstructorTransformer = new Transformer { override def transform(tree: Tree): Tree = tree match { case Apply(Select(This(_), _), List()) => - if ((tree.symbol hasFlag PARAMACCESSOR) && tree.symbol.owner == clazz) + if ((tree.symbol hasFlag PARAMACCESSOR) && tree.symbol.owner == clazz) { + thisRefSeen = false gen.mkAttributedIdent(parameter(tree.symbol.accessed)) setPos tree.pos - else if (tree.symbol.outerSource == clazz && !clazz.isImplClass) + } + else if (tree.symbol.outerSource == clazz && !clazz.isImplClass) { + thisRefSeen = false gen.mkAttributedIdent(parameterNamed(nme.OUTER)) + } else super.transform(tree) case Select(This(_), _) if ((tree.symbol hasFlag PARAMACCESSOR) && tree.symbol.owner == clazz) => + thisRefSeen = false gen.mkAttributedIdent(parameter(tree.symbol)) setPos tree.pos - case Select(_, _) => - thisRefSeen = true - super.transform(tree) - case This(_) => + case Apply(fun, args) => + var tmpRefSeen = thisRefSeen + val fun1 = transform(fun) + thisRefSeen = tmpRefSeen || thisRefSeen + val args1 = List.mapConserve(args){ tree => + tmpRefSeen = thisRefSeen + val res = transform(tree) + thisRefSeen = tmpRefSeen || thisRefSeen + res + } + copy.Apply(tree, fun1, args1) + case Block(_, _) => + val res = super.transform(tree) thisRefSeen = true - super.transform(tree) - case Super(_, _) => + res + case This(_) | Super(_, _) | Select(_, _) => thisRefSeen = true super.transform(tree) case _ => diff --git a/test/files/run/bug428.check b/test/files/run/bug428.check index 21bef2f8d3..1e933a9b78 100644 --- a/test/files/run/bug428.check +++ b/test/files/run/bug428.check @@ -1,8 +1,8 @@ -Foo 1: a = 0, b = 0, x = 0, y = 0 -Foo 2: a = 2, b = 0, x = 0, y = 0 -Foo 3: a = 2, b = 3, x = 0, y = 0 -Foo 4: a = 2, b = 3, x = 0, y = 0 -Foo 5: a = 2, b = 3, x = 0, y = 0 -Bar 1: a = 2, b = 3, x = 0, y = 0 +Foo 1: a = 2, b = 0, x = 5, y = 0 +Foo 2: a = 2, b = 0, x = 5, y = 0 +Foo 3: a = 2, b = 3, x = 5, y = 0 +Foo 4: a = 2, b = 3, x = 5, y = 0 +Foo 5: a = 2, b = 3, x = 5, y = 0 +Bar 1: a = 2, b = 3, x = 5, y = 0 Bar 2: a = 2, b = 3, x = 5, y = 0 Bar 3: a = 2, b = 3, x = 5, y = 7 |