IR: add IrFactory to IrDeclaration, use in deep copy
This commit is contained in:
@@ -25,6 +25,9 @@ abstract class AbstractFir2IrLazyDeclaration<F : FirMemberDeclaration, D : IrSym
|
|||||||
val fir: F,
|
val fir: F,
|
||||||
open val symbol: Fir2IrBindableSymbol<*, D>
|
open val symbol: Fir2IrBindableSymbol<*, D>
|
||||||
) : IrElementBase(startOffset, endOffset), IrDeclaration, IrDeclarationParent, Fir2IrComponents by components {
|
) : IrElementBase(startOffset, endOffset), IrDeclaration, IrDeclarationParent, Fir2IrComponents by components {
|
||||||
|
override val factory: IrFactory
|
||||||
|
get() = components.irFactory
|
||||||
|
|
||||||
internal fun prepareTypeParameters() {
|
internal fun prepareTypeParameters() {
|
||||||
typeParameters = fir.typeParameters.mapIndexedNotNull { index, typeParameter ->
|
typeParameters = fir.typeParameters.mapIndexedNotNull { index, typeParameter ->
|
||||||
if (typeParameter !is FirTypeParameter) return@mapIndexedNotNull null
|
if (typeParameter !is FirTypeParameter) return@mapIndexedNotNull null
|
||||||
|
|||||||
@@ -42,6 +42,8 @@ interface IrDeclaration : IrStatement, IrMutableAnnotationContainer {
|
|||||||
|
|
||||||
var parent: IrDeclarationParent
|
var parent: IrDeclarationParent
|
||||||
|
|
||||||
|
val factory: IrFactory
|
||||||
|
|
||||||
override fun <D> transform(transformer: IrElementTransformer<D>, data: D): IrStatement =
|
override fun <D> transform(transformer: IrElementTransformer<D>, data: D): IrStatement =
|
||||||
accept(transformer, data) as IrStatement
|
accept(transformer, data) as IrStatement
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,6 +32,9 @@ abstract class IrDeclarationBase<T : DeclarationCarrier>(
|
|||||||
IrDeclaration,
|
IrDeclaration,
|
||||||
DeclarationCarrier {
|
DeclarationCarrier {
|
||||||
|
|
||||||
|
override val factory: IrFactory
|
||||||
|
get() = IrFactoryImpl
|
||||||
|
|
||||||
override var parentField: IrDeclarationParent? = null
|
override var parentField: IrDeclarationParent? = null
|
||||||
|
|
||||||
// TODO reduce boilerplate
|
// TODO reduce boilerplate
|
||||||
|
|||||||
@@ -46,6 +46,9 @@ class IrScriptImpl(
|
|||||||
@ObsoleteDescriptorBasedAPI
|
@ObsoleteDescriptorBasedAPI
|
||||||
override val descriptor: ScriptDescriptor = symbol.descriptor
|
override val descriptor: ScriptDescriptor = symbol.descriptor
|
||||||
|
|
||||||
|
override val factory: IrFactory
|
||||||
|
get() = error("Create IrScriptImpl directly")
|
||||||
|
|
||||||
init {
|
init {
|
||||||
symbol.bind(this)
|
symbol.bind(this)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ import org.jetbrains.kotlin.descriptors.VariableDescriptor
|
|||||||
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
|
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
|
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrDeclarationParent
|
import org.jetbrains.kotlin.ir.declarations.IrDeclarationParent
|
||||||
|
import org.jetbrains.kotlin.ir.declarations.IrFactory
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrVariable
|
import org.jetbrains.kotlin.ir.declarations.IrVariable
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
|
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrExpression
|
import org.jetbrains.kotlin.ir.expressions.IrExpression
|
||||||
@@ -60,6 +61,9 @@ class IrVariableImpl(
|
|||||||
|
|
||||||
override var initializer: IrExpression? = null
|
override var initializer: IrExpression? = null
|
||||||
|
|
||||||
|
override val factory: IrFactory
|
||||||
|
get() = error("Create IrVariableImpl directly")
|
||||||
|
|
||||||
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R =
|
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R =
|
||||||
visitor.visitVariable(this, data)
|
visitor.visitVariable(this, data)
|
||||||
|
|
||||||
|
|||||||
+3
-2
@@ -10,7 +10,6 @@ import org.jetbrains.kotlin.ir.IrElementBase
|
|||||||
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
|
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
|
||||||
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
|
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
|
||||||
import org.jetbrains.kotlin.ir.declarations.*
|
import org.jetbrains.kotlin.ir.declarations.*
|
||||||
import org.jetbrains.kotlin.ir.declarations.impl.IrValueParameterImpl
|
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
|
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
|
||||||
import org.jetbrains.kotlin.ir.symbols.impl.IrValueParameterSymbolImpl
|
import org.jetbrains.kotlin.ir.symbols.impl.IrValueParameterSymbolImpl
|
||||||
import org.jetbrains.kotlin.ir.util.DeclarationStubGenerator
|
import org.jetbrains.kotlin.ir.util.DeclarationStubGenerator
|
||||||
@@ -26,11 +25,13 @@ abstract class IrLazyDeclarationBase(
|
|||||||
private val stubGenerator: DeclarationStubGenerator,
|
private val stubGenerator: DeclarationStubGenerator,
|
||||||
protected val typeTranslator: TypeTranslator
|
protected val typeTranslator: TypeTranslator
|
||||||
) : IrElementBase(startOffset, endOffset), IrDeclaration {
|
) : IrElementBase(startOffset, endOffset), IrDeclaration {
|
||||||
|
override val factory: IrFactory
|
||||||
|
get() = stubGenerator.symbolTable.irFactory
|
||||||
|
|
||||||
protected fun KotlinType.toIrType() = typeTranslator.translateType(this)
|
protected fun KotlinType.toIrType() = typeTranslator.translateType(this)
|
||||||
|
|
||||||
protected fun ReceiverParameterDescriptor.generateReceiverParameterStub(): IrValueParameter =
|
protected fun ReceiverParameterDescriptor.generateReceiverParameterStub(): IrValueParameter =
|
||||||
IrValueParameterImpl(
|
factory.createValueParameter(
|
||||||
UNDEFINED_OFFSET, UNDEFINED_OFFSET, origin, IrValueParameterSymbolImpl(this),
|
UNDEFINED_OFFSET, UNDEFINED_OFFSET, origin, IrValueParameterSymbolImpl(this),
|
||||||
name, -1, type.toIrType(), null, isCrossinline = false, isNoinline = false
|
name, -1, type.toIrType(), null, isCrossinline = false, isNoinline = false
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -125,7 +125,7 @@ open class DeepCopyIrTreeWithSymbols(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun visitClass(declaration: IrClass): IrClass =
|
override fun visitClass(declaration: IrClass): IrClass =
|
||||||
IrClassImpl(
|
declaration.factory.createClass(
|
||||||
declaration.startOffset, declaration.endOffset,
|
declaration.startOffset, declaration.endOffset,
|
||||||
mapDeclarationOrigin(declaration.origin),
|
mapDeclarationOrigin(declaration.origin),
|
||||||
symbolRemapper.getDeclaredClass(declaration.symbol),
|
symbolRemapper.getDeclaredClass(declaration.symbol),
|
||||||
@@ -151,7 +151,7 @@ open class DeepCopyIrTreeWithSymbols(
|
|||||||
}.copyAttributes(declaration)
|
}.copyAttributes(declaration)
|
||||||
|
|
||||||
override fun visitSimpleFunction(declaration: IrSimpleFunction): IrSimpleFunction =
|
override fun visitSimpleFunction(declaration: IrSimpleFunction): IrSimpleFunction =
|
||||||
IrFunctionImpl(
|
declaration.factory.createFunction(
|
||||||
declaration.startOffset, declaration.endOffset,
|
declaration.startOffset, declaration.endOffset,
|
||||||
mapDeclarationOrigin(declaration.origin),
|
mapDeclarationOrigin(declaration.origin),
|
||||||
symbolRemapper.getDeclaredFunction(declaration.symbol),
|
symbolRemapper.getDeclaredFunction(declaration.symbol),
|
||||||
@@ -176,7 +176,7 @@ open class DeepCopyIrTreeWithSymbols(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun visitConstructor(declaration: IrConstructor): IrConstructor =
|
override fun visitConstructor(declaration: IrConstructor): IrConstructor =
|
||||||
IrConstructorImpl(
|
declaration.factory.createConstructor(
|
||||||
declaration.startOffset, declaration.endOffset,
|
declaration.startOffset, declaration.endOffset,
|
||||||
mapDeclarationOrigin(declaration.origin),
|
mapDeclarationOrigin(declaration.origin),
|
||||||
symbolRemapper.getDeclaredConstructor(declaration.symbol),
|
symbolRemapper.getDeclaredConstructor(declaration.symbol),
|
||||||
@@ -209,7 +209,7 @@ open class DeepCopyIrTreeWithSymbols(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun visitProperty(declaration: IrProperty): IrProperty =
|
override fun visitProperty(declaration: IrProperty): IrProperty =
|
||||||
IrPropertyImpl(
|
declaration.factory.createProperty(
|
||||||
declaration.startOffset, declaration.endOffset,
|
declaration.startOffset, declaration.endOffset,
|
||||||
mapDeclarationOrigin(declaration.origin),
|
mapDeclarationOrigin(declaration.origin),
|
||||||
symbolRemapper.getDeclaredProperty(declaration.symbol),
|
symbolRemapper.getDeclaredProperty(declaration.symbol),
|
||||||
@@ -236,7 +236,7 @@ open class DeepCopyIrTreeWithSymbols(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun visitField(declaration: IrField): IrField =
|
override fun visitField(declaration: IrField): IrField =
|
||||||
IrFieldImpl(
|
declaration.factory.createField(
|
||||||
declaration.startOffset, declaration.endOffset,
|
declaration.startOffset, declaration.endOffset,
|
||||||
mapDeclarationOrigin(declaration.origin),
|
mapDeclarationOrigin(declaration.origin),
|
||||||
symbolRemapper.getDeclaredField(declaration.symbol),
|
symbolRemapper.getDeclaredField(declaration.symbol),
|
||||||
@@ -252,7 +252,7 @@ open class DeepCopyIrTreeWithSymbols(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun visitLocalDelegatedProperty(declaration: IrLocalDelegatedProperty): IrLocalDelegatedProperty =
|
override fun visitLocalDelegatedProperty(declaration: IrLocalDelegatedProperty): IrLocalDelegatedProperty =
|
||||||
IrLocalDelegatedPropertyImpl(
|
declaration.factory.createLocalDelegatedProperty(
|
||||||
declaration.startOffset, declaration.endOffset,
|
declaration.startOffset, declaration.endOffset,
|
||||||
mapDeclarationOrigin(declaration.origin),
|
mapDeclarationOrigin(declaration.origin),
|
||||||
symbolRemapper.getDeclaredLocalDelegatedProperty(declaration.symbol),
|
symbolRemapper.getDeclaredLocalDelegatedProperty(declaration.symbol),
|
||||||
@@ -267,7 +267,7 @@ open class DeepCopyIrTreeWithSymbols(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun visitEnumEntry(declaration: IrEnumEntry): IrEnumEntry =
|
override fun visitEnumEntry(declaration: IrEnumEntry): IrEnumEntry =
|
||||||
IrEnumEntryImpl(
|
declaration.factory.createEnumEntry(
|
||||||
declaration.startOffset, declaration.endOffset,
|
declaration.startOffset, declaration.endOffset,
|
||||||
mapDeclarationOrigin(declaration.origin),
|
mapDeclarationOrigin(declaration.origin),
|
||||||
symbolRemapper.getDeclaredEnumEntry(declaration.symbol),
|
symbolRemapper.getDeclaredEnumEntry(declaration.symbol),
|
||||||
@@ -279,7 +279,7 @@ open class DeepCopyIrTreeWithSymbols(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun visitAnonymousInitializer(declaration: IrAnonymousInitializer): IrAnonymousInitializer =
|
override fun visitAnonymousInitializer(declaration: IrAnonymousInitializer): IrAnonymousInitializer =
|
||||||
IrAnonymousInitializerImpl(
|
declaration.factory.createAnonymousInitializer(
|
||||||
declaration.startOffset, declaration.endOffset,
|
declaration.startOffset, declaration.endOffset,
|
||||||
mapDeclarationOrigin(declaration.origin),
|
mapDeclarationOrigin(declaration.origin),
|
||||||
IrAnonymousInitializerSymbolImpl(declaration.descriptor)
|
IrAnonymousInitializerSymbolImpl(declaration.descriptor)
|
||||||
@@ -309,7 +309,7 @@ open class DeepCopyIrTreeWithSymbols(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun copyTypeParameter(declaration: IrTypeParameter): IrTypeParameter =
|
private fun copyTypeParameter(declaration: IrTypeParameter): IrTypeParameter =
|
||||||
IrTypeParameterImpl(
|
declaration.factory.createTypeParameter(
|
||||||
declaration.startOffset, declaration.endOffset,
|
declaration.startOffset, declaration.endOffset,
|
||||||
mapDeclarationOrigin(declaration.origin),
|
mapDeclarationOrigin(declaration.origin),
|
||||||
symbolRemapper.getDeclaredTypeParameter(declaration.symbol),
|
symbolRemapper.getDeclaredTypeParameter(declaration.symbol),
|
||||||
@@ -336,7 +336,7 @@ open class DeepCopyIrTreeWithSymbols(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun visitValueParameter(declaration: IrValueParameter): IrValueParameter =
|
override fun visitValueParameter(declaration: IrValueParameter): IrValueParameter =
|
||||||
IrValueParameterImpl(
|
declaration.factory.createValueParameter(
|
||||||
declaration.startOffset, declaration.endOffset,
|
declaration.startOffset, declaration.endOffset,
|
||||||
mapDeclarationOrigin(declaration.origin),
|
mapDeclarationOrigin(declaration.origin),
|
||||||
symbolRemapper.getDeclaredValueParameter(declaration.symbol),
|
symbolRemapper.getDeclaredValueParameter(declaration.symbol),
|
||||||
@@ -352,7 +352,7 @@ open class DeepCopyIrTreeWithSymbols(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun visitTypeAlias(declaration: IrTypeAlias): IrTypeAlias =
|
override fun visitTypeAlias(declaration: IrTypeAlias): IrTypeAlias =
|
||||||
IrTypeAliasImpl(
|
declaration.factory.createTypeAlias(
|
||||||
declaration.startOffset, declaration.endOffset,
|
declaration.startOffset, declaration.endOffset,
|
||||||
symbolRemapper.getDeclaredTypeAlias(declaration.symbol),
|
symbolRemapper.getDeclaredTypeAlias(declaration.symbol),
|
||||||
symbolRenamer.getTypeAliasName(declaration.symbol),
|
symbolRenamer.getTypeAliasName(declaration.symbol),
|
||||||
@@ -768,7 +768,7 @@ open class DeepCopyIrTreeWithSymbols(
|
|||||||
).copyAttributes(expression)
|
).copyAttributes(expression)
|
||||||
|
|
||||||
override fun visitErrorDeclaration(declaration: IrErrorDeclaration): IrErrorDeclaration =
|
override fun visitErrorDeclaration(declaration: IrErrorDeclaration): IrErrorDeclaration =
|
||||||
IrErrorDeclarationImpl(declaration.startOffset, declaration.endOffset, declaration.descriptor)
|
declaration.factory.createErrorDeclaration(declaration.startOffset, declaration.endOffset, declaration.descriptor)
|
||||||
|
|
||||||
override fun visitErrorExpression(expression: IrErrorExpression): IrErrorExpression =
|
override fun visitErrorExpression(expression: IrErrorExpression): IrErrorExpression =
|
||||||
IrErrorExpressionImpl(
|
IrErrorExpressionImpl(
|
||||||
|
|||||||
+7
-4
@@ -1,11 +1,14 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
|
*/
|
||||||
|
|
||||||
package org.jetbrains.kotlin.backend.common.overrides
|
package org.jetbrains.kotlin.backend.common.overrides
|
||||||
|
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
|
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrFunction
|
import org.jetbrains.kotlin.ir.declarations.IrFunction
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrProperty
|
import org.jetbrains.kotlin.ir.declarations.IrProperty
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction
|
import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction
|
||||||
import org.jetbrains.kotlin.ir.declarations.impl.IrFakeOverrideFunctionImpl
|
|
||||||
import org.jetbrains.kotlin.ir.declarations.impl.IrFakeOverridePropertyImpl
|
|
||||||
import org.jetbrains.kotlin.ir.util.*
|
import org.jetbrains.kotlin.ir.util.*
|
||||||
|
|
||||||
class FakeOverrideCopier(
|
class FakeOverrideCopier(
|
||||||
@@ -47,7 +50,7 @@ class FakeOverrideCopier(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun visitSimpleFunction(declaration: IrSimpleFunction): IrSimpleFunction =
|
override fun visitSimpleFunction(declaration: IrSimpleFunction): IrSimpleFunction =
|
||||||
IrFakeOverrideFunctionImpl(
|
declaration.factory.createFakeOverrideFunction(
|
||||||
declaration.startOffset, declaration.endOffset,
|
declaration.startOffset, declaration.endOffset,
|
||||||
IrDeclarationOrigin.FAKE_OVERRIDE,
|
IrDeclarationOrigin.FAKE_OVERRIDE,
|
||||||
symbolRenamer.getFunctionName(declaration.symbol),
|
symbolRenamer.getFunctionName(declaration.symbol),
|
||||||
@@ -67,7 +70,7 @@ class FakeOverrideCopier(
|
|||||||
|
|
||||||
|
|
||||||
override fun visitProperty(declaration: IrProperty): IrProperty =
|
override fun visitProperty(declaration: IrProperty): IrProperty =
|
||||||
IrFakeOverridePropertyImpl(
|
declaration.factory.createFakeOverrideProperty(
|
||||||
declaration.startOffset, declaration.endOffset,
|
declaration.startOffset, declaration.endOffset,
|
||||||
IrDeclarationOrigin.FAKE_OVERRIDE,
|
IrDeclarationOrigin.FAKE_OVERRIDE,
|
||||||
declaration.name,
|
declaration.name,
|
||||||
|
|||||||
-1
@@ -19,7 +19,6 @@ package org.jetbrains.kotlin.backend.common.overrides
|
|||||||
import org.jetbrains.kotlin.backend.common.serialization.signature.IdSignatureSerializer
|
import org.jetbrains.kotlin.backend.common.serialization.signature.IdSignatureSerializer
|
||||||
import org.jetbrains.kotlin.ir.IrElement
|
import org.jetbrains.kotlin.ir.IrElement
|
||||||
import org.jetbrains.kotlin.ir.declarations.*
|
import org.jetbrains.kotlin.ir.declarations.*
|
||||||
import org.jetbrains.kotlin.ir.declarations.impl.IrFakeOverridePropertyImpl
|
|
||||||
import org.jetbrains.kotlin.ir.descriptors.IrBuiltIns
|
import org.jetbrains.kotlin.ir.descriptors.IrBuiltIns
|
||||||
import org.jetbrains.kotlin.ir.descriptors.WrappedPropertyDescriptor
|
import org.jetbrains.kotlin.ir.descriptors.WrappedPropertyDescriptor
|
||||||
import org.jetbrains.kotlin.ir.descriptors.WrappedSimpleFunctionDescriptor
|
import org.jetbrains.kotlin.ir.descriptors.WrappedSimpleFunctionDescriptor
|
||||||
|
|||||||
-1
@@ -21,7 +21,6 @@ import org.jetbrains.kotlin.descriptors.Modality
|
|||||||
import org.jetbrains.kotlin.descriptors.Visibilities
|
import org.jetbrains.kotlin.descriptors.Visibilities
|
||||||
import org.jetbrains.kotlin.descriptors.Visibility
|
import org.jetbrains.kotlin.descriptors.Visibility
|
||||||
import org.jetbrains.kotlin.ir.declarations.*
|
import org.jetbrains.kotlin.ir.declarations.*
|
||||||
import org.jetbrains.kotlin.ir.declarations.impl.IrFakeOverridePropertyImpl
|
|
||||||
import org.jetbrains.kotlin.ir.descriptors.IrBuiltIns
|
import org.jetbrains.kotlin.ir.descriptors.IrBuiltIns
|
||||||
import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol
|
import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol
|
||||||
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
|
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
|
||||||
|
|||||||
Reference in New Issue
Block a user