aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/scala/async/internal/TransformUtils.scala
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/scala/scala/async/internal/TransformUtils.scala')
-rw-r--r--src/main/scala/scala/async/internal/TransformUtils.scala13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/main/scala/scala/async/internal/TransformUtils.scala b/src/main/scala/scala/async/internal/TransformUtils.scala
index 71fddaa..e382c62 100644
--- a/src/main/scala/scala/async/internal/TransformUtils.scala
+++ b/src/main/scala/scala/async/internal/TransformUtils.scala
@@ -96,6 +96,19 @@ private[async] trait TransformUtils {
treeInfo.isExprSafeToInline(tree)
}
+ // `while(await(x))` ... or `do { await(x); ... } while(...)` contain an `If` that loops;
+ // we must break that `If` into states so that it convert the label jump into a state machine
+ // transition
+ final def containsForiegnLabelJump(t: Tree): Boolean = {
+ val labelDefs = t.collect {
+ case ld: LabelDef => ld.symbol
+ }.toSet
+ t.exists {
+ case rt: RefTree => !(labelDefs contains rt.symbol)
+ case _ => false
+ }
+ }
+
/** Map a list of arguments to:
* - A list of argument Trees
* - A list of auxillary results.