Introduce support for plugin-defined intrinsics in JVM IR backend:

Add intrinsic for kotlinx.serialization.serializer<T>() function.

Plugin intrinsic for old backend is removed because it is too hard
and unjustifiable to unify them.
This commit is contained in:
Leonid Startsev
2022-02-07 18:08:23 +03:00
committed by Space
parent f9edbd825a
commit a59f5f407b
20 changed files with 989 additions and 580 deletions
@@ -286,8 +286,10 @@ open class JvmIrCodegenFactory(
if (evaluatorFragmentInfoForPsi2Ir != null) {
context.localDeclarationsLoweringData = mutableMapOf()
}
// todo: pass it here
val generationExtensions = IrGenerationExtension.getInstances(state.project)
val intrinsics by lazy { IrIntrinsicMethods(irModuleFragment.irBuiltins, context.ir.symbols) }
context.getIntrinsic = { symbol: IrFunctionSymbol -> intrinsics.getIntrinsic(symbol) }
context.getIntrinsic = { symbol: IrFunctionSymbol -> intrinsics.getIntrinsic(symbol) ?: generationExtensions.firstNotNullOfOrNull { it.retrieveIntrinsic(symbol) as? IntrinsicMarker } }
/* JvmBackendContext creates new unbound symbols, have to resolve them. */
ExternalDependenciesGenerator(symbolTable, irProviders).generateUnboundSymbolsAsDependencies()