diff options
-rw-r--r-- | compiler/src/dotty/tools/dotc/ast/Desugar.scala | 5 | ||||
-rw-r--r-- | tests/run/variable-pattern-access.check | 7 | ||||
-rw-r--r-- | tests/run/variable-pattern-access.scala | 16 |
3 files changed, 26 insertions, 2 deletions
diff --git a/compiler/src/dotty/tools/dotc/ast/Desugar.scala b/compiler/src/dotty/tools/dotc/ast/Desugar.scala index b5be89440..75c7078a1 100644 --- a/compiler/src/dotty/tools/dotc/ast/Desugar.scala +++ b/compiler/src/dotty/tools/dotc/ast/Desugar.scala @@ -557,7 +557,7 @@ object desugar { * val/var/lazy val p = e ==> val/var/lazy val x_1 = (e: @unchecked) match (case p => (x_1)) * * in case there are zero or more than one variables in pattern - * val/var/lazy p = e ==> private synthetic [lazy] val t$ = (e: @unchecked) match (case p => (x_1, ..., x_N)) + * val/var/lazy p = e ==> private[this] synthetic [lazy] val t$ = (e: @unchecked) match (case p => (x_1, ..., x_N)) * val/var/def x_1 = t$._1 * ... * val/var/def x_N = t$._N @@ -586,7 +586,8 @@ object desugar { derivedValDef(original, named, tpt, matchExpr, mods) case _ => val tmpName = ctx.freshName().toTermName - val patMods = mods & (AccessFlags | Lazy) | Synthetic + val patMods = + mods & Lazy | Synthetic | (if (ctx.owner.isClass) PrivateLocal else EmptyFlags) val firstDef = ValDef(tmpName, TypeTree(), matchExpr) .withPos(pat.pos.union(rhs.pos)).withMods(patMods) diff --git a/tests/run/variable-pattern-access.check b/tests/run/variable-pattern-access.check new file mode 100644 index 000000000..1039f6a25 --- /dev/null +++ b/tests/run/variable-pattern-access.check @@ -0,0 +1,7 @@ +# Fields of A: +private final int A.a$$local +private final int A.b$$local +private final scala.Tuple2 A.$1$ +# Methods of A: +public int A.a() +public int A.b() diff --git a/tests/run/variable-pattern-access.scala b/tests/run/variable-pattern-access.scala new file mode 100644 index 000000000..1d27b3e42 --- /dev/null +++ b/tests/run/variable-pattern-access.scala @@ -0,0 +1,16 @@ +class A { + val (a, b) = (1, 2) +} +object Test { + def printFields(cls: Class[_]) = + println(cls.getDeclaredFields.map(_.toString).sorted.deep.mkString("\n")) + def printMethods(cls: Class[_]) = + println(cls.getDeclaredMethods.map(_.toString).sorted.deep.mkString("\n")) + + def main(args: Array[String]): Unit = { + println("# Fields of A:") + printFields(classOf[A]) + println("# Methods of A:") + printMethods(classOf[A]) + } +} |