[IR] Properly serialize IrDeclarationOrigin.GeneratedByPlugin to klibs
^KT-56911 Fixed
This commit is contained in:
committed by
Space Team
parent
12b11bd034
commit
c957a0b43b
@@ -5,10 +5,9 @@
|
||||
|
||||
package org.jetbrains.kotlin.ir.backend.js
|
||||
|
||||
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
|
||||
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOriginImpl
|
||||
|
||||
object JsLoweredDeclarationOrigin : IrDeclarationOrigin {
|
||||
object JsLoweredDeclarationOrigin {
|
||||
object JS_INTRINSICS_STUB : IrDeclarationOriginImpl("JS_INTRINSICS_STUB")
|
||||
object JS_CLOSURE_BOX_CLASS_DECLARATION : IrDeclarationOriginImpl("JS_CLOSURE_BOX_CLASS_DECLARATION")
|
||||
object BRIDGE_WITH_STABLE_NAME : IrDeclarationOriginImpl("BRIDGE_WITH_STABLE_NAME")
|
||||
|
||||
+19
-4
@@ -87,9 +87,24 @@ interface IrDeclarationOrigin {
|
||||
|
||||
object SHARED_VARIABLE_IN_EVALUATOR_FRAGMENT : IrDeclarationOriginImpl("SHARED_VARIABLE_IN_EVALUATOR_FRAGMENT", isSynthetic = true)
|
||||
|
||||
class GeneratedByPlugin(val pluginKey: GeneratedDeclarationKey) : IrDeclarationOrigin {
|
||||
/**
|
||||
* [pluginKey] may be null if declaration with this origin was deserialized from klib
|
||||
*/
|
||||
class GeneratedByPlugin private constructor(val pluginId: String, val pluginKey: GeneratedDeclarationKey?) : IrDeclarationOrigin {
|
||||
constructor(pluginKey: GeneratedDeclarationKey) : this(pluginKey::class.qualifiedName!!, pluginKey)
|
||||
|
||||
companion object {
|
||||
fun fromSerializedString(name: String): GeneratedByPlugin? {
|
||||
val pluginId = name.removeSurrounding("GENERATED[", "]").takeIf { it != name } ?: return null
|
||||
return GeneratedByPlugin(pluginId, pluginKey = null)
|
||||
}
|
||||
}
|
||||
|
||||
override val name: String
|
||||
get() = "GENERATED[${pluginId}]"
|
||||
|
||||
override fun toString(): String {
|
||||
return "GENERATED[${pluginKey}]"
|
||||
return name
|
||||
}
|
||||
|
||||
override fun equals(other: Any?): Boolean {
|
||||
@@ -103,11 +118,12 @@ interface IrDeclarationOrigin {
|
||||
}
|
||||
}
|
||||
|
||||
val name: String
|
||||
val isSynthetic: Boolean get() = false
|
||||
}
|
||||
|
||||
abstract class IrDeclarationOriginImpl(
|
||||
val name: String,
|
||||
override val name: String,
|
||||
override val isSynthetic: Boolean = false
|
||||
) : IrDeclarationOrigin {
|
||||
override fun toString(): String = name
|
||||
@@ -124,5 +140,4 @@ abstract class IrDeclarationOriginImpl(
|
||||
override fun hashCode(): Int {
|
||||
return name.hashCode()
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+4
-2
@@ -779,9 +779,11 @@ class IrDeclarationDeserializer(
|
||||
allKnownDeclarationOrigins.mapNotNull { it.objectInstance as? IrDeclarationOriginImpl }.associateBy { it.name }
|
||||
}
|
||||
|
||||
private fun deserializeIrDeclarationOrigin(protoName: Int): IrDeclarationOriginImpl {
|
||||
private fun deserializeIrDeclarationOrigin(protoName: Int): IrDeclarationOrigin {
|
||||
val originName = libraryFile.string(protoName)
|
||||
return declarationOriginIndex[originName] ?: object : IrDeclarationOriginImpl(originName) {}
|
||||
return IrDeclarationOrigin.GeneratedByPlugin.fromSerializedString(originName)
|
||||
?: declarationOriginIndex[originName]
|
||||
?: object : IrDeclarationOriginImpl(originName) {}
|
||||
}
|
||||
|
||||
fun deserializeDeclaration(proto: ProtoDeclaration, setParent: Boolean = true): IrDeclaration {
|
||||
|
||||
+1
-1
@@ -183,7 +183,7 @@ open class IrFileSerializer(
|
||||
|
||||
/* ------- Common fields ---------------------------------------------------- */
|
||||
|
||||
private fun serializeIrDeclarationOrigin(origin: IrDeclarationOrigin): Int = serializeString((origin as IrDeclarationOriginImpl).name)
|
||||
private fun serializeIrDeclarationOrigin(origin: IrDeclarationOrigin): Int = serializeString(origin.name)
|
||||
|
||||
private fun serializeIrStatementOrigin(origin: IrStatementOrigin): Int =
|
||||
serializeString((origin as? IrStatementOriginImpl)?.debugName ?: error("Unable to serialize origin ${origin.javaClass.name}"))
|
||||
|
||||
Reference in New Issue
Block a user