Handle inline class operations in inline class secondary constructors

#KT-27225 Fixed
This commit is contained in:
Svyatoslav Scherbina
2018-10-01 14:15:52 +03:00
committed by SvyatoslavScherbina
parent 4045bf48c8
commit d6475cb2ad
3 changed files with 27 additions and 1 deletions
@@ -271,6 +271,8 @@ private class InlineClassTransformer(private val context: Context) : IrBuildingT
}
override fun visitConstructor(declaration: IrConstructor): IrStatement {
super.visitConstructor(declaration)
val classIsInlined = declaration.constructedClass.isInlined()
if (classIsInlined && !declaration.isPrimary) {
@@ -282,7 +284,7 @@ private class InlineClassTransformer(private val context: Context) : IrBuildingT
(declaration.body as IrBlockBody).statements.clear()
}
return super.visitConstructor(declaration)
return declaration
}
private fun IrBuilderWithScope.irIsNull(expression: IrExpression): IrExpression {
+4
View File
@@ -2580,6 +2580,10 @@ task classDeclarationInsideInline(type: RunKonanTest) {
goldValue = "test1: 1.0\n1\ntest2\n"
}
task inlineClass0(type: RunKonanTest) {
source = "codegen/inlineClass/inlineClass0.kt"
}
task deserialized_inline0(type: RunKonanTest) {
source = "serialization/deserialized_inline0.kt"
}
@@ -0,0 +1,20 @@
/*
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
* that can be found in the LICENSE file.
*/
package codegen.inlineClass.inlineClass0
import kotlin.test.*
// Based on KT-27225.
inline class First(val value: Int)
inline class Second(val value: First) {
constructor(c: Int) : this(First(c))
}
@Test fun runTest() {
assertEquals(Second(42).value.value, 42)
}