JVM_IR fold safe calls and elvises

This commit is contained in:
Dmitry Petrov
2021-09-28 17:20:13 +03:00
committed by teamcityserver
parent 7370d096ee
commit 9325660f06
23 changed files with 266 additions and 78 deletions
@@ -14,5 +14,5 @@ class A(val x: String) {
// JVM_IR_TEMPLATES
// 4 IFNULL
// 2 IFNONNULL
// 2 ACONST_NULL
// 0 IFNONNULL
// 0 ACONST_NULL
@@ -7,3 +7,4 @@ fun test(xs: IntArray, dx: Int) {
// JVM_IR_TEMPLATES
// 5 ALOAD
// 6 ILOAD
@@ -0,0 +1,6 @@
fun test(a: Any?, b: Any?, c: Any) =
a ?: b ?: c
// 2 IFNONNULL
// 0 IFNULL
// 0 ACONST_NULL
@@ -5,13 +5,14 @@ class C(val s: String)
fun test(na: A?) =
na?.b?.c?.s
// 1 POP
// 1 ACONST_NULL
// JVM_IR_TEMPLATES
// 1 DUP
// 1 IFNULL
// 0 IFNONNULL
// 1 ACONST_NULL
// JVM_TEMPLATES
// 3 DUP
// 3 IFNULL
// 3 IFNULL
// 0 IFNONNULL
// 1 ACONST_NULL
@@ -6,3 +6,6 @@ fun test(an: A?) = an?.b?.c?.s
// JVM_IR_TEMPLATES
// 0 ASTORE
// 1 IFNULL
// 0 IFNONNULL
// 1 ACONST_NULL
@@ -6,3 +6,6 @@ fun test(an: A?) = an?.bn?.cn?.s
// JVM_IR_TEMPLATES
// 0 ASTORE
// 1 ACONST_NULL
// 3 IFNULL
// 0 IFNONNULL
@@ -12,3 +12,6 @@ object Host {
// JVM_IR_TEMPLATES
// 0 ASTORE
// 1 ACONST_NULL
// 1 IFNULL
// 0 IFNONNULL
@@ -16,3 +16,6 @@ fun test(an: A?) = an?.b?.c?.s
// JVM_IR_TEMPLATES
// 0 ASTORE
// 1 ACONST_NULL
// 1 IFNULL
// 0 IFNONNULL
@@ -1,11 +1,12 @@
fun test(a: Any?, b: Any?, c: String) =
a?.toString() ?: b?.toString() ?: c
// 2 IFNULL
// 1 ACONST_NULL
// JVM_IR_TEMPLATES
// 1 IFNONNULL
// 2 IFNULL
// 0 IFNONNULL
// 0 ACONST_NULL
// JVM_TEMPLATES
// 2 IFNULL
// 1 ACONST_NULL
// 2 IFNONNULL
@@ -11,7 +11,11 @@ fun test(a: Any?) =
// JVM_IR_TEMPLATES
// 1 DUP
// 1 IFNULL
// 0 ACONST_NULL
// 0 IFNONNULL
// JVM_TEMPLATES
// 2 DUP
// 2 IFNULL
// 0 ACONST_NULL
// 0 IFNONNULL