IR: use IrFactory in linker
This commit is contained in:
+21
-20
@@ -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),
|
||||
|
||||
Reference in New Issue
Block a user