@@ -77,7 +77,7 @@ private[async] trait AnfTransform {
77
77
stats :+ expr :+ api.typecheck(atPos(expr.pos)(Throw (Apply (Select (New (gen.mkAttributedRef(defn.IllegalStateExceptionClass )), nme.CONSTRUCTOR ), Nil ))))
78
78
expr match {
79
79
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)
81
81
val ref = gen.mkAttributedStableRef(valDef.symbol).setType(tree.tpe)
82
82
val ref1 = if (ref.tpe =:= definitions.UnitTpe )
83
83
// https://github.com/scala/async/issues/74
@@ -109,7 +109,7 @@ private[async] trait AnfTransform {
109
109
} else if (expr.tpe =:= definitions.NothingTpe ) {
110
110
statsExprThrow
111
111
} else {
112
- val varDef = defineVar(name.ifRes, expr.tpe, tree.pos)
112
+ val varDef = defineVar(name.ifRes() , expr.tpe, tree.pos)
113
113
def typedAssign (lhs : Tree ) =
114
114
api.typecheck(atPos(lhs.pos)(Assign (Ident (varDef.symbol), mkAttributedCastPreservingAnnotations(lhs, tpe(varDef.symbol)))))
115
115
@@ -140,7 +140,7 @@ private[async] trait AnfTransform {
140
140
} else if (expr.tpe =:= definitions.NothingTpe ) {
141
141
statsExprThrow
142
142
} else {
143
- val varDef = defineVar(name.matchRes, expr.tpe, tree.pos)
143
+ val varDef = defineVar(name.matchRes() , expr.tpe, tree.pos)
144
144
def typedAssign (lhs : Tree ) =
145
145
api.typecheck(atPos(lhs.pos)(Assign (Ident (varDef.symbol), mkAttributedCastPreservingAnnotations(lhs, tpe(varDef.symbol)))))
146
146
val casesWithAssign = cases map {
@@ -163,14 +163,14 @@ private[async] trait AnfTransform {
163
163
}
164
164
}
165
165
166
- def defineVar (prefix : TermName , 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))
168
168
valDef(sym, mkZero(uncheckedBounds(tp))).setType(NoType ).setPos(pos)
169
169
}
170
170
}
171
171
172
- def defineVal (prefix : TermName , 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))
174
174
internal.valDef(sym, internal.changeOwner(lhs, api.currentOwner, sym)).setType(NoType ).setPos(pos)
175
175
}
176
176
@@ -212,7 +212,7 @@ private[async] trait AnfTransform {
212
212
case Arg (expr, _, argName) =>
213
213
linearize.transformToList(expr) match {
214
214
case stats :+ expr1 =>
215
- val valDef = defineVal(argName, expr1, expr1.pos)
215
+ val valDef = defineVal(name.freshen( argName) , expr1, expr1.pos)
216
216
require(valDef.tpe != null , valDef)
217
217
val stats1 = stats :+ valDef
218
218
(stats1, atPos(tree.pos.makeTransparent)(gen.stabilize(gen.mkAttributedIdent(valDef.symbol))))
@@ -279,8 +279,9 @@ private[async] trait AnfTransform {
279
279
// TODO we can move this into ExprBuilder once we get rid of `AsyncDefinitionUseAnalyzer`.
280
280
val block = linearize.transformToBlock(body)
281
281
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 )
284
285
(vd, (b.symbol, vd.symbol))
285
286
}).unzip
286
287
val (from, to) = mappings.unzip
@@ -333,7 +334,7 @@ private[async] trait AnfTransform {
333
334
// Otherwise, create the matchres var. We'll callers of the label def below.
334
335
// Remember: we're iterating through the statement sequence in reverse, so we'll get
335
336
// 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)
337
338
matchResults += matchResult
338
339
caseDefToMatchResult(ld.symbol) = matchResult.symbol
339
340
val rhs2 = ld.rhs.substituteSymbols(param.symbol :: Nil , matchResult.symbol :: Nil )
@@ -408,3 +409,5 @@ private[async] trait AnfTransform {
408
409
}).asInstanceOf [Block ]
409
410
}
410
411
}
412
+
413
+ object SyntheticBindVal
0 commit comments