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

(Old is created first because all intrinsics emit bytecode anyway)

Provide intrinsic for serializer<T>() function so it won't
invoke typeOf() construction and KType->KSerializer conversion
making it fast and truly reflectionless

Add support for recalculating stack size in plugin-defined intrinsics
since it is needed for correct work:
Unify method for recalculating stack size with existing typeOf intrinsic

Add testdata for IR for future intrinsic in IR
This commit is contained in:
Leonid Startsev
2020-04-10 17:57:21 +03:00
committed by Space
parent 842f94443a
commit f9edbd825a
15 changed files with 1114 additions and 98 deletions
@@ -0,0 +1,43 @@
// CURIOUS_ABOUT test
// WITH_STDLIB
import kotlinx.serialization.*
@Serializable
class Simple(val firstName: String, val lastName: String)
@Serializable
data class Box<out T>(val boxed: T)
@Serializable
object SerializableObject {}
inline fun <reified T: Any> getSer(): KSerializer<T> {
return serializer<T>()
}
inline fun <reified T: Any> getBoxSer(): KSerializer<Box<T>> {
return serializer<Box<T>>()
}
inline fun <reified T: Any> listSer(): KSerializer<List<T>> {
return serializer<List<T>>()
}
fun test() {
serializer<Simple>()
getSer<Simple>()
getSer<Box<Simple>>()
getBoxSer<Simple>()
listSer<Simple>()
serializer<Box<List<Simple>>>()
listSer<Box<List<Simple>>>()
serializer<Int>()
serializer<SerializableObject>()
listSer<List<Box<Int>>>()
}