@@ -152,35 +152,30 @@ trait AsyncTransform {
152152 // fields. Similarly, replace references to them with references to the field.
153153 //
154154 // This transform will only be run on the RHS of `def foo`.
155- class UseFields extends MacroTypingTransformer {
156- override def transform (tree : Tree ): Tree = tree match {
157- case _ if currentOwner == stateMachineClass =>
158- super .transform(tree)
159- case ValDef (_, _, _, rhs) if liftedSyms(tree.symbol) =>
160- atOwner(currentOwner) {
161- val fieldSym = tree.symbol
162- val set = Assign (gen.mkAttributedStableRef(fieldSym.owner.thisType, fieldSym), transform(rhs))
163- set.changeOwner(tree.symbol, currentOwner)
164- localTyper.typedPos(tree.pos)(set)
165- }
166- case _ : DefTree if liftedSyms(tree.symbol) =>
167- EmptyTree
168- case Ident (name) if liftedSyms(tree.symbol) =>
155+ val useFields : (Tree , TypingTransformApi ) => Tree = (tree, api) => tree match {
156+ case _ if api.currentOwner == stateMachineClass =>
157+ api.default(tree)
158+ case ValDef (_, _, _, rhs) if liftedSyms(tree.symbol) =>
159+ api.atOwner(api.currentOwner) {
169160 val fieldSym = tree.symbol
170- atPos(tree.pos) {
171- gen.mkAttributedStableRef(fieldSym.owner.thisType, fieldSym).setType(tree.tpe)
172- }
173- case _ =>
174- super .transform(tree)
175- }
161+ val set = Assign (gen.mkAttributedStableRef(fieldSym.owner.thisType, fieldSym), api.recur(rhs))
162+ set.changeOwner(tree.symbol, api.currentOwner)
163+ api.typecheck(atPos(tree.pos)(set))
164+ }
165+ case _ : DefTree if liftedSyms(tree.symbol) =>
166+ EmptyTree
167+ case Ident (name) if liftedSyms(tree.symbol) =>
168+ val fieldSym = tree.symbol
169+ atPos(tree.pos) {
170+ gen.mkAttributedStableRef(fieldSym.owner.thisType, fieldSym).setType(tree.tpe)
171+ }
172+ case _ =>
173+ api.default(tree)
176174 }
177175
178176 val liftablesUseFields = liftables.map {
179177 case vd : ValDef => vd
180- case x =>
181- val useField = new UseFields ()
182- // .substituteSymbols(fromSyms, toSyms)
183- useField.atOwner(stateMachineClass)(useField.transform(x))
178+ case x => typingTransform(x, stateMachineClass)(useFields)
184179 }
185180
186181 tree.children.foreach(_.changeOwner(enclosingOwner, tree.symbol))
@@ -189,8 +184,7 @@ trait AsyncTransform {
189184 /* Fixes up DefDef: use lifted fields in `body` */
190185 def fixup (dd : DefDef , body : Tree , api : TypingTransformApi ): Tree = {
191186 val spliceeAnfFixedOwnerSyms = body
192- val useField = new UseFields ()
193- val newRhs = useField.atOwner(dd.symbol)(useField.transform(spliceeAnfFixedOwnerSyms))
187+ val newRhs = typingTransform(spliceeAnfFixedOwnerSyms, dd.symbol)(useFields)
194188 val newRhsTyped = api.atOwner(dd, dd.symbol)(api.typecheck(newRhs))
195189 treeCopy.DefDef (dd, dd.mods, dd.name, dd.tparams, dd.vparamss, dd.tpt, newRhsTyped)
196190 }
0 commit comments