diff options
author | Dmitry Petrashko <dark@d-d.me> | 2015-09-21 12:20:37 +0100 |
---|---|---|
committer | Dmitry Petrashko <dark@d-d.me> | 2015-09-21 12:20:37 +0100 |
commit | 84590eb15907f40f3569c8f3d1c250f7a22c85d6 (patch) | |
tree | c3f24d6e455ad1c98108f1a4656ab70749ab722d | |
parent | 6bb62102e0542149a3644819fdcfae40ce08ba9e (diff) | |
parent | 88638199588a4711b383d7de5a00872f26d69cac (diff) | |
download | dotty-84590eb15907f40f3569c8f3d1c250f7a22c85d6.tar.gz dotty-84590eb15907f40f3569c8f3d1c250f7a22c85d6.tar.bz2 dotty-84590eb15907f40f3569c8f3d1c250f7a22c85d6.zip |
Merge pull request #800 from dotty-staging/paramForwarding-comment
ParamForwarding #783: answer my own question.
-rw-r--r-- | src/dotty/tools/dotc/transform/ParamForwarding.scala | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/src/dotty/tools/dotc/transform/ParamForwarding.scala b/src/dotty/tools/dotc/transform/ParamForwarding.scala index a10339f85..2e6a97bcf 100644 --- a/src/dotty/tools/dotc/transform/ParamForwarding.scala +++ b/src/dotty/tools/dotc/transform/ParamForwarding.scala @@ -33,6 +33,18 @@ class ParamForwarding(thisTransformer: DenotTransformer) { case _ => (Nil, Nil) } def inheritedAccessor(sym: Symbol): Symbol = { + /** + * Dmitry: having it have the same name is needed to maintain correctness in presence of subclassing + * if you would use parent param-name `a` to implement param-field `b` + * overriding field `b` will actually override field `a`, that is wrong! + * + * class A(val s: Int); + * class B(val b: Int) extends A(b) + * class C extends A(2) { + * def s = 3 + * assert(this.b == 2) + * } + */ val candidate = sym.owner.asClass.superClass .info.decl(sym.name).suchThat(_ is (ParamAccessor, butNot = Mutable)).symbol if (candidate.isAccessibleFrom(currentClass.thisType, superAccess = true)) candidate |