@@ -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 branchWithAssign (orig : Tree ) = api.typecheck(atPos(orig.pos) {
114
114
def cast (t : Tree ) = mkAttributedCastPreservingAnnotations(t, tpe(varDef.symbol))
115
115
orig match {
@@ -134,7 +134,7 @@ private[async] trait AnfTransform {
134
134
} else if (expr.tpe =:= definitions.NothingTpe ) {
135
135
statsExprThrow
136
136
} else {
137
- val varDef = defineVar(name.matchRes, expr.tpe, tree.pos)
137
+ val varDef = defineVar(name.matchRes() , expr.tpe, tree.pos)
138
138
def typedAssign (lhs : Tree ) =
139
139
api.typecheck(atPos(lhs.pos)(Assign (Ident (varDef.symbol), mkAttributedCastPreservingAnnotations(lhs, tpe(varDef.symbol)))))
140
140
val casesWithAssign = cases map {
@@ -154,14 +154,14 @@ private[async] trait AnfTransform {
154
154
}
155
155
}
156
156
157
- def defineVar (prefix : TermName , tp : Type , pos : Position ): ValDef = {
158
- val sym = api.currentOwner.newTermSymbol(name.fresh(prefix) , pos, MUTABLE | SYNTHETIC ).setInfo(uncheckedBounds(tp))
157
+ def defineVar (name : TermName , tp : Type , pos : Position ): ValDef = {
158
+ val sym = api.currentOwner.newTermSymbol(name, pos, MUTABLE | SYNTHETIC ).setInfo(uncheckedBounds(tp))
159
159
valDef(sym, mkZero(uncheckedBounds(tp))).setType(NoType ).setPos(pos)
160
160
}
161
161
}
162
162
163
- def defineVal (prefix : TermName , lhs : Tree , pos : Position ): ValDef = {
164
- val sym = api.currentOwner.newTermSymbol(name.fresh(prefix) , pos, SYNTHETIC ).setInfo(uncheckedBounds(lhs.tpe))
163
+ def defineVal (name : TermName , lhs : Tree , pos : Position ): ValDef = {
164
+ val sym = api.currentOwner.newTermSymbol(name, pos, SYNTHETIC ).setInfo(uncheckedBounds(lhs.tpe))
165
165
internal.valDef(sym, internal.changeOwner(lhs, api.currentOwner, sym)).setType(NoType ).setPos(pos)
166
166
}
167
167
@@ -203,7 +203,7 @@ private[async] trait AnfTransform {
203
203
case Arg (expr, _, argName) =>
204
204
linearize.transformToList(expr) match {
205
205
case stats :+ expr1 =>
206
- val valDef = defineVal(argName, expr1, expr1.pos)
206
+ val valDef = defineVal(name.freshen( argName) , expr1, expr1.pos)
207
207
require(valDef.tpe != null , valDef)
208
208
val stats1 = stats :+ valDef
209
209
(stats1, atPos(tree.pos.makeTransparent)(gen.stabilize(gen.mkAttributedIdent(valDef.symbol))))
@@ -275,8 +275,9 @@ private[async] trait AnfTransform {
275
275
// TODO we can move this into ExprBuilder once we get rid of `AsyncDefinitionUseAnalyzer`.
276
276
val block = linearize.transformToBlock(body)
277
277
val (valDefs, mappings) = (pat collect {
278
- case b@ Bind (name, _) =>
279
- val vd = defineVal(name.toTermName + AnfTransform .this .name.bindSuffix, gen.mkAttributedStableRef(b.symbol).setPos(b.pos), b.pos)
278
+ case b@ Bind (bindName, _) =>
279
+ val vd = defineVal(name.freshen(bindName.toTermName), gen.mkAttributedStableRef(b.symbol).setPos(b.pos), b.pos)
280
+ vd.symbol.updateAttachment(SyntheticBindVal )
280
281
(vd, (b.symbol, vd.symbol))
281
282
}).unzip
282
283
val (from, to) = mappings.unzip
@@ -329,7 +330,7 @@ private[async] trait AnfTransform {
329
330
// Otherwise, create the matchres var. We'll callers of the label def below.
330
331
// Remember: we're iterating through the statement sequence in reverse, so we'll get
331
332
// to the LabelDef and mutate `matchResults` before we'll get to its callers.
332
- val matchResult = linearize.defineVar(name.matchRes, param.tpe, ld.pos)
333
+ val matchResult = linearize.defineVar(name.matchRes() , param.tpe, ld.pos)
333
334
matchResults += matchResult
334
335
caseDefToMatchResult(ld.symbol) = matchResult.symbol
335
336
val rhs2 = ld.rhs.substituteSymbols(param.symbol :: Nil , matchResult.symbol :: Nil )
@@ -404,3 +405,5 @@ private[async] trait AnfTransform {
404
405
}).asInstanceOf [Block ]
405
406
}
406
407
}
408
+
409
+ object SyntheticBindVal
0 commit comments