IC mangling: Change mangling rules

1. Use 'x' for each parameter, which is not an inline class, every
possible clash is handled by signature rather than name. This change
makes more API changes binary-compatible. So, the changes are in line
with the vision of inline classes are value classes, like primitives.

2. Take return type into account when mangling a function if the return
type is inline class. Otherwise, boxing bridge will not be generated,
which leads to CCE at runtime.
This commit is contained in:
Ilmir Usmanov
2020-11-03 01:05:52 +01:00
parent d21a01ef59
commit c62093f54c
42 changed files with 250 additions and 83 deletions
@@ -21,8 +21,8 @@ public final class InlineList {
private synthetic method <init>(p0: java.util.List): void
public synthetic method add(p0: int, p1: java.lang.Object): void
public synthetic method add(p0: java.lang.Object): boolean
public method add-_bimVNw(p0: int, p1: int): void
public method add-jHY5zpA(p0: int): boolean
public method add-rENGgLQ(p0: int, p1: int): void
public method addAll(p0: int, p1: java.util.Collection): boolean
public method addAll(p0: java.util.Collection): boolean
public synthetic final static method box-impl(p0: java.util.List): InlineList
@@ -37,8 +37,8 @@ public final class InlineList {
public static method equals-impl(p0: java.util.List, p1: java.lang.Object): boolean
public final static method equals-impl0(p0: java.util.List, p1: java.util.List): boolean
public synthetic bridge method get(p0: int): java.lang.Object
public method get-XAcLw3A(p0: int): int
public static method get-XAcLw3A(p0: java.util.List, p1: int): int
public method get-JnfgTak(p0: int): int
public static method get-JnfgTak(p0: java.util.List, p1: int): int
public method getSize(): int
public static method getSize-impl(p0: java.util.List): int
public method hashCode(): int
@@ -63,7 +63,7 @@ public final class InlineList {
public method removeAll(p0: java.util.Collection): boolean
public method retainAll(p0: java.util.Collection): boolean
public synthetic method set(p0: int, p1: java.lang.Object): java.lang.Object
public method set-_bimVNw(p0: int, p1: int): int
public method set-Geu8JnU(p0: int, p1: int): int
public bridge final method size(): int
public method subList(p0: int, p1: int): java.util.List
public static method subList-impl(p0: java.util.List, p1: int, p2: int): java.util.List
@@ -21,8 +21,8 @@ public final class InlineList {
private synthetic method <init>(p0: java.util.List): void
public synthetic bridge method add(p0: int, p1: java.lang.Object): void
public synthetic bridge method add(p0: java.lang.Object): boolean
public method add-_bimVNw(p0: int, p1: int): void
public method add-jHY5zpA(p0: int): boolean
public method add-rENGgLQ(p0: int, p1: int): void
public method addAll(p0: int, p1: java.util.Collection): boolean
public method addAll(p0: java.util.Collection): boolean
public synthetic final static method box-impl(p0: java.util.List): InlineList
@@ -37,8 +37,8 @@ public final class InlineList {
public static method equals-impl(p0: java.util.List, p1: java.lang.Object): boolean
public final static method equals-impl0(p0: java.util.List, p1: java.util.List): boolean
public synthetic bridge method get(p0: int): java.lang.Object
public method get-XAcLw3A(p0: int): int
public static method get-XAcLw3A(p0: java.util.List, p1: int): int
public method get-JnfgTak(p0: int): int
public static method get-JnfgTak(p0: java.util.List, p1: int): int
public method getSize(): int
public static method getSize-impl(p0: java.util.List): int
public method hashCode(): int
@@ -63,7 +63,7 @@ public final class InlineList {
public method removeAll(p0: java.util.Collection): boolean
public method retainAll(p0: java.util.Collection): boolean
public synthetic bridge method set(p0: int, p1: java.lang.Object): java.lang.Object
public method set-_bimVNw(p0: int, p1: int): int
public method set-Geu8JnU(p0: int, p1: int): int
public synthetic bridge method size(): int
public method subList(p0: int, p1: int): java.util.List
public static method subList-impl(p0: java.util.List, p1: int, p2: int): java.util.List
@@ -50,8 +50,8 @@ public final class InlineMap {
public static method equals-impl(p0: java.util.Map, p1: java.lang.Object): boolean
public final static method equals-impl0(p0: java.util.Map, p1: java.util.Map): boolean
public bridge final method get(p0: java.lang.Object): java.lang.Object
public method get-FSIWiWE(p0: int): IV
public static method get-FSIWiWE(p0: java.util.Map, p1: int): IV
public method get-qgyy0Jc(p0: int): IV
public static method get-qgyy0Jc(p0: java.util.Map, p1: int): IV
public method getEntries(): java.util.Set
public static method getEntries-impl(p0: java.util.Map): java.util.Set
public method getKeys(): java.util.Set
@@ -66,7 +66,7 @@ public final class InlineMap {
public static method isEmpty-impl(p0: java.util.Map): boolean
public bridge final method keySet(): java.util.Set
public synthetic method put(p0: java.lang.Object, p1: java.lang.Object): java.lang.Object
public method put-pjrbk2k(p0: int, p1: double): IV
public method put-eSoqwEg(p0: int, p1: double): IV
public method putAll(p0: java.util.Map): void
public method remove(p0: java.lang.Object): java.lang.Object
public bridge final method size(): int
@@ -50,7 +50,7 @@ public final class InlineMapEntry {
public method hashCode(): int
public static method hashCode-impl(p0: java.util.Map$Entry): int
public synthetic method setValue(p0: java.lang.Object): java.lang.Object
public method setValue-jbX5DO8(p0: double): double
public method setValue-cYiyq8k(p0: double): double
public method toString(): java.lang.String
public static method toString-impl(p0: java.util.Map$Entry): java.lang.String
public synthetic final method unbox-impl(): java.util.Map$Entry
@@ -50,7 +50,7 @@ public final class InlineMapEntry {
public method hashCode(): int
public static method hashCode-impl(p0: java.util.Map$Entry): int
public synthetic bridge method setValue(p0: java.lang.Object): java.lang.Object
public method setValue-jbX5DO8(p0: double): double
public method setValue-cYiyq8k(p0: double): double
public method toString(): java.lang.String
public static method toString-impl(p0: java.util.Map$Entry): java.lang.String
public synthetic final method unbox-impl(): java.util.Map$Entry
@@ -50,8 +50,8 @@ public final class InlineMap {
public static method equals-impl(p0: java.util.Map, p1: java.lang.Object): boolean
public final static method equals-impl0(p0: java.util.Map, p1: java.util.Map): boolean
public synthetic bridge method get(p0: java.lang.Object): java.lang.Object
public method get-FSIWiWE(p0: int): IV
public static method get-FSIWiWE(p0: java.util.Map, p1: int): IV
public method get-qgyy0Jc(p0: int): IV
public static method get-qgyy0Jc(p0: java.util.Map, p1: int): IV
public method getEntries(): java.util.Set
public static method getEntries-impl(p0: java.util.Map): java.util.Set
public method getKeys(): java.util.Set
@@ -66,11 +66,11 @@ public final class InlineMap {
public static method isEmpty-impl(p0: java.util.Map): boolean
public synthetic bridge method keySet(): java.util.Set
public synthetic bridge method put(p0: java.lang.Object, p1: java.lang.Object): java.lang.Object
public method put-pjrbk2k(p0: int, p1: double): IV
public method put-eSoqwEg(p0: int, p1: double): IV
public method putAll(p0: java.util.Map): void
public bridge final method remove(p0: java.lang.Object): IV
public synthetic bridge method remove(p0: java.lang.Object): java.lang.Object
public method remove-i7hxwoc(p0: java.lang.Object): IV
public method remove-Ilea9M0(p0: java.lang.Object): IV
public synthetic bridge method size(): int
public method toString(): java.lang.String
public static method toString-impl(p0: java.util.Map): java.lang.String
@@ -21,10 +21,10 @@ public final class InlineMutableList {
private synthetic method <init>(p0: java.util.List): void
public synthetic bridge method add(p0: int, p1: java.lang.Object): void
public synthetic bridge method add(p0: java.lang.Object): boolean
public method add-_bimVNw(p0: int, p1: long): void
public static method add-_bimVNw(p0: java.util.List, p1: int, p2: long): void
public static method add-jHY5zpA(p0: java.util.List, p1: long): boolean
public method add-jHY5zpA(p0: long): boolean
public method add-rENGgLQ(p0: int, p1: long): void
public static method add-rENGgLQ(p0: java.util.List, p1: int, p2: long): void
public method addAll(p0: int, p1: java.util.Collection): boolean
public method addAll(p0: java.util.Collection): boolean
public static method addAll-impl(p0: java.util.List, p1: int, p2: java.util.Collection): boolean
@@ -42,8 +42,8 @@ public final class InlineMutableList {
public static method equals-impl(p0: java.util.List, p1: java.lang.Object): boolean
public final static method equals-impl0(p0: java.util.List, p1: java.util.List): boolean
public synthetic bridge method get(p0: int): java.lang.Object
public method get-XAcLw3A(p0: int): long
public static method get-XAcLw3A(p0: java.util.List, p1: int): long
public method get-JnfgTak(p0: int): long
public static method get-JnfgTak(p0: java.util.List, p1: int): long
public method getSize(): int
public static method getSize-impl(p0: java.util.List): int
public method hashCode(): int
@@ -69,13 +69,13 @@ public final class InlineMutableList {
public method remove-jHY5zpA(p0: long): boolean
public method removeAll(p0: java.util.Collection): boolean
public static method removeAll-impl(p0: java.util.List, p1: java.util.Collection): boolean
public method removeAt-XAcLw3A(p0: int): long
public static method removeAt-XAcLw3A(p0: java.util.List, p1: int): long
public method removeAt-JnfgTak(p0: int): long
public static method removeAt-JnfgTak(p0: java.util.List, p1: int): long
public method retainAll(p0: java.util.Collection): boolean
public static method retainAll-impl(p0: java.util.List, p1: java.util.Collection): boolean
public synthetic bridge method set(p0: int, p1: java.lang.Object): java.lang.Object
public method set-_bimVNw(p0: int, p1: long): long
public static method set-_bimVNw(p0: java.util.List, p1: int, p2: long): long
public method set-Geu8JnU(p0: int, p1: long): long
public static method set-Geu8JnU(p0: java.util.List, p1: int, p2: long): long
public bridge final method size(): int
public method subList(p0: int, p1: int): java.util.List
public static method subList-impl(p0: java.util.List, p1: int, p2: int): java.util.List
@@ -21,10 +21,10 @@ public final class InlineMutableList {
private synthetic method <init>(p0: java.util.List): void
public synthetic bridge method add(p0: int, p1: java.lang.Object): void
public synthetic bridge method add(p0: java.lang.Object): boolean
public method add-_bimVNw(p0: int, p1: long): void
public static method add-_bimVNw(p0: java.util.List, p1: int, p2: long): void
public static method add-jHY5zpA(p0: java.util.List, p1: long): boolean
public method add-jHY5zpA(p0: long): boolean
public method add-rENGgLQ(p0: int, p1: long): void
public static method add-rENGgLQ(p0: java.util.List, p1: int, p2: long): void
public method addAll(p0: int, p1: java.util.Collection): boolean
public method addAll(p0: java.util.Collection): boolean
public static method addAll-impl(p0: java.util.List, p1: int, p2: java.util.Collection): boolean
@@ -42,8 +42,8 @@ public final class InlineMutableList {
public static method equals-impl(p0: java.util.List, p1: java.lang.Object): boolean
public final static method equals-impl0(p0: java.util.List, p1: java.util.List): boolean
public synthetic bridge method get(p0: int): java.lang.Object
public method get-XAcLw3A(p0: int): long
public static method get-XAcLw3A(p0: java.util.List, p1: int): long
public method get-JnfgTak(p0: int): long
public static method get-JnfgTak(p0: java.util.List, p1: int): long
public method getSize(): int
public static method getSize-impl(p0: java.util.List): int
public method hashCode(): int
@@ -69,13 +69,13 @@ public final class InlineMutableList {
public method remove-jHY5zpA(p0: long): boolean
public method removeAll(p0: java.util.Collection): boolean
public static method removeAll-impl(p0: java.util.List, p1: java.util.Collection): boolean
public method removeAt-XAcLw3A(p0: int): long
public static method removeAt-XAcLw3A(p0: java.util.List, p1: int): long
public method removeAt-JnfgTak(p0: int): long
public static method removeAt-JnfgTak(p0: java.util.List, p1: int): long
public method retainAll(p0: java.util.Collection): boolean
public static method retainAll-impl(p0: java.util.List, p1: java.util.Collection): boolean
public synthetic bridge method set(p0: int, p1: java.lang.Object): java.lang.Object
public method set-_bimVNw(p0: int, p1: long): long
public static method set-_bimVNw(p0: java.util.List, p1: int, p2: long): long
public method set-Geu8JnU(p0: int, p1: long): long
public static method set-Geu8JnU(p0: java.util.List, p1: int, p2: long): long
public synthetic bridge method size(): int
public method subList(p0: int, p1: int): java.util.List
public static method subList-impl(p0: java.util.List, p1: int, p2: int): java.util.List
@@ -51,8 +51,8 @@ public final class InlineMutableMap {
public static method equals-impl(p0: java.util.Map, p1: java.lang.Object): boolean
public final static method equals-impl0(p0: java.util.Map, p1: java.util.Map): boolean
public bridge final method get(p0: java.lang.Object): java.lang.Object
public method get-FSIWiWE(p0: int): IV
public static method get-FSIWiWE(p0: java.util.Map, p1: int): IV
public method get-qgyy0Jc(p0: int): IV
public static method get-qgyy0Jc(p0: java.util.Map, p1: int): IV
public method getEntries(): java.util.Set
public static method getEntries-impl(p0: java.util.Map): java.util.Set
public method getKeys(): java.util.Set
@@ -67,13 +67,13 @@ public final class InlineMutableMap {
public static method isEmpty-impl(p0: java.util.Map): boolean
public bridge final method keySet(): java.util.Set
public synthetic bridge method put(p0: java.lang.Object, p1: java.lang.Object): java.lang.Object
public method put-pjrbk2k(p0: int, p1: double): IV
public static method put-pjrbk2k(p0: java.util.Map, p1: int, p2: double): IV
public method put-eSoqwEg(p0: int, p1: double): IV
public static method put-eSoqwEg(p0: java.util.Map, p1: int, p2: double): IV
public method putAll(p0: java.util.Map): void
public static method putAll-impl(p0: java.util.Map, p1: java.util.Map): void
public bridge final method remove(p0: java.lang.Object): java.lang.Object
public method remove-FSIWiWE(p0: int): IV
public static method remove-FSIWiWE(p0: java.util.Map, p1: int): IV
public method remove-qgyy0Jc(p0: int): IV
public static method remove-qgyy0Jc(p0: java.util.Map, p1: int): IV
public bridge final method size(): int
public method toString(): java.lang.String
public static method toString-impl(p0: java.util.Map): java.lang.String
@@ -50,8 +50,8 @@ public final class InlineMutableMapEntry {
public method hashCode(): int
public static method hashCode-impl(p0: java.util.Map$Entry): int
public synthetic bridge method setValue(p0: java.lang.Object): java.lang.Object
public method setValue-jbX5DO8(p0: double): double
public static method setValue-jbX5DO8(p0: java.util.Map$Entry, p1: double): double
public method setValue-cYiyq8k(p0: double): double
public static method setValue-cYiyq8k(p0: java.util.Map$Entry, p1: double): double
public method toString(): java.lang.String
public static method toString-impl(p0: java.util.Map$Entry): java.lang.String
public synthetic final method unbox-impl(): java.util.Map$Entry
@@ -51,8 +51,8 @@ public final class InlineMutableMap {
public static method equals-impl(p0: java.util.Map, p1: java.lang.Object): boolean
public final static method equals-impl0(p0: java.util.Map, p1: java.util.Map): boolean
public synthetic bridge method get(p0: java.lang.Object): java.lang.Object
public method get-FSIWiWE(p0: int): IV
public static method get-FSIWiWE(p0: java.util.Map, p1: int): IV
public method get-qgyy0Jc(p0: int): IV
public static method get-qgyy0Jc(p0: java.util.Map, p1: int): IV
public method getEntries(): java.util.Set
public static method getEntries-impl(p0: java.util.Map): java.util.Set
public method getKeys(): java.util.Set
@@ -67,14 +67,14 @@ public final class InlineMutableMap {
public static method isEmpty-impl(p0: java.util.Map): boolean
public synthetic bridge method keySet(): java.util.Set
public synthetic bridge method put(p0: java.lang.Object, p1: java.lang.Object): java.lang.Object
public method put-pjrbk2k(p0: int, p1: double): IV
public static method put-pjrbk2k(p0: java.util.Map, p1: int, p2: double): IV
public method put-eSoqwEg(p0: int, p1: double): IV
public static method put-eSoqwEg(p0: java.util.Map, p1: int, p2: double): IV
public method putAll(p0: java.util.Map): void
public static method putAll-impl(p0: java.util.Map, p1: java.util.Map): void
public bridge final method remove(p0: java.lang.Object): IV
public synthetic bridge method remove(p0: java.lang.Object): java.lang.Object
public method remove-FSIWiWE(p0: int): IV
public static method remove-FSIWiWE(p0: java.util.Map, p1: int): IV
public method remove-qgyy0Jc(p0: int): IV
public static method remove-qgyy0Jc(p0: java.util.Map, p1: int): IV
public synthetic bridge method size(): int
public method toString(): java.lang.String
public static method toString-impl(p0: java.util.Map): java.lang.String
@@ -0,0 +1,6 @@
// !LANGUAGE: +InlineClasses
inline class IC(val i: Int)
fun foo(i: Int, ic: IC) {}
fun foo(i: Int?, ic: IC) {}
@@ -0,0 +1,24 @@
@kotlin.Metadata
public final class IC {
// source: 'nullableAndNotNullPrimitive.kt'
private final field i: int
private synthetic method <init>(p0: int): void
public synthetic final static method box-impl(p0: int): IC
public static method constructor-impl(p0: int): int
public method equals(p0: java.lang.Object): boolean
public static method equals-impl(p0: int, p1: java.lang.Object): boolean
public final static method equals-impl0(p0: int, p1: int): boolean
public final method getI(): int
public method hashCode(): int
public static method hashCode-impl(p0: int): int
public method toString(): java.lang.String
public static method toString-impl(p0: int): java.lang.String
public synthetic final method unbox-impl(): int
}
@kotlin.Metadata
public final class NullableAndNotNullPrimitiveKt {
// source: 'nullableAndNotNullPrimitive.kt'
public final static method foo-MSgPiiU(@org.jetbrains.annotations.Nullable p0: java.lang.Integer, p1: int): void
public final static method foo-MSgPiiU(p0: int, p1: int): void
}
+2 -2
View File
@@ -19,7 +19,7 @@ public final class A {
@kotlin.Metadata
public interface I {
// source: 'kt42879.kt'
public abstract method compute-GKOAj6k(p0: int): int
public abstract method compute-WzO2ekY(p0: int): int
}
@kotlin.Metadata
@@ -30,7 +30,7 @@ final class Kt42879Kt$g$1 {
inner (anonymous) class Kt42879Kt$g$1
static method <clinit>(): void
method <init>(): void
public final method compute-GKOAj6k(p0: int): int
public final method compute-WzO2ekY(p0: int): int
}
@kotlin.Metadata