aboutsummaryrefslogtreecommitdiff
path: root/src/dotty/tools/dotc/transform/Erasure.scala
diff options
context:
space:
mode:
authorDmitry Petrashko <dark@d-d.me>2015-04-01 19:46:37 +0200
committerDmitry Petrashko <dark@d-d.me>2015-04-01 19:46:37 +0200
commitd6273d66567a48cdc80df4222232a9857072d323 (patch)
tree59c339d3fe95837c104b3ace5defbb4bbcd7f5f4 /src/dotty/tools/dotc/transform/Erasure.scala
parent668890cb1b467652cecdb3b44361c32476aa405f (diff)
parentccf3951b5fa7dde2c5aa08eb192024c740ec9697 (diff)
downloaddotty-d6273d66567a48cdc80df4222232a9857072d323.tar.gz
dotty-d6273d66567a48cdc80df4222232a9857072d323.tar.bz2
dotty-d6273d66567a48cdc80df4222232a9857072d323.zip
Merge pull request #449 from dotty-staging/fix-context-in-forwarders
Fixes that make bridges smaller.
Diffstat (limited to 'src/dotty/tools/dotc/transform/Erasure.scala')
-rw-r--r--src/dotty/tools/dotc/transform/Erasure.scala20
1 files changed, 14 insertions, 6 deletions
diff --git a/src/dotty/tools/dotc/transform/Erasure.scala b/src/dotty/tools/dotc/transform/Erasure.scala
index 1b5f1ffba..3674f7375 100644
--- a/src/dotty/tools/dotc/transform/Erasure.scala
+++ b/src/dotty/tools/dotc/transform/Erasure.scala
@@ -504,19 +504,27 @@ object Erasure extends TypeTestsCasts{
}
def makeBridgeDef(newDef: tpd.DefDef, parentSym: Symbol)(implicit ctx: Context): tpd.DefDef = {
+ val newDefSym = newDef.symbol
+ val currentClass = newDefSym.owner.asClass
+
def error(reason: String) = {
- assert(false, s"failure creating bridge from ${newDef.symbol} to ${parentSym}, reason: $reason")
+ assert(false, s"failure creating bridge from ${newDefSym} to ${parentSym}, reason: $reason")
???
}
- val bridge = ctx.newSymbol(newDef.symbol.owner,
- parentSym.name, parentSym.flags | Flags.Bridge, parentSym.info, coord = newDef.symbol.owner.coord).asTerm
+ val bridge = ctx.newSymbol(currentClass,
+ parentSym.name, parentSym.flags | Flags.Bridge, parentSym.info, coord = newDefSym.owner.coord).asTerm
bridge.enteredAfter(ctx.phase.prev.asInstanceOf[DenotTransformer]) // this should be safe, as we're executing in context of next phase
- ctx.debuglog(s"generating bridge from ${newDef.symbol} to $bridge")
+ ctx.debuglog(s"generating bridge from ${newDefSym} to $bridge")
+
+ val sel: Tree = This(currentClass).select(newDefSym.termRef)
- val sel: Tree = This(newDef.symbol.owner.asClass).select(newDef.symbol.termRef)
+ val resultType = parentSym.info.widen.resultType
+
+ val bridgeCtx = ctx.withOwner(bridge)
- val resultType = bridge.info.widen.resultType
tpd.DefDef(bridge, { paramss: List[List[tpd.Tree]] =>
+ implicit val ctx: Context = bridgeCtx
+
val rhs = paramss.foldLeft(sel)((fun, vparams) =>
fun.tpe.widen match {
case MethodType(names, types) => Apply(fun, (vparams, types).zipped.map(adapt(_, _, untpd.EmptyTree)))