Fixed bug in Inliner + test
This commit is contained in:
+3
-2
@@ -35,6 +35,7 @@ import org.jetbrains.kotlin.ir.symbols.impl.createValueSymbol
|
|||||||
import org.jetbrains.kotlin.ir.util.*
|
import org.jetbrains.kotlin.ir.util.*
|
||||||
import org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid
|
import org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid
|
||||||
import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid
|
import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid
|
||||||
|
import org.jetbrains.kotlin.ir.visitors.acceptVoid
|
||||||
import org.jetbrains.kotlin.ir.visitors.transformChildrenVoid
|
import org.jetbrains.kotlin.ir.visitors.transformChildrenVoid
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
import org.jetbrains.kotlin.resolve.DescriptorUtils
|
import org.jetbrains.kotlin.resolve.DescriptorUtils
|
||||||
@@ -60,9 +61,9 @@ internal class DeepCopyIrTreeWithDescriptors(val targetDescriptor: FunctionDescr
|
|||||||
fun copy(irElement: IrElement, typeSubstitutor: TypeSubstitutor?): IrElement {
|
fun copy(irElement: IrElement, typeSubstitutor: TypeSubstitutor?): IrElement {
|
||||||
this.typeSubstitutor = typeSubstitutor
|
this.typeSubstitutor = typeSubstitutor
|
||||||
// Create all class descriptors and all necessary descriptors in order to create KotlinTypes.
|
// Create all class descriptors and all necessary descriptors in order to create KotlinTypes.
|
||||||
irElement.acceptChildrenVoid(DescriptorCollectorCreatePhase())
|
irElement.acceptVoid(DescriptorCollectorCreatePhase())
|
||||||
// Initialize all created descriptors possibly using previously created types.
|
// Initialize all created descriptors possibly using previously created types.
|
||||||
irElement.acceptChildrenVoid(DescriptorCollectorInitPhase())
|
irElement.acceptVoid(DescriptorCollectorInitPhase())
|
||||||
return irElement.accept(InlineCopyIr(), null)
|
return irElement.accept(InlineCopyIr(), null)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2326,6 +2326,11 @@ task inline_statementAsLastExprInBlock(type: RunKonanTest) {
|
|||||||
source = "codegen/inline/statementAsLastExprInBlock.kt"
|
source = "codegen/inline/statementAsLastExprInBlock.kt"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
task inline_returnLocalClassFromBlock(type: RunKonanTest) {
|
||||||
|
goldValue = "Zzz\n"
|
||||||
|
source = "codegen/inline/returnLocalClassFromBlock.kt"
|
||||||
|
}
|
||||||
|
|
||||||
task deserialized_inline0(type: RunKonanTest) {
|
task deserialized_inline0(type: RunKonanTest) {
|
||||||
source = "serialization/deserialized_inline0.kt"
|
source = "serialization/deserialized_inline0.kt"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,15 @@
|
|||||||
|
package codegen.inline.returnLocalClassFromBlock
|
||||||
|
|
||||||
|
import kotlin.test.*
|
||||||
|
|
||||||
|
inline fun <R> call(block: ()->R): R {
|
||||||
|
try {
|
||||||
|
return block()
|
||||||
|
} finally {
|
||||||
|
println("Zzz")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test fun runTest() {
|
||||||
|
call { class Z(); Z() }
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user