KAPT+IR: Support -Xjvm-default modes

This commit is contained in:
Mikhael Bogdanov
2022-02-11 14:34:30 +01:00
parent 00f2b83b84
commit ea2bf3c867
6 changed files with 15 additions and 7 deletions
@@ -53,9 +53,22 @@ class BodyGenerator(
private val loopTable = HashMap<KtLoopExpression, IrLoop>() private val loopTable = HashMap<KtLoopExpression, IrLoop>()
fun generateFunctionBody(ktBody: KtExpression): IrBody { fun generateFunctionBody(ktBody: KtExpression): IrBody {
val irBlockBody = context.irFactory.createBlockBody(ktBody.startOffsetSkippingComments, ktBody.endOffset)
if (context.configuration.skipBodies) {
val irBody =
IrErrorExpressionImpl(
ktBody.startOffsetSkippingComments,
ktBody.endOffset,
context.irBuiltIns.nothingType,
ktBody::class.java.simpleName
)
irBlockBody.statements.add(generateReturnExpression(irBody.endOffset, irBody.endOffset, irBody))
return irBlockBody
}
val statementGenerator = createStatementGenerator() val statementGenerator = createStatementGenerator()
val irBlockBody = context.irFactory.createBlockBody(ktBody.startOffsetSkippingComments, ktBody.endOffset)
if (ktBody is KtBlockExpression) { if (ktBody is KtBlockExpression) {
statementGenerator.generateStatements(ktBody.statements, irBlockBody) statementGenerator.generateStatements(ktBody.statements, irBlockBody)
} else { } else {
@@ -49,8 +49,7 @@ class FunctionGenerator(declarationGenerator: DeclarationGenerator) : Declaratio
origin, origin,
getOrFail(BindingContext.FUNCTION, ktFunction) getOrFail(BindingContext.FUNCTION, ktFunction)
) { ) {
if (context.configuration.skipBodies) null ktFunction.bodyExpression?.let { generateFunctionBody(it) }
else ktFunction.bodyExpression?.let { generateFunctionBody(it) }
} }
fun generateLambdaFunctionDeclaration(ktFunction: KtFunctionLiteral): IrSimpleFunction { fun generateLambdaFunctionDeclaration(ktFunction: KtFunctionLiteral): IrSimpleFunction {
@@ -1,4 +1,3 @@
// IGNORE_BACKEND: JVM_IR
// !JVM_DEFAULT_MODE: all // !JVM_DEFAULT_MODE: all
interface Foo { interface Foo {
@@ -1,4 +1,3 @@
// IGNORE_BACKEND: JVM_IR
// !JVM_DEFAULT_MODE: all-compatibility // !JVM_DEFAULT_MODE: all-compatibility
interface Foo { interface Foo {
@@ -1,4 +1,3 @@
// IGNORE_BACKEND: JVM_IR
// !JVM_DEFAULT_MODE: disable // !JVM_DEFAULT_MODE: disable
interface Foo { interface Foo {
@@ -1,4 +1,3 @@
// IGNORE_BACKEND: JVM_IR
// !JVM_DEFAULT_MODE: enable // !JVM_DEFAULT_MODE: enable
interface Foo { interface Foo {