包含循环的异步函数在JS后端产生无限循环


如图, foreach_async_and_sync函数应该分别以异步和同步高阶函数遍历xs中的内容然后退出.

在JS后端上, 它大致生成如下代码:


可以看到, 第22行的break会从switch在跳出, 然后在不更新_tmp的情况下重新进入下一轮while循环, 造成程序不停机.

而假如在函数末尾加如其他代码(比如一行println("")), 函数生成如下代码:


第22行的break被替换为return, 函数正常退出.