Skip to content

Commit 30cc3cc

Browse files
committed
Allow params and param accessors to be inferred private local
1 parent c481e91 commit 30cc3cc

File tree

9 files changed

+47
-26
lines changed

9 files changed

+47
-26
lines changed

compiler/src/dotty/tools/dotc/core/SymDenotations.scala

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2658,11 +2658,9 @@ object SymDenotations {
26582658
* This holds for all symbols except
26592659
* - constructors, since they can never be referred to as members of their
26602660
* own, fully elaborated `this`.
2661-
* - parameters and parameter accessors, since their Local status is already
2662-
* determined by whether they have a `val` or `var` or not.
26632661
*/
26642662
def canBeLocal(name: Name, flags: FlagSet)(using Context) =
2665-
!name.isConstructorName && !flags.is(Param) && !flags.is(ParamAccessor)
2663+
!name.isConstructorName
26662664

26672665
/** Factory method for SymDenotion creation. All creations
26682666
* should be done via this method.

tests/init/crash/rbtree.scala

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -439,18 +439,18 @@ object RedBlackTree {
439439
def black: Tree[A, B]
440440
def red: Tree[A, B]
441441
}
442-
final class RedTree[A, +B](key: A,
443-
value: B,
444-
left: Tree[A, B],
445-
right: Tree[A, B]) extends Tree[A, B](key, value, left, right) {
442+
final class RedTree[A, +B](_key: A,
443+
_value: B,
444+
_left: Tree[A, B],
445+
_right: Tree[A, B]) extends Tree[A, B](_key, _value, _left, _right) {
446446
override def black: Tree[A, B] = BlackTree(key, value, left, right)
447447
override def red: Tree[A, B] = this
448448
override def toString: String = "RedTree(" + key + ", " + value + ", " + left + ", " + right + ")"
449449
}
450-
final class BlackTree[A, +B](key: A,
451-
value: B,
452-
left: Tree[A, B],
453-
right: Tree[A, B]) extends Tree[A, B](key, value, left, right) {
450+
final class BlackTree[A, +B](_key: A,
451+
_value: B,
452+
_left: Tree[A, B],
453+
_right: Tree[A, B]) extends Tree[A, B](_key, _value, _left, _right) {
454454
override def black: Tree[A, B] = this
455455
override def red: Tree[A, B] = RedTree(key, value, left, right)
456456
override def toString: String = "BlackTree(" + key + ", " + value + ", " + left + ", " + right + ")"

tests/neg/i22620.scala

Lines changed: 0 additions & 4 deletions
This file was deleted.

tests/pos/extend-java-enum.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22

33
import java.{lang as jl}
44

5-
final class ConfigSyntax private (name: String, ordinal: Int)
6-
extends jl.Enum[ConfigSyntax](name, ordinal)
5+
final class ConfigSyntax private (_name: String, ordinal: Int)
6+
extends jl.Enum[ConfigSyntax](_name, ordinal)
77

88
object ConfigSyntax {
99

tests/pos/i22620.scala

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import scala.collection.mutable.ArrayBuffer
2+
3+
class PrivateTest[-M](private val v: ArrayBuffer[M])
4+
5+
class PrivateTest1[-M](v: ArrayBuffer[M])
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
sealed abstract class Tree[+A](
2+
final val key: A
3+
)
4+
final class RedTree[+A](private val _key: A) extends Tree[A](_key)
5+
final class BlackTree[+A](private val _key: A) extends Tree[A](_key)
6+
object RedTree {
7+
def unapply[A](t: RedTree[A]) = Some((t.key))
8+
}
9+
object BlackTree {
10+
def unapply[A](t: BlackTree[A]) = Some((t.key))
11+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
sealed abstract class Tree[+A](
2+
final val key: A
3+
)
4+
final class RedTree[+A](_key: A) extends Tree[A](_key)
5+
final class BlackTree[+A](_key: A) extends Tree[A](_key)
6+
object RedTree {
7+
def unapply[A](t: RedTree[A]) = Some((t.key))
8+
}
9+
object BlackTree {
10+
def unapply[A](t: BlackTree[A]) = Some((t.key))
11+
}

tests/pos/rbtree.scala

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -439,18 +439,18 @@ object RedBlackTree {
439439
def black: Tree[A, B]
440440
def red: Tree[A, B]
441441
}
442-
final class RedTree[A, +B](key: A,
443-
value: B,
444-
left: Tree[A, B],
445-
right: Tree[A, B]) extends Tree[A, B](key, value, left, right) {
442+
final class RedTree[A, +B](_key: A,
443+
_value: B,
444+
_left: Tree[A, B],
445+
_right: Tree[A, B]) extends Tree[A, B](_key, _value, _left, _right) {
446446
override def black: Tree[A, B] = BlackTree(key, value, left, right)
447447
override def red: Tree[A, B] = this
448448
override def toString: String = "RedTree(" + key + ", " + value + ", " + left + ", " + right + ")"
449449
}
450-
final class BlackTree[A, +B](key: A,
451-
value: B,
452-
left: Tree[A, B],
453-
right: Tree[A, B]) extends Tree[A, B](key, value, left, right) {
450+
final class BlackTree[A, +B](_key: A,
451+
_value: B,
452+
_left: Tree[A, B],
453+
_right: Tree[A, B]) extends Tree[A, B](_key, _value, _left, _right) {
454454
override def black: Tree[A, B] = this
455455
override def red: Tree[A, B] = RedTree(key, value, left, right)
456456
override def toString: String = "BlackTree(" + key + ", " + value + ", " + left + ", " + right + ")"

tests/warn/i15503c.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ package foo.test.constructors:
3636
case class A private (x: Int) // OK
3737
class B private (val x: Int) // OK
3838
object B { def default = B(42) }
39-
class C private (private val xy: Int) // warn
39+
class C private (private val xy: Int)
4040
object C { def default = C(42) }
4141
class D private (private val x: Int): // OK
4242
def y = x

0 commit comments

Comments
 (0)