Additional tests and fixes for function name mangling
This commit is contained in:
committed by
Ilya Gorbunov
parent
99498eb7b8
commit
a205019156
+2
-12
@@ -54,16 +54,6 @@ private fun md5radix36string(signatureForMangling: String): String {
|
|||||||
|
|
||||||
fun KotlinType.isTypeParameterWithInlineClassUpperBound(): Boolean {
|
fun KotlinType.isTypeParameterWithInlineClassUpperBound(): Boolean {
|
||||||
val descriptor = constructor.declarationDescriptor as? TypeParameterDescriptor ?: return false
|
val descriptor = constructor.declarationDescriptor as? TypeParameterDescriptor ?: return false
|
||||||
return descriptor.isWithInlineClassUpperBoundInner(hashSetOf(descriptor))
|
val bound = getRepresentativeUpperBound(descriptor)
|
||||||
}
|
return bound.isInlineClassType() || bound.isTypeParameterWithInlineClassUpperBound()
|
||||||
|
|
||||||
private fun TypeParameterDescriptor.isWithInlineClassUpperBoundInner(visited: MutableSet<TypeParameterDescriptor>): Boolean {
|
|
||||||
for (type in typeConstructor.supertypes) {
|
|
||||||
if (type.isInlineClassType()) return true
|
|
||||||
|
|
||||||
val typeParameterDescriptor = type.constructor.declarationDescriptor as? TypeParameterDescriptor ?: continue
|
|
||||||
if (!visited.add(typeParameterDescriptor)) continue
|
|
||||||
if (typeParameterDescriptor.isWithInlineClassUpperBoundInner(visited)) return true
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
}
|
}
|
||||||
Vendored
+5
@@ -11,6 +11,10 @@ fun Id.test() {
|
|||||||
if (id != "OK") throw AssertionError()
|
if (id != "OK") throw AssertionError()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun Id?.test() {
|
||||||
|
if (this != null) throw AssertionError()
|
||||||
|
}
|
||||||
|
|
||||||
fun Name.test() {
|
fun Name.test() {
|
||||||
if (name != "OK") throw AssertionError()
|
if (name != "OK") throw AssertionError()
|
||||||
}
|
}
|
||||||
@@ -41,6 +45,7 @@ class Outer {
|
|||||||
|
|
||||||
fun box(): String {
|
fun box(): String {
|
||||||
Id("OK").test()
|
Id("OK").test()
|
||||||
|
null.test()
|
||||||
Name("OK").test()
|
Name("OK").test()
|
||||||
test(Password("OK"))
|
test(Password("OK"))
|
||||||
|
|
||||||
|
|||||||
+21
@@ -0,0 +1,21 @@
|
|||||||
|
// !LANGUAGE: +InlineClasses
|
||||||
|
// IGNORE_BACKEND: JVM_IR, JS, JS_IR
|
||||||
|
// WITH_REFLECT
|
||||||
|
|
||||||
|
import kotlin.reflect.KFunction
|
||||||
|
import kotlin.reflect.jvm.javaMethod
|
||||||
|
import kotlin.test.*
|
||||||
|
|
||||||
|
inline class InlineClass1(val s: String)
|
||||||
|
inline class InlineClass2(val n: Number)
|
||||||
|
|
||||||
|
fun <T : InlineClass1, U : InlineClass2> foo(t: T, u: U) {}
|
||||||
|
|
||||||
|
fun box(): String {
|
||||||
|
val fooRef: (InlineClass1, InlineClass2) -> Unit = ::foo
|
||||||
|
val fooMethod = (fooRef as KFunction<*>).javaMethod!!
|
||||||
|
|
||||||
|
assertEquals("[T, U]", fooMethod.genericParameterTypes.asList().toString())
|
||||||
|
|
||||||
|
return "OK"
|
||||||
|
}
|
||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
// !LANGUAGE: +InlineClasses
|
// !LANGUAGE: +InlineClasses
|
||||||
// IGNORE_BACKEND: JVM_IR, JS, JS_IR
|
// IGNORE_BACKEND: JVM_IR
|
||||||
// WITH_RUNTIME
|
// WITH_RUNTIME
|
||||||
import kotlin.test.*
|
import kotlin.test.*
|
||||||
|
|
||||||
|
|||||||
-2
@@ -3,8 +3,6 @@
|
|||||||
// WITH_REFLECT
|
// WITH_REFLECT
|
||||||
import kotlin.test.*
|
import kotlin.test.*
|
||||||
|
|
||||||
import kotlin.test.*
|
|
||||||
|
|
||||||
inline class S(val string: String)
|
inline class S(val string: String)
|
||||||
|
|
||||||
fun test(s: S) {
|
fun test(s: S) {
|
||||||
|
|||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
// !LANGUAGE: +InlineClasses
|
// !LANGUAGE: +InlineClasses
|
||||||
// IGNORE_BACKEND: JVM_IR, JS, JS_IR
|
// IGNORE_BACKEND: JVM_IR, JS
|
||||||
// WITH_RUNTIME
|
// WITH_RUNTIME
|
||||||
import kotlin.test.*
|
import kotlin.test.*
|
||||||
|
|
||||||
|
|||||||
+5
@@ -11790,6 +11790,11 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
|
|||||||
runTest("compiler/testData/codegen/box/inlineClasses/functionNameMangling/genericFunctionsDoNotClash.kt");
|
runTest("compiler/testData/codegen/box/inlineClasses/functionNameMangling/genericFunctionsDoNotClash.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("genericSignatureOfFunctionWithMangledName.kt")
|
||||||
|
public void testGenericSignatureOfFunctionWithMangledName() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/inlineClasses/functionNameMangling/genericSignatureOfFunctionWithMangledName.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("localClassInFunctionWithMangledName.kt")
|
@TestMetadata("localClassInFunctionWithMangledName.kt")
|
||||||
public void testLocalClassInFunctionWithMangledName() throws Exception {
|
public void testLocalClassInFunctionWithMangledName() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/inlineClasses/functionNameMangling/localClassInFunctionWithMangledName.kt");
|
runTest("compiler/testData/codegen/box/inlineClasses/functionNameMangling/localClassInFunctionWithMangledName.kt");
|
||||||
|
|||||||
+5
@@ -11790,6 +11790,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes
|
|||||||
runTest("compiler/testData/codegen/box/inlineClasses/functionNameMangling/genericFunctionsDoNotClash.kt");
|
runTest("compiler/testData/codegen/box/inlineClasses/functionNameMangling/genericFunctionsDoNotClash.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("genericSignatureOfFunctionWithMangledName.kt")
|
||||||
|
public void testGenericSignatureOfFunctionWithMangledName() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/inlineClasses/functionNameMangling/genericSignatureOfFunctionWithMangledName.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("localClassInFunctionWithMangledName.kt")
|
@TestMetadata("localClassInFunctionWithMangledName.kt")
|
||||||
public void testLocalClassInFunctionWithMangledName() throws Exception {
|
public void testLocalClassInFunctionWithMangledName() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/inlineClasses/functionNameMangling/localClassInFunctionWithMangledName.kt");
|
runTest("compiler/testData/codegen/box/inlineClasses/functionNameMangling/localClassInFunctionWithMangledName.kt");
|
||||||
|
|||||||
+5
@@ -11790,6 +11790,11 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes
|
|||||||
runTest("compiler/testData/codegen/box/inlineClasses/functionNameMangling/genericFunctionsDoNotClash.kt");
|
runTest("compiler/testData/codegen/box/inlineClasses/functionNameMangling/genericFunctionsDoNotClash.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("genericSignatureOfFunctionWithMangledName.kt")
|
||||||
|
public void testGenericSignatureOfFunctionWithMangledName() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/inlineClasses/functionNameMangling/genericSignatureOfFunctionWithMangledName.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("localClassInFunctionWithMangledName.kt")
|
@TestMetadata("localClassInFunctionWithMangledName.kt")
|
||||||
public void testLocalClassInFunctionWithMangledName() throws Exception {
|
public void testLocalClassInFunctionWithMangledName() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/inlineClasses/functionNameMangling/localClassInFunctionWithMangledName.kt");
|
runTest("compiler/testData/codegen/box/inlineClasses/functionNameMangling/localClassInFunctionWithMangledName.kt");
|
||||||
|
|||||||
+5
@@ -10340,6 +10340,11 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest {
|
|||||||
runTest("compiler/testData/codegen/box/inlineClasses/functionNameMangling/genericFunctionsDoNotClash.kt");
|
runTest("compiler/testData/codegen/box/inlineClasses/functionNameMangling/genericFunctionsDoNotClash.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("genericSignatureOfFunctionWithMangledName.kt")
|
||||||
|
public void testGenericSignatureOfFunctionWithMangledName() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/inlineClasses/functionNameMangling/genericSignatureOfFunctionWithMangledName.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("localClassInFunctionWithMangledName.kt")
|
@TestMetadata("localClassInFunctionWithMangledName.kt")
|
||||||
public void testLocalClassInFunctionWithMangledName() throws Exception {
|
public void testLocalClassInFunctionWithMangledName() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/inlineClasses/functionNameMangling/localClassInFunctionWithMangledName.kt");
|
runTest("compiler/testData/codegen/box/inlineClasses/functionNameMangling/localClassInFunctionWithMangledName.kt");
|
||||||
|
|||||||
+5
@@ -11400,6 +11400,11 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest {
|
|||||||
runTest("compiler/testData/codegen/box/inlineClasses/functionNameMangling/genericFunctionsDoNotClash.kt");
|
runTest("compiler/testData/codegen/box/inlineClasses/functionNameMangling/genericFunctionsDoNotClash.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("genericSignatureOfFunctionWithMangledName.kt")
|
||||||
|
public void testGenericSignatureOfFunctionWithMangledName() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/inlineClasses/functionNameMangling/genericSignatureOfFunctionWithMangledName.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("localClassInFunctionWithMangledName.kt")
|
@TestMetadata("localClassInFunctionWithMangledName.kt")
|
||||||
public void testLocalClassInFunctionWithMangledName() throws Exception {
|
public void testLocalClassInFunctionWithMangledName() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/inlineClasses/functionNameMangling/localClassInFunctionWithMangledName.kt");
|
runTest("compiler/testData/codegen/box/inlineClasses/functionNameMangling/localClassInFunctionWithMangledName.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user