Generate proper flags for <clinit>
This commit is contained in:
+1
@@ -177,6 +177,7 @@ open class FunctionCodegen(
|
||||
) Opcodes.ACC_BRIDGE else 0
|
||||
val modalityFlag = when ((irFunction as? IrSimpleFunction)?.modality) {
|
||||
Modality.FINAL -> when {
|
||||
irFunction.origin == JvmLoweredDeclarationOrigin.CLASS_STATIC_INITIALIZER -> 0
|
||||
classCodegen.irClass.isInterface && irFunction.body != null -> 0
|
||||
!classCodegen.irClass.isAnnotationClass || irFunction.isStatic -> Opcodes.ACC_FINAL
|
||||
else -> Opcodes.ACC_ABSTRACT
|
||||
|
||||
+2
@@ -16,6 +16,7 @@ import org.jetbrains.kotlin.ir.declarations.IrField
|
||||
import org.jetbrains.kotlin.ir.expressions.IrSetField
|
||||
import org.jetbrains.kotlin.ir.expressions.impl.IrBlockBodyImpl
|
||||
import org.jetbrains.kotlin.ir.util.patchDeclarationParents
|
||||
import org.jetbrains.kotlin.load.java.JavaVisibilities
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
|
||||
class StaticInitializersLowering(override val context: JvmBackendContext) : InitializersLoweringBase(context) {
|
||||
@@ -41,6 +42,7 @@ class StaticInitializersLowering(override val context: JvmBackendContext) : Init
|
||||
// TODO: mark as synthesized
|
||||
origin = JvmLoweredDeclarationOrigin.CLASS_STATIC_INITIALIZER
|
||||
returnType = context.irBuiltIns.unitType
|
||||
visibility = JavaVisibilities.PACKAGE_VISIBILITY
|
||||
}.apply {
|
||||
body = IrBlockBodyImpl(irClass.startOffset, irClass.endOffset, staticInitializerStatements).patchDeclarationParents(this)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user