[JS IR] Fix IC invalidation for fake override inline functions
The patch enables the direct dependency between fake override inline function and its implementation from the base class. Because klibs do not keep a signature of fake override implementation, incremental cache can not use the signature index, therefore the signature is serialized to a cache file as is. ^KT-51896 Fixed
This commit is contained in:
committed by
Space
parent
c6299ee277
commit
644447db84
Vendored
+14
@@ -0,0 +1,14 @@
|
||||
abstract class AbstractClassA {
|
||||
inline fun String.fakeOverrideExtension() = "${this} fakeOverrideExtension 0"
|
||||
|
||||
inline val String.fakeOverrideGetProperty
|
||||
get() = "${this} fakeOverrideGetProperty 0"
|
||||
|
||||
inline var String.fakeOverrideSetProperty: String
|
||||
get() = "${savedString} fakeOverrideSetProperty getter 0"
|
||||
set(str) {
|
||||
savedString = "${str} fakeOverrideSetProperty setter 0"
|
||||
}
|
||||
|
||||
var savedString = ""
|
||||
}
|
||||
Vendored
+14
@@ -0,0 +1,14 @@
|
||||
abstract class AbstractClassA {
|
||||
inline fun String.fakeOverrideExtension() = "${this} fakeOverrideExtension 1"
|
||||
|
||||
inline val String.fakeOverrideGetProperty
|
||||
get() = "${this} fakeOverrideGetProperty 0"
|
||||
|
||||
inline var String.fakeOverrideSetProperty: String
|
||||
get() = "${savedString} fakeOverrideSetProperty getter 0"
|
||||
set(str) {
|
||||
savedString = "${str} fakeOverrideSetProperty setter 0"
|
||||
}
|
||||
|
||||
var savedString = ""
|
||||
}
|
||||
Vendored
+14
@@ -0,0 +1,14 @@
|
||||
abstract class AbstractClassA {
|
||||
inline fun String.fakeOverrideExtension() = "${this} fakeOverrideExtension 1"
|
||||
|
||||
inline val String.fakeOverrideGetProperty
|
||||
get() = "${this} fakeOverrideGetProperty 2"
|
||||
|
||||
inline var String.fakeOverrideSetProperty: String
|
||||
get() = "${savedString} fakeOverrideSetProperty getter 0"
|
||||
set(str) {
|
||||
savedString = "${str} fakeOverrideSetProperty setter 0"
|
||||
}
|
||||
|
||||
var savedString = ""
|
||||
}
|
||||
Vendored
+14
@@ -0,0 +1,14 @@
|
||||
abstract class AbstractClassA {
|
||||
inline fun String.fakeOverrideExtension() = "${this} fakeOverrideExtension 1"
|
||||
|
||||
inline val String.fakeOverrideGetProperty
|
||||
get() = "${this} fakeOverrideGetProperty 2"
|
||||
|
||||
inline var String.fakeOverrideSetProperty: String
|
||||
get() = "${savedString} fakeOverrideSetProperty getter 0"
|
||||
set(str) {
|
||||
savedString = "${str} fakeOverrideSetProperty setter 3"
|
||||
}
|
||||
|
||||
var savedString = "empty"
|
||||
}
|
||||
Vendored
+14
@@ -0,0 +1,14 @@
|
||||
abstract class AbstractClassA {
|
||||
inline fun String.fakeOverrideExtension() = "${this} fakeOverrideExtension 1"
|
||||
|
||||
inline val String.fakeOverrideGetProperty
|
||||
get() = "${this} fakeOverrideGetProperty 2"
|
||||
|
||||
inline var String.fakeOverrideSetProperty: String
|
||||
get() = "${savedString} fakeOverrideSetProperty getter 4"
|
||||
set(str) {
|
||||
savedString = "${str} fakeOverrideSetProperty setter 3"
|
||||
}
|
||||
|
||||
var savedString = ""
|
||||
}
|
||||
Vendored
+20
@@ -0,0 +1,20 @@
|
||||
STEP 0:
|
||||
modifications:
|
||||
U : l1.0.kt -> l1.kt
|
||||
added file: l1.kt
|
||||
STEP 1:
|
||||
modifications:
|
||||
U : l1.1.kt -> l1.kt
|
||||
modified ir: l1.kt
|
||||
STEP 2:
|
||||
modifications:
|
||||
U : l1.2.kt -> l1.kt
|
||||
modified ir: l1.kt
|
||||
STEP 3:
|
||||
modifications:
|
||||
U : l1.3.kt -> l1.kt
|
||||
modified ir: l1.kt
|
||||
STEP 4:
|
||||
modifications:
|
||||
U : l1.4.kt -> l1.kt
|
||||
modified ir: l1.kt
|
||||
Vendored
+11
@@ -0,0 +1,11 @@
|
||||
class ClassA: AbstractClassA() {
|
||||
inline fun testExtension() = "testExtension".fakeOverrideExtension()
|
||||
inline fun testGetProperty() = "testGetProperty".fakeOverrideGetProperty
|
||||
|
||||
inline fun testSetPropertySetter(): String {
|
||||
"test".fakeOverrideSetProperty = "testSetPropertySetter"
|
||||
return savedString;
|
||||
}
|
||||
|
||||
inline fun testSetPropertyGetter() = "test".fakeOverrideSetProperty
|
||||
}
|
||||
+37
@@ -0,0 +1,37 @@
|
||||
fun box(stepId: Int): String {
|
||||
val a = ClassA()
|
||||
when (stepId) {
|
||||
0 -> {
|
||||
if (a.testExtension() != "testExtension fakeOverrideExtension 0") return "Fail extension"
|
||||
if (a.testGetProperty() != "testGetProperty fakeOverrideGetProperty 0") return "Fail getProperty"
|
||||
if (a.testSetPropertySetter() != "testSetPropertySetter fakeOverrideSetProperty setter 0") return "Fail setPropertySetter"
|
||||
if (a.testSetPropertyGetter() != "testSetPropertySetter fakeOverrideSetProperty setter 0 fakeOverrideSetProperty getter 0") return a.testSetPropertyGetter()
|
||||
}
|
||||
1 -> {
|
||||
if (a.testExtension() != "testExtension fakeOverrideExtension 1") return "Fail extension"
|
||||
if (a.testGetProperty() != "testGetProperty fakeOverrideGetProperty 0") return "Fail getProperty"
|
||||
if (a.testSetPropertySetter() != "testSetPropertySetter fakeOverrideSetProperty setter 0") return "Fail setPropertySetter"
|
||||
if (a.testSetPropertyGetter() != "testSetPropertySetter fakeOverrideSetProperty setter 0 fakeOverrideSetProperty getter 0") return a.testSetPropertyGetter()
|
||||
}
|
||||
2 -> {
|
||||
if (a.testExtension() != "testExtension fakeOverrideExtension 1") return "Fail extension"
|
||||
if (a.testGetProperty() != "testGetProperty fakeOverrideGetProperty 2") return "Fail getProperty"
|
||||
if (a.testSetPropertySetter() != "testSetPropertySetter fakeOverrideSetProperty setter 0") return "Fail setPropertySetter"
|
||||
if (a.testSetPropertyGetter() != "testSetPropertySetter fakeOverrideSetProperty setter 0 fakeOverrideSetProperty getter 0") return a.testSetPropertyGetter()
|
||||
}
|
||||
3 -> {
|
||||
if (a.testExtension() != "testExtension fakeOverrideExtension 1") return "Fail extension"
|
||||
if (a.testGetProperty() != "testGetProperty fakeOverrideGetProperty 2") return "Fail getProperty"
|
||||
if (a.testSetPropertySetter() != "testSetPropertySetter fakeOverrideSetProperty setter 3") return "Fail setPropertySetter"
|
||||
if (a.testSetPropertyGetter() != "testSetPropertySetter fakeOverrideSetProperty setter 3 fakeOverrideSetProperty getter 0") return a.testSetPropertyGetter()
|
||||
}
|
||||
4 -> {
|
||||
if (a.testExtension() != "testExtension fakeOverrideExtension 1") return "Fail extension"
|
||||
if (a.testGetProperty() != "testGetProperty fakeOverrideGetProperty 2") return "Fail getProperty"
|
||||
if (a.testSetPropertySetter() != "testSetPropertySetter fakeOverrideSetProperty setter 3") return "Fail setPropertySetter"
|
||||
if (a.testSetPropertyGetter() != "testSetPropertySetter fakeOverrideSetProperty setter 3 fakeOverrideSetProperty getter 4") return a.testSetPropertyGetter()
|
||||
}
|
||||
else -> return "Unknown"
|
||||
}
|
||||
return "OK"
|
||||
}
|
||||
Vendored
+6
@@ -0,0 +1,6 @@
|
||||
STEP 0:
|
||||
dependencies: lib1
|
||||
added file: m.kt, classA.kt
|
||||
STEP 1..4:
|
||||
dependencies: lib1
|
||||
updated inline imports: m.kt, classA.kt
|
||||
Vendored
+8
@@ -0,0 +1,8 @@
|
||||
MODULES: lib1, main
|
||||
|
||||
STEP 0:
|
||||
libs: lib1, main
|
||||
dirty js: lib1, main
|
||||
STEP 1..4:
|
||||
libs: lib1, main
|
||||
dirty js: lib1, main
|
||||
Reference in New Issue
Block a user