Merge interop part 1 and part 2 phases

This commit is contained in:
Svyatoslav Scherbina
2020-01-28 12:12:58 +03:00
committed by SvyatoslavScherbina
parent f989ba0f55
commit b46200bc74
3 changed files with 20 additions and 17 deletions
@@ -239,18 +239,11 @@ internal val callableReferencePhase = makeKonanFileLoweringPhase(
prerequisite = setOf(delegationPhase) // TODO: make weak dependency on `testProcessorPhase` prerequisite = setOf(delegationPhase) // TODO: make weak dependency on `testProcessorPhase`
) )
internal val interopPart1Phase = makeKonanFileLoweringPhase( internal val interopPhase = makeKonanFileLoweringPhase(
::InteropLoweringPart1, ::InteropLowering,
name = "InteropPart1", name = "Interop",
description = "Interop lowering, part 1", description = "Interop lowering",
prerequisite = setOf(inlinePhase) prerequisite = setOf(inlinePhase, localFunctionsPhase)
)
internal val interopPart2Phase = makeKonanFileLoweringPhase(
::InteropLoweringPart2,
name = "InteropPart2",
description = "Interop lowering, part 2",
prerequisite = setOf(localFunctionsPhase)
) )
internal val varargPhase = makeKonanFileLoweringPhase( internal val varargPhase = makeKonanFileLoweringPhase(
@@ -335,8 +335,7 @@ internal val allLoweringsPhase = namedIrModulePhase(
enumClassPhase then enumClassPhase then
delegationPhase then delegationPhase then
callableReferencePhase then callableReferencePhase then
interopPart1Phase then interopPhase then
interopPart2Phase then
varargPhase then varargPhase then
compileTimeEvaluatePhase then compileTimeEvaluatePhase then
coroutinesPhase then coroutinesPhase then
@@ -50,7 +50,18 @@ import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe
import org.jetbrains.kotlin.resolve.descriptorUtil.module import org.jetbrains.kotlin.resolve.descriptorUtil.module
internal abstract class BaseInteropIrTransformer(private val context: Context) : IrBuildingTransformer(context) { internal class InteropLowering(context: Context) : FileLoweringPass {
// TODO: merge these lowerings.
private val part1 = InteropLoweringPart1(context)
private val part2 = InteropLoweringPart2(context)
override fun lower(irFile: IrFile) {
part1.lower(irFile)
part2.lower(irFile)
}
}
private abstract class BaseInteropIrTransformer(private val context: Context) : IrBuildingTransformer(context) {
protected inline fun <T> generateWithStubs(element: IrElement? = null, block: KotlinStubs.() -> T): T = protected inline fun <T> generateWithStubs(element: IrElement? = null, block: KotlinStubs.() -> T): T =
createKotlinStubs(element).block() createKotlinStubs(element).block()
@@ -105,7 +116,7 @@ internal abstract class BaseInteropIrTransformer(private val context: Context) :
protected abstract fun addTopLevel(declaration: IrDeclaration) protected abstract fun addTopLevel(declaration: IrDeclaration)
} }
internal class InteropLoweringPart1(val context: Context) : BaseInteropIrTransformer(context), FileLoweringPass { private class InteropLoweringPart1(val context: Context) : BaseInteropIrTransformer(context), FileLoweringPass {
private val symbols get() = context.ir.symbols private val symbols get() = context.ir.symbols
@@ -799,7 +810,7 @@ internal class InteropLoweringPart1(val context: Context) : BaseInteropIrTransfo
/** /**
* Lowers some interop intrinsic calls. * Lowers some interop intrinsic calls.
*/ */
internal class InteropLoweringPart2(val context: Context) : FileLoweringPass { private class InteropLoweringPart2(val context: Context) : FileLoweringPass {
override fun lower(irFile: IrFile) { override fun lower(irFile: IrFile) {
val transformer = InteropTransformer(context, irFile) val transformer = InteropTransformer(context, irFile)
irFile.transformChildrenVoid(transformer) irFile.transformChildrenVoid(transformer)