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