[K/JS] Use declared upper-bound types for parameters inside inlined functions body, instead of the provided types
This commit is contained in:
Vendored
+1
-1
@@ -2,7 +2,7 @@
|
||||
// WITH_COROUTINES
|
||||
// CHECK_BYTECODE_LISTING
|
||||
// FIR_IDENTICAL
|
||||
// CHECK_NEW_COUNT: function=suspendHere count=0
|
||||
// CHECK_NEW_COUNT: function=suspendHere count=0 TARGET_BACKENDS=JS
|
||||
// FIXME: Coroutine inlining
|
||||
// CHECK_NEW_COUNT: function=complexSuspend count=0 TARGET_BACKENDS=JS
|
||||
import helpers.*
|
||||
|
||||
+32
@@ -0,0 +1,32 @@
|
||||
// WITH_STDLIB
|
||||
// WORKS_WHEN_VALUE_CLASS
|
||||
// LANGUAGE: +ValueClasses
|
||||
// TARGET_BACKEND: JS_IR
|
||||
// TARGET_BACKEND: JS_IR_ES6
|
||||
|
||||
interface Foo {
|
||||
fun foo(): String
|
||||
fun bar(): String
|
||||
}
|
||||
|
||||
value class Value(val x: Int) : Foo, Comparable<Value> {
|
||||
override fun foo() = "FOO $x"
|
||||
|
||||
override fun bar() = "BAR $x"
|
||||
|
||||
override fun compareTo(other: Value) = x.compareTo(other.x)
|
||||
}
|
||||
|
||||
inline fun <T> foo(a: T, b: T): String where T: Foo, T: Comparable<T> {
|
||||
return if (a > b) a.foo() else b.foo()
|
||||
}
|
||||
|
||||
inline fun <T> bar(a: T, b: T): String where T: Comparable<T>, T: Foo {
|
||||
return if (a > b) a.bar() else b.bar()
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
if (foo(Value(1), Value(2)) != "FOO 2") return "Fail"
|
||||
if (bar(Value(2), Value(1)) != "BAR 2") return "Fail"
|
||||
return "OK"
|
||||
}
|
||||
-2
@@ -2,8 +2,6 @@
|
||||
// WASM_MUTE_REASON: IGNORED_IN_JS
|
||||
// WITH_COROUTINES
|
||||
// WITH_STDLIB
|
||||
// IGNORE_BACKEND: JS_IR
|
||||
// IGNORE_BACKEND: JS_IR_ES6
|
||||
// WORKS_WHEN_VALUE_CLASS
|
||||
// LANGUAGE: +ValueClasses
|
||||
|
||||
|
||||
Vendored
-2
@@ -2,8 +2,6 @@
|
||||
// WASM_MUTE_REASON: IGNORED_IN_JS
|
||||
// WITH_COROUTINES
|
||||
// WITH_STDLIB
|
||||
// IGNORE_BACKEND: JS_IR
|
||||
// IGNORE_BACKEND: JS_IR_ES6
|
||||
// WORKS_WHEN_VALUE_CLASS
|
||||
// LANGUAGE: +ValueClasses, +GenericInlineClassParameter
|
||||
|
||||
|
||||
@@ -81,6 +81,7 @@ fun box() {
|
||||
// a.kt:6 exclamate: s="Jesse":kotlin.String
|
||||
// test.kt:52 box: jesse="Jesse":kotlin.String, walter1="Walter!":kotlin.String, jesse1="Jesse!":kotlin.String
|
||||
// a.kt:6 exclamate: s="Jesse!":kotlin.String
|
||||
// a.kt:19 box: jesse="Jesse":kotlin.String, walter1="Walter!":kotlin.String, jesse1="Jesse!":kotlin.String
|
||||
// a.kt:22 value:
|
||||
// test.kt:63 box: jesse="Jesse":kotlin.String, walter1="Walter!":kotlin.String, jesse1="Jesse!":kotlin.String
|
||||
// test.kt:59 localFun: hello="hello":kotlin.String, world="world":kotlin.String
|
||||
|
||||
@@ -47,6 +47,7 @@ fun box(): String {
|
||||
// test.kt:30 box
|
||||
|
||||
// EXPECTATIONS JS_IR
|
||||
// test.kt:16 box
|
||||
// test.kt:17 box
|
||||
// test.kt:7 box
|
||||
// test.kt:30 box
|
||||
|
||||
@@ -25,4 +25,4 @@ inline fun bar(i: Int = 1) {
|
||||
// EXPECTATIONS JS_IR
|
||||
// test.kt:4 box
|
||||
// test.kt:9 foo
|
||||
// test.kt:6 box
|
||||
// test.kt:6 box
|
||||
|
||||
@@ -22,6 +22,6 @@ fun g() {}
|
||||
|
||||
// EXPECTATIONS JS_IR
|
||||
// test.kt:3 box
|
||||
// test.kt:8 box
|
||||
// test.kt:4 box
|
||||
// test.kt:11 g
|
||||
// test.kt:5 box
|
||||
Reference in New Issue
Block a user