// IGNORE_BACKEND_K1: JS_IR // WITH_STDLIB import kotlinx.serialization.* import kotlinx.serialization.json.* @Serializable abstract class Top { var top: T? = null } @Serializable open class Intermediate: Top>() { var inter: V? = null override fun toString(): String { return "Intermediate($top, $inter)" } } @Serializable open class Bottom: Intermediate() { var bot: String? = null override fun toString(): String { return "Bottom($top, $inter, $bot)" } } @Serializable class Bottom2: Bottom() { override fun toString(): String { return "Bottom2($top, $inter, $bot)" } } @Serializable data class Full( val b: Bottom2, val i: Intermediate ) fun box(): String { val j = Json { ignoreUnknownKeys = true } val b = Bottom2().apply { top = listOf("a", "b") inter = "v" bot = "bot" } val f = Full(b, b) val encoded = j.encodeToString(f) if (encoded != """{"b":{"top":["a","b"],"inter":"v","bot":"bot"},"i":{"top":["a","b"],"inter":"v"}}""") return "Encoded: $encoded" val decoded = j.decodeFromString(encoded) if (decoded.toString() != "Full(b=Bottom2([a, b], v, bot), i=Intermediate([a, b], v))") return "Decoded: $decoded" return "OK" }