[JS IR] Support function reference to array inline constructor

This commit is contained in:
Roman Artemev
2021-06-01 19:47:51 +03:00
parent 84334b087c
commit 974779e91b
2 changed files with 112 additions and 18 deletions
@@ -21,8 +21,8 @@ import org.jetbrains.kotlin.ir.backend.js.lower.calls.CallsLowering
import org.jetbrains.kotlin.ir.backend.js.lower.cleanup.CleanupLowering
import org.jetbrains.kotlin.ir.backend.js.lower.coroutines.JsSuspendFunctionsLowering
import org.jetbrains.kotlin.ir.backend.js.lower.inline.CopyInlineFunctionBodyLowering
import org.jetbrains.kotlin.ir.backend.js.lower.inline.jsRecordExtractedLocalClasses
import org.jetbrains.kotlin.ir.backend.js.lower.inline.RemoveInlineDeclarationsWithReifiedTypeParametersLowering
import org.jetbrains.kotlin.ir.backend.js.lower.inline.jsRecordExtractedLocalClasses
import org.jetbrains.kotlin.ir.declarations.IrFile
import org.jetbrains.kotlin.ir.declarations.IrModuleFragment
@@ -192,10 +192,17 @@ private val jsCodeOutliningPhase = makeBodyLoweringPhase(
description = "Outline js() calls where JS code references Kotlin locals"
)
private val arrayConstructorReferencePhase = makeBodyLoweringPhase(
::ArrayConstructorReferenceLowering,
name = "ArrayConstructorReference",
description = "Transform `::Array` into a lambda"
)
private val arrayConstructorPhase = makeBodyLoweringPhase(
::ArrayConstructorLowering,
name = "ArrayConstructor",
description = "Transform `Array(size) { index -> value }` into a loop"
description = "Transform `Array(size) { index -> value }` into a loop",
prerequisite = setOf(arrayConstructorReferencePhase)
)
private val sharedVariablesLoweringPhase = makeBodyLoweringPhase(
@@ -721,6 +728,7 @@ private val loweringList = listOf<Lowering>(
expectDeclarationsRemovingPhase,
stripTypeAliasDeclarationsPhase,
jsCodeOutliningPhase,
arrayConstructorReferencePhase,
arrayConstructorPhase,
lateinitNullableFieldsPhase,
lateinitDeclarationLoweringPhase,