IR: use IrFactory in linker

This commit is contained in:
Alexander Udalov
2020-07-10 21:20:29 +02:00
parent db4cbe7103
commit 9356f87f28
@@ -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),