Preserve origin LAMBDA. The inliner seems to be looking at it.

This commit is contained in:
Alexander Gorshenev
2017-04-17 17:32:38 +03:00
committed by alexander-gorshenev
parent d79875ac7c
commit e60754474a
2 changed files with 9 additions and 2 deletions
@@ -69,7 +69,8 @@ message IrBreak {
message IrBlock { message IrBlock {
required bool is_transparent_scope = 1; required bool is_transparent_scope = 1;
repeated IrStatement statement = 2; required bool is_lambda_origin = 2;
repeated IrStatement statement = 3;
} }
message MemberAccessCommon { message MemberAccessCommon {
@@ -130,8 +130,12 @@ internal class IrSerializer(val context: Context,
} }
fun serializeBlock(block: IrBlock): KonanIr.IrBlock { fun serializeBlock(block: IrBlock): KonanIr.IrBlock {
val isLambdaOrigin =
block.origin == IrStatementOrigin.LAMBDA ||
block.origin == IrStatementOrigin.ANONYMOUS_FUNCTION
val proto = KonanIr.IrBlock.newBuilder() val proto = KonanIr.IrBlock.newBuilder()
.setIsTransparentScope(block.isTransparentScope) .setIsTransparentScope(block.isTransparentScope)
.setIsLambdaOrigin(isLambdaOrigin)
block.statements.forEach { block.statements.forEach {
proto.addStatement(serializeStatement(it)) proto.addStatement(serializeStatement(it))
} }
@@ -657,7 +661,9 @@ internal class IrDeserializer(val context: Context,
statements.add(deserializeStatement(it) as IrStatement) 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 // TODO: Need to set isTransparentScope somehow
return block return block