Mangle inline class members

<IMPL_SUFFIX> for method is a method signature hash,
if method value parameter types contain inline class types,
otherwise 'impl'.

Constructor methods are named as 'constructor-<IMPL_SUFFIX>'.

Synthesized 'box' and 'unbox' methods are named as
'<METHOD_NAME>-<IMPL_SUFFIX>'.

Erased implementations of overriding and non-overriding methods
are named as '<METHOD_NAME>-<IMPL_SUFFIX>'.

Fully specialized implementation of 'equals' will have a special suffix.
This commit is contained in:
Dmitry Petrov
2018-09-06 10:12:50 +03:00
parent aec173ac5c
commit cafaa3e13c
40 changed files with 398 additions and 184 deletions
@@ -0,0 +1,80 @@
// !LANGUAGE: +InlineClasses
interface IFoo {
fun overridingFun()
fun String.overridingExtFun()
val overridingVal: Int
var overridingVar: Int
val String.overridingExtVal: Int
var String.overridingExtVar: Int
}
@Target(AnnotationTarget.CLASS, AnnotationTarget.CONSTRUCTOR, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY)
@Retention(AnnotationRetention.BINARY)
annotation class A
@Target(AnnotationTarget.PROPERTY_GETTER)
@Retention(AnnotationRetention.BINARY)
annotation class AGet
@Target(AnnotationTarget.PROPERTY_SETTER)
@Retention(AnnotationRetention.BINARY)
annotation class ASet
@Target(AnnotationTarget.VALUE_PARAMETER)
@Retention(AnnotationRetention.BINARY)
annotation class ASetParam
@Target(AnnotationTarget.VALUE_PARAMETER)
@Retention(AnnotationRetention.BINARY)
annotation class AReceiver
inline class Z(@get:AGet val x: Int) : IFoo {
constructor(y: Long) : this(y.toInt())
@A override fun overridingFun() {}
@A override fun @receiver:AReceiver String.overridingExtFun() {}
@A @get:AGet
override val overridingVal: Int
get() = x
@A @get:AGet @set:ASet @setparam:ASetParam
override var overridingVar: Int
get() = x
set(v) {}
@A @get:AGet
override val @receiver:AReceiver String.overridingExtVal: Int
get() = x
@A @get:AGet @set:ASet @setparam:ASetParam
override var @receiver:AReceiver String.overridingExtVar: Int
get() = x
set(v) {}
@A override fun toString(): String = x.toString()
@A fun nonOverridingFun() {}
@A fun @receiver:AReceiver String.nonOverridingExtFun() {}
@A @get:AGet
val nonOverridingVal: Int get() = x
@A @get:AGet @set:ASet @setparam:ASetParam
var nonOverridingVar: Int
get() = x
set(v) {}
@A @get:AGet
val @receiver:AReceiver String.nonOverridingExtVal: Int
get() = x
@A @get:AGet @set:ASet @setparam:ASetParam
var @receiver:AReceiver String.nonOverridingExtVar: Int
get() = x
set(v) {}
}