[K/N] Fix debug info for lambdas inside inline functions

^KT-57365
This commit is contained in:
Pavel Kunyavskiy
2023-08-10 11:50:22 +02:00
committed by Space Team
parent dc3641f79d
commit eefc51657a
6 changed files with 25 additions and 16 deletions
@@ -813,15 +813,22 @@ internal class CodeGeneratorVisitor(
if (!declaration.shouldGenerateBody())
return
// Some special functions may have empty body, thay are handled separetely.
val body = declaration.body ?: return
val file = if (declaration.origin != IrDeclarationOrigin.LOCAL_FUNCTION_FOR_LAMBDA)
null
else ((declaration as? IrSimpleFunction)?.attributeOwnerId as? IrSimpleFunction)?.let { context.irLinker.getFileOf(it) }?.takeIf {
(currentCodeContext.fileScope() as FileScope).file != it
val file = run {
val original = (declaration as? IrSimpleFunction)?.attributeOwnerId ?: return@run null
val originalFunction = when (original) {
is IrFunctionExpression -> original.function
is IrFunction -> original
else -> return@run null
}
context.irLinker.getFileOf(originalFunction)
}
val scope = file?.let {
FileScope(it)
val scope = if (file != null && file != (currentCodeContext.fileScope() as FileScope).file) {
FileScope(file)
} else {
null
}
using(scope) {
generateFunction(codegen, declaration,
@@ -70,6 +70,7 @@ internal class BridgesSupport(mapping: NativeMapping, val irBuiltIns: IrBuiltIns
returnType = bridgeDirections.returnDirection.type() ?: function.returnType
isSuspend = function.isSuspend
}.apply {
attributeOwnerId = function.attributeOwnerId
parent = function.parent
val bridge = this
@@ -542,6 +542,7 @@ internal class FunctionReferenceLowering(val generationState: NativeGenerationSt
returnType = functionReturnType
isSuspend = superFunction.isSuspend
}.apply {
attributeOwnerId = functionReference.attributeOwnerId
val function = this
function.createDispatchReceiverParameter()
+2 -2
View File
@@ -4,8 +4,8 @@
* thread #1, [..] stop reason = breakpoint 1.1
* frame #0: [..]`ThrowException
frame #1: [..]`kfun:[..]main$lambda$0[..] at kt42208-2.kt:10:18
frame #2: [..]`kfun:$main$lambda$0$FUNCTION_REFERENCE$0[..]invoke[..](_this=[..])[..] at kt42208-1.kt:7:60
frame #3: [..]`kfun:$main$lambda$0$FUNCTION_REFERENCE$0.[..]$<bridge-UNN>invoke(_this=[..]){}kotlin.Nothing[..] at kt42208-1.kt:7:60
frame #2: [..]`kfun:$main$lambda$0$FUNCTION_REFERENCE$0[..]invoke[..](_this=[..])[..] at kt42208-2.kt:9:20
frame #3: [..]`kfun:$main$lambda$0$FUNCTION_REFERENCE$0.[..]$<bridge-UNN>invoke(_this=[..]){}kotlin.Nothing[..] at kt42208-2.kt:9:20
frame #4: [..]`kfun:kotlin.Function0#invoke(){}1:0-trampoline at [K][Suspend]Functions:1:1
frame #5: [..]`kfun:#main(){} at kt42208-1.kt:5:5
frame #6: [..]`Konan_start(args=[..]) at [..]
@@ -3,8 +3,8 @@
> bt
* thread #1, [..] stop reason = breakpoint 1.1
* frame #0: [..]`kfun:[..]main$lambda$0[..] at kt42208-2.kt:14:5
frame #1: [..]`kfun:$main$lambda$0$FUNCTION_REFERENCE$0.[..]invoke[..](_this=[..])[..] at kt42208-1.kt:9:82
frame #2: [..]`kfun:$main$lambda$0$FUNCTION_REFERENCE$0.[..]$<bridge-BNN>invoke(_this=[..]){}kotlin.Boolean[..] at kt42208-1.kt:9:82
frame #1: [..]`kfun:$main$lambda$0$FUNCTION_REFERENCE$0.[..]invoke[..](_this=[..])[..] at kt42208-2.kt:13:20
frame #2: [..]`kfun:$main$lambda$0$FUNCTION_REFERENCE$0.[..]$<bridge-BNN>invoke(_this=[..]){}kotlin.Boolean[..] at kt42208-2.kt:13:20
frame #3: [..]`kfun:kotlin.Function0#invoke(){}1:0-trampoline at [K][Suspend]Functions:1:1
frame #4: [..]`kfun:#bar(v=[..]){} at kt42208-3.kt:18:5
frame #5: [..]`kfun:#main(){} at kt42208-1.kt:7:5
+6 -6
View File
@@ -3,8 +3,8 @@
> bt
* thread #1, [..] stop reason = breakpoint 1.1
* frame #0: [..]`kfun:[..]main$lambda$0[..] at kt42208-2.kt:15:5
frame #1: [..]`kfun:$main$lambda$0$FUNCTION_REFERENCE$0[..]invoke[..](_this=[..])[..] at kt42208-1.kt:10:71
frame #2: [..]`kfun:$main$lambda$0$FUNCTION_REFERENCE$0.[..]$<bridge-BNN>invoke(_this=[..]){}kotlin.Boolean[..] at kt42208-1.kt:10:71
frame #1: [..]`kfun:$main$lambda$0$FUNCTION_REFERENCE$0[..]invoke[..](_this=[..])[..] at kt42208-2.kt:14:20
frame #2: [..]`kfun:$main$lambda$0$FUNCTION_REFERENCE$0.[..]$<bridge-BNN>invoke(_this=[..]){}kotlin.Boolean[..] at kt42208-2.kt:14:20
frame #3: [..]`kfun:kotlin.Function0#invoke(){}1:0-trampoline at [K][Suspend]Functions:1:1
frame #4: [..]`kfun:#main(){} at kt42208-1.kt:6:5
frame #5: [..]`Konan_start(args=[..]) at [..]
@@ -13,8 +13,8 @@
> bt
* thread #1, [..] stop reason = breakpoint 1.1
* frame #0: [..]`kfun:[..]main$lambda$0[..] at kt42208-2.kt:15:5
frame #1: [..]`kfun:$main$lambda$0$FUNCTION_REFERENCE$0[..]invoke[..](_this=[..])[..] at kt42208-1.kt:10:71
frame #2: [..]`kfun:$main$lambda$0$FUNCTION_REFERENCE$0.[..]$<bridge-BNN>invoke(_this=[..]){}kotlin.Boolean[..] at kt42208-1.kt:10:71
frame #1: [..]`kfun:$main$lambda$0$FUNCTION_REFERENCE$0[..]invoke[..](_this=[..])[..] at kt42208-2.kt:14:20
frame #2: [..]`kfun:$main$lambda$0$FUNCTION_REFERENCE$0.[..]$<bridge-BNN>invoke(_this=[..]){}kotlin.Boolean[..] at kt42208-2.kt:14:20
frame #3: [..]`kfun:kotlin.Function0#invoke(){}1:0-trampoline at [K][Suspend]Functions:1:1
frame #4: [..]`kfun:#main(){} at kt42208-1.kt:7:5
frame #5: [..]`Konan_start(args=[..]) at [..]
@@ -22,8 +22,8 @@
> bt
* thread #1, [..] stop reason = breakpoint 1.1
* frame #0: [..]`kfun:[..]main$lambda$0[..] at kt42208-2.kt:15:5
frame #1: [..]`kfun:$main$lambda$0$FUNCTION_REFERENCE$0[..]invoke[..](_this=[..])[..] at kt42208-1.kt:10:71
frame #2: [..]`kfun:$main$lambda$0$FUNCTION_REFERENCE$0.[..]$<bridge-BNN>invoke(_this=[..]){}kotlin.Boolean[..] at kt42208-1.kt:10:71
frame #1: [..]`kfun:$main$lambda$0$FUNCTION_REFERENCE$0[..]invoke[..](_this=[..])[..] at kt42208-2.kt:14:20
frame #2: [..]`kfun:$main$lambda$0$FUNCTION_REFERENCE$0.[..]$<bridge-BNN>invoke(_this=[..]){}kotlin.Boolean[..] at kt42208-2.kt:14:20
frame #3: [..]`kfun:kotlin.Function0#invoke(){}1:0-trampoline at [K][Suspend]Functions:1:1
frame #4: [..]`kfun:#main(){} at kt42208-1.kt:8:5
frame #5: [..]`Konan_start(args=[..]) at [..]