6f8682c950
- introduce a scoped counter instead of a global one for name
generation for accessors. Naive solution not working.
- Introduced hardcoded "jd" suffix for accessors on interfaces, under
the assumption that the only such accessors are due to JvmDefault
and their bridges from `$DefaultImpls`. Removed all associated
templated tests, so the old and IR backend correspond on this matter
again.
- Respecialized writeFlags from regexps to string-equality: we are
going for exact matches now!
- Fixed package calculation in `IrUtils.kt`.
- Accessors for static members must be due to accessing super
classes. Actual super-qualified calls are naturally also accessing
super classes. Hence the `$s+{hashcode(superClassName)}`
suffix. Added test to affirm this naming scheme.
- Field getters/setters for static fields must be companion accessors,
otherwise just labelled as accessors. They are also tagged with `s`
suffix when accessing static fields.
- For naming of accessors to coincide with the old backend, field
renaming to avoid JVM signature clashes must be done _after_
generation of accessors for those fields.
23 lines
697 B
Kotlin
Vendored
23 lines
697 B
Kotlin
Vendored
// Checks that accessor 'I$Companion.access$getBar\$p' is always used because the property is kept
|
|
// into the companion object.
|
|
|
|
interface I {
|
|
companion object {
|
|
private var bar = "Companion Field from I"
|
|
}
|
|
|
|
fun test(): String {
|
|
// INVOKESTATIC I$Companion.access$setBar$p
|
|
bar = "New value"
|
|
// INVOKESTATIC I$Companion.access$getBar$p
|
|
return bar
|
|
}
|
|
}
|
|
|
|
// 1 GETSTATIC I\$Companion.bar
|
|
// 2 PUTSTATIC I\$Companion.bar
|
|
// 1 INVOKESTATIC I\$Companion.access\$getBar\$p
|
|
// 1 INVOKESTATIC I\$Companion.access\$setBar\$p
|
|
// 0 INVOKESTATIC I\$Companion.access\$setBar\$cp
|
|
// 0 INVOKESPECIAL I\$Companion.getBar
|
|
// 0 INVOKESPECIAL I\$Companion.setBar |