JVM IR: Fix generation of parameterless default constructor
The JVM backend does not generate parameterless default constructors for private constructors and constructors of local, inner, or inline classes.
This commit is contained in:
committed by
Alexander Udalov
parent
5321a6af33
commit
8e07482862
@@ -0,0 +1,15 @@
|
||||
enum class Enum(val x: Int = 0) {
|
||||
A,
|
||||
B(0) { override fun f() {} };
|
||||
open fun f() {}
|
||||
}
|
||||
|
||||
// @Enum.class:
|
||||
// 0 <init>\(\)V
|
||||
// 1 private <init>\(Ljava/lang/String;II\)V
|
||||
// 1 synthetic <init>\(Ljava/lang/String;IIILkotlin/jvm/internal/DefaultConstructorMarker;\)V
|
||||
// 1 public synthetic <init>\(Ljava/lang/String;IILkotlin/jvm/internal/DefaultConstructorMarker;\)V
|
||||
|
||||
// @Enum$B.class:
|
||||
// 0 <init>\(\)V
|
||||
// 1 <init>\(Ljava/lang/String;I\)V
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
inline class A(val x: Int)
|
||||
class B(val a: A = A(0))
|
||||
|
||||
// @B.class:
|
||||
// 1 private <init>\(I\)V
|
||||
// 1 public synthetic <init>\(IILkotlin/jvm/internal/DefaultConstructorMarker;\)V
|
||||
// 1 public synthetic <init>\(ILkotlin/jvm/internal/DefaultConstructorMarker;\)V
|
||||
|
||||
// JVM_TEMPLATES
|
||||
// 1 private <init>\(\)V
|
||||
|
||||
// JVM_IR_TEMPLATES
|
||||
// 1 public <init>\(\)V
|
||||
@@ -0,0 +1,13 @@
|
||||
inline class A(val x: Int = 0)
|
||||
|
||||
// 0 <init>\(\)V
|
||||
// 1 private synthetic <init>\(I\)V
|
||||
// 1 public final static synthetic box-impl\(I\)LA;
|
||||
|
||||
// JVM_TEMPLATES
|
||||
// 1 public static constructor-impl\(I\)I
|
||||
// 1 public static synthetic constructor-impl\$default\(IILkotlin/jvm/internal/DefaultConstructorMarker;\)I
|
||||
|
||||
// JVM_IR_TEMPLATES
|
||||
// 1 public final static constructor-impl\(I\)I
|
||||
// 1 public static synthetic constructor-impl\$default\(IILjava/lang/Object;\)I
|
||||
@@ -0,0 +1,12 @@
|
||||
class A(val s: String) {
|
||||
inner class B(val x: Int = 0)
|
||||
}
|
||||
|
||||
// @A.class
|
||||
// 1 public <init>\(Ljava/lang/String;\)V
|
||||
|
||||
// @A$B.class
|
||||
// 0 <init>\(\)V
|
||||
// 0 <init>\(LA;\)V
|
||||
// 1 public <init>\(LA;I\)V
|
||||
// 1 public synthetic <init>\(LA;IILkotlin/jvm/internal/DefaultConstructorMarker;\)V
|
||||
+5
@@ -0,0 +1,5 @@
|
||||
class A internal constructor(val x: Int = 0)
|
||||
|
||||
// 1 public <init>\(\)V
|
||||
// 1 public <init>\(I\)V
|
||||
// 1 public synthetic <init>\(IILkotlin/jvm/internal/DefaultConstructorMarker;\)V
|
||||
@@ -0,0 +1,16 @@
|
||||
class A(val s: String) {
|
||||
fun f(): Int {
|
||||
class B(val x: Int = 0) {
|
||||
fun f(): Int = x
|
||||
}
|
||||
return B().f()
|
||||
}
|
||||
}
|
||||
|
||||
// @A.class:
|
||||
// 1 public <init>\(Ljava/lang/String;\)V
|
||||
|
||||
// @A$f$B.class:
|
||||
// 0 <init>\(\)V
|
||||
// 1 public <init>\(I\)V
|
||||
// 1 public synthetic <init>\(IILkotlin/jvm/internal/DefaultConstructorMarker;\)V
|
||||
@@ -0,0 +1,5 @@
|
||||
class A(val x: Int = 0)
|
||||
|
||||
// 1 public <init>\(\)V
|
||||
// 1 public <init>\(I\)V
|
||||
// 1 public synthetic <init>\(IILkotlin/jvm/internal/DefaultConstructorMarker;\)V
|
||||
@@ -0,0 +1,5 @@
|
||||
class A private constructor(val x: Int = 0)
|
||||
|
||||
// 0 <init>\(\)V
|
||||
// 1 private <init>\(I\)V
|
||||
// 1 synthetic <init>\(IILkotlin/jvm/internal/DefaultConstructorMarker;\)V
|
||||
+5
@@ -0,0 +1,5 @@
|
||||
class A protected constructor(val x: Int = 0)
|
||||
|
||||
// 1 protected <init>\(\)V
|
||||
// 1 protected <init>\(I\)V
|
||||
// 1 synthetic <init>\(IILkotlin/jvm/internal/DefaultConstructorMarker;\)V
|
||||
Reference in New Issue
Block a user