IR BE common: fix InnerClassesLowering

(cherry picked from commit 4239a5f)
This commit is contained in:
Zalim Bashorov
2018-06-21 22:30:49 +03:00
committed by Dmitry Petrov
parent 072804af52
commit d5906dd584
@@ -20,7 +20,10 @@ import org.jetbrains.kotlin.ir.expressions.*
import org.jetbrains.kotlin.ir.expressions.impl.*
import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol
import org.jetbrains.kotlin.ir.symbols.IrValueSymbol
import org.jetbrains.kotlin.ir.util.*
import org.jetbrains.kotlin.ir.util.createParameterDeclarations
import org.jetbrains.kotlin.ir.util.defaultType
import org.jetbrains.kotlin.ir.util.dump
import org.jetbrains.kotlin.ir.util.transformFlat
import org.jetbrains.kotlin.ir.visitors.*
import org.jetbrains.kotlin.resolve.scopes.receivers.ImplicitClassReceiver
import java.util.*
@@ -29,12 +32,9 @@ class InnerClassesLowering(val context: BackendContext) : ClassLoweringPass {
object FIELD_FOR_OUTER_THIS : IrDeclarationOriginImpl("FIELD_FOR_OUTER_THIS")
override fun lower(irClass: IrClass) {
TODO()
// InnerClassTransformer(irClass).lowerInnerClass()
InnerClassTransformer(irClass).lowerInnerClass()
}
/*
private inner class InnerClassTransformer(val irClass: IrClass) {
lateinit var outerThisField: IrField
@@ -70,12 +70,14 @@ class InnerClassesLowering(val context: BackendContext) : ClassLoweringPass {
}
private fun createOuterThisField() {
val fieldSymbol = context.descriptorsFactory.getOuterThisFieldSymbol(irClass)
irClass.declarations.add(
IrFieldImpl(
irClass.startOffset, irClass.endOffset,
FIELD_FOR_OUTER_THIS,
context.descriptorsFactory.getOuterThisFieldSymbol(irClass)
).also {
fieldSymbol,
irClass.defaultType
).also {
outerThisField = it
}
)
@@ -100,7 +102,10 @@ class InnerClassesLowering(val context: BackendContext) : ClassLoweringPass {
irConstructor.origin, // TODO special origin for lowered inner class constructors?
newSymbol,
null
)
).apply {
returnType = irConstructor.returnType
}
loweredConstructor.createParameterDeclarations()
val outerThisValueParameter = loweredConstructor.valueParameters[0].symbol
@@ -118,7 +123,8 @@ class InnerClassesLowering(val context: BackendContext) : ClassLoweringPass {
IrSetFieldImpl(
startOffset, endOffset, outerThisField.symbol,
IrGetValueImpl(startOffset, endOffset, irClass.thisReceiver!!.symbol),
IrGetValueImpl(startOffset, endOffset, outerThisValueParameter)
IrGetValueImpl(startOffset, endOffset, outerThisValueParameter),
context.irBuiltIns.unitType
)
)
} else {
@@ -169,7 +175,7 @@ class InnerClassesLowering(val context: BackendContext) : ClassLoweringPass {
}
val outerThisField = context.descriptorsFactory.getOuterThisFieldSymbol(innerClass)
irThis = IrGetFieldImpl(startOffset, endOffset, outerThisField, irThis, origin)
irThis = IrGetFieldImpl(startOffset, endOffset, outerThisField, innerClass.defaultType, irThis, origin)
val outer = innerClass.parent
innerClass = outer as? IrClass ?:
@@ -192,14 +198,10 @@ class InnerClassesLowering(val context: BackendContext) : ClassLoweringPass {
return null
}
}
*/
}
class InnerClassConstructorCallsLowering(val context: BackendContext) : BodyLoweringPass {
override fun lower(irBody: IrBody) {
TODO()
/*
irBody.transformChildrenVoid(object : IrElementTransformerVoid() {
override fun visitCall(expression: IrCall): IrExpression {
expression.transformChildrenVoid(this)
@@ -211,8 +213,8 @@ class InnerClassConstructorCallsLowering(val context: BackendContext) : BodyLowe
val newCallee = context.descriptorsFactory.getInnerClassConstructorWithOuterThisParameter(callee.owner)
val newCall = IrCallImpl(
expression.startOffset, expression.endOffset, newCallee, newCallee.descriptor,
null, // TODO type arguments map
expression.startOffset, expression.endOffset, expression.type, newCallee, newCallee.descriptor,
0, // TODO type arguments map
expression.origin
)
@@ -233,7 +235,7 @@ class InnerClassConstructorCallsLowering(val context: BackendContext) : BodyLowe
val newCallee = context.descriptorsFactory.getInnerClassConstructorWithOuterThisParameter(classConstructor)
val newCall = IrDelegatingConstructorCallImpl(
expression.startOffset, expression.endOffset, newCallee, newCallee.descriptor,
expression.startOffset, expression.endOffset, expression.type, newCallee, newCallee.descriptor,
classConstructor.typeParameters.size
).apply { copyTypeArgumentsFrom(expression) }
@@ -247,7 +249,6 @@ class InnerClassConstructorCallsLowering(val context: BackendContext) : BodyLowe
// TODO callable references?
})
*/
}
}