@@ -77,7 +77,7 @@ private[async] trait AnfTransform {
7777 stats :+ expr :+ api.typecheck(atPos(expr.pos)(Throw (Apply (Select (New (gen.mkAttributedRef(defn.IllegalStateExceptionClass )), nme.CONSTRUCTOR ), Nil ))))
7878 expr match {
7979 case Apply (fun, args) if isAwait(fun) =>
80- val valDef = defineVal(name.await, expr, tree.pos)
80+ val valDef = defineVal(name.await() , expr, tree.pos)
8181 val ref = gen.mkAttributedStableRef(valDef.symbol).setType(tree.tpe)
8282 val ref1 = if (ref.tpe =:= definitions.UnitTpe )
8383 // https://github.com/scala/async/issues/74
@@ -109,7 +109,7 @@ private[async] trait AnfTransform {
109109 } else if (expr.tpe =:= definitions.NothingTpe ) {
110110 statsExprThrow
111111 } else {
112- val varDef = defineVar(name.ifRes, expr.tpe, tree.pos)
112+ val varDef = defineVar(name.ifRes() , expr.tpe, tree.pos)
113113 def typedAssign (lhs : Tree ) =
114114 api.typecheck(atPos(lhs.pos)(Assign (Ident (varDef.symbol), mkAttributedCastPreservingAnnotations(lhs, tpe(varDef.symbol)))))
115115
@@ -140,7 +140,7 @@ private[async] trait AnfTransform {
140140 } else if (expr.tpe =:= definitions.NothingTpe ) {
141141 statsExprThrow
142142 } else {
143- val varDef = defineVar(name.matchRes, expr.tpe, tree.pos)
143+ val varDef = defineVar(name.matchRes() , expr.tpe, tree.pos)
144144 def typedAssign (lhs : Tree ) =
145145 api.typecheck(atPos(lhs.pos)(Assign (Ident (varDef.symbol), mkAttributedCastPreservingAnnotations(lhs, tpe(varDef.symbol)))))
146146 val casesWithAssign = cases map {
@@ -163,14 +163,14 @@ private[async] trait AnfTransform {
163163 }
164164 }
165165
166- def defineVar (prefix : String , tp : Type , pos : Position ): ValDef = {
167- val sym = api.currentOwner.newTermSymbol(name.fresh(prefix) , pos, MUTABLE | SYNTHETIC ).setInfo(uncheckedBounds(tp))
166+ def defineVar (name : TermName , tp : Type , pos : Position ): ValDef = {
167+ val sym = api.currentOwner.newTermSymbol(name, pos, MUTABLE | SYNTHETIC ).setInfo(uncheckedBounds(tp))
168168 valDef(sym, mkZero(uncheckedBounds(tp))).setType(NoType ).setPos(pos)
169169 }
170170 }
171171
172- def defineVal (prefix : String , lhs : Tree , pos : Position ): ValDef = {
173- val sym = api.currentOwner.newTermSymbol(name.fresh(prefix) , pos, SYNTHETIC ).setInfo(uncheckedBounds(lhs.tpe))
172+ def defineVal (name : TermName , lhs : Tree , pos : Position ): ValDef = {
173+ val sym = api.currentOwner.newTermSymbol(name, pos, SYNTHETIC ).setInfo(uncheckedBounds(lhs.tpe))
174174 internal.valDef(sym, internal.changeOwner(lhs, api.currentOwner, sym)).setType(NoType ).setPos(pos)
175175 }
176176
@@ -212,7 +212,7 @@ private[async] trait AnfTransform {
212212 case Arg (expr, _, argName) =>
213213 linearize.transformToList(expr) match {
214214 case stats :+ expr1 =>
215- val valDef = defineVal(argName, expr1, expr1.pos)
215+ val valDef = defineVal(name.freshen( argName) , expr1, expr1.pos)
216216 require(valDef.tpe != null , valDef)
217217 val stats1 = stats :+ valDef
218218 (stats1, atPos(tree.pos.makeTransparent)(gen.stabilize(gen.mkAttributedIdent(valDef.symbol))))
@@ -279,8 +279,9 @@ private[async] trait AnfTransform {
279279 // TODO we can move this into ExprBuilder once we get rid of `AsyncDefinitionUseAnalyzer`.
280280 val block = linearize.transformToBlock(body)
281281 val (valDefs, mappings) = (pat collect {
282- case b@ Bind (name, _) =>
283- val vd = defineVal(name.toTermName + AnfTransform .this .name.bindSuffix, gen.mkAttributedStableRef(b.symbol).setPos(b.pos), b.pos)
282+ case b@ Bind (bindName, _) =>
283+ val vd = defineVal(name.freshen(bindName.toTermName), gen.mkAttributedStableRef(b.symbol).setPos(b.pos), b.pos)
284+ vd.symbol.updateAttachment(SyntheticBindVal )
284285 (vd, (b.symbol, vd.symbol))
285286 }).unzip
286287 val (from, to) = mappings.unzip
@@ -333,7 +334,7 @@ private[async] trait AnfTransform {
333334 // Otherwise, create the matchres var. We'll callers of the label def below.
334335 // Remember: we're iterating through the statement sequence in reverse, so we'll get
335336 // to the LabelDef and mutate `matchResults` before we'll get to its callers.
336- val matchResult = linearize.defineVar(name.matchRes, param.tpe, ld.pos)
337+ val matchResult = linearize.defineVar(name.matchRes() , param.tpe, ld.pos)
337338 matchResults += matchResult
338339 caseDefToMatchResult(ld.symbol) = matchResult.symbol
339340 val rhs2 = ld.rhs.substituteSymbols(param.symbol :: Nil , matchResult.symbol :: Nil )
@@ -408,3 +409,5 @@ private[async] trait AnfTransform {
408409 }).asInstanceOf [Block ]
409410 }
410411}
412+
413+ object SyntheticBindVal
0 commit comments