IR: use IrFactory in linker
This commit is contained in:
+21
-20
@@ -6,8 +6,8 @@
|
|||||||
package org.jetbrains.kotlin.backend.common.serialization
|
package org.jetbrains.kotlin.backend.common.serialization
|
||||||
|
|
||||||
import org.jetbrains.kotlin.backend.common.LoggingContext
|
import org.jetbrains.kotlin.backend.common.LoggingContext
|
||||||
import org.jetbrains.kotlin.backend.common.lower.InnerClassesSupport
|
|
||||||
import org.jetbrains.kotlin.backend.common.ir.ir2string
|
import org.jetbrains.kotlin.backend.common.ir.ir2string
|
||||||
|
import org.jetbrains.kotlin.backend.common.lower.InnerClassesSupport
|
||||||
import org.jetbrains.kotlin.backend.common.overrides.PlatformFakeOverrideClassFilter
|
import org.jetbrains.kotlin.backend.common.overrides.PlatformFakeOverrideClassFilter
|
||||||
import org.jetbrains.kotlin.backend.common.peek
|
import org.jetbrains.kotlin.backend.common.peek
|
||||||
import org.jetbrains.kotlin.backend.common.pop
|
import org.jetbrains.kotlin.backend.common.pop
|
||||||
@@ -23,7 +23,7 @@ import org.jetbrains.kotlin.backend.common.serialization.proto.IrVarargElement.V
|
|||||||
import org.jetbrains.kotlin.ir.IrElement
|
import org.jetbrains.kotlin.ir.IrElement
|
||||||
import org.jetbrains.kotlin.ir.IrStatement
|
import org.jetbrains.kotlin.ir.IrStatement
|
||||||
import org.jetbrains.kotlin.ir.declarations.*
|
import org.jetbrains.kotlin.ir.declarations.*
|
||||||
import org.jetbrains.kotlin.ir.declarations.impl.*
|
import org.jetbrains.kotlin.ir.declarations.impl.IrVariableImpl
|
||||||
import org.jetbrains.kotlin.ir.descriptors.*
|
import org.jetbrains.kotlin.ir.descriptors.*
|
||||||
import org.jetbrains.kotlin.ir.expressions.*
|
import org.jetbrains.kotlin.ir.expressions.*
|
||||||
import org.jetbrains.kotlin.ir.expressions.impl.*
|
import org.jetbrains.kotlin.ir.expressions.impl.*
|
||||||
@@ -113,6 +113,7 @@ abstract class IrFileDeserializer(
|
|||||||
private val deserializeFakeOverrides: Boolean,
|
private val deserializeFakeOverrides: Boolean,
|
||||||
private val fakeOverrideQueue: MutableList<IrClass>
|
private val fakeOverrideQueue: MutableList<IrClass>
|
||||||
) {
|
) {
|
||||||
|
private val irFactory: IrFactory get() = symbolTable.irFactory
|
||||||
|
|
||||||
abstract fun deserializeIrSymbolToDeclare(code: Long): Pair<IrSymbol, IdSignature>
|
abstract fun deserializeIrSymbolToDeclare(code: Long): Pair<IrSymbol, IdSignature>
|
||||||
abstract fun deserializeIrSymbol(code: Long): IrSymbol
|
abstract fun deserializeIrSymbol(code: Long): IrSymbol
|
||||||
@@ -960,7 +961,7 @@ abstract class IrFileDeserializer(
|
|||||||
val flags = TypeParameterFlags.decode(proto.base.flags)
|
val flags = TypeParameterFlags.decode(proto.base.flags)
|
||||||
|
|
||||||
val factory = { symbol: IrTypeParameterSymbol ->
|
val factory = { symbol: IrTypeParameterSymbol ->
|
||||||
IrTypeParameterImpl(
|
irFactory.createTypeParameter(
|
||||||
coordinates.startOffset,
|
coordinates.startOffset,
|
||||||
coordinates.endOffset,
|
coordinates.endOffset,
|
||||||
deserializeIrDeclarationOrigin(proto.base.originName),
|
deserializeIrDeclarationOrigin(proto.base.originName),
|
||||||
@@ -1002,7 +1003,7 @@ abstract class IrFileDeserializer(
|
|||||||
withDeserializedIrDeclarationBase(proto.base) { symbol, _, startOffset, endOffset, origin, fcode ->
|
withDeserializedIrDeclarationBase(proto.base) { symbol, _, startOffset, endOffset, origin, fcode ->
|
||||||
val flags = ValueParameterFlags.decode(fcode)
|
val flags = ValueParameterFlags.decode(fcode)
|
||||||
val nameAndType = BinaryNameAndType.decode(proto.nameType)
|
val nameAndType = BinaryNameAndType.decode(proto.nameType)
|
||||||
IrValueParameterImpl(
|
irFactory.createValueParameter(
|
||||||
startOffset, endOffset, origin,
|
startOffset, endOffset, origin,
|
||||||
symbol as IrValueParameterSymbol,
|
symbol as IrValueParameterSymbol,
|
||||||
deserializeName(nameAndType.nameIndex),
|
deserializeName(nameAndType.nameIndex),
|
||||||
@@ -1025,20 +1026,20 @@ abstract class IrFileDeserializer(
|
|||||||
val flags = ClassFlags.decode(fcode)
|
val flags = ClassFlags.decode(fcode)
|
||||||
|
|
||||||
symbolTable.declareClassFromLinker((symbol as IrClassSymbol).descriptor, signature) {
|
symbolTable.declareClassFromLinker((symbol as IrClassSymbol).descriptor, signature) {
|
||||||
IrClassImpl(
|
irFactory.createClass(
|
||||||
startOffset, endOffset, origin,
|
startOffset, endOffset, origin,
|
||||||
it,
|
it,
|
||||||
deserializeName(proto.name),
|
deserializeName(proto.name),
|
||||||
flags.kind,
|
flags.kind,
|
||||||
flags.visibility,
|
flags.visibility,
|
||||||
flags.modality,
|
flags.modality,
|
||||||
isCompanion = flags.isCompanion,
|
flags.isCompanion,
|
||||||
isInner = flags.isInner,
|
flags.isInner,
|
||||||
isData = flags.isData,
|
flags.isData,
|
||||||
isExternal = flags.isExternal,
|
flags.isExternal,
|
||||||
isInline = flags.isInline,
|
flags.isInline,
|
||||||
isExpect = flags.isExpect,
|
flags.isExpect,
|
||||||
isFun = flags.isFun
|
flags.isFun,
|
||||||
)
|
)
|
||||||
}.usingParent {
|
}.usingParent {
|
||||||
typeParameters = deserializeTypeParameters(proto.typeParameterList, true)
|
typeParameters = deserializeTypeParameters(proto.typeParameterList, true)
|
||||||
@@ -1066,7 +1067,7 @@ abstract class IrFileDeserializer(
|
|||||||
symbolTable.declareTypeAliasFromLinker((symbol as IrTypeAliasSymbol).descriptor, uniqId) {
|
symbolTable.declareTypeAliasFromLinker((symbol as IrTypeAliasSymbol).descriptor, uniqId) {
|
||||||
val flags = TypeAliasFlags.decode(fcode)
|
val flags = TypeAliasFlags.decode(fcode)
|
||||||
val nameType = BinaryNameAndType.decode(proto.nameType)
|
val nameType = BinaryNameAndType.decode(proto.nameType)
|
||||||
IrTypeAliasImpl(
|
irFactory.createTypeAlias(
|
||||||
startOffset, endOffset,
|
startOffset, endOffset,
|
||||||
it,
|
it,
|
||||||
deserializeName(nameType.nameIndex),
|
deserializeName(nameType.nameIndex),
|
||||||
@@ -1186,7 +1187,7 @@ abstract class IrFileDeserializer(
|
|||||||
val flags = FunctionFlags.decode(fcode)
|
val flags = FunctionFlags.decode(fcode)
|
||||||
symbolTable.declareSimpleFunctionFromLinker(symbol.descriptor, idSig) {
|
symbolTable.declareSimpleFunctionFromLinker(symbol.descriptor, idSig) {
|
||||||
val nameType = BinaryNameAndType.decode(proto.base.nameType)
|
val nameType = BinaryNameAndType.decode(proto.base.nameType)
|
||||||
IrFunctionImpl(
|
irFactory.createFunction(
|
||||||
startOffset, endOffset, origin,
|
startOffset, endOffset, origin,
|
||||||
it,
|
it,
|
||||||
deserializeName(nameType.nameIndex),
|
deserializeName(nameType.nameIndex),
|
||||||
@@ -1233,7 +1234,7 @@ abstract class IrFileDeserializer(
|
|||||||
private fun deserializeIrEnumEntry(proto: ProtoEnumEntry): IrEnumEntry =
|
private fun deserializeIrEnumEntry(proto: ProtoEnumEntry): IrEnumEntry =
|
||||||
withDeserializedIrDeclarationBase(proto.base) { symbol, uniqId, startOffset, endOffset, origin, _ ->
|
withDeserializedIrDeclarationBase(proto.base) { symbol, uniqId, startOffset, endOffset, origin, _ ->
|
||||||
symbolTable.declareEnumEntryFromLinker((symbol as IrEnumEntrySymbol).descriptor, uniqId) {
|
symbolTable.declareEnumEntryFromLinker((symbol as IrEnumEntrySymbol).descriptor, uniqId) {
|
||||||
IrEnumEntryImpl(startOffset, endOffset, origin, it, deserializeName(proto.name))
|
irFactory.createEnumEntry(startOffset, endOffset, origin, it, deserializeName(proto.name))
|
||||||
}.apply {
|
}.apply {
|
||||||
if (proto.hasCorrespondingClass())
|
if (proto.hasCorrespondingClass())
|
||||||
correspondingClass = deserializeIrClass(proto.correspondingClass)
|
correspondingClass = deserializeIrClass(proto.correspondingClass)
|
||||||
@@ -1246,7 +1247,7 @@ abstract class IrFileDeserializer(
|
|||||||
|
|
||||||
private fun deserializeIrAnonymousInit(proto: ProtoAnonymousInit): IrAnonymousInitializer =
|
private fun deserializeIrAnonymousInit(proto: ProtoAnonymousInit): IrAnonymousInitializer =
|
||||||
withDeserializedIrDeclarationBase(proto.base) { symbol, _, startOffset, endOffset, origin, _ ->
|
withDeserializedIrDeclarationBase(proto.base) { symbol, _, startOffset, endOffset, origin, _ ->
|
||||||
IrAnonymousInitializerImpl(startOffset, endOffset, origin, symbol as IrAnonymousInitializerSymbol).apply {
|
irFactory.createAnonymousInitializer(startOffset, endOffset, origin, symbol as IrAnonymousInitializerSymbol).apply {
|
||||||
// body = deserializeBlockBody(proto.body.blockBody, startOffset, endOffset)
|
// body = deserializeBlockBody(proto.body.blockBody, startOffset, endOffset)
|
||||||
body = deserializeStatementBody(proto.body) as IrBlockBody
|
body = deserializeStatementBody(proto.body) as IrBlockBody
|
||||||
|
|
||||||
@@ -1259,7 +1260,7 @@ abstract class IrFileDeserializer(
|
|||||||
val flags = FunctionFlags.decode(fcode)
|
val flags = FunctionFlags.decode(fcode)
|
||||||
val nameType = BinaryNameAndType.decode(proto.base.nameType)
|
val nameType = BinaryNameAndType.decode(proto.base.nameType)
|
||||||
symbolTable.declareConstructorFromLinker((symbol as IrConstructorSymbol).descriptor, idSig) {
|
symbolTable.declareConstructorFromLinker((symbol as IrConstructorSymbol).descriptor, idSig) {
|
||||||
IrConstructorImpl(
|
irFactory.createConstructor(
|
||||||
startOffset, endOffset, origin,
|
startOffset, endOffset, origin,
|
||||||
it,
|
it,
|
||||||
deserializeName(nameType.nameIndex),
|
deserializeName(nameType.nameIndex),
|
||||||
@@ -1283,7 +1284,7 @@ abstract class IrFileDeserializer(
|
|||||||
val type = deserializeIrType(nameType.typeIndex)
|
val type = deserializeIrType(nameType.typeIndex)
|
||||||
val flags = FieldFlags.decode(fcode)
|
val flags = FieldFlags.decode(fcode)
|
||||||
symbolTable.declareFieldFromLinker((symbol as IrFieldSymbol).descriptor, uniqId) {
|
symbolTable.declareFieldFromLinker((symbol as IrFieldSymbol).descriptor, uniqId) {
|
||||||
IrFieldImpl(
|
irFactory.createField(
|
||||||
startOffset, endOffset, origin,
|
startOffset, endOffset, origin,
|
||||||
it,
|
it,
|
||||||
deserializeName(nameType.nameIndex),
|
deserializeName(nameType.nameIndex),
|
||||||
@@ -1308,7 +1309,7 @@ abstract class IrFileDeserializer(
|
|||||||
withDeserializedIrDeclarationBase(proto.base) { symbol, _, startOffset, endOffset, origin, fcode ->
|
withDeserializedIrDeclarationBase(proto.base) { symbol, _, startOffset, endOffset, origin, fcode ->
|
||||||
val flags = LocalVariableFlags.decode(fcode)
|
val flags = LocalVariableFlags.decode(fcode)
|
||||||
val nameAndType = BinaryNameAndType.decode(proto.nameType)
|
val nameAndType = BinaryNameAndType.decode(proto.nameType)
|
||||||
IrLocalDelegatedPropertyImpl(
|
irFactory.createLocalDelegatedProperty(
|
||||||
startOffset, endOffset, origin,
|
startOffset, endOffset, origin,
|
||||||
symbol as IrLocalDelegatedPropertySymbol,
|
symbol as IrLocalDelegatedPropertySymbol,
|
||||||
deserializeName(nameAndType.nameIndex),
|
deserializeName(nameAndType.nameIndex),
|
||||||
@@ -1328,7 +1329,7 @@ abstract class IrFileDeserializer(
|
|||||||
withDeserializedIrDeclarationBase(proto.base) { symbol, uniqId, startOffset, endOffset, origin, fcode ->
|
withDeserializedIrDeclarationBase(proto.base) { symbol, uniqId, startOffset, endOffset, origin, fcode ->
|
||||||
val flags = PropertyFlags.decode(fcode)
|
val flags = PropertyFlags.decode(fcode)
|
||||||
symbolTable.declarePropertyFromLinker((symbol as IrPropertySymbol).descriptor, uniqId) {
|
symbolTable.declarePropertyFromLinker((symbol as IrPropertySymbol).descriptor, uniqId) {
|
||||||
IrPropertyImpl(
|
irFactory.createProperty(
|
||||||
startOffset, endOffset, origin,
|
startOffset, endOffset, origin,
|
||||||
it,
|
it,
|
||||||
deserializeName(proto.name),
|
deserializeName(proto.name),
|
||||||
|
|||||||
Reference in New Issue
Block a user