Skip to content

Commit d6273d6

Browse files
committed
Merge pull request #449 from dotty-staging/fix-context-in-forwarders
Fixes that make bridges smaller.
2 parents 668890c + ccf3951 commit d6273d6

File tree

2 files changed

+15
-7
lines changed

2 files changed

+15
-7
lines changed

src/dotty/tools/dotc/ast/TreeInfo.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -343,7 +343,7 @@ trait TypedTreeInfo extends TreeInfo[Type] { self: Trees.Instance[Type] =>
343343
*/
344344
private def refPurity(tree: tpd.Tree)(implicit ctx: Context): PurityLevel =
345345
if (!tree.tpe.widen.isParameterless) Pure
346-
else if (!tree.symbol.is(Stable)) Impure
346+
else if (!tree.symbol.isStable) Impure
347347
else if (tree.symbol.is(Lazy)) Idempotent // TODO add Module flag, sinxce Module vals or not Lazy from the start.
348348
else Pure
349349

src/dotty/tools/dotc/transform/Erasure.scala

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -504,19 +504,27 @@ object Erasure extends TypeTestsCasts{
504504
}
505505

506506
def makeBridgeDef(newDef: tpd.DefDef, parentSym: Symbol)(implicit ctx: Context): tpd.DefDef = {
507+
val newDefSym = newDef.symbol
508+
val currentClass = newDefSym.owner.asClass
509+
507510
def error(reason: String) = {
508-
assert(false, s"failure creating bridge from ${newDef.symbol} to ${parentSym}, reason: $reason")
511+
assert(false, s"failure creating bridge from ${newDefSym} to ${parentSym}, reason: $reason")
509512
???
510513
}
511-
val bridge = ctx.newSymbol(newDef.symbol.owner,
512-
parentSym.name, parentSym.flags | Flags.Bridge, parentSym.info, coord = newDef.symbol.owner.coord).asTerm
514+
val bridge = ctx.newSymbol(currentClass,
515+
parentSym.name, parentSym.flags | Flags.Bridge, parentSym.info, coord = newDefSym.owner.coord).asTerm
513516
bridge.enteredAfter(ctx.phase.prev.asInstanceOf[DenotTransformer]) // this should be safe, as we're executing in context of next phase
514-
ctx.debuglog(s"generating bridge from ${newDef.symbol} to $bridge")
517+
ctx.debuglog(s"generating bridge from ${newDefSym} to $bridge")
518+
519+
val sel: Tree = This(currentClass).select(newDefSym.termRef)
515520

516-
val sel: Tree = This(newDef.symbol.owner.asClass).select(newDef.symbol.termRef)
521+
val resultType = parentSym.info.widen.resultType
522+
523+
val bridgeCtx = ctx.withOwner(bridge)
517524

518-
val resultType = bridge.info.widen.resultType
519525
tpd.DefDef(bridge, { paramss: List[List[tpd.Tree]] =>
526+
implicit val ctx: Context = bridgeCtx
527+
520528
val rhs = paramss.foldLeft(sel)((fun, vparams) =>
521529
fun.tpe.widen match {
522530
case MethodType(names, types) => Apply(fun, (vparams, types).zipped.map(adapt(_, _, untpd.EmptyTree)))

0 commit comments

Comments
 (0)