From ccbb2a08a0393b35dc99c87367dfd69adbe20361 Mon Sep 17 00:00:00 2001 From: Sergej Jaskiewicz Date: Fri, 28 Oct 2022 14:27:06 +0200 Subject: [PATCH] [JS IR] Improve debug info for functions with default parameters Don't generate unnecessary mappings so that the user doesn't need to step in many times to get where they want #KT-46276 --- .../ir/backend/js/lower/JsDefaultArgumentStubGenerator.kt | 8 ++++---- compiler/testData/debug/stepping/defaultParameter.kt | 6 ++---- .../lineNumbers/complexExpressionAsDefaultArgument.kt | 4 ++-- js/js.translator/testData/lineNumbers/dataClass.kt | 4 +--- .../testData/lineNumbers/memberFunWithDefaultParam.kt | 2 +- js/js.translator/testData/lineNumbers/optionalArgs.kt | 4 ++-- 6 files changed, 12 insertions(+), 16 deletions(-) diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/JsDefaultArgumentStubGenerator.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/JsDefaultArgumentStubGenerator.kt index ea5a8955df4..5d6b7945a6e 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/JsDefaultArgumentStubGenerator.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/JsDefaultArgumentStubGenerator.kt @@ -62,7 +62,7 @@ class JsDefaultArgumentStubGenerator(override val context: JsIrBackendContext) : } private fun IrFunction.introduceDefaultResolution(): IrFunction { - val irBuilder = context.createIrBuilder(symbol, startOffset, endOffset) + val irBuilder = context.createIrBuilder(symbol, UNDEFINED_OFFSET, UNDEFINED_OFFSET) val variables = mutableMapOf() @@ -140,7 +140,7 @@ class JsDefaultArgumentStubGenerator(override val context: JsIrBackendContext) : override fun IrFunction.generateDefaultStubBody(originalDeclaration: IrFunction): IrBody { val ctx = context - val irBuilder = context.createIrBuilder(symbol, startOffset, endOffset) + val irBuilder = context.createIrBuilder(symbol, UNDEFINED_OFFSET, UNDEFINED_OFFSET) val variables = mutableMapOf().apply { originalDeclaration.dispatchReceiverParameter?.let { @@ -154,7 +154,7 @@ class JsDefaultArgumentStubGenerator(override val context: JsIrBackendContext) : } } - return irBuilder.irBlockBody(this) { + return irBuilder.irBlockBody(UNDEFINED_OFFSET, UNDEFINED_OFFSET) { +valueParameters.zip(originalDeclaration.valueParameters) .mapNotNull { (new, original) -> createResolutionStatement( @@ -244,4 +244,4 @@ class JsDefaultArgumentStubGenerator(override val context: JsIrBackendContext) : private fun IrFunction.hasDefaultArgs(): Boolean = valueParameters.any { it.defaultValue != null } -} \ No newline at end of file +} diff --git a/compiler/testData/debug/stepping/defaultParameter.kt b/compiler/testData/debug/stepping/defaultParameter.kt index 4b66ac28004..c2423001d2b 100644 --- a/compiler/testData/debug/stepping/defaultParameter.kt +++ b/compiler/testData/debug/stepping/defaultParameter.kt @@ -27,9 +27,7 @@ fun box() { // test.kt:11 box // test.kt:3 // test.kt:11 box +// test.kt:6 foo$default // test.kt:4 computeParam -// test.kt:6 foo$default -// test.kt:6 foo$default // test.kt:7 foo -// test.kt:6 foo$default -// test.kt:12 box \ No newline at end of file +// test.kt:12 box diff --git a/js/js.translator/testData/lineNumbers/complexExpressionAsDefaultArgument.kt b/js/js.translator/testData/lineNumbers/complexExpressionAsDefaultArgument.kt index e2dd11a0cd6..848009eb5d9 100644 --- a/js/js.translator/testData/lineNumbers/complexExpressionAsDefaultArgument.kt +++ b/js/js.translator/testData/lineNumbers/complexExpressionAsDefaultArgument.kt @@ -11,5 +11,5 @@ fun baz() = 1 fun bar() = 2 -// LINES(JS): 1 3 3 2 2 4 3 4 4 4 5 5 2 8 8 10 10 10 12 12 12 -// LINES(JS_IR): 1 * 1 1 3 3 4 5 1 * 8 8 10 10 10 10 12 12 12 12 +// LINES(JS): 1 3 3 2 2 4 3 4 4 4 5 5 2 8 8 10 10 10 12 12 12 +// LINES(JS_IR): 1 * 3 3 4 5 * 8 8 10 10 10 10 12 12 12 12 diff --git a/js/js.translator/testData/lineNumbers/dataClass.kt b/js/js.translator/testData/lineNumbers/dataClass.kt index 83cf5dd4cb5..c3f0def5264 100644 --- a/js/js.translator/testData/lineNumbers/dataClass.kt +++ b/js/js.translator/testData/lineNumbers/dataClass.kt @@ -4,6 +4,4 @@ data class A( ) // LINES(JS): 1 2 3 * 1 2 2 1 3 3 1 1 1 2 3 1 1 1 2 3 1 1 1 2 3 1 1 1 1 1 2 3 - -// FIXME: componentN function body should point to the corresponding property. -// LINES(JS_IR): 1 1 2 2 3 3 2 2 2 3 3 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +// LINES(JS_IR): 1 1 2 2 3 3 2 2 2 3 3 3 1 1 1 1 1 1 1 1 1 1 1 1 * 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 diff --git a/js/js.translator/testData/lineNumbers/memberFunWithDefaultParam.kt b/js/js.translator/testData/lineNumbers/memberFunWithDefaultParam.kt index 8f4f73c719c..a0dae298a4d 100644 --- a/js/js.translator/testData/lineNumbers/memberFunWithDefaultParam.kt +++ b/js/js.translator/testData/lineNumbers/memberFunWithDefaultParam.kt @@ -11,4 +11,4 @@ class B : A() { } // LINES(JS): 1 2 2 2 2 2 2 2 2 2 4 4 4 * 7 7 8 10 9 9 -// LINES(JS_IR): 1 1 2 2 2 2 2 2 2 4 4 4 7 7 7 8 9 9 +// LINES(JS_IR): 1 1 2 2 2 2 2 * 4 4 4 7 7 7 8 9 9 diff --git a/js/js.translator/testData/lineNumbers/optionalArgs.kt b/js/js.translator/testData/lineNumbers/optionalArgs.kt index 2c8348a4f8d..a683750e829 100644 --- a/js/js.translator/testData/lineNumbers/optionalArgs.kt +++ b/js/js.translator/testData/lineNumbers/optionalArgs.kt @@ -7,5 +7,5 @@ fun box( println(y) } -// LINES(JS): 1 8 2 2 2 2 3 3 3 4 6 6 7 7 -// LINES(JS_IR): 1 1 2 1 1 4 1 6 6 7 7 +// LINES(JS): 1 8 2 2 2 2 3 3 3 4 6 6 7 7 +// LINES(JS_IR): 1 2 4 6 6 7 7