From 512a2bfd7a3314309fc08863c983fbe434012fbe Mon Sep 17 00:00:00 2001 From: Sergej Jaskiewicz Date: Fri, 28 Oct 2022 14:22:38 +0200 Subject: [PATCH] [JS IR] Improve debug info for callable references and lambdas #KT-46276 --- .../js/lower/CallableReferenceLowering.kt | 25 +++++++++++-------- .../lower/InteropCallableReferenceLowering.kt | 16 +++++++++--- .../debug/stepping/callableReference.kt | 3 ++- compiler/testData/debug/stepping/enum.kt | 3 ++- .../debug/stepping/namedCallableReference.kt | 5 ++-- .../testData/lineNumbers/lambdaWithClosure.kt | 2 +- 6 files changed, 33 insertions(+), 21 deletions(-) diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/CallableReferenceLowering.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/CallableReferenceLowering.kt index 1e4452510da..eff92ade531 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/CallableReferenceLowering.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/CallableReferenceLowering.kt @@ -304,8 +304,8 @@ class CallableReferenceLowering(private val context: CommonBackendContext) : Bod when (callee) { is IrConstructor -> IrConstructorCallImpl( - startOffset, - endOffset, + UNDEFINED_OFFSET, + UNDEFINED_OFFSET, callee.parentAsClass.defaultType, callee.symbol, callee.countContextTypeParameters(), @@ -315,8 +315,8 @@ class CallableReferenceLowering(private val context: CommonBackendContext) : Bod ) is IrSimpleFunction -> IrCallImpl( - startOffset, - endOffset, + UNDEFINED_OFFSET, + UNDEFINED_OFFSET, callee.returnType, callee.symbol, callee.typeParameters.size, @@ -393,14 +393,17 @@ class CallableReferenceLowering(private val context: CommonBackendContext) : Bod } } - body = factory.createBlockBody(reference.startOffset, reference.endOffset, listOf(reference.run { - IrReturnImpl( - startOffset, - endOffset, nothingType, - symbol, - buildInvoke() + body = factory.createBlockBody( + UNDEFINED_OFFSET, UNDEFINED_OFFSET, listOf( + IrReturnImpl( + UNDEFINED_OFFSET, + UNDEFINED_OFFSET, + nothingType, + symbol, + buildInvoke() + ) ) - })) + ) } private fun createNameProperty(clazz: IrClass) { diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/InteropCallableReferenceLowering.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/InteropCallableReferenceLowering.kt index ae3106d3b92..150514d5b83 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/InteropCallableReferenceLowering.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/InteropCallableReferenceLowering.kt @@ -527,8 +527,8 @@ class InteropCallableReferenceLowering(val context: JsIrBackendContext) : BodyLo val lambdaType = lambdaInfo.lambdaClass.defaultType val instanceVal = JsIrBuilder.buildVar(lambdaType, factoryFunction, "i").apply { val newCtorCall = IrConstructorCallImpl( - lambdaInfo.lambdaClass.startOffset, - lambdaInfo.lambdaClass.endOffset, + UNDEFINED_OFFSET, + UNDEFINED_OFFSET, lambdaType, constructor.symbol, lambdaInfo.lambdaClass.typeParameters.size, @@ -598,7 +598,7 @@ class InteropCallableReferenceLowering(val context: JsIrBackendContext) : BodyLo statements.add(JsIrBuilder.buildReturn(factoryFunction.symbol, functionExpression, context.irBuiltIns.nothingType)) } - return context.irFactory.createBlockBody(lambdaInfo.lambdaClass.startOffset, lambdaInfo.lambdaClass.endOffset, statements) + return context.irFactory.createBlockBody(UNDEFINED_OFFSET, UNDEFINED_OFFSET, statements) } private fun createLambdaDeclaration( @@ -621,7 +621,15 @@ class InteropCallableReferenceLowering(val context: JsIrBackendContext) : BodyLo lambdaDeclaration.parent = parent lambdaDeclaration.valueParameters = superInvokeFun.valueParameters.mapIndexed { id, vp -> - vp.copyTo(lambdaDeclaration, type = anyNType, name = invokeFun.valueParameters[id].name) + val originalValueParameter = invokeFun.valueParameters[id] + vp.copyTo( + irFunction = lambdaDeclaration, + origin = originalValueParameter.origin, + startOffset = originalValueParameter.startOffset, + endOffset = originalValueParameter.endOffset, + name = originalValueParameter.name, + type = anyNType, + ) } return lambdaDeclaration } diff --git a/compiler/testData/debug/stepping/callableReference.kt b/compiler/testData/debug/stepping/callableReference.kt index b66fa45cc50..6d8ae75678b 100644 --- a/compiler/testData/debug/stepping/callableReference.kt +++ b/compiler/testData/debug/stepping/callableReference.kt @@ -23,9 +23,10 @@ fun f(block: () -> Unit) { // EXPECTATIONS JS_IR // test.kt:3 box // test.kt:4 box +// test.kt:4 box$lambda // test.kt:4 box // test.kt:10 f // test.kt:5 box$lambda$lambda // test.kt:6 box$lambda$lambda // test.kt:11 f -// test.kt:7 box \ No newline at end of file +// test.kt:7 box diff --git a/compiler/testData/debug/stepping/enum.kt b/compiler/testData/debug/stepping/enum.kt index 40f9c4ebf13..cb51df5f195 100644 --- a/compiler/testData/debug/stepping/enum.kt +++ b/compiler/testData/debug/stepping/enum.kt @@ -60,10 +60,11 @@ fun box() { // test.kt:3 // test.kt:22 box // test.kt:9 foo +// test.kt:7 E$foo$lambda // test.kt:15 E2_initEntries // test.kt:14 // test.kt:14 // test.kt:17 E2_initEntries // test.kt:14 // test.kt:14 -// test.kt:24 box \ No newline at end of file +// test.kt:24 box diff --git a/compiler/testData/debug/stepping/namedCallableReference.kt b/compiler/testData/debug/stepping/namedCallableReference.kt index 113219c539a..19e816199d5 100644 --- a/compiler/testData/debug/stepping/namedCallableReference.kt +++ b/compiler/testData/debug/stepping/namedCallableReference.kt @@ -32,10 +32,9 @@ fun g() {} // EXPECTATIONS JS_IR // test.kt:3 box // test.kt:4 box +// test.kt:4 g$ref // test.kt:4 box // test.kt:8 f -// test.kt:4 g$ref$lambda // test.kt:11 g -// test.kt:4 g$ref$lambda // test.kt:9 f -// test.kt:5 box \ No newline at end of file +// test.kt:5 box diff --git a/js/js.translator/testData/lineNumbers/lambdaWithClosure.kt b/js/js.translator/testData/lineNumbers/lambdaWithClosure.kt index 22296430170..14e879f99ca 100644 --- a/js/js.translator/testData/lineNumbers/lambdaWithClosure.kt +++ b/js/js.translator/testData/lineNumbers/lambdaWithClosure.kt @@ -5,4 +5,4 @@ fun foo(x: Int): () -> Unit = { fun bar() = 23 // LINES(JS): 1 1 1 3 2 2 3 3 1 1 1 5 5 5 -// LINES(JS_IR): 1 1 3 3 1 5 5 5 5 1 1 1 2 2 3 3 +// LINES(JS_IR): 1 1 3 3 1 5 5 5 5 1 1 2 2 3 3