aboutsummaryrefslogtreecommitdiff
path: root/compiler/src/dotty/tools/dotc/transform
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2017-03-20 17:26:27 +0100
committerMartin Odersky <odersky@gmail.com>2017-03-20 17:26:27 +0100
commit20d48d988732ac3c721f31d1a4b8487047b9e92c (patch)
treeaa266ccef6b4857b4862ad66816cc959354283ae /compiler/src/dotty/tools/dotc/transform
parentd1e4911596cb10d5665ff801d10f15b48250581f (diff)
downloaddotty-20d48d988732ac3c721f31d1a4b8487047b9e92c.tar.gz
dotty-20d48d988732ac3c721f31d1a4b8487047b9e92c.tar.bz2
dotty-20d48d988732ac3c721f31d1a4b8487047b9e92c.zip
Only use shadowed when necessary
Diffstat (limited to 'compiler/src/dotty/tools/dotc/transform')
-rw-r--r--compiler/src/dotty/tools/dotc/transform/ParamForwarding.scala15
1 files changed, 8 insertions, 7 deletions
diff --git a/compiler/src/dotty/tools/dotc/transform/ParamForwarding.scala b/compiler/src/dotty/tools/dotc/transform/ParamForwarding.scala
index a6c4b5d8d..2836ebcfe 100644
--- a/compiler/src/dotty/tools/dotc/transform/ParamForwarding.scala
+++ b/compiler/src/dotty/tools/dotc/transform/ParamForwarding.scala
@@ -67,13 +67,14 @@ class ParamForwarding(thisTransformer: DenotTransformer) {
def forwarder(implicit ctx: Context) = {
sym.copySymDenotation(initFlags = sym.flags | Method | Stable, info = sym.info.ensureMethodic)
.installAfter(thisTransformer)
- val superAcc =
- Super(This(currentClass), tpnme.EMPTY, inConstrCall = false)
- .select(alias)
- val stpe @ TermRef(_, _) = superAcc.tpe
- val superAccShadowed = superAcc.withType(stpe.shadowed)
- typr.println(i"adding param forwarder $superAccShadowed")
- DefDef(sym, superAccShadowed.ensureConforms(sym.info.widen))
+ var superAcc =
+ Super(This(currentClass), tpnme.EMPTY, inConstrCall = false).select(alias)
+ if (alias.owner != currentClass.superClass)
+ // need to use shadowed in order not to accidentally address an
+ // intervening private forwarder in the superclass
+ superAcc = superAcc.withType(superAcc.tpe.asInstanceOf[TermRef].shadowed)
+ typr.println(i"adding param forwarder $superAcc")
+ DefDef(sym, superAcc.ensureConforms(sym.info.widen))
}
return forwarder(ctx.withPhase(thisTransformer.next))
}