Mangle function names with inline class parameters

Avoid name clashes in cases such as

  inline class Login(val login: String)
  inline class Password(val password: String)

  fun validate(login: Login) { ... }
  fun validate(password: Password) { ... }
This commit is contained in:
Dmitry Petrov
2018-08-15 10:25:49 +03:00
committed by Ilya Gorbunov
parent ff9ba97d66
commit a56d1d3ce8
45 changed files with 1273 additions and 30 deletions
@@ -14,5 +14,5 @@ inline class Foo(val x: Int) {
// 1 INVOKESTATIC Foo\$Erased.empty \(I\)V
// 1 INVOKESTATIC Foo\$Erased.withParam \(ILjava/lang/String;\)V
// 1 INVOKESTATIC Foo\$Erased.withInlineClassParam \(II\)V
// 1 INVOKESTATIC Foo\$Erased.withInlineClassParam\$1e4ch6lh \(II\)V
// 5 INVOKEVIRTUAL
@@ -0,0 +1,10 @@
// !LANGUAGE: +InlineClasses
inline class Str(val s: String)
class C1(val ss: Str)
class C2(val ss1: Str, val ss2: Str)
// 2 public \<init\>\(Ljava/lang/String;\)V
// 1 public \<init\>\(Ljava/lang/String;Ljava/lang/String;\)V
@@ -0,0 +1,29 @@
// !LANGUAGE: +InlineClasses
// IGNORE_BACKEND: JVM_IR
inline class Id(val id: String)
inline class Name(val name: String)
inline class Password(val password: String)
fun test(id: Id) {
if (id.id != "OK") throw AssertionError()
}
fun test(id: Id?) {
if (id != null) throw AssertionError()
}
fun test(name: Name) {
if (name.name != "OK") throw AssertionError()
}
fun test(password: Password) {
if (password.password != "OK") throw AssertionError()
}
// 1 public final static test\$9zx0e0j9\(Ljava/lang/String;\)V
// 1 public final static test\$79jv2l6i\(Ljava/lang/String;\)V
// 1 public final static test\$d4pejdz3\(Ljava/lang/String;\)V
// 1 public final static test\$c6sgoxk6\(Ljava/lang/String;\)V
@@ -0,0 +1,10 @@
// !LANGUAGE: +InlineClasses
inline class Str(val string: String)
class C {
var s = Str("")
}
// 1 public final getS\(\)Ljava/lang/String;
// 1 public final setS\$90215lrx\(Ljava/lang/String;\)V