diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/ConversionUtils.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/ConversionUtils.kt index 47046f067ee..107bbfffdb2 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/ConversionUtils.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/ConversionUtils.kt @@ -78,10 +78,6 @@ fun AbstractKtSourceElement?.startOffsetSkippingComments(): Int? { } } -internal inline fun FirElement.convertWithOffsets(defaultOffset: Int, f: (startOffset: Int, endOffset: Int) -> T): T { - return source.convertWithOffsets(defaultOffset, f) -} - internal inline fun FirElement.convertWithOffsets(f: (startOffset: Int, endOffset: Int) -> T): T { return source.convertWithOffsets(f) } @@ -93,19 +89,15 @@ internal fun FirPropertyAccessor?.convertWithOffsets( } internal inline fun KtSourceElement?.convertWithOffsets(f: (startOffset: Int, endOffset: Int) -> T): T { - return convertWithOffsets(UNDEFINED_OFFSET, f) -} - -internal inline fun KtSourceElement?.convertWithOffsets(defaultOffset: Int, f: (startOffset: Int, endOffset: Int) -> T): T { val startOffset: Int val endOffset: Int if (isCompiledElement(psi) || this?.kind == KtFakeSourceElementKind.DataClassGeneratedMembers) { - startOffset = defaultOffset - endOffset = defaultOffset + startOffset = UNDEFINED_OFFSET + endOffset = UNDEFINED_OFFSET } else { - startOffset = this?.startOffsetSkippingComments() ?: this?.startOffset ?: defaultOffset - endOffset = this?.endOffset ?: defaultOffset + startOffset = this?.startOffsetSkippingComments() ?: this?.startOffset ?: UNDEFINED_OFFSET + endOffset = this?.endOffset ?: UNDEFINED_OFFSET } return f(startOffset, endOffset) diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/DataClassMembersGenerator.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/DataClassMembersGenerator.kt index ba15075b00c..8bdee57aba5 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/DataClassMembersGenerator.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/DataClassMembersGenerator.kt @@ -21,6 +21,7 @@ import org.jetbrains.kotlin.fir.scopes.getProperties import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol import org.jetbrains.kotlin.fir.types.* +import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET import org.jetbrains.kotlin.ir.builders.IrGeneratorContextBase import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.expressions.IrMemberAccessExpression @@ -192,8 +193,8 @@ class DataClassMembersGenerator(val components: Fir2IrComponents) : Fir2IrCompon irFunction.declareThisReceiverParameter( irClass.defaultType, IrDeclarationOrigin.DEFINED, - SYNTHETIC_OFFSET, - SYNTHETIC_OFFSET + UNDEFINED_OFFSET, + UNDEFINED_OFFSET ) fun generateHeaders(): List { @@ -312,8 +313,8 @@ class DataClassMembersGenerator(val components: Fir2IrComponents) : Fir2IrCompon val signature = if (klass.symbol.classId.isLocal) null else components.signatureComposer.composeSignature(syntheticCounterpart) val symbol = components.declarationStorage.createFunctionSymbol(signature) return components.irFactory.createSimpleFunction( - startOffset = SYNTHETIC_OFFSET, - endOffset = SYNTHETIC_OFFSET, + startOffset = UNDEFINED_OFFSET, + endOffset = UNDEFINED_OFFSET, origin = origin, name = name, visibility = DescriptorVisibilities.PUBLIC, @@ -350,8 +351,8 @@ class DataClassMembersGenerator(val components: Fir2IrComponents) : Fir2IrCompon private fun createSyntheticIrParameter(irFunction: IrFunction, name: Name, type: IrType, index: Int = 0): IrValueParameter = components.irFactory.createValueParameter( - startOffset = SYNTHETIC_OFFSET, - endOffset = SYNTHETIC_OFFSET, + startOffset = UNDEFINED_OFFSET, + endOffset = UNDEFINED_OFFSET, origin = IrDeclarationOrigin.DEFINED, name = name, type = type, diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/Fir2IrCallableDeclarationsGenerator.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/Fir2IrCallableDeclarationsGenerator.kt index 0f6e6d74e6b..4654c945275 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/Fir2IrCallableDeclarationsGenerator.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/Fir2IrCallableDeclarationsGenerator.kt @@ -110,16 +110,11 @@ class Fir2IrCallableDeclarationsGenerator(val components: Fir2IrComponents) : Fi @Suppress("USELESS_CAST") // K2 warning suppression, TODO: KT-62472 if (isLambda) ((function as FirAnonymousFunction).typeRef as? FirResolvedTypeRef)?.type?.isSuspendOrKSuspendFunctionType(session) == true else function.isSuspend - val defaultOffset = when { - function.origin == FirDeclarationOrigin.Synthetic.DataClassMember -> SYNTHETIC_OFFSET - updatedOrigin == IrDeclarationOrigin.DELEGATED_MEMBER -> SYNTHETIC_OFFSET - else -> UNDEFINED_OFFSET - } - val created = function.convertWithOffsets(defaultOffset) { startOffset, endOffset -> + val created = function.convertWithOffsets { startOffset, endOffset -> classifierStorage.preCacheTypeParameters(function, symbol) irFactory.createSimpleFunction( - startOffset = startOffset, - endOffset = endOffset, + startOffset = if (updatedOrigin == IrDeclarationOrigin.DELEGATED_MEMBER) SYNTHETIC_OFFSET else startOffset, + endOffset = if (updatedOrigin == IrDeclarationOrigin.DELEGATED_MEMBER) SYNTHETIC_OFFSET else endOffset, origin = updatedOrigin, name = name, visibility = components.visibilityConverter.convertToDescriptorVisibility(visibility), diff --git a/compiler/testData/debug/stepping/dataClass.kt b/compiler/testData/debug/stepping/dataClass.kt index b635d497c15..11b511d8024 100644 --- a/compiler/testData/debug/stepping/dataClass.kt +++ b/compiler/testData/debug/stepping/dataClass.kt @@ -61,7 +61,7 @@ fun box() { // test.kt:25 box // test.kt:26 box -// EXPECTATIONS JS_IR +// EXPECTATIONS ClassicFrontend JS_IR // test.kt:14 box // test.kt:4 // test.kt:4 @@ -118,6 +118,63 @@ fun box() { // test.kt:6 // test.kt:26 box +// EXPECTATIONS FIR JS_IR // TODO: There is an inconsistency in names between K1 and K2. This should be fixed in KT-64435. +// test.kt:14 box +// test.kt:4 +// test.kt:4 +// test.kt:4 +// test.kt:15 box +// test.kt:4 +// test.kt:4 +// test.kt:4 +// test.kt:15 box +// test.kt:1 protoOf.equals +// test.kt:1 protoOf.equals +// test.kt:1 protoOf.equals +// test.kt:1 protoOf.equals +// test.kt:1 protoOf.equals +// test.kt:1 protoOf.equals +// test.kt:16 box +// test.kt:1 protoOf.hashCode +// test.kt:1 protoOf.hashCode +// test.kt:17 box +// test.kt:1 protoOf.toString +// test.kt:18 box +// test.kt:1 protoOf.component1_7eebsc_k$ +// test.kt:18 box +// test.kt:1 protoOf.component2_7eebsb_k$ +// test.kt:19 box +// test.kt:1 protoOf.copy$default_8mg6yi_k$ +// test.kt:1 protoOf.copy$default_8mg6yi_k$ +// test.kt:1 protoOf.copy_xhhsuv_k$ +// test.kt:4 +// test.kt:4 +// test.kt:4 +// test.kt:20 box +// test.kt:6 +// test.kt:6 +// test.kt:6 +// test.kt:21 box +// test.kt:6 +// test.kt:6 +// test.kt:6 +// test.kt:21 box +// test.kt:8 equals +// test.kt:22 box +// test.kt:9 hashCode +// test.kt:23 box +// test.kt:7 toString +// test.kt:24 box +// test.kt:1 protoOf.component1_7eebsc_k$ +// test.kt:24 box +// test.kt:1 protoOf.component2_7eebsb_k$ +// test.kt:25 box +// test.kt:10 copy +// test.kt:6 +// test.kt:6 +// test.kt:6 +// test.kt:26 box + // EXPECTATIONS WASM // test.kt:14 $box (12, 14, 17, 17, 17, 17, 12) // String.kt:141 $kotlin.stringLiteral (17, 28, 17, 17, 28, 17, 17, 28, 17, 17, 28, 17, 17, 28, 17, 17, 28, 17, 17, 28, 17, 17, 28, 17, 17, 28, 17, 17, 28, 17, 17, 28, 17, 17, 28, 17, 17, 28, 17) diff --git a/compiler/testData/debug/stepping/delegation.kt b/compiler/testData/debug/stepping/delegation.kt index 471fc3a71bb..b7f0fad4daf 100644 --- a/compiler/testData/debug/stepping/delegation.kt +++ b/compiler/testData/debug/stepping/delegation.kt @@ -23,13 +23,6 @@ fun box() { // test.kt:14 // test.kt:17 box // test.kt:18 box -// EXPECTATIONS FIR JVM_IR -// test.kt:14 f -// test.kt:10 f -// test.kt:11 f -// test.kt:14 f -// test.kt:19 box -// EXPECTATIONS ClassicFrontend JVM_IR // test.kt:11 f // test.kt:-1 f // test.kt:19 box diff --git a/js/js.translator/testData/lineNumbers/dataClass.kt b/js/js.translator/testData/lineNumbers/dataClass.kt index e7407545144..fb3aa8b7d41 100644 --- a/js/js.translator/testData/lineNumbers/dataClass.kt +++ b/js/js.translator/testData/lineNumbers/dataClass.kt @@ -4,4 +4,4 @@ data class A( ) // LINES(ClassicFrontend JS_IR): 1 2 3 1 2 2 3 3 2 2 2 3 3 3 1 1 1 1 1 1 1 2 3 1 1 1 1 2 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 -// LINES(FIR JS_IR): 1 2 3 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 +// LINES(FIR JS_IR): 1 2 3 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