Raw FIR: generate Unit at the end of empty lambda

This commit is contained in:
Mikhail Glukhikh
2019-04-01 12:56:54 +03:00
parent eb86c9e540
commit eb1aaad41b
3 changed files with 29 additions and 4 deletions
@@ -669,9 +669,14 @@ class RawFirBuilder(val session: FirSession, val stubMode: Boolean) {
FirLabelImpl(this@RawFirBuilder.session, expression, it.asString())
}
val bodyExpression = literal.bodyExpression.toFirExpression("Lambda has no body")
if (destructuringBlock is FirBlock && bodyExpression is FirBlockImpl) {
for ((index, statement) in destructuringBlock.statements.withIndex()) {
bodyExpression.statements.add(index, statement)
if (bodyExpression is FirBlockImpl) {
if (bodyExpression.statements.isEmpty()) {
bodyExpression.statements.add(FirUnitExpression(this@RawFirBuilder.session, expression))
}
if (destructuringBlock is FirBlock) {
for ((index, statement) in destructuringBlock.statements.withIndex()) {
bodyExpression.statements.add(index, statement)
}
}
}
body = FirSingleExpressionBlock(this@RawFirBuilder.session, bodyExpression.toReturn())
@@ -26,4 +26,8 @@ fun bar(): Int {
fun test(list: List<Int>) {
val map = mutableMapOf<Int, String>()
list.forEach { map.getOrPut(it, { mutableListOf() }) += "" }
}
}
val simple = { }
val another = { 42 }
@@ -81,3 +81,19 @@ FILE: lambda.kt
}
)
}
public? final? val simple: <implicit> = fun <implicit>.<anonymous>(): <implicit> {
^ {
Unit
}
}
public? get(): <implicit>
public? final? val another: <implicit> = fun <implicit>.<anonymous>(): <implicit> {
^ {
Int(42)
}
}
public? get(): <implicit>