Do not evaluate Block argument
This commit is contained in:
committed by
KonstantinAnisimov
parent
c278853f10
commit
4cb4615e7c
+3
-2
@@ -91,6 +91,7 @@ internal class FunctionInlining(val context: Context): IrElementTransformerVoid(
|
|||||||
if (expression is IrGetValue) return false // Parameter is already GetValue - nothing to evaluate.
|
if (expression is IrGetValue) return false // Parameter is already GetValue - nothing to evaluate.
|
||||||
if (expression is IrConst<*>) return false // Parameter is constant - nothing to evaluate.
|
if (expression is IrConst<*>) return false // Parameter is constant - nothing to evaluate.
|
||||||
if (expression is IrCallableReference) return false // Parameter is nothing to evaluate.
|
if (expression is IrCallableReference) return false // Parameter is nothing to evaluate.
|
||||||
|
if (expression is IrBlock) return false // Parameter is nothing to evaluate.
|
||||||
if (isLambdaExpression(expression)) return false // Parameter is lambda - will be inlined.
|
if (isLambdaExpression(expression)) return false // Parameter is lambda - will be inlined.
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
@@ -153,7 +154,7 @@ internal class FunctionInlining(val context: Context): IrElementTransformerVoid(
|
|||||||
context.ir.originalModuleIndex.functions[originalDescriptor] ?: // Function is declared in the current module.
|
context.ir.originalModuleIndex.functions[originalDescriptor] ?: // Function is declared in the current module.
|
||||||
deserializer.deserializeInlineBody(originalDescriptor) // Function is declared in another module.
|
deserializer.deserializeInlineBody(originalDescriptor) // Function is declared in another module.
|
||||||
if (functionDeclaration == null) return super.visitCall(irCall)
|
if (functionDeclaration == null) return super.visitCall(irCall)
|
||||||
val copyFuncDeclaration = functionDeclaration.accept(InlineCopyIr(), // Create copy of the function.
|
val copyFuncDeclaration = functionDeclaration.accept(InlineCopyIr(), // Create copy of the function.
|
||||||
null) as IrFunction
|
null) as IrFunction
|
||||||
|
|
||||||
val startOffset = copyFuncDeclaration.startOffset
|
val startOffset = copyFuncDeclaration.startOffset
|
||||||
@@ -338,7 +339,7 @@ internal class FunctionInlining(val context: Context): IrElementTransformerVoid(
|
|||||||
if (lambdaArgument !is IrBlock) return null
|
if (lambdaArgument !is IrBlock) return null
|
||||||
|
|
||||||
if (lambdaArgument.origin != IrStatementOrigin.ANONYMOUS_FUNCTION &&
|
if (lambdaArgument.origin != IrStatementOrigin.ANONYMOUS_FUNCTION &&
|
||||||
lambdaArgument.origin != IrStatementOrigin.LAMBDA) {
|
lambdaArgument.origin != IrStatementOrigin.LAMBDA) {
|
||||||
|
|
||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user