@@ -326,7 +326,7 @@ abstract class LambdaLift extends InfoTransform {
326326 lifted(MethodType (sym.info.params ::: addParams, sym.info.resultType)))
327327
328328 copyDefDef(tree)(vparamss = List (vparams ++ freeParams))
329- case ClassDef (mods, name, tparams, impl @ Template (parents, self, body) ) =>
329+ case ClassDef (mods, name, tparams, impl) =>
330330 // Disabled attempt to to add getters to freeParams
331331 // this does not work yet. Problem is that local symbols need local names
332332 // and references to local symbols need to be transformed into
@@ -338,8 +338,7 @@ abstract class LambdaLift extends InfoTransform {
338338 // DefDef(getter, rhs) setPos tree.pos setType NoType
339339 // }
340340 // val newDefs = if (sym.isTrait) freeParams ::: (ps map paramGetter) else freeParams
341- treeCopy.ClassDef (tree, mods, name, tparams,
342- treeCopy.Template (impl, parents, self, body ::: freeParams))
341+ treeCopy.ClassDef (tree, mods, name, tparams, deriveTemplate(impl)(_ ::: freeParams))
343342 }
344343 case None =>
345344 tree
@@ -481,15 +480,14 @@ abstract class LambdaLift extends InfoTransform {
481480 /** Transform statements and add lifted definitions to them. */
482481 override def transformStats (stats : List [Tree ], exprOwner : Symbol ): List [Tree ] = {
483482 def addLifted (stat : Tree ): Tree = stat match {
484- case ClassDef (mods, name, tparams, impl @ Template (parents, self, body) ) =>
483+ case ClassDef (mods, name, tparams, impl) =>
485484 val lifted = liftedDefs get stat.symbol match {
486485 case Some (xs) => xs reverseMap addLifted
487486 case _ => log(" unexpectedly no lifted defs for " + stat.symbol) ; Nil
488487 }
489- val result = treeCopy.ClassDef (
490- stat, mods, name, tparams, treeCopy.Template (impl, parents, self, body ::: lifted))
491- liftedDefs -= stat.symbol
492- result
488+ try treeCopy.ClassDef (stat, mods, name, tparams, deriveTemplate(impl)(_ ::: lifted))
489+ finally liftedDefs -= stat.symbol
490+
493491 case DefDef (_, _, _, _, _, Block (Nil , expr)) if ! stat.symbol.isConstructor =>
494492 deriveDefDef(stat)(_ => expr)
495493 case _ =>
0 commit comments