[K/N] Fix debug info for lambdas inside inline functions
^KT-57365
This commit is contained in:
committed by
Space Team
parent
dc3641f79d
commit
eefc51657a
+13
-6
@@ -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,
|
||||
|
||||
+1
@@ -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
|
||||
|
||||
|
||||
+1
@@ -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
@@ -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 [..]
|
||||
|
||||
+2
-2
@@ -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
|
||||
|
||||
@@ -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 [..]
|
||||
|
||||
Reference in New Issue
Block a user