Fix code review
Minor fixes Fix JVM IR BE Fix NATIVE
This commit is contained in:
+4
-1
@@ -221,7 +221,7 @@ open class WrappedSimpleFunctionDescriptor(
|
||||
|
||||
val extensionReceiver by lazy {
|
||||
owner.extensionReceiverParameter?.let {
|
||||
ReceiverParameterDescriptorImpl(this, ExtensionReceiver(it.descriptor, it.type.toKotlinType(), null))
|
||||
ReceiverParameterDescriptorImpl(this, ExtensionReceiver(it.descriptor, it.type.toKotlinType(), null), Annotations.EMPTY)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -294,6 +294,9 @@ open class WrappedClassConstructorDescriptor(
|
||||
) : ClassConstructorDescriptor, WrappedCallableDescriptor<IrConstructor>(annotations, sourceElement) {
|
||||
override fun getContainingDeclaration() = (owner.parent as IrClass).descriptor
|
||||
|
||||
override fun getDispatchReceiverParameter() = owner.dispatchReceiverParameter?.run {
|
||||
(containingDeclaration.containingDeclaration as ClassDescriptor).thisAsReceiverParameter
|
||||
}
|
||||
override fun getTypeParameters() = owner.typeParameters.map { it.descriptor }
|
||||
override fun getValueParameters() = owner.valueParameters.asSequence()
|
||||
.mapNotNull { it.descriptor as? ValueParameterDescriptor }
|
||||
|
||||
@@ -158,6 +158,7 @@ fun IrValueParameter.copyTo(irFunction: IrFunction, shift: Int = 0): IrValuePara
|
||||
}
|
||||
|
||||
fun IrTypeParameter.copyTo(irFunction: IrFunction, shift: Int = 0): IrTypeParameter {
|
||||
// TODO: Copy IrTypeParameter with type remapping
|
||||
val descriptor = WrappedTypeParameterDescriptor(symbol.descriptor.annotations, symbol.descriptor.source)
|
||||
val symbol = IrTypeParameterSymbolImpl(descriptor)
|
||||
return IrTypeParameterImpl(startOffset, endOffset, origin, symbol, name, shift + index, isReified, variance).also {
|
||||
@@ -168,7 +169,12 @@ fun IrTypeParameter.copyTo(irFunction: IrFunction, shift: Int = 0): IrTypeParame
|
||||
|
||||
fun IrFunction.copyParameterDeclarationsFrom(from: IrFunction) {
|
||||
|
||||
dispatchReceiverParameter = from.dispatchReceiverParameter?.copyTo(this)
|
||||
// TODO: should dispatch receiver be copied?
|
||||
dispatchReceiverParameter = from.dispatchReceiverParameter?.let {
|
||||
IrValueParameterImpl(it.startOffset, it.endOffset, it.origin, it.descriptor, it.type, it.varargElementType).also {
|
||||
it.parent = this
|
||||
}
|
||||
}
|
||||
extensionReceiverParameter = from.extensionReceiverParameter?.copyTo(this)
|
||||
|
||||
val shift = valueParameters.size
|
||||
|
||||
+13
-12
@@ -15,17 +15,16 @@ import org.jetbrains.kotlin.backend.common.descriptors.WrappedValueParameterDesc
|
||||
import org.jetbrains.kotlin.backend.common.descriptors.synthesizedName
|
||||
import org.jetbrains.kotlin.backend.common.ir.copyTo
|
||||
import org.jetbrains.kotlin.backend.common.ir.ir2string
|
||||
import org.jetbrains.kotlin.descriptors.Modality
|
||||
import org.jetbrains.kotlin.ir.IrElement
|
||||
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
|
||||
import org.jetbrains.kotlin.ir.builders.*
|
||||
import org.jetbrains.kotlin.ir.declarations.*
|
||||
import org.jetbrains.kotlin.ir.declarations.impl.IrConstructorImpl
|
||||
import org.jetbrains.kotlin.ir.declarations.impl.IrFunctionImpl
|
||||
import org.jetbrains.kotlin.ir.declarations.impl.IrValueParameterImpl
|
||||
import org.jetbrains.kotlin.ir.expressions.*
|
||||
import org.jetbrains.kotlin.ir.expressions.impl.IrCallImpl
|
||||
import org.jetbrains.kotlin.ir.expressions.impl.IrConstImpl
|
||||
import org.jetbrains.kotlin.ir.expressions.impl.IrDelegatingConstructorCallImpl
|
||||
import org.jetbrains.kotlin.ir.expressions.impl.IrGetObjectValueImpl
|
||||
import org.jetbrains.kotlin.ir.expressions.impl.*
|
||||
import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol
|
||||
import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol
|
||||
import org.jetbrains.kotlin.ir.symbols.impl.IrConstructorSymbolImpl
|
||||
@@ -142,9 +141,9 @@ open class DefaultArgumentStubGenerator constructor(val context: CommonBackendCo
|
||||
}
|
||||
}
|
||||
// Remove default argument initializers.
|
||||
// irFunction.valueParameters.forEach {
|
||||
// it.defaultValue = null
|
||||
// }
|
||||
irFunction.valueParameters.forEach {
|
||||
it.defaultValue = IrExpressionBodyImpl(IrErrorExpressionImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, it.type, "Default Stub"))
|
||||
}
|
||||
|
||||
return listOf(irFunction, newIrFunction)
|
||||
}
|
||||
@@ -377,7 +376,9 @@ private fun IrFunction.generateDefaultsFunctionImpl(context: CommonBackendContex
|
||||
val newTypeParameters = typeParameters.map { it.copyTo(newFunction) }
|
||||
|
||||
newFunction.returnType = returnType
|
||||
newFunction.dispatchReceiverParameter = dispatchReceiverParameter?.copyTo(newFunction)
|
||||
newFunction.dispatchReceiverParameter = dispatchReceiverParameter?.run {
|
||||
IrValueParameterImpl(startOffset, endOffset, origin, descriptor, type, varargElementType).also { it.parent = newFunction }
|
||||
}
|
||||
newFunction.extensionReceiverParameter = extensionReceiverParameter?.copyTo(newFunction)
|
||||
newFunction.valueParameters += newValueParameters
|
||||
newFunction.typeParameters += newTypeParameters
|
||||
@@ -399,7 +400,7 @@ private fun buildFunctionDeclaration(irFunction: IrFunction): IrFunction {
|
||||
irFunction.name,
|
||||
irFunction.visibility,
|
||||
irFunction.isInline,
|
||||
irFunction.isExternal,
|
||||
false,
|
||||
false
|
||||
).also {
|
||||
descriptor.bind(it)
|
||||
@@ -417,10 +418,10 @@ private fun buildFunctionDeclaration(irFunction: IrFunction): IrFunction {
|
||||
IrSimpleFunctionSymbolImpl(descriptor),
|
||||
name,
|
||||
irFunction.visibility,
|
||||
irFunction.modality,
|
||||
Modality.FINAL,
|
||||
irFunction.isInline,
|
||||
irFunction.isExternal,
|
||||
irFunction.isTailrec,
|
||||
false,
|
||||
false,
|
||||
irFunction.isSuspend
|
||||
).also {
|
||||
descriptor.bind(it)
|
||||
|
||||
+6
-4
@@ -55,7 +55,7 @@ class LocalDeclarationsLowering(
|
||||
val context: BackendContext,
|
||||
val localNameProvider: LocalNameProvider = LocalNameProvider.DEFAULT,
|
||||
val loweredConstructorVisibility: Visibility = Visibilities.PRIVATE,
|
||||
private val isJVM: Boolean = false
|
||||
private val isJVM: Boolean = false // TODO: remove this workaround
|
||||
) :
|
||||
DeclarationContainerLoweringPass {
|
||||
|
||||
@@ -350,7 +350,7 @@ class LocalDeclarationsLowering(
|
||||
override fun visitReturn(expression: IrReturn): IrExpression {
|
||||
expression.transformChildrenVoid(this)
|
||||
|
||||
val oldReturnTarget = expression.returnTargetSymbol.owner as IrFunction
|
||||
val oldReturnTarget = expression.returnTargetSymbol.owner as? IrFunction ?: return expression
|
||||
val newReturnTarget = oldReturnTarget.transformed ?: return expression
|
||||
|
||||
return IrReturnImpl(
|
||||
@@ -503,7 +503,7 @@ class LocalDeclarationsLowering(
|
||||
newSymbol,
|
||||
newName,
|
||||
// TODO: change to PRIVATE when issue with CallableReferenceLowering in Jvm BE is fixed
|
||||
Visibilities.PUBLIC,
|
||||
if (isJVM) Visibilities.PUBLIC else Visibilities.PRIVATE,
|
||||
Modality.FINAL,
|
||||
oldDeclaration.isInline,
|
||||
oldDeclaration.isExternal,
|
||||
@@ -596,8 +596,10 @@ class LocalDeclarationsLowering(
|
||||
|
||||
newDeclaration.parent = localClassContext.declaration
|
||||
newDeclaration.returnType = oldDeclaration.returnType
|
||||
// TODO: should dispatch receiver be copied?
|
||||
newDeclaration.dispatchReceiverParameter = oldDeclaration.dispatchReceiverParameter?.run {
|
||||
copyTo(newDeclaration).also {
|
||||
IrValueParameterImpl(startOffset, endOffset, origin, descriptor, type, varargElementType).also {
|
||||
it.parent = newDeclaration
|
||||
newParameterToOld.putAbsentOrSame(it, this)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -68,6 +68,11 @@ class VariableRemapper(val mapping: Map<IrValueParameter, IrValueParameter>) : A
|
||||
mapping[value]
|
||||
}
|
||||
|
||||
class VariableRemapperDesc(val mapping: Map<ValueDescriptor, IrValueParameter>) : AbstractVariableRemapper() {
|
||||
override fun remapVariable(value: IrValueDeclaration): IrValueParameter? =
|
||||
mapping[value.descriptor]
|
||||
}
|
||||
|
||||
fun BackendContext.createIrBuilder(
|
||||
symbol: IrSymbol,
|
||||
startOffset: Int = UNDEFINED_OFFSET,
|
||||
|
||||
Reference in New Issue
Block a user