[JS Legacy] Fix returning Char from suspend functions (KT-44221)

Mark translated expression with a proper type, like we do with
non-suspending calls, to coerce it later.
This commit is contained in:
Svyatoslav Kuzmich
2021-01-11 21:49:06 +03:00
parent 2d88ff6fb2
commit ab753625fe
9 changed files with 60 additions and 1 deletions
@@ -6853,6 +6853,11 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT
runTest("compiler/testData/codegen/box/coroutines/kt42554.kt");
}
@TestMetadata("kt44221.kt")
public void testKt44221() throws Exception {
runTest("compiler/testData/codegen/box/coroutines/kt44221.kt");
}
@TestMetadata("lastExpressionIsLoop.kt")
public void testLastExpressionIsLoop() throws Exception {
runTest("compiler/testData/codegen/box/coroutines/lastExpressionIsLoop.kt");
+24
View File
@@ -0,0 +1,24 @@
// WITH_RUNTIME
import kotlin.coroutines.*
fun launch(block: suspend () -> String): String {
var result = ""
block.startCoroutine(Continuation(EmptyCoroutineContext) { result = it.getOrThrow() })
return result
}
private class CharTest {
private val test: Char = '!'
fun simpleTest() = launch {
val ch = get()
if (ch == '!') "OK" else "Fail"
}
suspend fun get(): Char? = test
}
fun box(): String = CharTest().simpleTest()
@@ -6853,6 +6853,11 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
runTest("compiler/testData/codegen/box/coroutines/kt42554.kt");
}
@TestMetadata("kt44221.kt")
public void testKt44221() throws Exception {
runTest("compiler/testData/codegen/box/coroutines/kt44221.kt");
}
@TestMetadata("lastExpressionIsLoop.kt")
public void testLastExpressionIsLoop() throws Exception {
runTest("compiler/testData/codegen/box/coroutines/lastExpressionIsLoop.kt");
@@ -6853,6 +6853,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes
runTest("compiler/testData/codegen/box/coroutines/kt42554.kt");
}
@TestMetadata("kt44221.kt")
public void testKt44221() throws Exception {
runTest("compiler/testData/codegen/box/coroutines/kt44221.kt");
}
@TestMetadata("lastExpressionIsLoop.kt")
public void testLastExpressionIsLoop() throws Exception {
runTest("compiler/testData/codegen/box/coroutines/lastExpressionIsLoop.kt");
@@ -6853,6 +6853,11 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes
runTest("compiler/testData/codegen/box/coroutines/kt42554.kt");
}
@TestMetadata("kt44221.kt")
public void testKt44221() throws Exception {
runTest("compiler/testData/codegen/box/coroutines/kt44221.kt");
}
@TestMetadata("lastExpressionIsLoop.kt")
public void testLastExpressionIsLoop() throws Exception {
runTest("compiler/testData/codegen/box/coroutines/lastExpressionIsLoop.kt");
@@ -5658,6 +5658,11 @@ public class IrJsCodegenBoxES6TestGenerated extends AbstractIrJsCodegenBoxES6Tes
runTest("compiler/testData/codegen/box/coroutines/kt42554.kt");
}
@TestMetadata("kt44221.kt")
public void testKt44221() throws Exception {
runTest("compiler/testData/codegen/box/coroutines/kt44221.kt");
}
@TestMetadata("lastExpressionIsLoop.kt")
public void testLastExpressionIsLoop() throws Exception {
runTest("compiler/testData/codegen/box/coroutines/lastExpressionIsLoop.kt");
@@ -5658,6 +5658,11 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest {
runTest("compiler/testData/codegen/box/coroutines/kt42554.kt");
}
@TestMetadata("kt44221.kt")
public void testKt44221() throws Exception {
runTest("compiler/testData/codegen/box/coroutines/kt44221.kt");
}
@TestMetadata("lastExpressionIsLoop.kt")
public void testLastExpressionIsLoop() throws Exception {
runTest("compiler/testData/codegen/box/coroutines/lastExpressionIsLoop.kt");
@@ -5658,6 +5658,11 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest {
runTest("compiler/testData/codegen/box/coroutines/kt42554.kt");
}
@TestMetadata("kt44221.kt")
public void testKt44221() throws Exception {
runTest("compiler/testData/codegen/box/coroutines/kt44221.kt");
}
@TestMetadata("lastExpressionIsLoop.kt")
public void testLastExpressionIsLoop() throws Exception {
runTest("compiler/testData/codegen/box/coroutines/lastExpressionIsLoop.kt");
@@ -157,7 +157,7 @@ private fun translateFunctionCall(
source = resolvedCall.call.callElement
}))
context.currentBlock.statements += statement
return context.createCoroutineResult(resolvedCall)
callExpression = context.createCoroutineResult(resolvedCall)
}
else {
callExpression = callInfo.constructSafeCallIfNeeded(callExpression)