[JS] Support evaluation of const intrinsics for K2

#KT-56023 Fixed
#KT-51582 Fixed
This commit is contained in:
Ivan Kylchik
2023-02-08 14:40:58 +01:00
committed by Space Team
parent e981b1f958
commit 7cf9dda8dc
36 changed files with 413 additions and 40 deletions
@@ -1,5 +1,6 @@
// TARGET_BACKEND: JVM_IR
// TARGET_BACKEND: NATIVE
// TARGET_BACKEND: JS_IR
// `Boolean.equals(Boolean)` will not be evaluated in K1
// IGNORE_BACKEND_K1: NATIVE
@@ -1,6 +1,7 @@
// TARGET_BACKEND: JVM_IR
// TARGET_BACKEND: NATIVE
// IGNORE_BACKEND_K1: JVM_IR, NATIVE
// TARGET_BACKEND: JS_IR
// IGNORE_BACKEND_K1: JVM_IR, NATIVE, JS_IR, JS_IR_ES6
const val minusOneVal = (-1).toByte()
const val oneVal = 1.toByte()
@@ -1,5 +1,6 @@
// TARGET_BACKEND: JVM_IR
// TARGET_BACKEND: NATIVE
// TARGET_BACKEND: JS_IR
// `Char.equals(Char)` will not be evaluated in K1
// IGNORE_BACKEND_K1: NATIVE
// WITH_STDLIB
@@ -1,12 +1,14 @@
// TARGET_BACKEND: JVM_IR
// TARGET_BACKEND: NATIVE
// IGNORE_BACKEND_K1: JVM_IR, NATIVE
// TARGET_BACKEND: JS_IR
// IGNORE_BACKEND_K1: JVM_IR, NATIVE, JS_IR, JS_IR_ES6
const val minusOneVal = -1.0
const val oneVal = 1.0
const val twoVal = 2.0
const val threeVal = 3.0
const val fourVal = 4.0
const val oneAndAHalf = 1.5
const val byteVal = 2.toByte()
const val shortVal = 2.toShort()
@@ -87,6 +89,7 @@ const val equals4 = fourVal == twoVal
const val toString1 = oneVal.toString()
const val toString2 = twoVal.toString()
const val toString3 = oneAndAHalf.toString()
fun box(): String {
if (compareTo1 != -1) return "Fail 1.1"
@@ -159,8 +162,9 @@ fun box(): String {
if (equals3 != false) return "Fail 9.3"
if (equals4 != false) return "Fail 9.4"
if (toString1 != "1.0") return "Fail 10.1"
if (toString2 != "2.0") return "Fail 10.2"
if (toString1 != "1.0" && toString1 != "1" /* JS */) return "Fail 10.1"
if (toString2 != "2.0" && toString2 != "2" /* JS */) return "Fail 10.2"
if (toString3 != "1.5") return "Fail 10.3"
return "OK"
}
@@ -12,8 +12,9 @@ const val name3 = EnumClass.anotherValue.name
const val name4 = EnumClass.WITH_UNDERSCORE.name
fun box(): String {
if (name2 != "VALUE") return "Fail 1"
if (name3 != "anotherValue") return "Fail 2"
if (name4 != "WITH_UNDERSCORE") return "Fail 3"
if (EnumClass.OK.name != "OK") return "Fail 1"
if (name2 != "VALUE") return "Fail 2"
if (name3 != "anotherValue") return "Fail 3"
if (name4 != "WITH_UNDERSCORE") return "Fail 4"
return name1
}
@@ -1,12 +1,14 @@
// TARGET_BACKEND: JVM_IR
// TARGET_BACKEND: NATIVE
// IGNORE_BACKEND_K1: JVM_IR, NATIVE
// TARGET_BACKEND: JS_IR
// IGNORE_BACKEND_K1: JVM_IR, NATIVE, JS_IR, JS_IR_ES6
const val minusOneVal = -1.0f
const val oneVal = 1.0f
const val twoVal = 2.0f
const val threeVal = 3.0f
const val fourVal = 4.0f
const val oneAndAHalf = 1.5f
const val byteVal = 2.toByte()
const val shortVal = 2.toShort()
@@ -87,6 +89,7 @@ const val equals4 = fourVal == twoVal
const val toString1 = oneVal.toString()
const val toString2 = twoVal.toString()
const val toString3 = oneAndAHalf.toString()
fun box(): String {
if (compareTo1 != -1) return "Fail 1.1"
@@ -159,8 +162,9 @@ fun box(): String {
if (equals3 != false) return "Fail 9.3"
if (equals4 != false) return "Fail 9.4"
if (toString1 != "1.0") return "Fail 10.1"
if (toString2 != "2.0") return "Fail 10.2"
if (toString1 != "1.0" && toString1 != "1" /* JS */) return "Fail 10.1"
if (toString2 != "2.0" && toString2 != "2" /* JS */) return "Fail 10.2"
if (toString3 != "1.5") return "Fail 10.3"
return "OK"
}
@@ -1,7 +1,8 @@
// !LANGUAGE: +IntrinsicConstEvaluation
// TARGET_BACKEND: JVM_IR
// TARGET_BACKEND: NATIVE
// IGNORE_BACKEND_K1: JVM_IR, NATIVE
// TARGET_BACKEND: JS_IR
// IGNORE_BACKEND_K1: JVM_IR, NATIVE, JS_IR, JS_IR_ES6
const val flag = true
const val value = 10
@@ -1,6 +1,7 @@
// TARGET_BACKEND: JVM_IR
// TARGET_BACKEND: NATIVE
// IGNORE_BACKEND_K1: JVM_IR, NATIVE
// TARGET_BACKEND: JS_IR
// IGNORE_BACKEND_K1: JVM_IR, NATIVE, JS_IR, JS_IR_ES6
const val minusOneVal = -1
const val oneVal = 1
@@ -1,6 +1,7 @@
// TARGET_BACKEND: JVM_IR
// TARGET_BACKEND: NATIVE
// IGNORE_BACKEND_K1: JVM_IR, NATIVE
// TARGET_BACKEND: JS_IR
// IGNORE_BACKEND_K1: JVM_IR, NATIVE, JS_IR, JS_IR_ES6
const val minusOneVal = -1L
const val oneVal = 1L
@@ -1,6 +1,7 @@
// TARGET_BACKEND: JVM_IR
// TARGET_BACKEND: NATIVE
// IGNORE_BACKEND_K1: JVM_IR, NATIVE
// TARGET_BACKEND: JS_IR
// IGNORE_BACKEND_K1: JVM_IR, NATIVE, JS_IR, JS_IR_ES6
const val minusOneVal = (-1).toShort()
const val oneVal = 1.toShort()
@@ -1,5 +1,6 @@
// TARGET_BACKEND: JVM_IR
// TARGET_BACKEND: NATIVE
// TARGET_BACKEND: JS_IR
// WITH_STDLIB
const val code = '1'.code
@@ -1,5 +1,6 @@
// TARGET_BACKEND: JVM_IR
// TARGET_BACKEND: NATIVE
// TARGET_BACKEND: JS_IR
const val someStr = "123"
const val otherStr = "other"
@@ -1,5 +1,6 @@
// TARGET_BACKEND: JVM_IR
// TARGET_BACKEND: NATIVE
// TARGET_BACKEND: JS_IR
// WITH_STDLIB
const val byteVal: UByte = 1u