33package com.bennyhuo.kotlin.ir.printer.compiler
44
55import com.bennyhuo.kotlin.ir.printer.compiler.options.Options
6+ import org.jetbrains.kotlin.backend.common.CommonBackendContext
67import org.jetbrains.kotlin.backend.common.phaser.Action
78import org.jetbrains.kotlin.backend.common.phaser.ActionState
89import org.jetbrains.kotlin.backend.common.phaser.BeforeOrAfter
@@ -21,6 +22,7 @@ import org.jetbrains.kotlin.ir.declarations.IrModuleFragment
2122fun registerPrinterForOptimizedIr () {
2223 registerPrinterForJvmTargets()
2324 registerPrinterForNativeTargets()
25+ registerPrinterForWasmTargets()
2426}
2527
2628private fun getIrPrinterForJvmTargets (outputDirOptPath : String ): Action <IrModuleFragment , JvmBackendContext > =
@@ -34,7 +36,7 @@ private fun registerPrinterForJvmTargets() {
3436 try {
3537 val actionsField = NamedCompilerPhase ::class .java.getDeclaredField(" actions" )
3638 actionsField.isAccessible = true
37- @Suppress(" UNCHECKED_CAST" )
39+ @Suppress(" UNCHECKED_CAST" )
3840 val actions = actionsField.get(jvmLoweringPhases) as MutableSet <Action <IrModuleFragment , JvmBackendContext >>
3941 actionsField.set(jvmLoweringPhases, actions + getIrPrinterForJvmTargets(Options .outputDirOptPath()))
4042
@@ -65,4 +67,28 @@ private fun registerPrinterForNativeTargets() {
6567 } catch (t: Throwable ) {
6668 logger.warn(" Failed to register the printer of optimized IR for native targets: $t " )
6769 }
70+ }
71+
72+ private fun getIrPrinterForWasmTargets (outputDirOptPath : String ): Action <IrModuleFragment , CommonBackendContext > =
73+ fun (_: ActionState , data : IrModuleFragment , _: CommonBackendContext ) {
74+ printIr(data, outputDirOptPath)
75+ }
76+
77+ private fun registerPrinterForWasmTargets () {
78+ try {
79+ val preactionsField = SimpleNamedCompilerPhase ::class .java.getDeclaredField(" preactions" )
80+ preactionsField.isAccessible = true
81+ @Suppress(" UNCHECKED_CAST" )
82+ val wasmLoweringPhasesKtClass = Class .forName(" org.jetbrains.kotlin.backend.wasm.WasmLoweringPhasesKt" )
83+ val validateIrAfterLoweringField = wasmLoweringPhasesKtClass.getDeclaredField(" validateIrAfterLowering" )
84+ validateIrAfterLoweringField.isAccessible = true
85+ val preactions = preactionsField.get(validateIrAfterLoweringField.get(null )) as MutableSet <Action <IrModuleFragment , CommonBackendContext >>
86+ preactions.add(getIrPrinterForWasmTargets(Options .outputDirOptPath()))
87+
88+ logger.warn(" Register the printer of optimized IR for wasm targets." )
89+ } catch (_: NoClassDefFoundError ) {
90+ logger.info(" The printer of optimized IR for wasm targets is ignored." )
91+ } catch (t: Throwable ) {
92+ logger.warn(" Failed to register the printer of optimized IR for wasm targets: $t " )
93+ }
6894}
0 commit comments