Skip to content

Commit 590c83c

Browse files
committed
Substitute the compacted state ids into the code snipptets in .dot
1 parent 990bf1c commit 590c83c

File tree

2 files changed

+37
-12
lines changed

2 files changed

+37
-12
lines changed

src/main/scala/scala/async/internal/ExprBuilder.scala

+13-12
Original file line numberDiff line numberDiff line change
@@ -397,7 +397,7 @@ trait ExprBuilder {
397397
dotBuilder.append(s"""${stateLabel(state.state)} [label=""").append("<")
398398
if (i != length - 1) {
399399
val CaseDef(_, _, body) = state.mkHandlerCaseForState
400-
toHtmlLabel(stateLabel(state.state), showCode(body), dotBuilder)
400+
toHtmlLabel(stateLabel(state.state), showCode(compactStateTransform.transform(body)), dotBuilder)
401401
} else {
402402
toHtmlLabel(stateLabel(state.state), state.allStats.map(showCode(_)).mkString("\n"), dotBuilder)
403403
}
@@ -506,18 +506,19 @@ trait ExprBuilder {
506506
})), EmptyTree)
507507
}
508508

509-
private def compactStates(m: Match): Tree = {
510-
val stateMemberSymbol = symLookup.stateMachineMember(name.state)
511-
val compactStateTransform = new Transformer {
512-
override def transform(tree: Tree): Tree = tree match {
513-
case as @ Assign(lhs, Literal(Constant(i: Integer))) if lhs.symbol == stateMemberSymbol =>
514-
val replacement = switchIds(i)
515-
treeCopy.Assign(tree, lhs, Literal(Constant(replacement)))
516-
case _: Match | _: CaseDef | _: Block | _: If =>
517-
super.transform(tree)
518-
case _ => tree
519-
}
509+
private lazy val stateMemberSymbol = symLookup.stateMachineMember(name.state)
510+
private val compactStateTransform = new Transformer {
511+
override def transform(tree: Tree): Tree = tree match {
512+
case as @ Assign(lhs, Literal(Constant(i: Integer))) if lhs.symbol == stateMemberSymbol =>
513+
val replacement = switchIds(i)
514+
treeCopy.Assign(tree, lhs, Literal(Constant(replacement)))
515+
case _: Match | _: CaseDef | _: Block | _: If =>
516+
super.transform(tree)
517+
case _ => tree
520518
}
519+
}
520+
521+
private def compactStates(m: Match): Tree = {
521522
val cases1 = m.cases.flatMap {
522523
case cd @ CaseDef(Literal(Constant(i: Integer)), EmptyTree, rhs) =>
523524
val replacement = switchIds(i)

src/test/scala/scala/async/run/late/LateExpansion.scala

+24
Original file line numberDiff line numberDiff line change
@@ -338,6 +338,30 @@ class LateExpansion {
338338
""")
339339
}
340340

341+
@Test def testDot(): Unit = {
342+
val result = run(
343+
"""
344+
import scala.async.run.late.{autoawait,lateasync}
345+
case class FixedFoo(foo: Int)
346+
class Foobar(val foo: Int, val bar: Double) {
347+
def guard: Boolean = true
348+
@autoawait @lateasync def getValue = 4.2
349+
@autoawait @lateasync def func(f: Any) = {
350+
("": Any) match {
351+
case (x1, y1) if guard => x1.toString; y1.toString
352+
case (x2, y2) if guard => x2.toString; y2.toString
353+
case (x3, y3) if guard => x3.toString; y3.toString
354+
case (x4, y4) =>
355+
getValue; x4.toString; y4.toString
356+
}
357+
}
358+
}
359+
object Test {
360+
@lateasync def test() = new Foobar(0, 0).func(4)
361+
}
362+
""")
363+
}
364+
341365
def wrapAndRun(code: String): Any = {
342366
run(
343367
s"""

0 commit comments

Comments
 (0)