Files
kotlin-fork/compiler/fir/analysis-tests/testData/resolve/objectInnerClass.fir.txt
T
Roman Golyshev 9b9c51bc8d [FIR] Fix dispatch receivers on inner classes' constructors
1. Inner class constructor should have its outer class as a dispatch
receiver, since it is necessary for the call. Before it was null
2. Substituted inner class constructor should have its original dispatch
 receiver type with the proper substitution. Before it was set to the
 class itself (since the class was usually passed as a new dispatch
 receiver)

Also, modify FIR renderer, so it properly renders the dispatch receiver
of the constructors
2021-10-05 12:17:08 +00:00

200 lines
7.5 KiB
Plaintext
Vendored

FILE: objectInnerClass.kt
public final val case1: R|A| = object : R|A| {
private constructor(): R|<anonymous>| {
super<R|kotlin/Any|>()
}
local final inner class Child : R|<anonymous>.Base| {
public <anonymous>.constructor(property: R|B|): R|<anonymous>.Child| {
this@R|/<anonymous>|.super<R|<anonymous>.Base|>(R|<local>/property|)
}
public final fun R|<anonymous>.Base|.zoo(): R|kotlin/Unit| {
lval x: R|B| = this@R|<local>/zoo|.R|<local>/property|
}
public final fun foo(): R|kotlin/Unit| {
this@R|/<anonymous>.Child|.R|<local>/baseFun|()
lval x: R|B| = this@R|/<anonymous>.Child|.R|<local>/property|
(this@R|/<anonymous>.Child|, this@R|/<anonymous>.Child|).R|<local>/zoo|()
(this@R|/<anonymous>|, this@R|/<anonymous>.Child|).R|/<anonymous>.hoo|()
}
}
public final fun R|<anonymous>.Child|.voo(): R|kotlin/Unit| {
lval x: R|B| = this@R|/<anonymous>.voo|.R|<local>/property|
}
public final fun R|<anonymous>.Base|.hoo(): R|kotlin/Unit| {
lval x: R|B| = this@R|/<anonymous>.hoo|.R|<local>/property|
}
local open inner class Base : R|kotlin/Any| {
public <anonymous>.constructor(property: R|B|): R|<anonymous>.Base| {
super<R|kotlin/Any|>()
}
public final val property: R|B| = R|<local>/property|
public get(): R|B|
public final fun baseFun(): R|kotlin/Unit| {
}
}
public final fun caseForBase(): R|kotlin/Unit| {
lval base: R|<anonymous>.Base| = this@R|/<anonymous>|.R|/<anonymous>.Base.Base|(R|/B.B|())
R|<local>/base|.R|<local>/baseFun|()
R|<local>/base|.R|<local>/property|
(this@R|/<anonymous>|, R|<local>/base|).R|/<anonymous>.hoo|()
}
public final fun caseForChild(): R|kotlin/Unit| {
lval child: R|<anonymous>.Child| = this@R|/<anonymous>|.R|/<anonymous>.Child.Child|(R|/B.B|())
R|<local>/child|.R|<local>/baseFun|()
R|<local>/child|.R|<local>/property|
R|<local>/child|.R|<local>/foo|()
(this@R|/<anonymous>|, R|<local>/child|).R|/<anonymous>.hoo|()
(this@R|/<anonymous>|, R|<local>/child|).R|/<anonymous>.voo|()
}
}
public get(): R|A|
public final class Case2 : R|kotlin/Any| {
public constructor(): R|Case2| {
super<R|kotlin/Any|>()
}
public final val x: R|Case2.Base| = object : R|Case2.Base| {
private constructor(): R|<anonymous>| {
this@R|/Case2|.super<R|Case2.Base|>(R|/B.B|())
}
public final fun R|Case2.Base|.zoo(): R|kotlin/Unit| {
lval x: R|B| = this@R|/<anonymous>.zoo|.R|/Case2.Base.property|
}
public final fun foo(): R|kotlin/Unit| {
this@R|/<anonymous>|.R|/Case2.Base.baseFun|()
lval x: R|B| = this@R|/<anonymous>|.R|/Case2.Base.property|
(this@R|/<anonymous>|, this@R|/<anonymous>|).R|/<anonymous>.zoo|()
(this@R|/Case2|, this@R|/<anonymous>|).R|/Case2.hoo|()
}
}
public get(): R|Case2.Base|
public final fun R|Case2.Base|.hoo(): R|kotlin/Unit| {
lval x: R|B| = this@R|/Case2.hoo|.R|/Case2.Base.property|
}
public open inner class Base : R|kotlin/Any| {
public Case2.constructor(property: R|B|): R|Case2.Base| {
super<R|kotlin/Any|>()
}
public final val property: R|B| = R|<local>/property|
public get(): R|B|
public final fun baseFun(): R|kotlin/Unit| {
}
}
public final fun caseForBase(): R|kotlin/Unit| {
lval base: R|Case2.Base| = this@R|/Case2|.R|/Case2.Base.Base|(R|/B.B|())
R|<local>/base|.R|/Case2.Base.baseFun|()
R|<local>/base|.R|/Case2.Base.property|
(this@R|/Case2|, R|<local>/base|).R|/Case2.hoo|()
}
public final fun caseForChild(): R|kotlin/Unit| {
lval child: R|Case2.Base| = this@R|/Case2|.R|/Case2.x|
R|<local>/child|.R|/Case2.Base.baseFun|()
R|<local>/child|.R|/Case2.Base.property|
(this@R|/Case2|, R|<local>/child|).R|/Case2.hoo|()
}
}
public final class Case3 : R|kotlin/Any| {
public constructor(): R|Case3| {
super<R|kotlin/Any|>()
}
public final val x: R|A| = object : R|A| {
private constructor(): R|<anonymous>| {
super<R|kotlin/Any|>()
}
local final inner class Child : R|Case3.<anonymous>.Base| {
public <anonymous>.constructor(property: R|B|): R|Case3.<anonymous>.Child| {
this@R|/<anonymous>|.super<R|Case3.<anonymous>.Base|>(R|<local>/property|)
}
public final fun R|Case3.<anonymous>.Base|.zoo(): R|kotlin/Unit| {
lval x: R|B| = this@R|<local>/zoo|.R|<local>/property|
}
public final fun foo(): R|kotlin/Unit| {
this@R|/Case3.<anonymous>.Child|.R|<local>/baseFun|()
lval x: R|B| = this@R|/Case3.<anonymous>.Child|.R|<local>/property|
(this@R|/Case3.<anonymous>.Child|, this@R|/Case3.<anonymous>.Child|).R|<local>/zoo|()
(this@R|/<anonymous>|, this@R|/Case3.<anonymous>.Child|).R|/<anonymous>.hoo|()
}
}
public final fun R|Case3.<anonymous>.Child|.voo(): R|kotlin/Unit| {
lval x: R|B| = this@R|/<anonymous>.voo|.R|<local>/property|
}
public final fun R|Case3.<anonymous>.Base|.hoo(): R|kotlin/Unit| {
lval x: R|B| = this@R|/<anonymous>.hoo|.R|<local>/property|
}
local open inner class Base : R|kotlin/Any| {
public <anonymous>.constructor(property: R|B|): R|Case3.<anonymous>.Base| {
super<R|kotlin/Any|>()
}
public final val property: R|B| = R|<local>/property|
public get(): R|B|
public final fun baseFun(): R|kotlin/Unit| {
}
}
public final fun caseForBase(): R|kotlin/Unit| {
lval base: R|Case3.<anonymous>.Base| = this@R|/<anonymous>|.R|/Case3.<anonymous>.Base.Base|(R|/B.B|())
R|<local>/base|.R|<local>/baseFun|()
R|<local>/base|.R|<local>/property|
(this@R|/<anonymous>|, R|<local>/base|).R|/<anonymous>.hoo|()
}
public final fun caseForChild(): R|kotlin/Unit| {
lval child: R|Case3.<anonymous>.Child| = this@R|/<anonymous>|.R|/Case3.<anonymous>.Child.Child|(R|/B.B|())
R|<local>/child|.R|<local>/baseFun|()
R|<local>/child|.R|<local>/property|
R|<local>/child|.R|<local>/foo|()
(this@R|/<anonymous>|, R|<local>/child|).R|/<anonymous>.hoo|()
(this@R|/<anonymous>|, R|<local>/child|).R|/<anonymous>.voo|()
}
}
public get(): R|A|
}
public abstract interface A : R|kotlin/Any| {
}
public final class B : R|kotlin/Any| {
public constructor(): R|B| {
super<R|kotlin/Any|>()
}
}