From e60754474ab18a0feef9aa4def78138e7dcdd68c Mon Sep 17 00:00:00 2001 From: Alexander Gorshenev Date: Mon, 17 Apr 2017 17:32:38 +0300 Subject: [PATCH] Preserve origin LAMBDA. The inliner seems to be looking at it. --- .../kotlin/backend/konan/serialization/KonanIr.proto | 3 ++- .../kotlin/backend/konan/serialization/SerializeIr.kt | 8 +++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/serialization/KonanIr.proto b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/serialization/KonanIr.proto index 4e90f371551..f8d1603a47f 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/serialization/KonanIr.proto +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/serialization/KonanIr.proto @@ -69,7 +69,8 @@ message IrBreak { message IrBlock { required bool is_transparent_scope = 1; - repeated IrStatement statement = 2; + required bool is_lambda_origin = 2; + repeated IrStatement statement = 3; } message MemberAccessCommon { diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/serialization/SerializeIr.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/serialization/SerializeIr.kt index 16f61f66df4..287b653c85a 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/serialization/SerializeIr.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/serialization/SerializeIr.kt @@ -130,8 +130,12 @@ internal class IrSerializer(val context: Context, } fun serializeBlock(block: IrBlock): KonanIr.IrBlock { + val isLambdaOrigin = + block.origin == IrStatementOrigin.LAMBDA || + block.origin == IrStatementOrigin.ANONYMOUS_FUNCTION val proto = KonanIr.IrBlock.newBuilder() .setIsTransparentScope(block.isTransparentScope) + .setIsLambdaOrigin(isLambdaOrigin) block.statements.forEach { proto.addStatement(serializeStatement(it)) } @@ -657,7 +661,9 @@ internal class IrDeserializer(val context: Context, statements.add(deserializeStatement(it) as IrStatement) } - val block = IrBlockImpl(start, end, type, null, statements) + val isLambdaOrigin = if (proto.isLambdaOrigin) IrStatementOrigin.LAMBDA else null + + val block = IrBlockImpl(start, end, type, isLambdaOrigin, statements) // TODO: Need to set isTransparentScope somehow return block