IR: consolidate generation of synthetic members for data class
This commit is contained in:
committed by
Mikhail Glukhikh
parent
1500131eb0
commit
c370b86141
+5
@@ -62,6 +62,11 @@ internal class ClassMemberGenerator(
|
|||||||
else -> null
|
else -> null
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// Add synthetic members *before* fake override generations.
|
||||||
|
// Otherwise, redundant members, e.g., synthetic toString _and_ fake override toString, will be added.
|
||||||
|
if (irClass.isData && klass.getPrimaryConstructorIfAny() != null) {
|
||||||
|
processedCallableNames += DataClassMembersGenerator(components).generateDataClassMembers(irClass)
|
||||||
|
}
|
||||||
with(fakeOverrideGenerator) { irClass.addFakeOverrides(klass, processedCallableNames) }
|
with(fakeOverrideGenerator) { irClass.addFakeOverrides(klass, processedCallableNames) }
|
||||||
klass.declarations.forEach {
|
klass.declarations.forEach {
|
||||||
if (it !is FirTypeAlias && (it !is FirConstructor || !it.isPrimary)) {
|
if (it !is FirTypeAlias && (it !is FirConstructor || !it.isPrimary)) {
|
||||||
|
|||||||
+213
@@ -0,0 +1,213 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.fir.backend.generators
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.descriptors.CallableDescriptor
|
||||||
|
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
|
||||||
|
import org.jetbrains.kotlin.descriptors.Modality
|
||||||
|
import org.jetbrains.kotlin.descriptors.Visibilities
|
||||||
|
import org.jetbrains.kotlin.fir.backend.Fir2IrComponents
|
||||||
|
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
|
||||||
|
import org.jetbrains.kotlin.ir.builders.IrGeneratorContextBase
|
||||||
|
import org.jetbrains.kotlin.ir.declarations.IrClass
|
||||||
|
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
|
||||||
|
import org.jetbrains.kotlin.ir.declarations.IrFunction
|
||||||
|
import org.jetbrains.kotlin.ir.declarations.IrProperty
|
||||||
|
import org.jetbrains.kotlin.ir.declarations.MetadataSource
|
||||||
|
import org.jetbrains.kotlin.ir.declarations.impl.IrFunctionImpl
|
||||||
|
import org.jetbrains.kotlin.ir.declarations.impl.IrValueParameterImpl
|
||||||
|
import org.jetbrains.kotlin.ir.descriptors.WrappedSimpleFunctionDescriptor
|
||||||
|
import org.jetbrains.kotlin.ir.descriptors.WrappedValueParameterDescriptor
|
||||||
|
import org.jetbrains.kotlin.ir.expressions.IrMemberAccessExpression
|
||||||
|
import org.jetbrains.kotlin.ir.util.DataClassMembersGenerator
|
||||||
|
import org.jetbrains.kotlin.ir.util.defaultType
|
||||||
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
|
||||||
|
class DataClassMembersGenerator(val components: Fir2IrComponents) {
|
||||||
|
|
||||||
|
// TODO: generateInlineClassMembers
|
||||||
|
|
||||||
|
fun generateDataClassMembers(irClass: IrClass): List<Name> =
|
||||||
|
MyDataClassMethodsGenerator(irClass, IrDeclarationOrigin.GENERATED_DATA_CLASS_MEMBER).generate()
|
||||||
|
|
||||||
|
private inner class MyDataClassMethodsGenerator(
|
||||||
|
val irClass: IrClass,
|
||||||
|
val origin: IrDeclarationOrigin
|
||||||
|
) {
|
||||||
|
val properties = irClass.declarations.filterIsInstance<IrProperty>().map { it.descriptor }
|
||||||
|
|
||||||
|
private val irDataClassMembersGenerator = object : DataClassMembersGenerator(
|
||||||
|
IrGeneratorContextBase(components.irBuiltIns),
|
||||||
|
components.symbolTable,
|
||||||
|
irClass,
|
||||||
|
origin
|
||||||
|
) {
|
||||||
|
override fun declareSimpleFunction(startOffset: Int, endOffset: Int, functionDescriptor: FunctionDescriptor): IrFunction {
|
||||||
|
throw IllegalStateException("Not expect to see function declaration.")
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun generateSyntheticFunctionParameterDeclarations(irFunction: IrFunction) {
|
||||||
|
// TODO
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun commitSubstituted(irMemberAccessExpression: IrMemberAccessExpression, descriptor: CallableDescriptor) {
|
||||||
|
// TODO
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun generateDispatchReceiverParameter(irFunction: IrFunction, valueParameterDescriptor: WrappedValueParameterDescriptor) =
|
||||||
|
components.symbolTable.declareValueParameter(
|
||||||
|
UNDEFINED_OFFSET,
|
||||||
|
UNDEFINED_OFFSET,
|
||||||
|
origin,
|
||||||
|
valueParameterDescriptor,
|
||||||
|
components.irBuiltIns.anyNType
|
||||||
|
) { symbol ->
|
||||||
|
IrValueParameterImpl(
|
||||||
|
UNDEFINED_OFFSET,
|
||||||
|
UNDEFINED_OFFSET,
|
||||||
|
origin,
|
||||||
|
symbol,
|
||||||
|
Name.special("<this>"),
|
||||||
|
-1,
|
||||||
|
irClass.defaultType,
|
||||||
|
null,
|
||||||
|
isCrossinline = false,
|
||||||
|
isNoinline = false
|
||||||
|
)
|
||||||
|
}.apply {
|
||||||
|
parent = irFunction
|
||||||
|
valueParameterDescriptor.bind(this)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun generate(): List<Name> {
|
||||||
|
if (properties.isEmpty()) {
|
||||||
|
return emptyList()
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: consolidate componentN() and copy(...) too?
|
||||||
|
|
||||||
|
// TODO: generate equals, hashCode, and toString only if needed
|
||||||
|
val equalsDescriptor = WrappedSimpleFunctionDescriptor()
|
||||||
|
val equalsDispatchReceiverDescriptor = WrappedValueParameterDescriptor()
|
||||||
|
val equalsValueParameterDescriptor = WrappedValueParameterDescriptor()
|
||||||
|
val equalsFunction =
|
||||||
|
components.symbolTable.declareSimpleFunction(UNDEFINED_OFFSET, UNDEFINED_OFFSET, origin, equalsDescriptor) { symbol ->
|
||||||
|
IrFunctionImpl(
|
||||||
|
UNDEFINED_OFFSET,
|
||||||
|
UNDEFINED_OFFSET,
|
||||||
|
origin,
|
||||||
|
symbol,
|
||||||
|
Name.identifier("equals"),
|
||||||
|
Visibilities.PUBLIC,
|
||||||
|
Modality.OPEN,
|
||||||
|
components.irBuiltIns.booleanType,
|
||||||
|
isInline = false,
|
||||||
|
isExternal = false,
|
||||||
|
isTailrec = false,
|
||||||
|
isSuspend = false,
|
||||||
|
isExpect = false,
|
||||||
|
isFakeOverride = false,
|
||||||
|
isOperator = false
|
||||||
|
).apply {
|
||||||
|
metadata = MetadataSource.Function(descriptor)
|
||||||
|
}
|
||||||
|
}.apply {
|
||||||
|
parent = irClass
|
||||||
|
equalsDescriptor.bind(this)
|
||||||
|
dispatchReceiverParameter = generateDispatchReceiverParameter(this, equalsDispatchReceiverDescriptor)
|
||||||
|
val irFunction = this
|
||||||
|
valueParameters +=
|
||||||
|
components.symbolTable.declareValueParameter(
|
||||||
|
UNDEFINED_OFFSET,
|
||||||
|
UNDEFINED_OFFSET,
|
||||||
|
origin,
|
||||||
|
equalsValueParameterDescriptor,
|
||||||
|
components.irBuiltIns.anyNType
|
||||||
|
) { symbol ->
|
||||||
|
IrValueParameterImpl(
|
||||||
|
UNDEFINED_OFFSET,
|
||||||
|
UNDEFINED_OFFSET,
|
||||||
|
origin,
|
||||||
|
symbol,
|
||||||
|
Name.identifier("other"),
|
||||||
|
0,
|
||||||
|
components.irBuiltIns.anyNType,
|
||||||
|
null,
|
||||||
|
isCrossinline = false,
|
||||||
|
isNoinline = false
|
||||||
|
)
|
||||||
|
}.apply {
|
||||||
|
parent = irFunction
|
||||||
|
equalsValueParameterDescriptor.bind(this)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
irDataClassMembersGenerator.generateEqualsMethod(equalsFunction, properties)
|
||||||
|
|
||||||
|
val hashCodeDescriptor = WrappedSimpleFunctionDescriptor()
|
||||||
|
val hashCodeDispatchReceiverDescriptor = WrappedValueParameterDescriptor()
|
||||||
|
val hashCodeFunction =
|
||||||
|
components.symbolTable.declareSimpleFunction(UNDEFINED_OFFSET, UNDEFINED_OFFSET, origin, hashCodeDescriptor) { symbol ->
|
||||||
|
IrFunctionImpl(
|
||||||
|
UNDEFINED_OFFSET,
|
||||||
|
UNDEFINED_OFFSET,
|
||||||
|
origin,
|
||||||
|
symbol,
|
||||||
|
Name.identifier("hashCode"),
|
||||||
|
Visibilities.PUBLIC,
|
||||||
|
Modality.OPEN,
|
||||||
|
components.irBuiltIns.intType,
|
||||||
|
isInline = false,
|
||||||
|
isExternal = false,
|
||||||
|
isTailrec = false,
|
||||||
|
isSuspend = false,
|
||||||
|
isExpect = false,
|
||||||
|
isFakeOverride = false,
|
||||||
|
isOperator = false
|
||||||
|
).apply {
|
||||||
|
metadata = MetadataSource.Function(descriptor)
|
||||||
|
}
|
||||||
|
}.apply {
|
||||||
|
parent = irClass
|
||||||
|
hashCodeDescriptor.bind(this)
|
||||||
|
dispatchReceiverParameter = generateDispatchReceiverParameter(this, hashCodeDispatchReceiverDescriptor)
|
||||||
|
}
|
||||||
|
irDataClassMembersGenerator.generateHashCodeMethod(hashCodeFunction, properties)
|
||||||
|
|
||||||
|
val toStringDescriptor = WrappedSimpleFunctionDescriptor()
|
||||||
|
val toStringDispatchReceiverDescriptor = WrappedValueParameterDescriptor()
|
||||||
|
val toStringFunction =
|
||||||
|
components.symbolTable.declareSimpleFunction(UNDEFINED_OFFSET, UNDEFINED_OFFSET, origin, toStringDescriptor) { symbol ->
|
||||||
|
IrFunctionImpl(
|
||||||
|
UNDEFINED_OFFSET,
|
||||||
|
UNDEFINED_OFFSET,
|
||||||
|
origin,
|
||||||
|
symbol,
|
||||||
|
Name.identifier("toString"),
|
||||||
|
Visibilities.PUBLIC,
|
||||||
|
Modality.OPEN,
|
||||||
|
components.irBuiltIns.stringType,
|
||||||
|
isInline = false,
|
||||||
|
isExternal = false,
|
||||||
|
isTailrec = false,
|
||||||
|
isSuspend = false,
|
||||||
|
isExpect = false,
|
||||||
|
isFakeOverride = false,
|
||||||
|
isOperator = false
|
||||||
|
).apply {
|
||||||
|
metadata = MetadataSource.Function(descriptor)
|
||||||
|
}
|
||||||
|
}.apply {
|
||||||
|
parent = irClass
|
||||||
|
toStringDescriptor.bind(this)
|
||||||
|
dispatchReceiverParameter = generateDispatchReceiverParameter(this, toStringDispatchReceiverDescriptor)
|
||||||
|
}
|
||||||
|
irDataClassMembersGenerator.generateToStringMethod(toStringFunction, properties)
|
||||||
|
|
||||||
|
return listOf(equalsFunction.name, hashCodeFunction.name, toStringFunction.name)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -65,12 +65,6 @@ fun KtSecondaryConstructor.isConstructorDelegatingToSuper(bindingContext: Bindin
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
inline fun ClassDescriptor.findFirstFunction(name: String, predicate: (CallableMemberDescriptor) -> Boolean) =
|
|
||||||
unsubstitutedMemberScope.findFirstFunction(name, predicate)
|
|
||||||
|
|
||||||
inline fun MemberScope.findFirstFunction(name: String, predicate: (CallableMemberDescriptor) -> Boolean) =
|
|
||||||
getContributedFunctions(Name.identifier(name), NoLookupLocation.FROM_BACKEND).first(predicate)
|
|
||||||
|
|
||||||
fun MemberScope.findSingleFunction(name: Name): FunctionDescriptor =
|
fun MemberScope.findSingleFunction(name: Name): FunctionDescriptor =
|
||||||
getContributedFunctions(name, NoLookupLocation.FROM_BACKEND).single()
|
getContributedFunctions(name, NoLookupLocation.FROM_BACKEND).single()
|
||||||
|
|
||||||
|
|||||||
+22
-165
@@ -18,9 +18,7 @@ package org.jetbrains.kotlin.psi2ir.generators
|
|||||||
|
|
||||||
import com.intellij.psi.PsiElement
|
import com.intellij.psi.PsiElement
|
||||||
import org.jetbrains.kotlin.backend.common.DataClassMethodGenerator
|
import org.jetbrains.kotlin.backend.common.DataClassMethodGenerator
|
||||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
|
||||||
import org.jetbrains.kotlin.descriptors.*
|
import org.jetbrains.kotlin.descriptors.*
|
||||||
import org.jetbrains.kotlin.incremental.components.NoLookupLocation
|
|
||||||
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
|
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
|
||||||
import org.jetbrains.kotlin.ir.builders.*
|
import org.jetbrains.kotlin.ir.builders.*
|
||||||
import org.jetbrains.kotlin.ir.declarations.*
|
import org.jetbrains.kotlin.ir.declarations.*
|
||||||
@@ -29,23 +27,14 @@ import org.jetbrains.kotlin.ir.expressions.IrMemberAccessExpression
|
|||||||
import org.jetbrains.kotlin.ir.expressions.impl.IrGetValueImpl
|
import org.jetbrains.kotlin.ir.expressions.impl.IrGetValueImpl
|
||||||
import org.jetbrains.kotlin.ir.expressions.mapTypeParameters
|
import org.jetbrains.kotlin.ir.expressions.mapTypeParameters
|
||||||
import org.jetbrains.kotlin.ir.expressions.mapValueParameters
|
import org.jetbrains.kotlin.ir.expressions.mapValueParameters
|
||||||
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
|
import org.jetbrains.kotlin.ir.util.DataClassMembersGenerator
|
||||||
import org.jetbrains.kotlin.ir.util.declareSimpleFunctionWithOverrides
|
import org.jetbrains.kotlin.ir.util.declareSimpleFunctionWithOverrides
|
||||||
import org.jetbrains.kotlin.ir.util.properties
|
|
||||||
import org.jetbrains.kotlin.ir.util.referenceFunction
|
|
||||||
import org.jetbrains.kotlin.name.Name
|
|
||||||
import org.jetbrains.kotlin.psi.KtClassOrObject
|
import org.jetbrains.kotlin.psi.KtClassOrObject
|
||||||
import org.jetbrains.kotlin.psi.KtParameter
|
import org.jetbrains.kotlin.psi.KtParameter
|
||||||
import org.jetbrains.kotlin.psi2ir.containsNull
|
|
||||||
import org.jetbrains.kotlin.psi2ir.endOffsetOrUndefined
|
import org.jetbrains.kotlin.psi2ir.endOffsetOrUndefined
|
||||||
import org.jetbrains.kotlin.psi2ir.findFirstFunction
|
|
||||||
import org.jetbrains.kotlin.psi2ir.startOffsetOrUndefined
|
import org.jetbrains.kotlin.psi2ir.startOffsetOrUndefined
|
||||||
import org.jetbrains.kotlin.resolve.BindingContext
|
import org.jetbrains.kotlin.resolve.BindingContext
|
||||||
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils
|
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils
|
||||||
import org.jetbrains.kotlin.resolve.scopes.MemberScope
|
|
||||||
import org.jetbrains.kotlin.types.KotlinType
|
|
||||||
import org.jetbrains.kotlin.types.checker.KotlinTypeChecker
|
|
||||||
import org.jetbrains.kotlin.types.typeUtil.representativeUpperBound
|
|
||||||
|
|
||||||
class DataClassMembersGenerator(
|
class DataClassMembersGenerator(
|
||||||
declarationGenerator: DeclarationGenerator
|
declarationGenerator: DeclarationGenerator
|
||||||
@@ -99,15 +88,6 @@ class DataClassMembersGenerator(
|
|||||||
irDispatchReceiverParameter.symbol
|
irDispatchReceiverParameter.symbol
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun irOther(): IrExpression {
|
|
||||||
val irFirstParameter = irFunction.valueParameters[0]
|
|
||||||
return IrGetValueImpl(
|
|
||||||
startOffset, endOffset,
|
|
||||||
irFirstParameter.type,
|
|
||||||
irFirstParameter.symbol
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private inner class MyDataClassMethodGenerator(
|
private inner class MyDataClassMethodGenerator(
|
||||||
@@ -115,6 +95,20 @@ class DataClassMembersGenerator(
|
|||||||
val irClass: IrClass,
|
val irClass: IrClass,
|
||||||
val origin: IrDeclarationOrigin
|
val origin: IrDeclarationOrigin
|
||||||
) : DataClassMethodGenerator(ktClassOrObject, declarationGenerator.context.bindingContext) {
|
) : DataClassMethodGenerator(ktClassOrObject, declarationGenerator.context.bindingContext) {
|
||||||
|
|
||||||
|
private val irDataClassMembersGenerator = object : DataClassMembersGenerator(context, context.symbolTable, irClass, origin) {
|
||||||
|
override fun declareSimpleFunction(startOffset: Int, endOffset: Int, functionDescriptor: FunctionDescriptor): IrFunction =
|
||||||
|
declareSimpleFunction(startOffset, endOffset, origin, functionDescriptor)
|
||||||
|
|
||||||
|
override fun generateSyntheticFunctionParameterDeclarations(irFunction: IrFunction) {
|
||||||
|
FunctionGenerator(declarationGenerator).generateSyntheticFunctionParameterDeclarations(irFunction)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun commitSubstituted(irMemberAccessExpression: IrMemberAccessExpression, descriptor: CallableDescriptor) {
|
||||||
|
irMemberAccessExpression.commitSubstituted(descriptor)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private inline fun buildMember(
|
private inline fun buildMember(
|
||||||
function: FunctionDescriptor,
|
function: FunctionDescriptor,
|
||||||
psiElement: PsiElement? = null,
|
psiElement: PsiElement? = null,
|
||||||
@@ -144,12 +138,9 @@ class DataClassMembersGenerator(
|
|||||||
|
|
||||||
private fun getBackingField(parameter: ValueParameterDescriptor): IrField {
|
private fun getBackingField(parameter: ValueParameterDescriptor): IrField {
|
||||||
val property = getOrFail(BindingContext.VALUE_PARAMETER_AS_PROPERTY, parameter)
|
val property = getOrFail(BindingContext.VALUE_PARAMETER_AS_PROPERTY, parameter)
|
||||||
return getBackingField(property)
|
return irDataClassMembersGenerator.getBackingField(property)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getBackingField(property: PropertyDescriptor) =
|
|
||||||
irClass.properties.single { it.descriptor == property }.backingField!!
|
|
||||||
|
|
||||||
override fun generateCopyFunction(function: FunctionDescriptor, constructorParameters: List<KtParameter>) {
|
override fun generateCopyFunction(function: FunctionDescriptor, constructorParameters: List<KtParameter>) {
|
||||||
if (!irClass.isData) return
|
if (!irClass.isData) return
|
||||||
|
|
||||||
@@ -176,147 +167,13 @@ class DataClassMembersGenerator(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun generateEqualsMethod(function: FunctionDescriptor, properties: List<PropertyDescriptor>) {
|
override fun generateEqualsMethod(function: FunctionDescriptor, properties: List<PropertyDescriptor>) =
|
||||||
buildMember(function, declaration) {
|
irDataClassMembersGenerator.generateEqualsMethod(function, properties)
|
||||||
val irType = classDescriptor.defaultType.toIrType()
|
|
||||||
|
|
||||||
if (!irClass.isInline) {
|
override fun generateHashCodeMethod(function: FunctionDescriptor, properties: List<PropertyDescriptor>) =
|
||||||
+irIfThenReturnTrue(irEqeqeq(irThis(), irOther()))
|
irDataClassMembersGenerator.generateHashCodeMethod(function, properties)
|
||||||
}
|
|
||||||
+irIfThenReturnFalse(irNotIs(irOther(), irType))
|
|
||||||
val otherWithCast = irTemporary(irAs(irOther(), irType), "other_with_cast")
|
|
||||||
for (property in properties) {
|
|
||||||
val field = getBackingField(property)
|
|
||||||
val arg1 = irGetField(irThis(), field)
|
|
||||||
val arg2 = irGetField(irGet(irType, otherWithCast.symbol), field)
|
|
||||||
+irIfThenReturnFalse(irNotEquals(arg1, arg2))
|
|
||||||
}
|
|
||||||
+irReturnTrue()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private val intClass = context.builtIns.int
|
override fun generateToStringMethod(function: FunctionDescriptor, properties: List<PropertyDescriptor>) =
|
||||||
private val intType = context.builtIns.intType
|
irDataClassMembersGenerator.generateToStringMethod(function, properties)
|
||||||
|
|
||||||
private val intTimes =
|
|
||||||
intClass.findFirstFunction("times") { KotlinTypeChecker.DEFAULT.equalTypes(it.valueParameters[0].type, intType) }
|
|
||||||
.let { context.symbolTable.referenceFunction(it) }
|
|
||||||
|
|
||||||
private val intPlus =
|
|
||||||
intClass.findFirstFunction("plus") { KotlinTypeChecker.DEFAULT.equalTypes(it.valueParameters[0].type, intType) }
|
|
||||||
.let { context.symbolTable.referenceFunction(it) }
|
|
||||||
|
|
||||||
|
|
||||||
private fun MemberScope.findHashCodeFunctionOrNull() =
|
|
||||||
getContributedFunctions(Name.identifier("hashCode"), NoLookupLocation.FROM_BACKEND)
|
|
||||||
.find { it.valueParameters.isEmpty() }
|
|
||||||
|
|
||||||
private fun getHashCodeFunction(
|
|
||||||
type: KotlinType,
|
|
||||||
symbolResolve: (FunctionDescriptor) -> IrSimpleFunctionSymbol
|
|
||||||
): IrSimpleFunctionSymbol =
|
|
||||||
when (val typeConstructorDescriptor = type.constructor.declarationDescriptor) {
|
|
||||||
is ClassDescriptor ->
|
|
||||||
if (KotlinBuiltIns.isArrayOrPrimitiveArray(typeConstructorDescriptor))
|
|
||||||
context.irBuiltIns.dataClassArrayMemberHashCodeSymbol
|
|
||||||
else
|
|
||||||
symbolResolve(
|
|
||||||
type.memberScope.findHashCodeFunctionOrNull()
|
|
||||||
?: context.builtIns.any.unsubstitutedMemberScope.findHashCodeFunctionOrNull()!!
|
|
||||||
)
|
|
||||||
|
|
||||||
is TypeParameterDescriptor ->
|
|
||||||
getHashCodeFunction(typeConstructorDescriptor.representativeUpperBound, symbolResolve)
|
|
||||||
|
|
||||||
else ->
|
|
||||||
throw AssertionError("Unexpected type: $type")
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun generateHashCodeMethod(function: FunctionDescriptor, properties: List<PropertyDescriptor>) {
|
|
||||||
buildMember(function, declaration) {
|
|
||||||
val irIntType = context.irBuiltIns.intType
|
|
||||||
var result: IrExpression? = null
|
|
||||||
for (property in properties) {
|
|
||||||
val hashCodeOfProperty = getHashCodeOfProperty(property)
|
|
||||||
result = if (result == null) {
|
|
||||||
hashCodeOfProperty
|
|
||||||
} else {
|
|
||||||
val shiftedResult = irCallOp(intTimes, irIntType, result, irInt(31))
|
|
||||||
irCallOp(intPlus, irIntType, shiftedResult, hashCodeOfProperty)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
+irReturn(result ?: irInt(0))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun MemberFunctionBuilder.getHashCodeOfProperty(property: PropertyDescriptor): IrExpression {
|
|
||||||
val field = getBackingField(property)
|
|
||||||
val propertyType = property.type
|
|
||||||
return when {
|
|
||||||
propertyType.containsNull() ->
|
|
||||||
irIfNull(
|
|
||||||
context.irBuiltIns.intType,
|
|
||||||
irGetField(irThis(), field),
|
|
||||||
irInt(0),
|
|
||||||
getHashCodeOf(
|
|
||||||
propertyType,
|
|
||||||
irGetField(irThis(), field)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
else ->
|
|
||||||
getHashCodeOf(
|
|
||||||
propertyType,
|
|
||||||
irGetField(irThis(), field)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun MemberFunctionBuilder.getHashCodeOf(kotlinType: KotlinType, irValue: IrExpression): IrExpression {
|
|
||||||
var substituted: FunctionDescriptor? = null
|
|
||||||
val hashCodeFunctionSymbol = getHashCodeFunction(kotlinType) {
|
|
||||||
substituted = it
|
|
||||||
declarationGenerator.context.symbolTable.referenceSimpleFunction(it.original)
|
|
||||||
}
|
|
||||||
|
|
||||||
return irCall(hashCodeFunctionSymbol, context.irBuiltIns.intType).apply {
|
|
||||||
if (hashCodeFunctionSymbol.descriptor.dispatchReceiverParameter != null) {
|
|
||||||
dispatchReceiver = irValue
|
|
||||||
} else {
|
|
||||||
putValueArgument(0, irValue)
|
|
||||||
}
|
|
||||||
commitSubstituted(substituted ?: hashCodeFunctionSymbol.descriptor)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun generateToStringMethod(function: FunctionDescriptor, properties: List<PropertyDescriptor>) {
|
|
||||||
buildMember(function, declaration) {
|
|
||||||
val irConcat = irConcat()
|
|
||||||
irConcat.addArgument(irString(classDescriptor.name.asString() + "("))
|
|
||||||
var first = true
|
|
||||||
for (property in properties) {
|
|
||||||
if (!first) irConcat.addArgument(irString(", "))
|
|
||||||
|
|
||||||
irConcat.addArgument(irString(property.name.asString() + "="))
|
|
||||||
|
|
||||||
val irPropertyValue = irGetField(irThis(), getBackingField(property))
|
|
||||||
|
|
||||||
val typeConstructorDescriptor = property.type.constructor.declarationDescriptor
|
|
||||||
val irPropertyStringValue =
|
|
||||||
if (typeConstructorDescriptor is ClassDescriptor &&
|
|
||||||
KotlinBuiltIns.isArrayOrPrimitiveArray(typeConstructorDescriptor)
|
|
||||||
)
|
|
||||||
irCall(context.irBuiltIns.dataClassArrayMemberToStringSymbol, context.irBuiltIns.stringType).apply {
|
|
||||||
putValueArgument(0, irPropertyValue)
|
|
||||||
}
|
|
||||||
else
|
|
||||||
irPropertyValue
|
|
||||||
|
|
||||||
irConcat.addArgument(irPropertyStringValue)
|
|
||||||
first = false
|
|
||||||
}
|
|
||||||
irConcat.addArgument(irString(")"))
|
|
||||||
+irReturn(irConcat)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -22,7 +22,7 @@ import org.jetbrains.kotlin.ir.declarations.addMember
|
|||||||
import org.jetbrains.kotlin.ir.expressions.IrSyntheticBodyKind
|
import org.jetbrains.kotlin.ir.expressions.IrSyntheticBodyKind
|
||||||
import org.jetbrains.kotlin.ir.expressions.impl.IrSyntheticBodyImpl
|
import org.jetbrains.kotlin.ir.expressions.impl.IrSyntheticBodyImpl
|
||||||
import org.jetbrains.kotlin.ir.util.declareSimpleFunctionWithOverrides
|
import org.jetbrains.kotlin.ir.util.declareSimpleFunctionWithOverrides
|
||||||
import org.jetbrains.kotlin.psi2ir.findFirstFunction
|
import org.jetbrains.kotlin.ir.util.findFirstFunction
|
||||||
|
|
||||||
class EnumClassMembersGenerator(declarationGenerator: DeclarationGenerator) : DeclarationGeneratorExtension(declarationGenerator) {
|
class EnumClassMembersGenerator(declarationGenerator: DeclarationGenerator) : DeclarationGeneratorExtension(declarationGenerator) {
|
||||||
fun generateSpecialMembers(irClass: IrClass) {
|
fun generateSpecialMembers(irClass: IrClass) {
|
||||||
|
|||||||
@@ -0,0 +1,318 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.ir.util
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
||||||
|
import org.jetbrains.kotlin.descriptors.CallableDescriptor
|
||||||
|
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
||||||
|
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
|
||||||
|
import org.jetbrains.kotlin.descriptors.PropertyDescriptor
|
||||||
|
import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor
|
||||||
|
import org.jetbrains.kotlin.incremental.components.NoLookupLocation
|
||||||
|
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
|
||||||
|
import org.jetbrains.kotlin.ir.builders.IrBlockBodyBuilder
|
||||||
|
import org.jetbrains.kotlin.ir.builders.IrGeneratorContext
|
||||||
|
import org.jetbrains.kotlin.ir.builders.Scope
|
||||||
|
import org.jetbrains.kotlin.ir.builders.irAs
|
||||||
|
import org.jetbrains.kotlin.ir.builders.irCall
|
||||||
|
import org.jetbrains.kotlin.ir.builders.irCallOp
|
||||||
|
import org.jetbrains.kotlin.ir.builders.irConcat
|
||||||
|
import org.jetbrains.kotlin.ir.builders.irEqeqeq
|
||||||
|
import org.jetbrains.kotlin.ir.builders.irGet
|
||||||
|
import org.jetbrains.kotlin.ir.builders.irGetField
|
||||||
|
import org.jetbrains.kotlin.ir.builders.irIfNull
|
||||||
|
import org.jetbrains.kotlin.ir.builders.irIfThenReturnFalse
|
||||||
|
import org.jetbrains.kotlin.ir.builders.irIfThenReturnTrue
|
||||||
|
import org.jetbrains.kotlin.ir.builders.irInt
|
||||||
|
import org.jetbrains.kotlin.ir.builders.irNotEquals
|
||||||
|
import org.jetbrains.kotlin.ir.builders.irNotIs
|
||||||
|
import org.jetbrains.kotlin.ir.builders.irReturn
|
||||||
|
import org.jetbrains.kotlin.ir.builders.irReturnTrue
|
||||||
|
import org.jetbrains.kotlin.ir.builders.irString
|
||||||
|
import org.jetbrains.kotlin.ir.builders.irTemporary
|
||||||
|
import org.jetbrains.kotlin.ir.declarations.IrClass
|
||||||
|
import org.jetbrains.kotlin.ir.declarations.IrDeclaration
|
||||||
|
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
|
||||||
|
import org.jetbrains.kotlin.ir.declarations.IrField
|
||||||
|
import org.jetbrains.kotlin.ir.declarations.IrFunction
|
||||||
|
import org.jetbrains.kotlin.ir.expressions.IrExpression
|
||||||
|
import org.jetbrains.kotlin.ir.expressions.IrMemberAccessExpression
|
||||||
|
import org.jetbrains.kotlin.ir.expressions.impl.IrGetValueImpl
|
||||||
|
import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol
|
||||||
|
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
|
||||||
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
import org.jetbrains.kotlin.resolve.scopes.MemberScope
|
||||||
|
import org.jetbrains.kotlin.types.KotlinType
|
||||||
|
import org.jetbrains.kotlin.types.checker.KotlinTypeChecker
|
||||||
|
import org.jetbrains.kotlin.types.isNullable
|
||||||
|
import org.jetbrains.kotlin.types.typeUtil.representativeUpperBound
|
||||||
|
|
||||||
|
abstract class DataClassMembersGenerator(
|
||||||
|
val context: IrGeneratorContext,
|
||||||
|
val symbolTable: SymbolTable,
|
||||||
|
val irClass: IrClass,
|
||||||
|
val origin: IrDeclarationOrigin
|
||||||
|
) {
|
||||||
|
|
||||||
|
inline fun <T : IrDeclaration> T.buildWithScope(builder: (T) -> Unit): T =
|
||||||
|
also { irDeclaration ->
|
||||||
|
symbolTable.withScope(irDeclaration.descriptor) {
|
||||||
|
builder(irDeclaration)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private inner class MemberFunctionBuilder(
|
||||||
|
startOffset: Int = UNDEFINED_OFFSET,
|
||||||
|
endOffset: Int = UNDEFINED_OFFSET,
|
||||||
|
val irFunction: IrFunction
|
||||||
|
) : IrBlockBodyBuilder(context, Scope(irFunction.symbol), startOffset, endOffset) {
|
||||||
|
inline fun addToClass(builder: MemberFunctionBuilder.(IrFunction) -> Unit): IrFunction {
|
||||||
|
irFunction.buildWithScope {
|
||||||
|
builder(irFunction)
|
||||||
|
irFunction.body = doBuild()
|
||||||
|
}
|
||||||
|
|
||||||
|
irClass.declarations.add(irFunction)
|
||||||
|
return irFunction
|
||||||
|
}
|
||||||
|
|
||||||
|
fun irThis(): IrExpression {
|
||||||
|
val irDispatchReceiverParameter = irFunction.dispatchReceiverParameter!!
|
||||||
|
return IrGetValueImpl(
|
||||||
|
startOffset, endOffset,
|
||||||
|
irDispatchReceiverParameter.type,
|
||||||
|
irDispatchReceiverParameter.symbol
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun irOther(): IrExpression {
|
||||||
|
val irFirstParameter = irFunction.valueParameters[0]
|
||||||
|
return IrGetValueImpl(
|
||||||
|
startOffset, endOffset,
|
||||||
|
irFirstParameter.type,
|
||||||
|
irFirstParameter.symbol
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun generateEqualsMethodBody(properties: List<PropertyDescriptor>) {
|
||||||
|
val irType = irClass.defaultType
|
||||||
|
|
||||||
|
if (!irClass.isInline) {
|
||||||
|
+irIfThenReturnTrue(irEqeqeq(irThis(), irOther()))
|
||||||
|
}
|
||||||
|
+irIfThenReturnFalse(irNotIs(irOther(), irType))
|
||||||
|
val otherWithCast = irTemporary(irAs(irOther(), irType), "other_with_cast")
|
||||||
|
for (property in properties) {
|
||||||
|
val field = getBackingField(property)
|
||||||
|
val arg1 = irGetField(irThis(), field)
|
||||||
|
val arg2 = irGetField(irGet(irType, otherWithCast.symbol), field)
|
||||||
|
+irIfThenReturnFalse(irNotEquals(arg1, arg2))
|
||||||
|
}
|
||||||
|
+irReturnTrue()
|
||||||
|
}
|
||||||
|
|
||||||
|
private val intClass = context.builtIns.int
|
||||||
|
private val intType = context.builtIns.intType
|
||||||
|
|
||||||
|
private val intTimesSymbol: IrFunctionSymbol =
|
||||||
|
intClass.findFirstFunction("times") { KotlinTypeChecker.DEFAULT.equalTypes(it.valueParameters[0].type, intType) }
|
||||||
|
.let { symbolTable.referenceFunction(it) }
|
||||||
|
|
||||||
|
private val intPlusSymbol: IrFunctionSymbol =
|
||||||
|
intClass.findFirstFunction("plus") { KotlinTypeChecker.DEFAULT.equalTypes(it.valueParameters[0].type, intType) }
|
||||||
|
.let { symbolTable.referenceFunction(it) }
|
||||||
|
|
||||||
|
fun generateHashCodeMethodBody(properties: List<PropertyDescriptor>) {
|
||||||
|
val irIntType = context.irBuiltIns.intType
|
||||||
|
var result: IrExpression? = null
|
||||||
|
for (property in properties) {
|
||||||
|
val hashCodeOfProperty = getHashCodeOfProperty(property)
|
||||||
|
result = if (result == null) {
|
||||||
|
hashCodeOfProperty
|
||||||
|
} else {
|
||||||
|
val shiftedResult = irCallOp(intTimesSymbol, irIntType, result, irInt(31))
|
||||||
|
irCallOp(intPlusSymbol, irIntType, shiftedResult, hashCodeOfProperty)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
+irReturn(result ?: irInt(0))
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun getHashCodeOfProperty(property: PropertyDescriptor): IrExpression {
|
||||||
|
val field = getBackingField(property)
|
||||||
|
return when {
|
||||||
|
property.type.isNullable() ->
|
||||||
|
irIfNull(
|
||||||
|
context.irBuiltIns.intType,
|
||||||
|
irGetField(irThis(), field),
|
||||||
|
irInt(0),
|
||||||
|
getHashCodeOf(property, irGetField(irThis(), field))
|
||||||
|
)
|
||||||
|
else ->
|
||||||
|
getHashCodeOf(property, irGetField(irThis(), field))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun getHashCodeOf(property: PropertyDescriptor, irValue: IrExpression): IrExpression {
|
||||||
|
var substituted: FunctionDescriptor? = null
|
||||||
|
val hashCodeFunctionSymbol = getHashCodeFunction(property) {
|
||||||
|
substituted = it
|
||||||
|
symbolTable.referenceSimpleFunction(it.original)
|
||||||
|
}
|
||||||
|
|
||||||
|
return irCall(hashCodeFunctionSymbol, context.irBuiltIns.intType).apply {
|
||||||
|
if (hashCodeFunctionSymbol.descriptor.dispatchReceiverParameter != null) {
|
||||||
|
dispatchReceiver = irValue
|
||||||
|
} else {
|
||||||
|
putValueArgument(0, irValue)
|
||||||
|
}
|
||||||
|
commitSubstituted(this, substituted ?: hashCodeFunctionSymbol.descriptor)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun generateToStringMethodBody(properties: List<PropertyDescriptor>) {
|
||||||
|
val irConcat = irConcat()
|
||||||
|
irConcat.addArgument(irString(irClass.descriptor.name.asString() + "("))
|
||||||
|
var first = true
|
||||||
|
for (property in properties) {
|
||||||
|
if (!first) irConcat.addArgument(irString(", "))
|
||||||
|
|
||||||
|
irConcat.addArgument(irString(property.name.asString() + "="))
|
||||||
|
|
||||||
|
val irPropertyValue = irGetField(irThis(), getBackingField(property))
|
||||||
|
|
||||||
|
val typeConstructorDescriptor = property.type.constructor.declarationDescriptor
|
||||||
|
val irPropertyStringValue =
|
||||||
|
if (typeConstructorDescriptor is ClassDescriptor &&
|
||||||
|
KotlinBuiltIns.isArrayOrPrimitiveArray(typeConstructorDescriptor)
|
||||||
|
)
|
||||||
|
irCall(context.irBuiltIns.dataClassArrayMemberToStringSymbol, context.irBuiltIns.stringType).apply {
|
||||||
|
putValueArgument(0, irPropertyValue)
|
||||||
|
}
|
||||||
|
else
|
||||||
|
irPropertyValue
|
||||||
|
|
||||||
|
irConcat.addArgument(irPropertyStringValue)
|
||||||
|
first = false
|
||||||
|
}
|
||||||
|
irConcat.addArgument(irString(")"))
|
||||||
|
+irReturn(irConcat)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun getBackingField(property: PropertyDescriptor): IrField =
|
||||||
|
irClass.properties.single { it.descriptor == property }.backingField!!
|
||||||
|
|
||||||
|
abstract fun declareSimpleFunction(startOffset: Int, endOffset: Int, functionDescriptor: FunctionDescriptor): IrFunction
|
||||||
|
|
||||||
|
abstract fun generateSyntheticFunctionParameterDeclarations(irFunction: IrFunction)
|
||||||
|
|
||||||
|
// Build a member from a descriptor (psi2ir) as well as its body.
|
||||||
|
private inline fun buildMember(
|
||||||
|
function: FunctionDescriptor,
|
||||||
|
startOffset: Int = UNDEFINED_OFFSET,
|
||||||
|
endOffset: Int = UNDEFINED_OFFSET,
|
||||||
|
body: MemberFunctionBuilder.(IrFunction) -> Unit
|
||||||
|
) {
|
||||||
|
MemberFunctionBuilder(startOffset, endOffset, declareSimpleFunction(startOffset, endOffset, function)).addToClass { irFunction ->
|
||||||
|
irFunction.buildWithScope {
|
||||||
|
generateSyntheticFunctionParameterDeclarations(irFunction)
|
||||||
|
body(irFunction)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Use a prebuilt member (fir2ir) and build a member body for it.
|
||||||
|
private inline fun buildMember(
|
||||||
|
irFunction: IrFunction,
|
||||||
|
startOffset: Int = UNDEFINED_OFFSET,
|
||||||
|
endOffset: Int = UNDEFINED_OFFSET,
|
||||||
|
body: MemberFunctionBuilder.(IrFunction) -> Unit
|
||||||
|
) {
|
||||||
|
MemberFunctionBuilder(startOffset, endOffset, irFunction).addToClass { function ->
|
||||||
|
function.buildWithScope {
|
||||||
|
generateSyntheticFunctionParameterDeclarations(function)
|
||||||
|
body(function)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Entry for psi2ir
|
||||||
|
fun generateEqualsMethod(function: FunctionDescriptor, properties: List<PropertyDescriptor>) {
|
||||||
|
buildMember(function, irClass.startOffset, irClass.endOffset) {
|
||||||
|
generateEqualsMethodBody(properties)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Entry for fir2ir
|
||||||
|
fun generateEqualsMethod(irFunction: IrFunction, properties: List<PropertyDescriptor>) {
|
||||||
|
buildMember(irFunction, irClass.startOffset, irClass.endOffset) {
|
||||||
|
generateEqualsMethodBody(properties)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun MemberScope.findHashCodeFunctionOrNull() =
|
||||||
|
getContributedFunctions(Name.identifier("hashCode"), NoLookupLocation.FROM_BACKEND)
|
||||||
|
.find { it.valueParameters.isEmpty() }
|
||||||
|
|
||||||
|
private fun getHashCodeFunction(type: KotlinType): FunctionDescriptor =
|
||||||
|
type.memberScope.findHashCodeFunctionOrNull()
|
||||||
|
?: context.builtIns.any.unsubstitutedMemberScope.findHashCodeFunctionOrNull()!!
|
||||||
|
|
||||||
|
private fun getHashCodeFunction(
|
||||||
|
type: KotlinType,
|
||||||
|
symbolResolve: (FunctionDescriptor) -> IrSimpleFunctionSymbol
|
||||||
|
): IrSimpleFunctionSymbol =
|
||||||
|
when (val typeConstructorDescriptor = type.constructor.declarationDescriptor) {
|
||||||
|
is ClassDescriptor ->
|
||||||
|
if (KotlinBuiltIns.isArrayOrPrimitiveArray(typeConstructorDescriptor))
|
||||||
|
context.irBuiltIns.dataClassArrayMemberHashCodeSymbol
|
||||||
|
else
|
||||||
|
symbolResolve(getHashCodeFunction(type))
|
||||||
|
|
||||||
|
is TypeParameterDescriptor ->
|
||||||
|
getHashCodeFunction(typeConstructorDescriptor.representativeUpperBound, symbolResolve)
|
||||||
|
|
||||||
|
else ->
|
||||||
|
throw AssertionError("Unexpected type: $type")
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun getHashCodeFunction(
|
||||||
|
property: PropertyDescriptor,
|
||||||
|
symbolResolve: (FunctionDescriptor) -> IrSimpleFunctionSymbol
|
||||||
|
): IrSimpleFunctionSymbol =
|
||||||
|
getHashCodeFunction(property.type, symbolResolve)
|
||||||
|
|
||||||
|
abstract fun commitSubstituted(irMemberAccessExpression: IrMemberAccessExpression, descriptor: CallableDescriptor)
|
||||||
|
|
||||||
|
// Entry for psi2ir
|
||||||
|
fun generateHashCodeMethod(function: FunctionDescriptor, properties: List<PropertyDescriptor>) {
|
||||||
|
buildMember(function, irClass.startOffset, irClass.endOffset) {
|
||||||
|
generateHashCodeMethodBody(properties)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Entry for fir2ir
|
||||||
|
fun generateHashCodeMethod(irFunction: IrFunction, properties: List<PropertyDescriptor>) {
|
||||||
|
buildMember(irFunction, irClass.startOffset, irClass.endOffset) {
|
||||||
|
generateHashCodeMethodBody(properties)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Entry for psi2ir
|
||||||
|
fun generateToStringMethod(function: FunctionDescriptor, properties: List<PropertyDescriptor>) {
|
||||||
|
buildMember(function, irClass.startOffset, irClass.endOffset) {
|
||||||
|
generateToStringMethodBody(properties)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Entry for fir2ir
|
||||||
|
fun generateToStringMethod(irFunction: IrFunction, properties: List<PropertyDescriptor>) {
|
||||||
|
buildMember(irFunction, irClass.startOffset, irClass.endOffset) {
|
||||||
|
generateToStringMethodBody(properties)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.ir.util
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor
|
||||||
|
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
||||||
|
import org.jetbrains.kotlin.incremental.components.NoLookupLocation
|
||||||
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
import org.jetbrains.kotlin.resolve.scopes.MemberScope
|
||||||
|
|
||||||
|
inline fun ClassDescriptor.findFirstFunction(name: String, predicate: (CallableMemberDescriptor) -> Boolean) =
|
||||||
|
unsubstitutedMemberScope.findFirstFunction(name, predicate)
|
||||||
|
|
||||||
|
inline fun MemberScope.findFirstFunction(name: String, predicate: (CallableMemberDescriptor) -> Boolean) =
|
||||||
|
getContributedFunctions(Name.identifier(name), NoLookupLocation.FROM_BACKEND).first(predicate)
|
||||||
-1
@@ -1,4 +1,3 @@
|
|||||||
// IGNORE_BACKEND_FIR: JVM_IR
|
|
||||||
data class Box(var value: String)
|
data class Box(var value: String)
|
||||||
|
|
||||||
fun box(): String {
|
fun box(): String {
|
||||||
|
|||||||
-1
@@ -1,4 +1,3 @@
|
|||||||
// IGNORE_BACKEND_FIR: JVM_IR
|
|
||||||
data class Box(val value: String)
|
data class Box(val value: String)
|
||||||
|
|
||||||
var pr = Box("first")
|
var pr = Box("first")
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
// IGNORE_BACKEND_FIR: JVM_IR
|
|
||||||
data class Box(val value: String)
|
data class Box(val value: String)
|
||||||
|
|
||||||
val foo = Box("lol")
|
val foo = Box("lol")
|
||||||
|
|||||||
Vendored
-1
@@ -1,4 +1,3 @@
|
|||||||
// IGNORE_BACKEND_FIR: JVM_IR
|
|
||||||
// TARGET_BACKEND: JVM
|
// TARGET_BACKEND: JVM
|
||||||
// WITH_REFLECT
|
// WITH_REFLECT
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
// IGNORE_BACKEND_FIR: JVM_IR
|
|
||||||
// IGNORE_BACKEND: JS_IR
|
// IGNORE_BACKEND: JS_IR
|
||||||
// TODO: muted automatically, investigate should it be ran for JS or not
|
// TODO: muted automatically, investigate should it be ran for JS or not
|
||||||
// IGNORE_BACKEND: JS
|
// IGNORE_BACKEND: JS
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
// IGNORE_BACKEND_FIR: JVM_IR
|
||||||
data class A(val x: Int) {
|
data class A(val x: Int) {
|
||||||
override fun equals(other: Any?): Boolean = false
|
override fun equals(other: Any?): Boolean = false
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
// IGNORE_BACKEND_FIR: JVM_IR
|
|
||||||
data class A(val v: Array<Int>)
|
data class A(val v: Array<Int>)
|
||||||
|
|
||||||
fun box() : String {
|
fun box() : String {
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
// IGNORE_BACKEND_FIR: JVM_IR
|
|
||||||
data class A(val v: IntArray)
|
data class A(val v: IntArray)
|
||||||
|
|
||||||
fun box() : String {
|
fun box() : String {
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
// IGNORE_BACKEND_FIR: JVM_IR
|
|
||||||
// IGNORE_BACKEND: JS_IR
|
// IGNORE_BACKEND: JS_IR
|
||||||
// TODO: muted automatically, investigate should it be ran for JS or not
|
// TODO: muted automatically, investigate should it be ran for JS or not
|
||||||
// IGNORE_BACKEND: JS
|
// IGNORE_BACKEND: JS
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
// IGNORE_BACKEND_FIR: JVM_IR
|
||||||
data class A(val x: Int) {
|
data class A(val x: Int) {
|
||||||
override fun hashCode(): Int = -3
|
override fun hashCode(): Int = -3
|
||||||
}
|
}
|
||||||
|
|||||||
-1
@@ -1,4 +1,3 @@
|
|||||||
// IGNORE_BACKEND_FIR: JVM_IR
|
|
||||||
// TARGET_BACKEND: JVM
|
// TARGET_BACKEND: JVM
|
||||||
|
|
||||||
// WITH_RUNTIME
|
// WITH_RUNTIME
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
// IGNORE_BACKEND_FIR: JVM_IR
|
|
||||||
data class A(val a: Boolean)
|
data class A(val a: Boolean)
|
||||||
|
|
||||||
fun box() : String {
|
fun box() : String {
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
// IGNORE_BACKEND_FIR: JVM_IR
|
|
||||||
data class A(val a: Byte)
|
data class A(val a: Byte)
|
||||||
|
|
||||||
fun box() : String {
|
fun box() : String {
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
// IGNORE_BACKEND_FIR: JVM_IR
|
|
||||||
data class A(val a: Char)
|
data class A(val a: Char)
|
||||||
|
|
||||||
fun box() : String {
|
fun box() : String {
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
// IGNORE_BACKEND_FIR: JVM_IR
|
|
||||||
data class A(val a: Double)
|
data class A(val a: Double)
|
||||||
|
|
||||||
fun box() : String {
|
fun box() : String {
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
// IGNORE_BACKEND_FIR: JVM_IR
|
|
||||||
data class A(val a: Float)
|
data class A(val a: Float)
|
||||||
|
|
||||||
fun box() : String {
|
fun box() : String {
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
// IGNORE_BACKEND_FIR: JVM_IR
|
|
||||||
data class A<T>(val t: T)
|
data class A<T>(val t: T)
|
||||||
|
|
||||||
fun box(): String {
|
fun box(): String {
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
// IGNORE_BACKEND_FIR: JVM_IR
|
|
||||||
data class A(val a: Int)
|
data class A(val a: Int)
|
||||||
|
|
||||||
fun box() : String {
|
fun box() : String {
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
// IGNORE_BACKEND_FIR: JVM_IR
|
|
||||||
data class A(val a: Long)
|
data class A(val a: Long)
|
||||||
|
|
||||||
fun box() : String {
|
fun box() : String {
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
// IGNORE_BACKEND_FIR: JVM_IR
|
|
||||||
data class A(val a: Short)
|
data class A(val a: Short)
|
||||||
|
|
||||||
fun box() : String {
|
fun box() : String {
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
// IGNORE_BACKEND_FIR: JVM_IR
|
|
||||||
// TARGET_BACKEND: JVM
|
// TARGET_BACKEND: JVM
|
||||||
|
|
||||||
import java.io.Serializable
|
import java.io.Serializable
|
||||||
|
|||||||
+1
@@ -1,3 +1,4 @@
|
|||||||
|
// IGNORE_BACKEND_FIR: JVM_IR
|
||||||
abstract class Base {
|
abstract class Base {
|
||||||
final override fun toString() = "OK"
|
final override fun toString() = "OK"
|
||||||
final override fun hashCode() = 42
|
final override fun hashCode() = 42
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
// IGNORE_BACKEND_FIR: JVM_IR
|
|
||||||
// See KT-6206 Always generate hashCode() and equals() for data classes even if base classes have non-trivial analogs
|
// See KT-6206 Always generate hashCode() and equals() for data classes even if base classes have non-trivial analogs
|
||||||
|
|
||||||
abstract class Base {
|
abstract class Base {
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
// IGNORE_BACKEND_FIR: JVM_IR
|
|
||||||
data class D(private val x: Long, private val y: Char) {
|
data class D(private val x: Long, private val y: Char) {
|
||||||
fun foo() = "${component1()}${component2()}"
|
fun foo() = "${component1()}${component2()}"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
// IGNORE_BACKEND_FIR: JVM_IR
|
||||||
data class A(val x: Int) {
|
data class A(val x: Int) {
|
||||||
override fun toString(): String = "!"
|
override fun toString(): String = "!"
|
||||||
}
|
}
|
||||||
|
|||||||
-1
@@ -1,4 +1,3 @@
|
|||||||
// IGNORE_BACKEND_FIR: JVM_IR
|
|
||||||
// TARGET_BACKEND: JVM
|
// TARGET_BACKEND: JVM
|
||||||
|
|
||||||
// WITH_RUNTIME
|
// WITH_RUNTIME
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
// IGNORE_BACKEND_FIR: JVM_IR
|
|
||||||
// IGNORE_BACKEND: JS_IR
|
// IGNORE_BACKEND: JS_IR
|
||||||
// TODO: muted automatically, investigate should it be ran for JS or not
|
// TODO: muted automatically, investigate should it be ran for JS or not
|
||||||
// IGNORE_BACKEND: JS
|
// IGNORE_BACKEND: JS
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
// IGNORE_BACKEND_FIR: JVM_IR
|
|
||||||
data class A(var string: String)
|
data class A(var string: String)
|
||||||
|
|
||||||
fun box(): String {
|
fun box(): String {
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
// IGNORE_BACKEND_FIR: JVM_IR
|
|
||||||
data class A<T>(val x: T)
|
data class A<T>(val x: T)
|
||||||
|
|
||||||
fun box(): String {
|
fun box(): String {
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
// IGNORE_BACKEND_FIR: JVM_IR
|
|
||||||
data class A(var x: Int, val z: Int?)
|
data class A(var x: Int, val z: Int?)
|
||||||
|
|
||||||
fun box(): String {
|
fun box(): String {
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
// IGNORE_BACKEND_FIR: JVM_IR
|
|
||||||
data class A(val x: Unit)
|
data class A(val x: Unit)
|
||||||
|
|
||||||
fun box(): String {
|
fun box(): String {
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
// IGNORE_BACKEND_FIR: JVM_IR
|
|
||||||
// TARGET_BACKEND: JVM
|
// TARGET_BACKEND: JVM
|
||||||
// WITH_RUNTIME
|
// WITH_RUNTIME
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
// IGNORE_BACKEND_FIR: JVM_IR
|
|
||||||
data class Test(val z1: Double, val z2: Double?)
|
data class Test(val z1: Double, val z2: Double?)
|
||||||
|
|
||||||
fun box(): String {
|
fun box(): String {
|
||||||
|
|||||||
-1
@@ -1,4 +1,3 @@
|
|||||||
// IGNORE_BACKEND_FIR: JVM_IR
|
|
||||||
// IGNORE_BACKEND: JS_IR
|
// IGNORE_BACKEND: JS_IR
|
||||||
// TODO: muted automatically, investigate should it be ran for JS or not
|
// TODO: muted automatically, investigate should it be ran for JS or not
|
||||||
// IGNORE_BACKEND: JS, NATIVE
|
// IGNORE_BACKEND: JS, NATIVE
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
// IGNORE_BACKEND_FIR: JVM_IR
|
|
||||||
// IGNORE_BACKEND: JS_IR
|
// IGNORE_BACKEND: JS_IR
|
||||||
// TODO: muted automatically, investigate should it be ran for JS or not
|
// TODO: muted automatically, investigate should it be ran for JS or not
|
||||||
// IGNORE_BACKEND: JS, NATIVE
|
// IGNORE_BACKEND: JS, NATIVE
|
||||||
|
|||||||
-1
@@ -1,4 +1,3 @@
|
|||||||
// IGNORE_BACKEND_FIR: JVM_IR
|
|
||||||
// IGNORE_BACKEND: JS_IR
|
// IGNORE_BACKEND: JS_IR
|
||||||
// TODO: muted automatically, investigate should it be ran for JS or not
|
// TODO: muted automatically, investigate should it be ran for JS or not
|
||||||
// IGNORE_BACKEND: JS, NATIVE
|
// IGNORE_BACKEND: JS, NATIVE
|
||||||
|
|||||||
-1
@@ -1,4 +1,3 @@
|
|||||||
// IGNORE_BACKEND_FIR: JVM_IR
|
|
||||||
var log = ""
|
var log = ""
|
||||||
|
|
||||||
fun foo(): Int {
|
fun foo(): Int {
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
// IGNORE_BACKEND_FIR: JVM_IR
|
|
||||||
class Binder() {
|
class Binder() {
|
||||||
lateinit var bindee: Container<*>
|
lateinit var bindee: Container<*>
|
||||||
|
|
||||||
|
|||||||
@@ -206,19 +206,224 @@ FILE fqName:<root> fileName:/dataClassWithArrayMembers.kt
|
|||||||
CALL 'public final fun <get-doubleArray> (): kotlin.DoubleArray declared in <root>.Test1' type=kotlin.DoubleArray origin=GET_PROPERTY
|
CALL 'public final fun <get-doubleArray> (): kotlin.DoubleArray declared in <root>.Test1' type=kotlin.DoubleArray origin=GET_PROPERTY
|
||||||
$this: GET_VAR '<this>: <root>.Test1 declared in <root>.Test1.copy' type=<root>.Test1 origin=null
|
$this: GET_VAR '<this>: <root>.Test1 declared in <root>.Test1.copy' type=<root>.Test1 origin=null
|
||||||
BLOCK_BODY
|
BLOCK_BODY
|
||||||
FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator]
|
FUN GENERATED_DATA_CLASS_MEMBER name:equals visibility:public modality:OPEN <> ($this:<root>.Test1, other:kotlin.Any?) returnType:kotlin.Boolean
|
||||||
overridden:
|
$this: VALUE_PARAMETER GENERATED_DATA_CLASS_MEMBER name:<this> type:<root>.Test1
|
||||||
public open fun equals (other: kotlin.Any?): kotlin.Boolean [operator] declared in kotlin.Any
|
VALUE_PARAMETER GENERATED_DATA_CLASS_MEMBER name:other index:0 type:kotlin.Any?
|
||||||
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
|
BLOCK_BODY
|
||||||
VALUE_PARAMETER name:other index:0 type:kotlin.Any?
|
WHEN type=kotlin.Unit origin=null
|
||||||
FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override]
|
BRANCH
|
||||||
overridden:
|
if: CALL 'public final fun EQEQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EQEQEQ
|
||||||
public open fun hashCode (): kotlin.Int declared in kotlin.Any
|
arg0: GET_VAR '<this>: <root>.Test1 declared in <root>.Test1.equals' type=<root>.Test1 origin=null
|
||||||
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
|
arg1: GET_VAR 'other: kotlin.Any? declared in <root>.Test1.equals' type=kotlin.Any? origin=null
|
||||||
FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String [fake_override]
|
then: RETURN type=kotlin.Nothing from='public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in <root>.Test1'
|
||||||
overridden:
|
CONST Boolean type=kotlin.Boolean value=true
|
||||||
public open fun toString (): kotlin.String declared in kotlin.Any
|
WHEN type=kotlin.Unit origin=null
|
||||||
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
|
BRANCH
|
||||||
|
if: TYPE_OP type=kotlin.Boolean origin=NOT_INSTANCEOF typeOperand=<root>.Test1
|
||||||
|
GET_VAR 'other: kotlin.Any? declared in <root>.Test1.equals' type=kotlin.Any? origin=null
|
||||||
|
then: RETURN type=kotlin.Nothing from='public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in <root>.Test1'
|
||||||
|
CONST Boolean type=kotlin.Boolean value=false
|
||||||
|
VAR IR_TEMPORARY_VARIABLE name:tmp_0 type:<root>.Test1 [val]
|
||||||
|
TYPE_OP type=<root>.Test1 origin=CAST typeOperand=<root>.Test1
|
||||||
|
GET_VAR 'other: kotlin.Any? declared in <root>.Test1.equals' type=kotlin.Any? origin=null
|
||||||
|
WHEN type=kotlin.Unit origin=null
|
||||||
|
BRANCH
|
||||||
|
if: CALL 'public final fun not (): kotlin.Boolean [operator] declared in kotlin.Boolean' type=kotlin.Boolean origin=EXCLEQ
|
||||||
|
$this: CALL 'public final fun EQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EXCLEQ
|
||||||
|
arg0: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:stringArray type:kotlin.Array<kotlin.String> visibility:private [final]' type=kotlin.Array<kotlin.String> origin=null
|
||||||
|
receiver: GET_VAR '<this>: <root>.Test1 declared in <root>.Test1.equals' type=<root>.Test1 origin=null
|
||||||
|
arg1: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:stringArray type:kotlin.Array<kotlin.String> visibility:private [final]' type=kotlin.Array<kotlin.String> origin=null
|
||||||
|
receiver: GET_VAR 'val tmp_0: <root>.Test1 [val] declared in <root>.Test1.equals' type=<root>.Test1 origin=null
|
||||||
|
then: RETURN type=kotlin.Nothing from='public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in <root>.Test1'
|
||||||
|
CONST Boolean type=kotlin.Boolean value=false
|
||||||
|
WHEN type=kotlin.Unit origin=null
|
||||||
|
BRANCH
|
||||||
|
if: CALL 'public final fun not (): kotlin.Boolean [operator] declared in kotlin.Boolean' type=kotlin.Boolean origin=EXCLEQ
|
||||||
|
$this: CALL 'public final fun EQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EXCLEQ
|
||||||
|
arg0: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:charArray type:kotlin.CharArray visibility:private [final]' type=kotlin.CharArray origin=null
|
||||||
|
receiver: GET_VAR '<this>: <root>.Test1 declared in <root>.Test1.equals' type=<root>.Test1 origin=null
|
||||||
|
arg1: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:charArray type:kotlin.CharArray visibility:private [final]' type=kotlin.CharArray origin=null
|
||||||
|
receiver: GET_VAR 'val tmp_0: <root>.Test1 [val] declared in <root>.Test1.equals' type=<root>.Test1 origin=null
|
||||||
|
then: RETURN type=kotlin.Nothing from='public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in <root>.Test1'
|
||||||
|
CONST Boolean type=kotlin.Boolean value=false
|
||||||
|
WHEN type=kotlin.Unit origin=null
|
||||||
|
BRANCH
|
||||||
|
if: CALL 'public final fun not (): kotlin.Boolean [operator] declared in kotlin.Boolean' type=kotlin.Boolean origin=EXCLEQ
|
||||||
|
$this: CALL 'public final fun EQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EXCLEQ
|
||||||
|
arg0: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:booleanArray type:kotlin.BooleanArray visibility:private [final]' type=kotlin.BooleanArray origin=null
|
||||||
|
receiver: GET_VAR '<this>: <root>.Test1 declared in <root>.Test1.equals' type=<root>.Test1 origin=null
|
||||||
|
arg1: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:booleanArray type:kotlin.BooleanArray visibility:private [final]' type=kotlin.BooleanArray origin=null
|
||||||
|
receiver: GET_VAR 'val tmp_0: <root>.Test1 [val] declared in <root>.Test1.equals' type=<root>.Test1 origin=null
|
||||||
|
then: RETURN type=kotlin.Nothing from='public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in <root>.Test1'
|
||||||
|
CONST Boolean type=kotlin.Boolean value=false
|
||||||
|
WHEN type=kotlin.Unit origin=null
|
||||||
|
BRANCH
|
||||||
|
if: CALL 'public final fun not (): kotlin.Boolean [operator] declared in kotlin.Boolean' type=kotlin.Boolean origin=EXCLEQ
|
||||||
|
$this: CALL 'public final fun EQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EXCLEQ
|
||||||
|
arg0: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:byteArray type:kotlin.ByteArray visibility:private [final]' type=kotlin.ByteArray origin=null
|
||||||
|
receiver: GET_VAR '<this>: <root>.Test1 declared in <root>.Test1.equals' type=<root>.Test1 origin=null
|
||||||
|
arg1: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:byteArray type:kotlin.ByteArray visibility:private [final]' type=kotlin.ByteArray origin=null
|
||||||
|
receiver: GET_VAR 'val tmp_0: <root>.Test1 [val] declared in <root>.Test1.equals' type=<root>.Test1 origin=null
|
||||||
|
then: RETURN type=kotlin.Nothing from='public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in <root>.Test1'
|
||||||
|
CONST Boolean type=kotlin.Boolean value=false
|
||||||
|
WHEN type=kotlin.Unit origin=null
|
||||||
|
BRANCH
|
||||||
|
if: CALL 'public final fun not (): kotlin.Boolean [operator] declared in kotlin.Boolean' type=kotlin.Boolean origin=EXCLEQ
|
||||||
|
$this: CALL 'public final fun EQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EXCLEQ
|
||||||
|
arg0: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:shortArray type:kotlin.ShortArray visibility:private [final]' type=kotlin.ShortArray origin=null
|
||||||
|
receiver: GET_VAR '<this>: <root>.Test1 declared in <root>.Test1.equals' type=<root>.Test1 origin=null
|
||||||
|
arg1: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:shortArray type:kotlin.ShortArray visibility:private [final]' type=kotlin.ShortArray origin=null
|
||||||
|
receiver: GET_VAR 'val tmp_0: <root>.Test1 [val] declared in <root>.Test1.equals' type=<root>.Test1 origin=null
|
||||||
|
then: RETURN type=kotlin.Nothing from='public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in <root>.Test1'
|
||||||
|
CONST Boolean type=kotlin.Boolean value=false
|
||||||
|
WHEN type=kotlin.Unit origin=null
|
||||||
|
BRANCH
|
||||||
|
if: CALL 'public final fun not (): kotlin.Boolean [operator] declared in kotlin.Boolean' type=kotlin.Boolean origin=EXCLEQ
|
||||||
|
$this: CALL 'public final fun EQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EXCLEQ
|
||||||
|
arg0: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:intArray type:kotlin.IntArray visibility:private [final]' type=kotlin.IntArray origin=null
|
||||||
|
receiver: GET_VAR '<this>: <root>.Test1 declared in <root>.Test1.equals' type=<root>.Test1 origin=null
|
||||||
|
arg1: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:intArray type:kotlin.IntArray visibility:private [final]' type=kotlin.IntArray origin=null
|
||||||
|
receiver: GET_VAR 'val tmp_0: <root>.Test1 [val] declared in <root>.Test1.equals' type=<root>.Test1 origin=null
|
||||||
|
then: RETURN type=kotlin.Nothing from='public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in <root>.Test1'
|
||||||
|
CONST Boolean type=kotlin.Boolean value=false
|
||||||
|
WHEN type=kotlin.Unit origin=null
|
||||||
|
BRANCH
|
||||||
|
if: CALL 'public final fun not (): kotlin.Boolean [operator] declared in kotlin.Boolean' type=kotlin.Boolean origin=EXCLEQ
|
||||||
|
$this: CALL 'public final fun EQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EXCLEQ
|
||||||
|
arg0: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:longArray type:kotlin.LongArray visibility:private [final]' type=kotlin.LongArray origin=null
|
||||||
|
receiver: GET_VAR '<this>: <root>.Test1 declared in <root>.Test1.equals' type=<root>.Test1 origin=null
|
||||||
|
arg1: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:longArray type:kotlin.LongArray visibility:private [final]' type=kotlin.LongArray origin=null
|
||||||
|
receiver: GET_VAR 'val tmp_0: <root>.Test1 [val] declared in <root>.Test1.equals' type=<root>.Test1 origin=null
|
||||||
|
then: RETURN type=kotlin.Nothing from='public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in <root>.Test1'
|
||||||
|
CONST Boolean type=kotlin.Boolean value=false
|
||||||
|
WHEN type=kotlin.Unit origin=null
|
||||||
|
BRANCH
|
||||||
|
if: CALL 'public final fun not (): kotlin.Boolean [operator] declared in kotlin.Boolean' type=kotlin.Boolean origin=EXCLEQ
|
||||||
|
$this: CALL 'public final fun EQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EXCLEQ
|
||||||
|
arg0: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:floatArray type:kotlin.FloatArray visibility:private [final]' type=kotlin.FloatArray origin=null
|
||||||
|
receiver: GET_VAR '<this>: <root>.Test1 declared in <root>.Test1.equals' type=<root>.Test1 origin=null
|
||||||
|
arg1: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:floatArray type:kotlin.FloatArray visibility:private [final]' type=kotlin.FloatArray origin=null
|
||||||
|
receiver: GET_VAR 'val tmp_0: <root>.Test1 [val] declared in <root>.Test1.equals' type=<root>.Test1 origin=null
|
||||||
|
then: RETURN type=kotlin.Nothing from='public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in <root>.Test1'
|
||||||
|
CONST Boolean type=kotlin.Boolean value=false
|
||||||
|
WHEN type=kotlin.Unit origin=null
|
||||||
|
BRANCH
|
||||||
|
if: CALL 'public final fun not (): kotlin.Boolean [operator] declared in kotlin.Boolean' type=kotlin.Boolean origin=EXCLEQ
|
||||||
|
$this: CALL 'public final fun EQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EXCLEQ
|
||||||
|
arg0: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:doubleArray type:kotlin.DoubleArray visibility:private [final]' type=kotlin.DoubleArray origin=null
|
||||||
|
receiver: GET_VAR '<this>: <root>.Test1 declared in <root>.Test1.equals' type=<root>.Test1 origin=null
|
||||||
|
arg1: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:doubleArray type:kotlin.DoubleArray visibility:private [final]' type=kotlin.DoubleArray origin=null
|
||||||
|
receiver: GET_VAR 'val tmp_0: <root>.Test1 [val] declared in <root>.Test1.equals' type=<root>.Test1 origin=null
|
||||||
|
then: RETURN type=kotlin.Nothing from='public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in <root>.Test1'
|
||||||
|
CONST Boolean type=kotlin.Boolean value=false
|
||||||
|
RETURN type=kotlin.Nothing from='public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in <root>.Test1'
|
||||||
|
CONST Boolean type=kotlin.Boolean value=true
|
||||||
|
FUN GENERATED_DATA_CLASS_MEMBER name:hashCode visibility:public modality:OPEN <> ($this:<root>.Test1) returnType:kotlin.Int
|
||||||
|
$this: VALUE_PARAMETER GENERATED_DATA_CLASS_MEMBER name:<this> type:<root>.Test1
|
||||||
|
BLOCK_BODY
|
||||||
|
RETURN type=kotlin.Nothing from='public open fun hashCode (): kotlin.Int declared in <root>.Test1'
|
||||||
|
CALL 'public final fun plus (other: kotlin.Int): kotlin.Int [operator] declared in kotlin.Int' type=kotlin.Int origin=null
|
||||||
|
$this: CALL 'public final fun times (other: kotlin.Int): kotlin.Int [operator] declared in kotlin.Int' type=kotlin.Int origin=null
|
||||||
|
$this: CALL 'public final fun plus (other: kotlin.Int): kotlin.Int [operator] declared in kotlin.Int' type=kotlin.Int origin=null
|
||||||
|
$this: CALL 'public final fun times (other: kotlin.Int): kotlin.Int [operator] declared in kotlin.Int' type=kotlin.Int origin=null
|
||||||
|
$this: CALL 'public final fun plus (other: kotlin.Int): kotlin.Int [operator] declared in kotlin.Int' type=kotlin.Int origin=null
|
||||||
|
$this: CALL 'public final fun times (other: kotlin.Int): kotlin.Int [operator] declared in kotlin.Int' type=kotlin.Int origin=null
|
||||||
|
$this: CALL 'public final fun plus (other: kotlin.Int): kotlin.Int [operator] declared in kotlin.Int' type=kotlin.Int origin=null
|
||||||
|
$this: CALL 'public final fun times (other: kotlin.Int): kotlin.Int [operator] declared in kotlin.Int' type=kotlin.Int origin=null
|
||||||
|
$this: CALL 'public final fun plus (other: kotlin.Int): kotlin.Int [operator] declared in kotlin.Int' type=kotlin.Int origin=null
|
||||||
|
$this: CALL 'public final fun times (other: kotlin.Int): kotlin.Int [operator] declared in kotlin.Int' type=kotlin.Int origin=null
|
||||||
|
$this: CALL 'public final fun plus (other: kotlin.Int): kotlin.Int [operator] declared in kotlin.Int' type=kotlin.Int origin=null
|
||||||
|
$this: CALL 'public final fun times (other: kotlin.Int): kotlin.Int [operator] declared in kotlin.Int' type=kotlin.Int origin=null
|
||||||
|
$this: CALL 'public final fun plus (other: kotlin.Int): kotlin.Int [operator] declared in kotlin.Int' type=kotlin.Int origin=null
|
||||||
|
$this: CALL 'public final fun times (other: kotlin.Int): kotlin.Int [operator] declared in kotlin.Int' type=kotlin.Int origin=null
|
||||||
|
$this: CALL 'public final fun plus (other: kotlin.Int): kotlin.Int [operator] declared in kotlin.Int' type=kotlin.Int origin=null
|
||||||
|
$this: CALL 'public final fun times (other: kotlin.Int): kotlin.Int [operator] declared in kotlin.Int' type=kotlin.Int origin=null
|
||||||
|
$this: CALL 'public final fun dataClassArrayMemberHashCode (arg0: kotlin.Any): kotlin.Int declared in kotlin.internal.ir' type=kotlin.Int origin=null
|
||||||
|
arg0: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:stringArray type:kotlin.Array<kotlin.String> visibility:private [final]' type=kotlin.Array<kotlin.String> origin=null
|
||||||
|
receiver: GET_VAR '<this>: <root>.Test1 declared in <root>.Test1.hashCode' type=<root>.Test1 origin=null
|
||||||
|
other: CONST Int type=kotlin.Int value=31
|
||||||
|
other: CALL 'public final fun dataClassArrayMemberHashCode (arg0: kotlin.Any): kotlin.Int declared in kotlin.internal.ir' type=kotlin.Int origin=null
|
||||||
|
arg0: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:charArray type:kotlin.CharArray visibility:private [final]' type=kotlin.CharArray origin=null
|
||||||
|
receiver: GET_VAR '<this>: <root>.Test1 declared in <root>.Test1.hashCode' type=<root>.Test1 origin=null
|
||||||
|
other: CONST Int type=kotlin.Int value=31
|
||||||
|
other: CALL 'public final fun dataClassArrayMemberHashCode (arg0: kotlin.Any): kotlin.Int declared in kotlin.internal.ir' type=kotlin.Int origin=null
|
||||||
|
arg0: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:booleanArray type:kotlin.BooleanArray visibility:private [final]' type=kotlin.BooleanArray origin=null
|
||||||
|
receiver: GET_VAR '<this>: <root>.Test1 declared in <root>.Test1.hashCode' type=<root>.Test1 origin=null
|
||||||
|
other: CONST Int type=kotlin.Int value=31
|
||||||
|
other: CALL 'public final fun dataClassArrayMemberHashCode (arg0: kotlin.Any): kotlin.Int declared in kotlin.internal.ir' type=kotlin.Int origin=null
|
||||||
|
arg0: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:byteArray type:kotlin.ByteArray visibility:private [final]' type=kotlin.ByteArray origin=null
|
||||||
|
receiver: GET_VAR '<this>: <root>.Test1 declared in <root>.Test1.hashCode' type=<root>.Test1 origin=null
|
||||||
|
other: CONST Int type=kotlin.Int value=31
|
||||||
|
other: CALL 'public final fun dataClassArrayMemberHashCode (arg0: kotlin.Any): kotlin.Int declared in kotlin.internal.ir' type=kotlin.Int origin=null
|
||||||
|
arg0: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:shortArray type:kotlin.ShortArray visibility:private [final]' type=kotlin.ShortArray origin=null
|
||||||
|
receiver: GET_VAR '<this>: <root>.Test1 declared in <root>.Test1.hashCode' type=<root>.Test1 origin=null
|
||||||
|
other: CONST Int type=kotlin.Int value=31
|
||||||
|
other: CALL 'public final fun dataClassArrayMemberHashCode (arg0: kotlin.Any): kotlin.Int declared in kotlin.internal.ir' type=kotlin.Int origin=null
|
||||||
|
arg0: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:intArray type:kotlin.IntArray visibility:private [final]' type=kotlin.IntArray origin=null
|
||||||
|
receiver: GET_VAR '<this>: <root>.Test1 declared in <root>.Test1.hashCode' type=<root>.Test1 origin=null
|
||||||
|
other: CONST Int type=kotlin.Int value=31
|
||||||
|
other: CALL 'public final fun dataClassArrayMemberHashCode (arg0: kotlin.Any): kotlin.Int declared in kotlin.internal.ir' type=kotlin.Int origin=null
|
||||||
|
arg0: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:longArray type:kotlin.LongArray visibility:private [final]' type=kotlin.LongArray origin=null
|
||||||
|
receiver: GET_VAR '<this>: <root>.Test1 declared in <root>.Test1.hashCode' type=<root>.Test1 origin=null
|
||||||
|
other: CONST Int type=kotlin.Int value=31
|
||||||
|
other: CALL 'public final fun dataClassArrayMemberHashCode (arg0: kotlin.Any): kotlin.Int declared in kotlin.internal.ir' type=kotlin.Int origin=null
|
||||||
|
arg0: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:floatArray type:kotlin.FloatArray visibility:private [final]' type=kotlin.FloatArray origin=null
|
||||||
|
receiver: GET_VAR '<this>: <root>.Test1 declared in <root>.Test1.hashCode' type=<root>.Test1 origin=null
|
||||||
|
other: CONST Int type=kotlin.Int value=31
|
||||||
|
other: CALL 'public final fun dataClassArrayMemberHashCode (arg0: kotlin.Any): kotlin.Int declared in kotlin.internal.ir' type=kotlin.Int origin=null
|
||||||
|
arg0: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:doubleArray type:kotlin.DoubleArray visibility:private [final]' type=kotlin.DoubleArray origin=null
|
||||||
|
receiver: GET_VAR '<this>: <root>.Test1 declared in <root>.Test1.hashCode' type=<root>.Test1 origin=null
|
||||||
|
FUN GENERATED_DATA_CLASS_MEMBER name:toString visibility:public modality:OPEN <> ($this:<root>.Test1) returnType:kotlin.String
|
||||||
|
$this: VALUE_PARAMETER GENERATED_DATA_CLASS_MEMBER name:<this> type:<root>.Test1
|
||||||
|
BLOCK_BODY
|
||||||
|
RETURN type=kotlin.Nothing from='public open fun toString (): kotlin.String declared in <root>.Test1'
|
||||||
|
STRING_CONCATENATION type=kotlin.String
|
||||||
|
CONST String type=kotlin.String value="Test1("
|
||||||
|
CONST String type=kotlin.String value="stringArray="
|
||||||
|
CALL 'public final fun dataClassArrayMemberToString (arg0: kotlin.Any?): kotlin.String declared in kotlin.internal.ir' type=kotlin.String origin=null
|
||||||
|
arg0: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:stringArray type:kotlin.Array<kotlin.String> visibility:private [final]' type=kotlin.Array<kotlin.String> origin=null
|
||||||
|
receiver: GET_VAR '<this>: <root>.Test1 declared in <root>.Test1.toString' type=<root>.Test1 origin=null
|
||||||
|
CONST String type=kotlin.String value=", "
|
||||||
|
CONST String type=kotlin.String value="charArray="
|
||||||
|
CALL 'public final fun dataClassArrayMemberToString (arg0: kotlin.Any?): kotlin.String declared in kotlin.internal.ir' type=kotlin.String origin=null
|
||||||
|
arg0: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:charArray type:kotlin.CharArray visibility:private [final]' type=kotlin.CharArray origin=null
|
||||||
|
receiver: GET_VAR '<this>: <root>.Test1 declared in <root>.Test1.toString' type=<root>.Test1 origin=null
|
||||||
|
CONST String type=kotlin.String value=", "
|
||||||
|
CONST String type=kotlin.String value="booleanArray="
|
||||||
|
CALL 'public final fun dataClassArrayMemberToString (arg0: kotlin.Any?): kotlin.String declared in kotlin.internal.ir' type=kotlin.String origin=null
|
||||||
|
arg0: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:booleanArray type:kotlin.BooleanArray visibility:private [final]' type=kotlin.BooleanArray origin=null
|
||||||
|
receiver: GET_VAR '<this>: <root>.Test1 declared in <root>.Test1.toString' type=<root>.Test1 origin=null
|
||||||
|
CONST String type=kotlin.String value=", "
|
||||||
|
CONST String type=kotlin.String value="byteArray="
|
||||||
|
CALL 'public final fun dataClassArrayMemberToString (arg0: kotlin.Any?): kotlin.String declared in kotlin.internal.ir' type=kotlin.String origin=null
|
||||||
|
arg0: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:byteArray type:kotlin.ByteArray visibility:private [final]' type=kotlin.ByteArray origin=null
|
||||||
|
receiver: GET_VAR '<this>: <root>.Test1 declared in <root>.Test1.toString' type=<root>.Test1 origin=null
|
||||||
|
CONST String type=kotlin.String value=", "
|
||||||
|
CONST String type=kotlin.String value="shortArray="
|
||||||
|
CALL 'public final fun dataClassArrayMemberToString (arg0: kotlin.Any?): kotlin.String declared in kotlin.internal.ir' type=kotlin.String origin=null
|
||||||
|
arg0: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:shortArray type:kotlin.ShortArray visibility:private [final]' type=kotlin.ShortArray origin=null
|
||||||
|
receiver: GET_VAR '<this>: <root>.Test1 declared in <root>.Test1.toString' type=<root>.Test1 origin=null
|
||||||
|
CONST String type=kotlin.String value=", "
|
||||||
|
CONST String type=kotlin.String value="intArray="
|
||||||
|
CALL 'public final fun dataClassArrayMemberToString (arg0: kotlin.Any?): kotlin.String declared in kotlin.internal.ir' type=kotlin.String origin=null
|
||||||
|
arg0: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:intArray type:kotlin.IntArray visibility:private [final]' type=kotlin.IntArray origin=null
|
||||||
|
receiver: GET_VAR '<this>: <root>.Test1 declared in <root>.Test1.toString' type=<root>.Test1 origin=null
|
||||||
|
CONST String type=kotlin.String value=", "
|
||||||
|
CONST String type=kotlin.String value="longArray="
|
||||||
|
CALL 'public final fun dataClassArrayMemberToString (arg0: kotlin.Any?): kotlin.String declared in kotlin.internal.ir' type=kotlin.String origin=null
|
||||||
|
arg0: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:longArray type:kotlin.LongArray visibility:private [final]' type=kotlin.LongArray origin=null
|
||||||
|
receiver: GET_VAR '<this>: <root>.Test1 declared in <root>.Test1.toString' type=<root>.Test1 origin=null
|
||||||
|
CONST String type=kotlin.String value=", "
|
||||||
|
CONST String type=kotlin.String value="floatArray="
|
||||||
|
CALL 'public final fun dataClassArrayMemberToString (arg0: kotlin.Any?): kotlin.String declared in kotlin.internal.ir' type=kotlin.String origin=null
|
||||||
|
arg0: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:floatArray type:kotlin.FloatArray visibility:private [final]' type=kotlin.FloatArray origin=null
|
||||||
|
receiver: GET_VAR '<this>: <root>.Test1 declared in <root>.Test1.toString' type=<root>.Test1 origin=null
|
||||||
|
CONST String type=kotlin.String value=", "
|
||||||
|
CONST String type=kotlin.String value="doubleArray="
|
||||||
|
CALL 'public final fun dataClassArrayMemberToString (arg0: kotlin.Any?): kotlin.String declared in kotlin.internal.ir' type=kotlin.String origin=null
|
||||||
|
arg0: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:doubleArray type:kotlin.DoubleArray visibility:private [final]' type=kotlin.DoubleArray origin=null
|
||||||
|
receiver: GET_VAR '<this>: <root>.Test1 declared in <root>.Test1.toString' type=<root>.Test1 origin=null
|
||||||
|
CONST String type=kotlin.String value=")"
|
||||||
CLASS CLASS name:Test2 modality:FINAL visibility:public [data] superTypes:[kotlin.Any]
|
CLASS CLASS name:Test2 modality:FINAL visibility:public [data] superTypes:[kotlin.Any]
|
||||||
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.Test2<T of <root>.Test2>
|
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.Test2<T of <root>.Test2>
|
||||||
TYPE_PARAMETER name:T index:0 variance: superTypes:[kotlin.Any?]
|
TYPE_PARAMETER name:T index:0 variance: superTypes:[kotlin.Any?]
|
||||||
@@ -251,19 +456,56 @@ FILE fqName:<root> fileName:/dataClassWithArrayMembers.kt
|
|||||||
CALL 'public final fun <get-genericArray> (): kotlin.Array<T of <root>.Test2> declared in <root>.Test2' type=kotlin.Array<T of <root>.Test2> origin=GET_PROPERTY
|
CALL 'public final fun <get-genericArray> (): kotlin.Array<T of <root>.Test2> declared in <root>.Test2' type=kotlin.Array<T of <root>.Test2> origin=GET_PROPERTY
|
||||||
$this: GET_VAR '<this>: <root>.Test2<T of <root>.Test2> declared in <root>.Test2.copy' type=<root>.Test2<T of <root>.Test2> origin=null
|
$this: GET_VAR '<this>: <root>.Test2<T of <root>.Test2> declared in <root>.Test2.copy' type=<root>.Test2<T of <root>.Test2> origin=null
|
||||||
BLOCK_BODY
|
BLOCK_BODY
|
||||||
FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator]
|
FUN GENERATED_DATA_CLASS_MEMBER name:equals visibility:public modality:OPEN <> ($this:<root>.Test2<T of <root>.Test2>, other:kotlin.Any?) returnType:kotlin.Boolean
|
||||||
overridden:
|
$this: VALUE_PARAMETER GENERATED_DATA_CLASS_MEMBER name:<this> type:<root>.Test2<T of <root>.Test2>
|
||||||
public open fun equals (other: kotlin.Any?): kotlin.Boolean [operator] declared in kotlin.Any
|
VALUE_PARAMETER GENERATED_DATA_CLASS_MEMBER name:other index:0 type:kotlin.Any?
|
||||||
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
|
BLOCK_BODY
|
||||||
VALUE_PARAMETER name:other index:0 type:kotlin.Any?
|
WHEN type=kotlin.Unit origin=null
|
||||||
FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override]
|
BRANCH
|
||||||
overridden:
|
if: CALL 'public final fun EQEQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EQEQEQ
|
||||||
public open fun hashCode (): kotlin.Int declared in kotlin.Any
|
arg0: GET_VAR '<this>: <root>.Test2<T of <root>.Test2> declared in <root>.Test2.equals' type=<root>.Test2<T of <root>.Test2> origin=null
|
||||||
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
|
arg1: GET_VAR 'other: kotlin.Any? declared in <root>.Test2.equals' type=kotlin.Any? origin=null
|
||||||
FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String [fake_override]
|
then: RETURN type=kotlin.Nothing from='public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in <root>.Test2'
|
||||||
overridden:
|
CONST Boolean type=kotlin.Boolean value=true
|
||||||
public open fun toString (): kotlin.String declared in kotlin.Any
|
WHEN type=kotlin.Unit origin=null
|
||||||
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
|
BRANCH
|
||||||
|
if: TYPE_OP type=kotlin.Boolean origin=NOT_INSTANCEOF typeOperand=<root>.Test2<T of <root>.Test2>
|
||||||
|
GET_VAR 'other: kotlin.Any? declared in <root>.Test2.equals' type=kotlin.Any? origin=null
|
||||||
|
then: RETURN type=kotlin.Nothing from='public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in <root>.Test2'
|
||||||
|
CONST Boolean type=kotlin.Boolean value=false
|
||||||
|
VAR IR_TEMPORARY_VARIABLE name:tmp_1 type:<root>.Test2<T of <root>.Test2> [val]
|
||||||
|
TYPE_OP type=<root>.Test2<T of <root>.Test2> origin=CAST typeOperand=<root>.Test2<T of <root>.Test2>
|
||||||
|
GET_VAR 'other: kotlin.Any? declared in <root>.Test2.equals' type=kotlin.Any? origin=null
|
||||||
|
WHEN type=kotlin.Unit origin=null
|
||||||
|
BRANCH
|
||||||
|
if: CALL 'public final fun not (): kotlin.Boolean [operator] declared in kotlin.Boolean' type=kotlin.Boolean origin=EXCLEQ
|
||||||
|
$this: CALL 'public final fun EQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EXCLEQ
|
||||||
|
arg0: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:genericArray type:kotlin.Array<T of <root>.Test2> visibility:private [final]' type=kotlin.Array<T of <root>.Test2> origin=null
|
||||||
|
receiver: GET_VAR '<this>: <root>.Test2<T of <root>.Test2> declared in <root>.Test2.equals' type=<root>.Test2<T of <root>.Test2> origin=null
|
||||||
|
arg1: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:genericArray type:kotlin.Array<T of <root>.Test2> visibility:private [final]' type=kotlin.Array<T of <root>.Test2> origin=null
|
||||||
|
receiver: GET_VAR 'val tmp_1: <root>.Test2<T of <root>.Test2> [val] declared in <root>.Test2.equals' type=<root>.Test2<T of <root>.Test2> origin=null
|
||||||
|
then: RETURN type=kotlin.Nothing from='public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in <root>.Test2'
|
||||||
|
CONST Boolean type=kotlin.Boolean value=false
|
||||||
|
RETURN type=kotlin.Nothing from='public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in <root>.Test2'
|
||||||
|
CONST Boolean type=kotlin.Boolean value=true
|
||||||
|
FUN GENERATED_DATA_CLASS_MEMBER name:hashCode visibility:public modality:OPEN <> ($this:<root>.Test2<T of <root>.Test2>) returnType:kotlin.Int
|
||||||
|
$this: VALUE_PARAMETER GENERATED_DATA_CLASS_MEMBER name:<this> type:<root>.Test2<T of <root>.Test2>
|
||||||
|
BLOCK_BODY
|
||||||
|
RETURN type=kotlin.Nothing from='public open fun hashCode (): kotlin.Int declared in <root>.Test2'
|
||||||
|
CALL 'public final fun dataClassArrayMemberHashCode (arg0: kotlin.Any): kotlin.Int declared in kotlin.internal.ir' type=kotlin.Int origin=null
|
||||||
|
arg0: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:genericArray type:kotlin.Array<T of <root>.Test2> visibility:private [final]' type=kotlin.Array<T of <root>.Test2> origin=null
|
||||||
|
receiver: GET_VAR '<this>: <root>.Test2<T of <root>.Test2> declared in <root>.Test2.hashCode' type=<root>.Test2<T of <root>.Test2> origin=null
|
||||||
|
FUN GENERATED_DATA_CLASS_MEMBER name:toString visibility:public modality:OPEN <> ($this:<root>.Test2<T of <root>.Test2>) returnType:kotlin.String
|
||||||
|
$this: VALUE_PARAMETER GENERATED_DATA_CLASS_MEMBER name:<this> type:<root>.Test2<T of <root>.Test2>
|
||||||
|
BLOCK_BODY
|
||||||
|
RETURN type=kotlin.Nothing from='public open fun toString (): kotlin.String declared in <root>.Test2'
|
||||||
|
STRING_CONCATENATION type=kotlin.String
|
||||||
|
CONST String type=kotlin.String value="Test2("
|
||||||
|
CONST String type=kotlin.String value="genericArray="
|
||||||
|
CALL 'public final fun dataClassArrayMemberToString (arg0: kotlin.Any?): kotlin.String declared in kotlin.internal.ir' type=kotlin.String origin=null
|
||||||
|
arg0: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:genericArray type:kotlin.Array<T of <root>.Test2> visibility:private [final]' type=kotlin.Array<T of <root>.Test2> origin=null
|
||||||
|
receiver: GET_VAR '<this>: <root>.Test2<T of <root>.Test2> declared in <root>.Test2.toString' type=<root>.Test2<T of <root>.Test2> origin=null
|
||||||
|
CONST String type=kotlin.String value=")"
|
||||||
CLASS CLASS name:Test3 modality:FINAL visibility:public [data] superTypes:[kotlin.Any]
|
CLASS CLASS name:Test3 modality:FINAL visibility:public [data] superTypes:[kotlin.Any]
|
||||||
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.Test3
|
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.Test3
|
||||||
CONSTRUCTOR visibility:public <> (anyArrayN:kotlin.Array<kotlin.Any>?) returnType:<root>.Test3 [primary]
|
CONSTRUCTOR visibility:public <> (anyArrayN:kotlin.Array<kotlin.Any>?) returnType:<root>.Test3 [primary]
|
||||||
@@ -295,16 +537,62 @@ FILE fqName:<root> fileName:/dataClassWithArrayMembers.kt
|
|||||||
CALL 'public final fun <get-anyArrayN> (): kotlin.Array<kotlin.Any>? declared in <root>.Test3' type=kotlin.Array<kotlin.Any>? origin=GET_PROPERTY
|
CALL 'public final fun <get-anyArrayN> (): kotlin.Array<kotlin.Any>? declared in <root>.Test3' type=kotlin.Array<kotlin.Any>? origin=GET_PROPERTY
|
||||||
$this: GET_VAR '<this>: <root>.Test3 declared in <root>.Test3.copy' type=<root>.Test3 origin=null
|
$this: GET_VAR '<this>: <root>.Test3 declared in <root>.Test3.copy' type=<root>.Test3 origin=null
|
||||||
BLOCK_BODY
|
BLOCK_BODY
|
||||||
FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator]
|
FUN GENERATED_DATA_CLASS_MEMBER name:equals visibility:public modality:OPEN <> ($this:<root>.Test3, other:kotlin.Any?) returnType:kotlin.Boolean
|
||||||
overridden:
|
$this: VALUE_PARAMETER GENERATED_DATA_CLASS_MEMBER name:<this> type:<root>.Test3
|
||||||
public open fun equals (other: kotlin.Any?): kotlin.Boolean [operator] declared in kotlin.Any
|
VALUE_PARAMETER GENERATED_DATA_CLASS_MEMBER name:other index:0 type:kotlin.Any?
|
||||||
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
|
BLOCK_BODY
|
||||||
VALUE_PARAMETER name:other index:0 type:kotlin.Any?
|
WHEN type=kotlin.Unit origin=null
|
||||||
FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override]
|
BRANCH
|
||||||
overridden:
|
if: CALL 'public final fun EQEQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EQEQEQ
|
||||||
public open fun hashCode (): kotlin.Int declared in kotlin.Any
|
arg0: GET_VAR '<this>: <root>.Test3 declared in <root>.Test3.equals' type=<root>.Test3 origin=null
|
||||||
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
|
arg1: GET_VAR 'other: kotlin.Any? declared in <root>.Test3.equals' type=kotlin.Any? origin=null
|
||||||
FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String [fake_override]
|
then: RETURN type=kotlin.Nothing from='public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in <root>.Test3'
|
||||||
overridden:
|
CONST Boolean type=kotlin.Boolean value=true
|
||||||
public open fun toString (): kotlin.String declared in kotlin.Any
|
WHEN type=kotlin.Unit origin=null
|
||||||
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
|
BRANCH
|
||||||
|
if: TYPE_OP type=kotlin.Boolean origin=NOT_INSTANCEOF typeOperand=<root>.Test3
|
||||||
|
GET_VAR 'other: kotlin.Any? declared in <root>.Test3.equals' type=kotlin.Any? origin=null
|
||||||
|
then: RETURN type=kotlin.Nothing from='public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in <root>.Test3'
|
||||||
|
CONST Boolean type=kotlin.Boolean value=false
|
||||||
|
VAR IR_TEMPORARY_VARIABLE name:tmp_2 type:<root>.Test3 [val]
|
||||||
|
TYPE_OP type=<root>.Test3 origin=CAST typeOperand=<root>.Test3
|
||||||
|
GET_VAR 'other: kotlin.Any? declared in <root>.Test3.equals' type=kotlin.Any? origin=null
|
||||||
|
WHEN type=kotlin.Unit origin=null
|
||||||
|
BRANCH
|
||||||
|
if: CALL 'public final fun not (): kotlin.Boolean [operator] declared in kotlin.Boolean' type=kotlin.Boolean origin=EXCLEQ
|
||||||
|
$this: CALL 'public final fun EQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EXCLEQ
|
||||||
|
arg0: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:anyArrayN type:kotlin.Array<kotlin.Any>? visibility:private [final]' type=kotlin.Array<kotlin.Any>? origin=null
|
||||||
|
receiver: GET_VAR '<this>: <root>.Test3 declared in <root>.Test3.equals' type=<root>.Test3 origin=null
|
||||||
|
arg1: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:anyArrayN type:kotlin.Array<kotlin.Any>? visibility:private [final]' type=kotlin.Array<kotlin.Any>? origin=null
|
||||||
|
receiver: GET_VAR 'val tmp_2: <root>.Test3 [val] declared in <root>.Test3.equals' type=<root>.Test3 origin=null
|
||||||
|
then: RETURN type=kotlin.Nothing from='public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in <root>.Test3'
|
||||||
|
CONST Boolean type=kotlin.Boolean value=false
|
||||||
|
RETURN type=kotlin.Nothing from='public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in <root>.Test3'
|
||||||
|
CONST Boolean type=kotlin.Boolean value=true
|
||||||
|
FUN GENERATED_DATA_CLASS_MEMBER name:hashCode visibility:public modality:OPEN <> ($this:<root>.Test3) returnType:kotlin.Int
|
||||||
|
$this: VALUE_PARAMETER GENERATED_DATA_CLASS_MEMBER name:<this> type:<root>.Test3
|
||||||
|
BLOCK_BODY
|
||||||
|
RETURN type=kotlin.Nothing from='public open fun hashCode (): kotlin.Int declared in <root>.Test3'
|
||||||
|
WHEN type=kotlin.Int origin=null
|
||||||
|
BRANCH
|
||||||
|
if: CALL 'public final fun EQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EQEQ
|
||||||
|
arg0: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:anyArrayN type:kotlin.Array<kotlin.Any>? visibility:private [final]' type=kotlin.Array<kotlin.Any>? origin=null
|
||||||
|
receiver: GET_VAR '<this>: <root>.Test3 declared in <root>.Test3.hashCode' type=<root>.Test3 origin=null
|
||||||
|
arg1: CONST Null type=kotlin.Nothing? value=null
|
||||||
|
then: CONST Int type=kotlin.Int value=0
|
||||||
|
BRANCH
|
||||||
|
if: CONST Boolean type=kotlin.Boolean value=true
|
||||||
|
then: CALL 'public final fun dataClassArrayMemberHashCode (arg0: kotlin.Any): kotlin.Int declared in kotlin.internal.ir' type=kotlin.Int origin=null
|
||||||
|
arg0: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:anyArrayN type:kotlin.Array<kotlin.Any>? visibility:private [final]' type=kotlin.Array<kotlin.Any>? origin=null
|
||||||
|
receiver: GET_VAR '<this>: <root>.Test3 declared in <root>.Test3.hashCode' type=<root>.Test3 origin=null
|
||||||
|
FUN GENERATED_DATA_CLASS_MEMBER name:toString visibility:public modality:OPEN <> ($this:<root>.Test3) returnType:kotlin.String
|
||||||
|
$this: VALUE_PARAMETER GENERATED_DATA_CLASS_MEMBER name:<this> type:<root>.Test3
|
||||||
|
BLOCK_BODY
|
||||||
|
RETURN type=kotlin.Nothing from='public open fun toString (): kotlin.String declared in <root>.Test3'
|
||||||
|
STRING_CONCATENATION type=kotlin.String
|
||||||
|
CONST String type=kotlin.String value="Test3("
|
||||||
|
CONST String type=kotlin.String value="anyArrayN="
|
||||||
|
CALL 'public final fun dataClassArrayMemberToString (arg0: kotlin.Any?): kotlin.String declared in kotlin.internal.ir' type=kotlin.String origin=null
|
||||||
|
arg0: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:anyArrayN type:kotlin.Array<kotlin.Any>? visibility:private [final]' type=kotlin.Array<kotlin.Any>? origin=null
|
||||||
|
receiver: GET_VAR '<this>: <root>.Test3 declared in <root>.Test3.toString' type=<root>.Test3 origin=null
|
||||||
|
CONST String type=kotlin.String value=")"
|
||||||
|
|||||||
+274
-39
@@ -74,19 +74,95 @@ FILE fqName:<root> fileName:/dataClasses.kt
|
|||||||
CALL 'public final fun <get-z> (): kotlin.Any declared in <root>.Test1' type=kotlin.Any origin=GET_PROPERTY
|
CALL 'public final fun <get-z> (): kotlin.Any declared in <root>.Test1' type=kotlin.Any origin=GET_PROPERTY
|
||||||
$this: GET_VAR '<this>: <root>.Test1 declared in <root>.Test1.copy' type=<root>.Test1 origin=null
|
$this: GET_VAR '<this>: <root>.Test1 declared in <root>.Test1.copy' type=<root>.Test1 origin=null
|
||||||
BLOCK_BODY
|
BLOCK_BODY
|
||||||
FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator]
|
FUN GENERATED_DATA_CLASS_MEMBER name:equals visibility:public modality:OPEN <> ($this:<root>.Test1, other:kotlin.Any?) returnType:kotlin.Boolean
|
||||||
overridden:
|
$this: VALUE_PARAMETER GENERATED_DATA_CLASS_MEMBER name:<this> type:<root>.Test1
|
||||||
public open fun equals (other: kotlin.Any?): kotlin.Boolean [operator] declared in kotlin.Any
|
VALUE_PARAMETER GENERATED_DATA_CLASS_MEMBER name:other index:0 type:kotlin.Any?
|
||||||
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
|
BLOCK_BODY
|
||||||
VALUE_PARAMETER name:other index:0 type:kotlin.Any?
|
WHEN type=kotlin.Unit origin=null
|
||||||
FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override]
|
BRANCH
|
||||||
overridden:
|
if: CALL 'public final fun EQEQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EQEQEQ
|
||||||
public open fun hashCode (): kotlin.Int declared in kotlin.Any
|
arg0: GET_VAR '<this>: <root>.Test1 declared in <root>.Test1.equals' type=<root>.Test1 origin=null
|
||||||
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
|
arg1: GET_VAR 'other: kotlin.Any? declared in <root>.Test1.equals' type=kotlin.Any? origin=null
|
||||||
FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String [fake_override]
|
then: RETURN type=kotlin.Nothing from='public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in <root>.Test1'
|
||||||
overridden:
|
CONST Boolean type=kotlin.Boolean value=true
|
||||||
public open fun toString (): kotlin.String declared in kotlin.Any
|
WHEN type=kotlin.Unit origin=null
|
||||||
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
|
BRANCH
|
||||||
|
if: TYPE_OP type=kotlin.Boolean origin=NOT_INSTANCEOF typeOperand=<root>.Test1
|
||||||
|
GET_VAR 'other: kotlin.Any? declared in <root>.Test1.equals' type=kotlin.Any? origin=null
|
||||||
|
then: RETURN type=kotlin.Nothing from='public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in <root>.Test1'
|
||||||
|
CONST Boolean type=kotlin.Boolean value=false
|
||||||
|
VAR IR_TEMPORARY_VARIABLE name:tmp_0 type:<root>.Test1 [val]
|
||||||
|
TYPE_OP type=<root>.Test1 origin=CAST typeOperand=<root>.Test1
|
||||||
|
GET_VAR 'other: kotlin.Any? declared in <root>.Test1.equals' type=kotlin.Any? origin=null
|
||||||
|
WHEN type=kotlin.Unit origin=null
|
||||||
|
BRANCH
|
||||||
|
if: CALL 'public final fun not (): kotlin.Boolean [operator] declared in kotlin.Boolean' type=kotlin.Boolean origin=EXCLEQ
|
||||||
|
$this: CALL 'public final fun EQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EXCLEQ
|
||||||
|
arg0: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:x type:kotlin.Int visibility:private [final]' type=kotlin.Int origin=null
|
||||||
|
receiver: GET_VAR '<this>: <root>.Test1 declared in <root>.Test1.equals' type=<root>.Test1 origin=null
|
||||||
|
arg1: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:x type:kotlin.Int visibility:private [final]' type=kotlin.Int origin=null
|
||||||
|
receiver: GET_VAR 'val tmp_0: <root>.Test1 [val] declared in <root>.Test1.equals' type=<root>.Test1 origin=null
|
||||||
|
then: RETURN type=kotlin.Nothing from='public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in <root>.Test1'
|
||||||
|
CONST Boolean type=kotlin.Boolean value=false
|
||||||
|
WHEN type=kotlin.Unit origin=null
|
||||||
|
BRANCH
|
||||||
|
if: CALL 'public final fun not (): kotlin.Boolean [operator] declared in kotlin.Boolean' type=kotlin.Boolean origin=EXCLEQ
|
||||||
|
$this: CALL 'public final fun EQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EXCLEQ
|
||||||
|
arg0: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:y type:kotlin.String visibility:private [final]' type=kotlin.String origin=null
|
||||||
|
receiver: GET_VAR '<this>: <root>.Test1 declared in <root>.Test1.equals' type=<root>.Test1 origin=null
|
||||||
|
arg1: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:y type:kotlin.String visibility:private [final]' type=kotlin.String origin=null
|
||||||
|
receiver: GET_VAR 'val tmp_0: <root>.Test1 [val] declared in <root>.Test1.equals' type=<root>.Test1 origin=null
|
||||||
|
then: RETURN type=kotlin.Nothing from='public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in <root>.Test1'
|
||||||
|
CONST Boolean type=kotlin.Boolean value=false
|
||||||
|
WHEN type=kotlin.Unit origin=null
|
||||||
|
BRANCH
|
||||||
|
if: CALL 'public final fun not (): kotlin.Boolean [operator] declared in kotlin.Boolean' type=kotlin.Boolean origin=EXCLEQ
|
||||||
|
$this: CALL 'public final fun EQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EXCLEQ
|
||||||
|
arg0: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:z type:kotlin.Any visibility:private [final]' type=kotlin.Any origin=null
|
||||||
|
receiver: GET_VAR '<this>: <root>.Test1 declared in <root>.Test1.equals' type=<root>.Test1 origin=null
|
||||||
|
arg1: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:z type:kotlin.Any visibility:private [final]' type=kotlin.Any origin=null
|
||||||
|
receiver: GET_VAR 'val tmp_0: <root>.Test1 [val] declared in <root>.Test1.equals' type=<root>.Test1 origin=null
|
||||||
|
then: RETURN type=kotlin.Nothing from='public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in <root>.Test1'
|
||||||
|
CONST Boolean type=kotlin.Boolean value=false
|
||||||
|
RETURN type=kotlin.Nothing from='public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in <root>.Test1'
|
||||||
|
CONST Boolean type=kotlin.Boolean value=true
|
||||||
|
FUN GENERATED_DATA_CLASS_MEMBER name:hashCode visibility:public modality:OPEN <> ($this:<root>.Test1) returnType:kotlin.Int
|
||||||
|
$this: VALUE_PARAMETER GENERATED_DATA_CLASS_MEMBER name:<this> type:<root>.Test1
|
||||||
|
BLOCK_BODY
|
||||||
|
RETURN type=kotlin.Nothing from='public open fun hashCode (): kotlin.Int declared in <root>.Test1'
|
||||||
|
CALL 'public final fun plus (other: kotlin.Int): kotlin.Int [operator] declared in kotlin.Int' type=kotlin.Int origin=null
|
||||||
|
$this: CALL 'public final fun times (other: kotlin.Int): kotlin.Int [operator] declared in kotlin.Int' type=kotlin.Int origin=null
|
||||||
|
$this: CALL 'public final fun plus (other: kotlin.Int): kotlin.Int [operator] declared in kotlin.Int' type=kotlin.Int origin=null
|
||||||
|
$this: CALL 'public final fun times (other: kotlin.Int): kotlin.Int [operator] declared in kotlin.Int' type=kotlin.Int origin=null
|
||||||
|
$this: CALL 'public open fun hashCode (): kotlin.Int [fake_override] declared in kotlin.Int' type=kotlin.Int origin=null
|
||||||
|
$this: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:x type:kotlin.Int visibility:private [final]' type=kotlin.Int origin=null
|
||||||
|
receiver: GET_VAR '<this>: <root>.Test1 declared in <root>.Test1.hashCode' type=<root>.Test1 origin=null
|
||||||
|
other: CONST Int type=kotlin.Int value=31
|
||||||
|
other: CALL 'public open fun hashCode (): kotlin.Int [fake_override] declared in kotlin.String' type=kotlin.Int origin=null
|
||||||
|
$this: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:y type:kotlin.String visibility:private [final]' type=kotlin.String origin=null
|
||||||
|
receiver: GET_VAR '<this>: <root>.Test1 declared in <root>.Test1.hashCode' type=<root>.Test1 origin=null
|
||||||
|
other: CONST Int type=kotlin.Int value=31
|
||||||
|
other: CALL 'public open fun hashCode (): kotlin.Int declared in kotlin.Any' type=kotlin.Int origin=null
|
||||||
|
$this: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:z type:kotlin.Any visibility:private [final]' type=kotlin.Any origin=null
|
||||||
|
receiver: GET_VAR '<this>: <root>.Test1 declared in <root>.Test1.hashCode' type=<root>.Test1 origin=null
|
||||||
|
FUN GENERATED_DATA_CLASS_MEMBER name:toString visibility:public modality:OPEN <> ($this:<root>.Test1) returnType:kotlin.String
|
||||||
|
$this: VALUE_PARAMETER GENERATED_DATA_CLASS_MEMBER name:<this> type:<root>.Test1
|
||||||
|
BLOCK_BODY
|
||||||
|
RETURN type=kotlin.Nothing from='public open fun toString (): kotlin.String declared in <root>.Test1'
|
||||||
|
STRING_CONCATENATION type=kotlin.String
|
||||||
|
CONST String type=kotlin.String value="Test1("
|
||||||
|
CONST String type=kotlin.String value="x="
|
||||||
|
GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:x type:kotlin.Int visibility:private [final]' type=kotlin.Int origin=null
|
||||||
|
receiver: GET_VAR '<this>: <root>.Test1 declared in <root>.Test1.toString' type=<root>.Test1 origin=null
|
||||||
|
CONST String type=kotlin.String value=", "
|
||||||
|
CONST String type=kotlin.String value="y="
|
||||||
|
GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:y type:kotlin.String visibility:private [final]' type=kotlin.String origin=null
|
||||||
|
receiver: GET_VAR '<this>: <root>.Test1 declared in <root>.Test1.toString' type=<root>.Test1 origin=null
|
||||||
|
CONST String type=kotlin.String value=", "
|
||||||
|
CONST String type=kotlin.String value="z="
|
||||||
|
GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:z type:kotlin.Any visibility:private [final]' type=kotlin.Any origin=null
|
||||||
|
receiver: GET_VAR '<this>: <root>.Test1 declared in <root>.Test1.toString' type=<root>.Test1 origin=null
|
||||||
|
CONST String type=kotlin.String value=")"
|
||||||
CLASS CLASS name:Test2 modality:FINAL visibility:public [data] superTypes:[kotlin.Any]
|
CLASS CLASS name:Test2 modality:FINAL visibility:public [data] superTypes:[kotlin.Any]
|
||||||
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.Test2
|
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.Test2
|
||||||
CONSTRUCTOR visibility:public <> (x:kotlin.Any?) returnType:<root>.Test2 [primary]
|
CONSTRUCTOR visibility:public <> (x:kotlin.Any?) returnType:<root>.Test2 [primary]
|
||||||
@@ -118,19 +194,64 @@ FILE fqName:<root> fileName:/dataClasses.kt
|
|||||||
CALL 'public final fun <get-x> (): kotlin.Any? declared in <root>.Test2' type=kotlin.Any? origin=GET_PROPERTY
|
CALL 'public final fun <get-x> (): kotlin.Any? declared in <root>.Test2' type=kotlin.Any? origin=GET_PROPERTY
|
||||||
$this: GET_VAR '<this>: <root>.Test2 declared in <root>.Test2.copy' type=<root>.Test2 origin=null
|
$this: GET_VAR '<this>: <root>.Test2 declared in <root>.Test2.copy' type=<root>.Test2 origin=null
|
||||||
BLOCK_BODY
|
BLOCK_BODY
|
||||||
FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator]
|
FUN GENERATED_DATA_CLASS_MEMBER name:equals visibility:public modality:OPEN <> ($this:<root>.Test2, other:kotlin.Any?) returnType:kotlin.Boolean
|
||||||
overridden:
|
$this: VALUE_PARAMETER GENERATED_DATA_CLASS_MEMBER name:<this> type:<root>.Test2
|
||||||
public open fun equals (other: kotlin.Any?): kotlin.Boolean [operator] declared in kotlin.Any
|
VALUE_PARAMETER GENERATED_DATA_CLASS_MEMBER name:other index:0 type:kotlin.Any?
|
||||||
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
|
BLOCK_BODY
|
||||||
VALUE_PARAMETER name:other index:0 type:kotlin.Any?
|
WHEN type=kotlin.Unit origin=null
|
||||||
FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override]
|
BRANCH
|
||||||
overridden:
|
if: CALL 'public final fun EQEQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EQEQEQ
|
||||||
public open fun hashCode (): kotlin.Int declared in kotlin.Any
|
arg0: GET_VAR '<this>: <root>.Test2 declared in <root>.Test2.equals' type=<root>.Test2 origin=null
|
||||||
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
|
arg1: GET_VAR 'other: kotlin.Any? declared in <root>.Test2.equals' type=kotlin.Any? origin=null
|
||||||
FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String [fake_override]
|
then: RETURN type=kotlin.Nothing from='public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in <root>.Test2'
|
||||||
overridden:
|
CONST Boolean type=kotlin.Boolean value=true
|
||||||
public open fun toString (): kotlin.String declared in kotlin.Any
|
WHEN type=kotlin.Unit origin=null
|
||||||
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
|
BRANCH
|
||||||
|
if: TYPE_OP type=kotlin.Boolean origin=NOT_INSTANCEOF typeOperand=<root>.Test2
|
||||||
|
GET_VAR 'other: kotlin.Any? declared in <root>.Test2.equals' type=kotlin.Any? origin=null
|
||||||
|
then: RETURN type=kotlin.Nothing from='public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in <root>.Test2'
|
||||||
|
CONST Boolean type=kotlin.Boolean value=false
|
||||||
|
VAR IR_TEMPORARY_VARIABLE name:tmp_1 type:<root>.Test2 [val]
|
||||||
|
TYPE_OP type=<root>.Test2 origin=CAST typeOperand=<root>.Test2
|
||||||
|
GET_VAR 'other: kotlin.Any? declared in <root>.Test2.equals' type=kotlin.Any? origin=null
|
||||||
|
WHEN type=kotlin.Unit origin=null
|
||||||
|
BRANCH
|
||||||
|
if: CALL 'public final fun not (): kotlin.Boolean [operator] declared in kotlin.Boolean' type=kotlin.Boolean origin=EXCLEQ
|
||||||
|
$this: CALL 'public final fun EQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EXCLEQ
|
||||||
|
arg0: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:x type:kotlin.Any? visibility:private [final]' type=kotlin.Any? origin=null
|
||||||
|
receiver: GET_VAR '<this>: <root>.Test2 declared in <root>.Test2.equals' type=<root>.Test2 origin=null
|
||||||
|
arg1: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:x type:kotlin.Any? visibility:private [final]' type=kotlin.Any? origin=null
|
||||||
|
receiver: GET_VAR 'val tmp_1: <root>.Test2 [val] declared in <root>.Test2.equals' type=<root>.Test2 origin=null
|
||||||
|
then: RETURN type=kotlin.Nothing from='public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in <root>.Test2'
|
||||||
|
CONST Boolean type=kotlin.Boolean value=false
|
||||||
|
RETURN type=kotlin.Nothing from='public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in <root>.Test2'
|
||||||
|
CONST Boolean type=kotlin.Boolean value=true
|
||||||
|
FUN GENERATED_DATA_CLASS_MEMBER name:hashCode visibility:public modality:OPEN <> ($this:<root>.Test2) returnType:kotlin.Int
|
||||||
|
$this: VALUE_PARAMETER GENERATED_DATA_CLASS_MEMBER name:<this> type:<root>.Test2
|
||||||
|
BLOCK_BODY
|
||||||
|
RETURN type=kotlin.Nothing from='public open fun hashCode (): kotlin.Int declared in <root>.Test2'
|
||||||
|
WHEN type=kotlin.Int origin=null
|
||||||
|
BRANCH
|
||||||
|
if: CALL 'public final fun EQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EQEQ
|
||||||
|
arg0: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:x type:kotlin.Any? visibility:private [final]' type=kotlin.Any? origin=null
|
||||||
|
receiver: GET_VAR '<this>: <root>.Test2 declared in <root>.Test2.hashCode' type=<root>.Test2 origin=null
|
||||||
|
arg1: CONST Null type=kotlin.Nothing? value=null
|
||||||
|
then: CONST Int type=kotlin.Int value=0
|
||||||
|
BRANCH
|
||||||
|
if: CONST Boolean type=kotlin.Boolean value=true
|
||||||
|
then: CALL 'public open fun hashCode (): kotlin.Int declared in kotlin.Any' type=kotlin.Int origin=null
|
||||||
|
$this: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:x type:kotlin.Any? visibility:private [final]' type=kotlin.Any? origin=null
|
||||||
|
receiver: GET_VAR '<this>: <root>.Test2 declared in <root>.Test2.hashCode' type=<root>.Test2 origin=null
|
||||||
|
FUN GENERATED_DATA_CLASS_MEMBER name:toString visibility:public modality:OPEN <> ($this:<root>.Test2) returnType:kotlin.String
|
||||||
|
$this: VALUE_PARAMETER GENERATED_DATA_CLASS_MEMBER name:<this> type:<root>.Test2
|
||||||
|
BLOCK_BODY
|
||||||
|
RETURN type=kotlin.Nothing from='public open fun toString (): kotlin.String declared in <root>.Test2'
|
||||||
|
STRING_CONCATENATION type=kotlin.String
|
||||||
|
CONST String type=kotlin.String value="Test2("
|
||||||
|
CONST String type=kotlin.String value="x="
|
||||||
|
GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:x type:kotlin.Any? visibility:private [final]' type=kotlin.Any? origin=null
|
||||||
|
receiver: GET_VAR '<this>: <root>.Test2 declared in <root>.Test2.toString' type=<root>.Test2 origin=null
|
||||||
|
CONST String type=kotlin.String value=")"
|
||||||
CLASS CLASS name:Test3 modality:FINAL visibility:public [data] superTypes:[kotlin.Any]
|
CLASS CLASS name:Test3 modality:FINAL visibility:public [data] superTypes:[kotlin.Any]
|
||||||
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.Test3
|
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.Test3
|
||||||
CONSTRUCTOR visibility:public <> (d:kotlin.Double, dn:kotlin.Double?, f:kotlin.Float, df:kotlin.Float?) returnType:<root>.Test3 [primary]
|
CONSTRUCTOR visibility:public <> (d:kotlin.Double, dn:kotlin.Double?, f:kotlin.Float, df:kotlin.Float?) returnType:<root>.Test3 [primary]
|
||||||
@@ -228,16 +349,130 @@ FILE fqName:<root> fileName:/dataClasses.kt
|
|||||||
CALL 'public final fun <get-df> (): kotlin.Float? declared in <root>.Test3' type=kotlin.Float? origin=GET_PROPERTY
|
CALL 'public final fun <get-df> (): kotlin.Float? declared in <root>.Test3' type=kotlin.Float? origin=GET_PROPERTY
|
||||||
$this: GET_VAR '<this>: <root>.Test3 declared in <root>.Test3.copy' type=<root>.Test3 origin=null
|
$this: GET_VAR '<this>: <root>.Test3 declared in <root>.Test3.copy' type=<root>.Test3 origin=null
|
||||||
BLOCK_BODY
|
BLOCK_BODY
|
||||||
FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator]
|
FUN GENERATED_DATA_CLASS_MEMBER name:equals visibility:public modality:OPEN <> ($this:<root>.Test3, other:kotlin.Any?) returnType:kotlin.Boolean
|
||||||
overridden:
|
$this: VALUE_PARAMETER GENERATED_DATA_CLASS_MEMBER name:<this> type:<root>.Test3
|
||||||
public open fun equals (other: kotlin.Any?): kotlin.Boolean [operator] declared in kotlin.Any
|
VALUE_PARAMETER GENERATED_DATA_CLASS_MEMBER name:other index:0 type:kotlin.Any?
|
||||||
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
|
BLOCK_BODY
|
||||||
VALUE_PARAMETER name:other index:0 type:kotlin.Any?
|
WHEN type=kotlin.Unit origin=null
|
||||||
FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override]
|
BRANCH
|
||||||
overridden:
|
if: CALL 'public final fun EQEQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EQEQEQ
|
||||||
public open fun hashCode (): kotlin.Int declared in kotlin.Any
|
arg0: GET_VAR '<this>: <root>.Test3 declared in <root>.Test3.equals' type=<root>.Test3 origin=null
|
||||||
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
|
arg1: GET_VAR 'other: kotlin.Any? declared in <root>.Test3.equals' type=kotlin.Any? origin=null
|
||||||
FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String [fake_override]
|
then: RETURN type=kotlin.Nothing from='public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in <root>.Test3'
|
||||||
overridden:
|
CONST Boolean type=kotlin.Boolean value=true
|
||||||
public open fun toString (): kotlin.String declared in kotlin.Any
|
WHEN type=kotlin.Unit origin=null
|
||||||
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
|
BRANCH
|
||||||
|
if: TYPE_OP type=kotlin.Boolean origin=NOT_INSTANCEOF typeOperand=<root>.Test3
|
||||||
|
GET_VAR 'other: kotlin.Any? declared in <root>.Test3.equals' type=kotlin.Any? origin=null
|
||||||
|
then: RETURN type=kotlin.Nothing from='public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in <root>.Test3'
|
||||||
|
CONST Boolean type=kotlin.Boolean value=false
|
||||||
|
VAR IR_TEMPORARY_VARIABLE name:tmp_2 type:<root>.Test3 [val]
|
||||||
|
TYPE_OP type=<root>.Test3 origin=CAST typeOperand=<root>.Test3
|
||||||
|
GET_VAR 'other: kotlin.Any? declared in <root>.Test3.equals' type=kotlin.Any? origin=null
|
||||||
|
WHEN type=kotlin.Unit origin=null
|
||||||
|
BRANCH
|
||||||
|
if: CALL 'public final fun not (): kotlin.Boolean [operator] declared in kotlin.Boolean' type=kotlin.Boolean origin=EXCLEQ
|
||||||
|
$this: CALL 'public final fun EQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EXCLEQ
|
||||||
|
arg0: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:d type:kotlin.Double visibility:private [final]' type=kotlin.Double origin=null
|
||||||
|
receiver: GET_VAR '<this>: <root>.Test3 declared in <root>.Test3.equals' type=<root>.Test3 origin=null
|
||||||
|
arg1: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:d type:kotlin.Double visibility:private [final]' type=kotlin.Double origin=null
|
||||||
|
receiver: GET_VAR 'val tmp_2: <root>.Test3 [val] declared in <root>.Test3.equals' type=<root>.Test3 origin=null
|
||||||
|
then: RETURN type=kotlin.Nothing from='public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in <root>.Test3'
|
||||||
|
CONST Boolean type=kotlin.Boolean value=false
|
||||||
|
WHEN type=kotlin.Unit origin=null
|
||||||
|
BRANCH
|
||||||
|
if: CALL 'public final fun not (): kotlin.Boolean [operator] declared in kotlin.Boolean' type=kotlin.Boolean origin=EXCLEQ
|
||||||
|
$this: CALL 'public final fun EQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EXCLEQ
|
||||||
|
arg0: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:dn type:kotlin.Double? visibility:private [final]' type=kotlin.Double? origin=null
|
||||||
|
receiver: GET_VAR '<this>: <root>.Test3 declared in <root>.Test3.equals' type=<root>.Test3 origin=null
|
||||||
|
arg1: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:dn type:kotlin.Double? visibility:private [final]' type=kotlin.Double? origin=null
|
||||||
|
receiver: GET_VAR 'val tmp_2: <root>.Test3 [val] declared in <root>.Test3.equals' type=<root>.Test3 origin=null
|
||||||
|
then: RETURN type=kotlin.Nothing from='public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in <root>.Test3'
|
||||||
|
CONST Boolean type=kotlin.Boolean value=false
|
||||||
|
WHEN type=kotlin.Unit origin=null
|
||||||
|
BRANCH
|
||||||
|
if: CALL 'public final fun not (): kotlin.Boolean [operator] declared in kotlin.Boolean' type=kotlin.Boolean origin=EXCLEQ
|
||||||
|
$this: CALL 'public final fun EQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EXCLEQ
|
||||||
|
arg0: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:f type:kotlin.Float visibility:private [final]' type=kotlin.Float origin=null
|
||||||
|
receiver: GET_VAR '<this>: <root>.Test3 declared in <root>.Test3.equals' type=<root>.Test3 origin=null
|
||||||
|
arg1: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:f type:kotlin.Float visibility:private [final]' type=kotlin.Float origin=null
|
||||||
|
receiver: GET_VAR 'val tmp_2: <root>.Test3 [val] declared in <root>.Test3.equals' type=<root>.Test3 origin=null
|
||||||
|
then: RETURN type=kotlin.Nothing from='public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in <root>.Test3'
|
||||||
|
CONST Boolean type=kotlin.Boolean value=false
|
||||||
|
WHEN type=kotlin.Unit origin=null
|
||||||
|
BRANCH
|
||||||
|
if: CALL 'public final fun not (): kotlin.Boolean [operator] declared in kotlin.Boolean' type=kotlin.Boolean origin=EXCLEQ
|
||||||
|
$this: CALL 'public final fun EQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EXCLEQ
|
||||||
|
arg0: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:df type:kotlin.Float? visibility:private [final]' type=kotlin.Float? origin=null
|
||||||
|
receiver: GET_VAR '<this>: <root>.Test3 declared in <root>.Test3.equals' type=<root>.Test3 origin=null
|
||||||
|
arg1: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:df type:kotlin.Float? visibility:private [final]' type=kotlin.Float? origin=null
|
||||||
|
receiver: GET_VAR 'val tmp_2: <root>.Test3 [val] declared in <root>.Test3.equals' type=<root>.Test3 origin=null
|
||||||
|
then: RETURN type=kotlin.Nothing from='public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in <root>.Test3'
|
||||||
|
CONST Boolean type=kotlin.Boolean value=false
|
||||||
|
RETURN type=kotlin.Nothing from='public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in <root>.Test3'
|
||||||
|
CONST Boolean type=kotlin.Boolean value=true
|
||||||
|
FUN GENERATED_DATA_CLASS_MEMBER name:hashCode visibility:public modality:OPEN <> ($this:<root>.Test3) returnType:kotlin.Int
|
||||||
|
$this: VALUE_PARAMETER GENERATED_DATA_CLASS_MEMBER name:<this> type:<root>.Test3
|
||||||
|
BLOCK_BODY
|
||||||
|
RETURN type=kotlin.Nothing from='public open fun hashCode (): kotlin.Int declared in <root>.Test3'
|
||||||
|
CALL 'public final fun plus (other: kotlin.Int): kotlin.Int [operator] declared in kotlin.Int' type=kotlin.Int origin=null
|
||||||
|
$this: CALL 'public final fun times (other: kotlin.Int): kotlin.Int [operator] declared in kotlin.Int' type=kotlin.Int origin=null
|
||||||
|
$this: CALL 'public final fun plus (other: kotlin.Int): kotlin.Int [operator] declared in kotlin.Int' type=kotlin.Int origin=null
|
||||||
|
$this: CALL 'public final fun times (other: kotlin.Int): kotlin.Int [operator] declared in kotlin.Int' type=kotlin.Int origin=null
|
||||||
|
$this: CALL 'public final fun plus (other: kotlin.Int): kotlin.Int [operator] declared in kotlin.Int' type=kotlin.Int origin=null
|
||||||
|
$this: CALL 'public final fun times (other: kotlin.Int): kotlin.Int [operator] declared in kotlin.Int' type=kotlin.Int origin=null
|
||||||
|
$this: CALL 'public open fun hashCode (): kotlin.Int [fake_override] declared in kotlin.Double' type=kotlin.Int origin=null
|
||||||
|
$this: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:d type:kotlin.Double visibility:private [final]' type=kotlin.Double origin=null
|
||||||
|
receiver: GET_VAR '<this>: <root>.Test3 declared in <root>.Test3.hashCode' type=<root>.Test3 origin=null
|
||||||
|
other: CONST Int type=kotlin.Int value=31
|
||||||
|
other: WHEN type=kotlin.Int origin=null
|
||||||
|
BRANCH
|
||||||
|
if: CALL 'public final fun EQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EQEQ
|
||||||
|
arg0: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:dn type:kotlin.Double? visibility:private [final]' type=kotlin.Double? origin=null
|
||||||
|
receiver: GET_VAR '<this>: <root>.Test3 declared in <root>.Test3.hashCode' type=<root>.Test3 origin=null
|
||||||
|
arg1: CONST Null type=kotlin.Nothing? value=null
|
||||||
|
then: CONST Int type=kotlin.Int value=0
|
||||||
|
BRANCH
|
||||||
|
if: CONST Boolean type=kotlin.Boolean value=true
|
||||||
|
then: CALL 'public open fun hashCode (): kotlin.Int [fake_override] declared in kotlin.Double' type=kotlin.Int origin=null
|
||||||
|
$this: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:dn type:kotlin.Double? visibility:private [final]' type=kotlin.Double? origin=null
|
||||||
|
receiver: GET_VAR '<this>: <root>.Test3 declared in <root>.Test3.hashCode' type=<root>.Test3 origin=null
|
||||||
|
other: CONST Int type=kotlin.Int value=31
|
||||||
|
other: CALL 'public open fun hashCode (): kotlin.Int [fake_override] declared in kotlin.Float' type=kotlin.Int origin=null
|
||||||
|
$this: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:f type:kotlin.Float visibility:private [final]' type=kotlin.Float origin=null
|
||||||
|
receiver: GET_VAR '<this>: <root>.Test3 declared in <root>.Test3.hashCode' type=<root>.Test3 origin=null
|
||||||
|
other: CONST Int type=kotlin.Int value=31
|
||||||
|
other: WHEN type=kotlin.Int origin=null
|
||||||
|
BRANCH
|
||||||
|
if: CALL 'public final fun EQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EQEQ
|
||||||
|
arg0: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:df type:kotlin.Float? visibility:private [final]' type=kotlin.Float? origin=null
|
||||||
|
receiver: GET_VAR '<this>: <root>.Test3 declared in <root>.Test3.hashCode' type=<root>.Test3 origin=null
|
||||||
|
arg1: CONST Null type=kotlin.Nothing? value=null
|
||||||
|
then: CONST Int type=kotlin.Int value=0
|
||||||
|
BRANCH
|
||||||
|
if: CONST Boolean type=kotlin.Boolean value=true
|
||||||
|
then: CALL 'public open fun hashCode (): kotlin.Int [fake_override] declared in kotlin.Float' type=kotlin.Int origin=null
|
||||||
|
$this: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:df type:kotlin.Float? visibility:private [final]' type=kotlin.Float? origin=null
|
||||||
|
receiver: GET_VAR '<this>: <root>.Test3 declared in <root>.Test3.hashCode' type=<root>.Test3 origin=null
|
||||||
|
FUN GENERATED_DATA_CLASS_MEMBER name:toString visibility:public modality:OPEN <> ($this:<root>.Test3) returnType:kotlin.String
|
||||||
|
$this: VALUE_PARAMETER GENERATED_DATA_CLASS_MEMBER name:<this> type:<root>.Test3
|
||||||
|
BLOCK_BODY
|
||||||
|
RETURN type=kotlin.Nothing from='public open fun toString (): kotlin.String declared in <root>.Test3'
|
||||||
|
STRING_CONCATENATION type=kotlin.String
|
||||||
|
CONST String type=kotlin.String value="Test3("
|
||||||
|
CONST String type=kotlin.String value="d="
|
||||||
|
GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:d type:kotlin.Double visibility:private [final]' type=kotlin.Double origin=null
|
||||||
|
receiver: GET_VAR '<this>: <root>.Test3 declared in <root>.Test3.toString' type=<root>.Test3 origin=null
|
||||||
|
CONST String type=kotlin.String value=", "
|
||||||
|
CONST String type=kotlin.String value="dn="
|
||||||
|
GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:dn type:kotlin.Double? visibility:private [final]' type=kotlin.Double? origin=null
|
||||||
|
receiver: GET_VAR '<this>: <root>.Test3 declared in <root>.Test3.toString' type=<root>.Test3 origin=null
|
||||||
|
CONST String type=kotlin.String value=", "
|
||||||
|
CONST String type=kotlin.String value="f="
|
||||||
|
GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:f type:kotlin.Float visibility:private [final]' type=kotlin.Float origin=null
|
||||||
|
receiver: GET_VAR '<this>: <root>.Test3 declared in <root>.Test3.toString' type=<root>.Test3 origin=null
|
||||||
|
CONST String type=kotlin.String value=", "
|
||||||
|
CONST String type=kotlin.String value="df="
|
||||||
|
GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:df type:kotlin.Float? visibility:private [final]' type=kotlin.Float? origin=null
|
||||||
|
receiver: GET_VAR '<this>: <root>.Test3 declared in <root>.Test3.toString' type=<root>.Test3 origin=null
|
||||||
|
CONST String type=kotlin.String value=")"
|
||||||
|
|||||||
+205
-52
@@ -31,19 +31,64 @@ FILE fqName:<root> fileName:/dataClassesGeneric.kt
|
|||||||
CALL 'public final fun <get-x> (): T of <root>.Test1 declared in <root>.Test1' type=T of <root>.Test1 origin=GET_PROPERTY
|
CALL 'public final fun <get-x> (): T of <root>.Test1 declared in <root>.Test1' type=T of <root>.Test1 origin=GET_PROPERTY
|
||||||
$this: GET_VAR '<this>: <root>.Test1<T of <root>.Test1> declared in <root>.Test1.copy' type=<root>.Test1<T of <root>.Test1> origin=null
|
$this: GET_VAR '<this>: <root>.Test1<T of <root>.Test1> declared in <root>.Test1.copy' type=<root>.Test1<T of <root>.Test1> origin=null
|
||||||
BLOCK_BODY
|
BLOCK_BODY
|
||||||
FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator]
|
FUN GENERATED_DATA_CLASS_MEMBER name:equals visibility:public modality:OPEN <> ($this:<root>.Test1<T of <root>.Test1>, other:kotlin.Any?) returnType:kotlin.Boolean
|
||||||
overridden:
|
$this: VALUE_PARAMETER GENERATED_DATA_CLASS_MEMBER name:<this> type:<root>.Test1<T of <root>.Test1>
|
||||||
public open fun equals (other: kotlin.Any?): kotlin.Boolean [operator] declared in kotlin.Any
|
VALUE_PARAMETER GENERATED_DATA_CLASS_MEMBER name:other index:0 type:kotlin.Any?
|
||||||
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
|
BLOCK_BODY
|
||||||
VALUE_PARAMETER name:other index:0 type:kotlin.Any?
|
WHEN type=kotlin.Unit origin=null
|
||||||
FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override]
|
BRANCH
|
||||||
overridden:
|
if: CALL 'public final fun EQEQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EQEQEQ
|
||||||
public open fun hashCode (): kotlin.Int declared in kotlin.Any
|
arg0: GET_VAR '<this>: <root>.Test1<T of <root>.Test1> declared in <root>.Test1.equals' type=<root>.Test1<T of <root>.Test1> origin=null
|
||||||
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
|
arg1: GET_VAR 'other: kotlin.Any? declared in <root>.Test1.equals' type=kotlin.Any? origin=null
|
||||||
FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String [fake_override]
|
then: RETURN type=kotlin.Nothing from='public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in <root>.Test1'
|
||||||
overridden:
|
CONST Boolean type=kotlin.Boolean value=true
|
||||||
public open fun toString (): kotlin.String declared in kotlin.Any
|
WHEN type=kotlin.Unit origin=null
|
||||||
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
|
BRANCH
|
||||||
|
if: TYPE_OP type=kotlin.Boolean origin=NOT_INSTANCEOF typeOperand=<root>.Test1<T of <root>.Test1>
|
||||||
|
GET_VAR 'other: kotlin.Any? declared in <root>.Test1.equals' type=kotlin.Any? origin=null
|
||||||
|
then: RETURN type=kotlin.Nothing from='public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in <root>.Test1'
|
||||||
|
CONST Boolean type=kotlin.Boolean value=false
|
||||||
|
VAR IR_TEMPORARY_VARIABLE name:tmp_0 type:<root>.Test1<T of <root>.Test1> [val]
|
||||||
|
TYPE_OP type=<root>.Test1<T of <root>.Test1> origin=CAST typeOperand=<root>.Test1<T of <root>.Test1>
|
||||||
|
GET_VAR 'other: kotlin.Any? declared in <root>.Test1.equals' type=kotlin.Any? origin=null
|
||||||
|
WHEN type=kotlin.Unit origin=null
|
||||||
|
BRANCH
|
||||||
|
if: CALL 'public final fun not (): kotlin.Boolean [operator] declared in kotlin.Boolean' type=kotlin.Boolean origin=EXCLEQ
|
||||||
|
$this: CALL 'public final fun EQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EXCLEQ
|
||||||
|
arg0: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:x type:T of <root>.Test1 visibility:private [final]' type=T of <root>.Test1 origin=null
|
||||||
|
receiver: GET_VAR '<this>: <root>.Test1<T of <root>.Test1> declared in <root>.Test1.equals' type=<root>.Test1<T of <root>.Test1> origin=null
|
||||||
|
arg1: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:x type:T of <root>.Test1 visibility:private [final]' type=T of <root>.Test1 origin=null
|
||||||
|
receiver: GET_VAR 'val tmp_0: <root>.Test1<T of <root>.Test1> [val] declared in <root>.Test1.equals' type=<root>.Test1<T of <root>.Test1> origin=null
|
||||||
|
then: RETURN type=kotlin.Nothing from='public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in <root>.Test1'
|
||||||
|
CONST Boolean type=kotlin.Boolean value=false
|
||||||
|
RETURN type=kotlin.Nothing from='public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in <root>.Test1'
|
||||||
|
CONST Boolean type=kotlin.Boolean value=true
|
||||||
|
FUN GENERATED_DATA_CLASS_MEMBER name:hashCode visibility:public modality:OPEN <> ($this:<root>.Test1<T of <root>.Test1>) returnType:kotlin.Int
|
||||||
|
$this: VALUE_PARAMETER GENERATED_DATA_CLASS_MEMBER name:<this> type:<root>.Test1<T of <root>.Test1>
|
||||||
|
BLOCK_BODY
|
||||||
|
RETURN type=kotlin.Nothing from='public open fun hashCode (): kotlin.Int declared in <root>.Test1'
|
||||||
|
WHEN type=kotlin.Int origin=null
|
||||||
|
BRANCH
|
||||||
|
if: CALL 'public final fun EQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EQEQ
|
||||||
|
arg0: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:x type:T of <root>.Test1 visibility:private [final]' type=T of <root>.Test1 origin=null
|
||||||
|
receiver: GET_VAR '<this>: <root>.Test1<T of <root>.Test1> declared in <root>.Test1.hashCode' type=<root>.Test1<T of <root>.Test1> origin=null
|
||||||
|
arg1: CONST Null type=kotlin.Nothing? value=null
|
||||||
|
then: CONST Int type=kotlin.Int value=0
|
||||||
|
BRANCH
|
||||||
|
if: CONST Boolean type=kotlin.Boolean value=true
|
||||||
|
then: CALL 'public open fun hashCode (): kotlin.Int declared in kotlin.Any' type=kotlin.Int origin=null
|
||||||
|
$this: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:x type:T of <root>.Test1 visibility:private [final]' type=T of <root>.Test1 origin=null
|
||||||
|
receiver: GET_VAR '<this>: <root>.Test1<T of <root>.Test1> declared in <root>.Test1.hashCode' type=<root>.Test1<T of <root>.Test1> origin=null
|
||||||
|
FUN GENERATED_DATA_CLASS_MEMBER name:toString visibility:public modality:OPEN <> ($this:<root>.Test1<T of <root>.Test1>) returnType:kotlin.String
|
||||||
|
$this: VALUE_PARAMETER GENERATED_DATA_CLASS_MEMBER name:<this> type:<root>.Test1<T of <root>.Test1>
|
||||||
|
BLOCK_BODY
|
||||||
|
RETURN type=kotlin.Nothing from='public open fun toString (): kotlin.String declared in <root>.Test1'
|
||||||
|
STRING_CONCATENATION type=kotlin.String
|
||||||
|
CONST String type=kotlin.String value="Test1("
|
||||||
|
CONST String type=kotlin.String value="x="
|
||||||
|
GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:x type:T of <root>.Test1 visibility:private [final]' type=T of <root>.Test1 origin=null
|
||||||
|
receiver: GET_VAR '<this>: <root>.Test1<T of <root>.Test1> declared in <root>.Test1.toString' type=<root>.Test1<T of <root>.Test1> origin=null
|
||||||
|
CONST String type=kotlin.String value=")"
|
||||||
CLASS CLASS name:Test2 modality:FINAL visibility:public [data] superTypes:[kotlin.Any]
|
CLASS CLASS name:Test2 modality:FINAL visibility:public [data] superTypes:[kotlin.Any]
|
||||||
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.Test2<T of <root>.Test2>
|
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.Test2<T of <root>.Test2>
|
||||||
TYPE_PARAMETER name:T index:0 variance: superTypes:[kotlin.Number]
|
TYPE_PARAMETER name:T index:0 variance: superTypes:[kotlin.Number]
|
||||||
@@ -76,19 +121,55 @@ FILE fqName:<root> fileName:/dataClassesGeneric.kt
|
|||||||
CALL 'public final fun <get-x> (): T of <root>.Test2 declared in <root>.Test2' type=T of <root>.Test2 origin=GET_PROPERTY
|
CALL 'public final fun <get-x> (): T of <root>.Test2 declared in <root>.Test2' type=T of <root>.Test2 origin=GET_PROPERTY
|
||||||
$this: GET_VAR '<this>: <root>.Test2<T of <root>.Test2> declared in <root>.Test2.copy' type=<root>.Test2<T of <root>.Test2> origin=null
|
$this: GET_VAR '<this>: <root>.Test2<T of <root>.Test2> declared in <root>.Test2.copy' type=<root>.Test2<T of <root>.Test2> origin=null
|
||||||
BLOCK_BODY
|
BLOCK_BODY
|
||||||
FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator]
|
FUN GENERATED_DATA_CLASS_MEMBER name:equals visibility:public modality:OPEN <> ($this:<root>.Test2<T of <root>.Test2>, other:kotlin.Any?) returnType:kotlin.Boolean
|
||||||
overridden:
|
$this: VALUE_PARAMETER GENERATED_DATA_CLASS_MEMBER name:<this> type:<root>.Test2<T of <root>.Test2>
|
||||||
public open fun equals (other: kotlin.Any?): kotlin.Boolean [operator] declared in kotlin.Any
|
VALUE_PARAMETER GENERATED_DATA_CLASS_MEMBER name:other index:0 type:kotlin.Any?
|
||||||
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
|
BLOCK_BODY
|
||||||
VALUE_PARAMETER name:other index:0 type:kotlin.Any?
|
WHEN type=kotlin.Unit origin=null
|
||||||
FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override]
|
BRANCH
|
||||||
overridden:
|
if: CALL 'public final fun EQEQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EQEQEQ
|
||||||
public open fun hashCode (): kotlin.Int declared in kotlin.Any
|
arg0: GET_VAR '<this>: <root>.Test2<T of <root>.Test2> declared in <root>.Test2.equals' type=<root>.Test2<T of <root>.Test2> origin=null
|
||||||
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
|
arg1: GET_VAR 'other: kotlin.Any? declared in <root>.Test2.equals' type=kotlin.Any? origin=null
|
||||||
FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String [fake_override]
|
then: RETURN type=kotlin.Nothing from='public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in <root>.Test2'
|
||||||
overridden:
|
CONST Boolean type=kotlin.Boolean value=true
|
||||||
public open fun toString (): kotlin.String declared in kotlin.Any
|
WHEN type=kotlin.Unit origin=null
|
||||||
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
|
BRANCH
|
||||||
|
if: TYPE_OP type=kotlin.Boolean origin=NOT_INSTANCEOF typeOperand=<root>.Test2<T of <root>.Test2>
|
||||||
|
GET_VAR 'other: kotlin.Any? declared in <root>.Test2.equals' type=kotlin.Any? origin=null
|
||||||
|
then: RETURN type=kotlin.Nothing from='public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in <root>.Test2'
|
||||||
|
CONST Boolean type=kotlin.Boolean value=false
|
||||||
|
VAR IR_TEMPORARY_VARIABLE name:tmp_1 type:<root>.Test2<T of <root>.Test2> [val]
|
||||||
|
TYPE_OP type=<root>.Test2<T of <root>.Test2> origin=CAST typeOperand=<root>.Test2<T of <root>.Test2>
|
||||||
|
GET_VAR 'other: kotlin.Any? declared in <root>.Test2.equals' type=kotlin.Any? origin=null
|
||||||
|
WHEN type=kotlin.Unit origin=null
|
||||||
|
BRANCH
|
||||||
|
if: CALL 'public final fun not (): kotlin.Boolean [operator] declared in kotlin.Boolean' type=kotlin.Boolean origin=EXCLEQ
|
||||||
|
$this: CALL 'public final fun EQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EXCLEQ
|
||||||
|
arg0: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:x type:T of <root>.Test2 visibility:private [final]' type=T of <root>.Test2 origin=null
|
||||||
|
receiver: GET_VAR '<this>: <root>.Test2<T of <root>.Test2> declared in <root>.Test2.equals' type=<root>.Test2<T of <root>.Test2> origin=null
|
||||||
|
arg1: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:x type:T of <root>.Test2 visibility:private [final]' type=T of <root>.Test2 origin=null
|
||||||
|
receiver: GET_VAR 'val tmp_1: <root>.Test2<T of <root>.Test2> [val] declared in <root>.Test2.equals' type=<root>.Test2<T of <root>.Test2> origin=null
|
||||||
|
then: RETURN type=kotlin.Nothing from='public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in <root>.Test2'
|
||||||
|
CONST Boolean type=kotlin.Boolean value=false
|
||||||
|
RETURN type=kotlin.Nothing from='public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in <root>.Test2'
|
||||||
|
CONST Boolean type=kotlin.Boolean value=true
|
||||||
|
FUN GENERATED_DATA_CLASS_MEMBER name:hashCode visibility:public modality:OPEN <> ($this:<root>.Test2<T of <root>.Test2>) returnType:kotlin.Int
|
||||||
|
$this: VALUE_PARAMETER GENERATED_DATA_CLASS_MEMBER name:<this> type:<root>.Test2<T of <root>.Test2>
|
||||||
|
BLOCK_BODY
|
||||||
|
RETURN type=kotlin.Nothing from='public open fun hashCode (): kotlin.Int declared in <root>.Test2'
|
||||||
|
CALL 'public open fun hashCode (): kotlin.Int declared in kotlin.Any' type=kotlin.Int origin=null
|
||||||
|
$this: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:x type:T of <root>.Test2 visibility:private [final]' type=T of <root>.Test2 origin=null
|
||||||
|
receiver: GET_VAR '<this>: <root>.Test2<T of <root>.Test2> declared in <root>.Test2.hashCode' type=<root>.Test2<T of <root>.Test2> origin=null
|
||||||
|
FUN GENERATED_DATA_CLASS_MEMBER name:toString visibility:public modality:OPEN <> ($this:<root>.Test2<T of <root>.Test2>) returnType:kotlin.String
|
||||||
|
$this: VALUE_PARAMETER GENERATED_DATA_CLASS_MEMBER name:<this> type:<root>.Test2<T of <root>.Test2>
|
||||||
|
BLOCK_BODY
|
||||||
|
RETURN type=kotlin.Nothing from='public open fun toString (): kotlin.String declared in <root>.Test2'
|
||||||
|
STRING_CONCATENATION type=kotlin.String
|
||||||
|
CONST String type=kotlin.String value="Test2("
|
||||||
|
CONST String type=kotlin.String value="x="
|
||||||
|
GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:x type:T of <root>.Test2 visibility:private [final]' type=T of <root>.Test2 origin=null
|
||||||
|
receiver: GET_VAR '<this>: <root>.Test2<T of <root>.Test2> declared in <root>.Test2.toString' type=<root>.Test2<T of <root>.Test2> origin=null
|
||||||
|
CONST String type=kotlin.String value=")"
|
||||||
CLASS CLASS name:Test3 modality:FINAL visibility:public [data] superTypes:[kotlin.Any]
|
CLASS CLASS name:Test3 modality:FINAL visibility:public [data] superTypes:[kotlin.Any]
|
||||||
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.Test3<T of <root>.Test3>
|
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.Test3<T of <root>.Test3>
|
||||||
TYPE_PARAMETER name:T index:0 variance: superTypes:[kotlin.Any?]
|
TYPE_PARAMETER name:T index:0 variance: superTypes:[kotlin.Any?]
|
||||||
@@ -121,19 +202,55 @@ FILE fqName:<root> fileName:/dataClassesGeneric.kt
|
|||||||
CALL 'public final fun <get-x> (): kotlin.collections.List<T of <root>.Test3> declared in <root>.Test3' type=kotlin.collections.List<T of <root>.Test3> origin=GET_PROPERTY
|
CALL 'public final fun <get-x> (): kotlin.collections.List<T of <root>.Test3> declared in <root>.Test3' type=kotlin.collections.List<T of <root>.Test3> origin=GET_PROPERTY
|
||||||
$this: GET_VAR '<this>: <root>.Test3<T of <root>.Test3> declared in <root>.Test3.copy' type=<root>.Test3<T of <root>.Test3> origin=null
|
$this: GET_VAR '<this>: <root>.Test3<T of <root>.Test3> declared in <root>.Test3.copy' type=<root>.Test3<T of <root>.Test3> origin=null
|
||||||
BLOCK_BODY
|
BLOCK_BODY
|
||||||
FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator]
|
FUN GENERATED_DATA_CLASS_MEMBER name:equals visibility:public modality:OPEN <> ($this:<root>.Test3<T of <root>.Test3>, other:kotlin.Any?) returnType:kotlin.Boolean
|
||||||
overridden:
|
$this: VALUE_PARAMETER GENERATED_DATA_CLASS_MEMBER name:<this> type:<root>.Test3<T of <root>.Test3>
|
||||||
public open fun equals (other: kotlin.Any?): kotlin.Boolean [operator] declared in kotlin.Any
|
VALUE_PARAMETER GENERATED_DATA_CLASS_MEMBER name:other index:0 type:kotlin.Any?
|
||||||
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
|
BLOCK_BODY
|
||||||
VALUE_PARAMETER name:other index:0 type:kotlin.Any?
|
WHEN type=kotlin.Unit origin=null
|
||||||
FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override]
|
BRANCH
|
||||||
overridden:
|
if: CALL 'public final fun EQEQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EQEQEQ
|
||||||
public open fun hashCode (): kotlin.Int declared in kotlin.Any
|
arg0: GET_VAR '<this>: <root>.Test3<T of <root>.Test3> declared in <root>.Test3.equals' type=<root>.Test3<T of <root>.Test3> origin=null
|
||||||
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
|
arg1: GET_VAR 'other: kotlin.Any? declared in <root>.Test3.equals' type=kotlin.Any? origin=null
|
||||||
FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String [fake_override]
|
then: RETURN type=kotlin.Nothing from='public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in <root>.Test3'
|
||||||
overridden:
|
CONST Boolean type=kotlin.Boolean value=true
|
||||||
public open fun toString (): kotlin.String declared in kotlin.Any
|
WHEN type=kotlin.Unit origin=null
|
||||||
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
|
BRANCH
|
||||||
|
if: TYPE_OP type=kotlin.Boolean origin=NOT_INSTANCEOF typeOperand=<root>.Test3<T of <root>.Test3>
|
||||||
|
GET_VAR 'other: kotlin.Any? declared in <root>.Test3.equals' type=kotlin.Any? origin=null
|
||||||
|
then: RETURN type=kotlin.Nothing from='public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in <root>.Test3'
|
||||||
|
CONST Boolean type=kotlin.Boolean value=false
|
||||||
|
VAR IR_TEMPORARY_VARIABLE name:tmp_2 type:<root>.Test3<T of <root>.Test3> [val]
|
||||||
|
TYPE_OP type=<root>.Test3<T of <root>.Test3> origin=CAST typeOperand=<root>.Test3<T of <root>.Test3>
|
||||||
|
GET_VAR 'other: kotlin.Any? declared in <root>.Test3.equals' type=kotlin.Any? origin=null
|
||||||
|
WHEN type=kotlin.Unit origin=null
|
||||||
|
BRANCH
|
||||||
|
if: CALL 'public final fun not (): kotlin.Boolean [operator] declared in kotlin.Boolean' type=kotlin.Boolean origin=EXCLEQ
|
||||||
|
$this: CALL 'public final fun EQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EXCLEQ
|
||||||
|
arg0: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:x type:kotlin.collections.List<T of <root>.Test3> visibility:private [final]' type=kotlin.collections.List<T of <root>.Test3> origin=null
|
||||||
|
receiver: GET_VAR '<this>: <root>.Test3<T of <root>.Test3> declared in <root>.Test3.equals' type=<root>.Test3<T of <root>.Test3> origin=null
|
||||||
|
arg1: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:x type:kotlin.collections.List<T of <root>.Test3> visibility:private [final]' type=kotlin.collections.List<T of <root>.Test3> origin=null
|
||||||
|
receiver: GET_VAR 'val tmp_2: <root>.Test3<T of <root>.Test3> [val] declared in <root>.Test3.equals' type=<root>.Test3<T of <root>.Test3> origin=null
|
||||||
|
then: RETURN type=kotlin.Nothing from='public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in <root>.Test3'
|
||||||
|
CONST Boolean type=kotlin.Boolean value=false
|
||||||
|
RETURN type=kotlin.Nothing from='public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in <root>.Test3'
|
||||||
|
CONST Boolean type=kotlin.Boolean value=true
|
||||||
|
FUN GENERATED_DATA_CLASS_MEMBER name:hashCode visibility:public modality:OPEN <> ($this:<root>.Test3<T of <root>.Test3>) returnType:kotlin.Int
|
||||||
|
$this: VALUE_PARAMETER GENERATED_DATA_CLASS_MEMBER name:<this> type:<root>.Test3<T of <root>.Test3>
|
||||||
|
BLOCK_BODY
|
||||||
|
RETURN type=kotlin.Nothing from='public open fun hashCode (): kotlin.Int declared in <root>.Test3'
|
||||||
|
CALL 'public open fun hashCode (): kotlin.Int declared in kotlin.Any' type=kotlin.Int origin=null
|
||||||
|
$this: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:x type:kotlin.collections.List<T of <root>.Test3> visibility:private [final]' type=kotlin.collections.List<T of <root>.Test3> origin=null
|
||||||
|
receiver: GET_VAR '<this>: <root>.Test3<T of <root>.Test3> declared in <root>.Test3.hashCode' type=<root>.Test3<T of <root>.Test3> origin=null
|
||||||
|
FUN GENERATED_DATA_CLASS_MEMBER name:toString visibility:public modality:OPEN <> ($this:<root>.Test3<T of <root>.Test3>) returnType:kotlin.String
|
||||||
|
$this: VALUE_PARAMETER GENERATED_DATA_CLASS_MEMBER name:<this> type:<root>.Test3<T of <root>.Test3>
|
||||||
|
BLOCK_BODY
|
||||||
|
RETURN type=kotlin.Nothing from='public open fun toString (): kotlin.String declared in <root>.Test3'
|
||||||
|
STRING_CONCATENATION type=kotlin.String
|
||||||
|
CONST String type=kotlin.String value="Test3("
|
||||||
|
CONST String type=kotlin.String value="x="
|
||||||
|
GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:x type:kotlin.collections.List<T of <root>.Test3> visibility:private [final]' type=kotlin.collections.List<T of <root>.Test3> origin=null
|
||||||
|
receiver: GET_VAR '<this>: <root>.Test3<T of <root>.Test3> declared in <root>.Test3.toString' type=<root>.Test3<T of <root>.Test3> origin=null
|
||||||
|
CONST String type=kotlin.String value=")"
|
||||||
CLASS CLASS name:Test4 modality:FINAL visibility:public [data] superTypes:[kotlin.Any]
|
CLASS CLASS name:Test4 modality:FINAL visibility:public [data] superTypes:[kotlin.Any]
|
||||||
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.Test4
|
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.Test4
|
||||||
CONSTRUCTOR visibility:public <> (x:kotlin.collections.List<kotlin.String>) returnType:<root>.Test4 [primary]
|
CONSTRUCTOR visibility:public <> (x:kotlin.collections.List<kotlin.String>) returnType:<root>.Test4 [primary]
|
||||||
@@ -165,16 +282,52 @@ FILE fqName:<root> fileName:/dataClassesGeneric.kt
|
|||||||
CALL 'public final fun <get-x> (): kotlin.collections.List<kotlin.String> declared in <root>.Test4' type=kotlin.collections.List<kotlin.String> origin=GET_PROPERTY
|
CALL 'public final fun <get-x> (): kotlin.collections.List<kotlin.String> declared in <root>.Test4' type=kotlin.collections.List<kotlin.String> origin=GET_PROPERTY
|
||||||
$this: GET_VAR '<this>: <root>.Test4 declared in <root>.Test4.copy' type=<root>.Test4 origin=null
|
$this: GET_VAR '<this>: <root>.Test4 declared in <root>.Test4.copy' type=<root>.Test4 origin=null
|
||||||
BLOCK_BODY
|
BLOCK_BODY
|
||||||
FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator]
|
FUN GENERATED_DATA_CLASS_MEMBER name:equals visibility:public modality:OPEN <> ($this:<root>.Test4, other:kotlin.Any?) returnType:kotlin.Boolean
|
||||||
overridden:
|
$this: VALUE_PARAMETER GENERATED_DATA_CLASS_MEMBER name:<this> type:<root>.Test4
|
||||||
public open fun equals (other: kotlin.Any?): kotlin.Boolean [operator] declared in kotlin.Any
|
VALUE_PARAMETER GENERATED_DATA_CLASS_MEMBER name:other index:0 type:kotlin.Any?
|
||||||
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
|
BLOCK_BODY
|
||||||
VALUE_PARAMETER name:other index:0 type:kotlin.Any?
|
WHEN type=kotlin.Unit origin=null
|
||||||
FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override]
|
BRANCH
|
||||||
overridden:
|
if: CALL 'public final fun EQEQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EQEQEQ
|
||||||
public open fun hashCode (): kotlin.Int declared in kotlin.Any
|
arg0: GET_VAR '<this>: <root>.Test4 declared in <root>.Test4.equals' type=<root>.Test4 origin=null
|
||||||
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
|
arg1: GET_VAR 'other: kotlin.Any? declared in <root>.Test4.equals' type=kotlin.Any? origin=null
|
||||||
FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String [fake_override]
|
then: RETURN type=kotlin.Nothing from='public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in <root>.Test4'
|
||||||
overridden:
|
CONST Boolean type=kotlin.Boolean value=true
|
||||||
public open fun toString (): kotlin.String declared in kotlin.Any
|
WHEN type=kotlin.Unit origin=null
|
||||||
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
|
BRANCH
|
||||||
|
if: TYPE_OP type=kotlin.Boolean origin=NOT_INSTANCEOF typeOperand=<root>.Test4
|
||||||
|
GET_VAR 'other: kotlin.Any? declared in <root>.Test4.equals' type=kotlin.Any? origin=null
|
||||||
|
then: RETURN type=kotlin.Nothing from='public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in <root>.Test4'
|
||||||
|
CONST Boolean type=kotlin.Boolean value=false
|
||||||
|
VAR IR_TEMPORARY_VARIABLE name:tmp_3 type:<root>.Test4 [val]
|
||||||
|
TYPE_OP type=<root>.Test4 origin=CAST typeOperand=<root>.Test4
|
||||||
|
GET_VAR 'other: kotlin.Any? declared in <root>.Test4.equals' type=kotlin.Any? origin=null
|
||||||
|
WHEN type=kotlin.Unit origin=null
|
||||||
|
BRANCH
|
||||||
|
if: CALL 'public final fun not (): kotlin.Boolean [operator] declared in kotlin.Boolean' type=kotlin.Boolean origin=EXCLEQ
|
||||||
|
$this: CALL 'public final fun EQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EXCLEQ
|
||||||
|
arg0: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:x type:kotlin.collections.List<kotlin.String> visibility:private [final]' type=kotlin.collections.List<kotlin.String> origin=null
|
||||||
|
receiver: GET_VAR '<this>: <root>.Test4 declared in <root>.Test4.equals' type=<root>.Test4 origin=null
|
||||||
|
arg1: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:x type:kotlin.collections.List<kotlin.String> visibility:private [final]' type=kotlin.collections.List<kotlin.String> origin=null
|
||||||
|
receiver: GET_VAR 'val tmp_3: <root>.Test4 [val] declared in <root>.Test4.equals' type=<root>.Test4 origin=null
|
||||||
|
then: RETURN type=kotlin.Nothing from='public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in <root>.Test4'
|
||||||
|
CONST Boolean type=kotlin.Boolean value=false
|
||||||
|
RETURN type=kotlin.Nothing from='public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in <root>.Test4'
|
||||||
|
CONST Boolean type=kotlin.Boolean value=true
|
||||||
|
FUN GENERATED_DATA_CLASS_MEMBER name:hashCode visibility:public modality:OPEN <> ($this:<root>.Test4) returnType:kotlin.Int
|
||||||
|
$this: VALUE_PARAMETER GENERATED_DATA_CLASS_MEMBER name:<this> type:<root>.Test4
|
||||||
|
BLOCK_BODY
|
||||||
|
RETURN type=kotlin.Nothing from='public open fun hashCode (): kotlin.Int declared in <root>.Test4'
|
||||||
|
CALL 'public open fun hashCode (): kotlin.Int declared in kotlin.Any' type=kotlin.Int origin=null
|
||||||
|
$this: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:x type:kotlin.collections.List<kotlin.String> visibility:private [final]' type=kotlin.collections.List<kotlin.String> origin=null
|
||||||
|
receiver: GET_VAR '<this>: <root>.Test4 declared in <root>.Test4.hashCode' type=<root>.Test4 origin=null
|
||||||
|
FUN GENERATED_DATA_CLASS_MEMBER name:toString visibility:public modality:OPEN <> ($this:<root>.Test4) returnType:kotlin.String
|
||||||
|
$this: VALUE_PARAMETER GENERATED_DATA_CLASS_MEMBER name:<this> type:<root>.Test4
|
||||||
|
BLOCK_BODY
|
||||||
|
RETURN type=kotlin.Nothing from='public open fun toString (): kotlin.String declared in <root>.Test4'
|
||||||
|
STRING_CONCATENATION type=kotlin.String
|
||||||
|
CONST String type=kotlin.String value="Test4("
|
||||||
|
CONST String type=kotlin.String value="x="
|
||||||
|
GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:x type:kotlin.collections.List<kotlin.String> visibility:private [final]' type=kotlin.collections.List<kotlin.String> origin=null
|
||||||
|
receiver: GET_VAR '<this>: <root>.Test4 declared in <root>.Test4.toString' type=<root>.Test4 origin=null
|
||||||
|
CONST String type=kotlin.String value=")"
|
||||||
|
|||||||
+58
-13
@@ -30,19 +30,64 @@ FILE fqName:<root> fileName:/kt31649.kt
|
|||||||
CALL 'public final fun <get-nn> (): kotlin.Nothing? declared in <root>.TestData' type=kotlin.Nothing? origin=GET_PROPERTY
|
CALL 'public final fun <get-nn> (): kotlin.Nothing? declared in <root>.TestData' type=kotlin.Nothing? origin=GET_PROPERTY
|
||||||
$this: GET_VAR '<this>: <root>.TestData declared in <root>.TestData.copy' type=<root>.TestData origin=null
|
$this: GET_VAR '<this>: <root>.TestData declared in <root>.TestData.copy' type=<root>.TestData origin=null
|
||||||
BLOCK_BODY
|
BLOCK_BODY
|
||||||
FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator]
|
FUN GENERATED_DATA_CLASS_MEMBER name:equals visibility:public modality:OPEN <> ($this:<root>.TestData, other:kotlin.Any?) returnType:kotlin.Boolean
|
||||||
overridden:
|
$this: VALUE_PARAMETER GENERATED_DATA_CLASS_MEMBER name:<this> type:<root>.TestData
|
||||||
public open fun equals (other: kotlin.Any?): kotlin.Boolean [operator] declared in kotlin.Any
|
VALUE_PARAMETER GENERATED_DATA_CLASS_MEMBER name:other index:0 type:kotlin.Any?
|
||||||
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
|
BLOCK_BODY
|
||||||
VALUE_PARAMETER name:other index:0 type:kotlin.Any?
|
WHEN type=kotlin.Unit origin=null
|
||||||
FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override]
|
BRANCH
|
||||||
overridden:
|
if: CALL 'public final fun EQEQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EQEQEQ
|
||||||
public open fun hashCode (): kotlin.Int declared in kotlin.Any
|
arg0: GET_VAR '<this>: <root>.TestData declared in <root>.TestData.equals' type=<root>.TestData origin=null
|
||||||
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
|
arg1: GET_VAR 'other: kotlin.Any? declared in <root>.TestData.equals' type=kotlin.Any? origin=null
|
||||||
FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String [fake_override]
|
then: RETURN type=kotlin.Nothing from='public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in <root>.TestData'
|
||||||
overridden:
|
CONST Boolean type=kotlin.Boolean value=true
|
||||||
public open fun toString (): kotlin.String declared in kotlin.Any
|
WHEN type=kotlin.Unit origin=null
|
||||||
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
|
BRANCH
|
||||||
|
if: TYPE_OP type=kotlin.Boolean origin=NOT_INSTANCEOF typeOperand=<root>.TestData
|
||||||
|
GET_VAR 'other: kotlin.Any? declared in <root>.TestData.equals' type=kotlin.Any? origin=null
|
||||||
|
then: RETURN type=kotlin.Nothing from='public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in <root>.TestData'
|
||||||
|
CONST Boolean type=kotlin.Boolean value=false
|
||||||
|
VAR IR_TEMPORARY_VARIABLE name:tmp_0 type:<root>.TestData [val]
|
||||||
|
TYPE_OP type=<root>.TestData origin=CAST typeOperand=<root>.TestData
|
||||||
|
GET_VAR 'other: kotlin.Any? declared in <root>.TestData.equals' type=kotlin.Any? origin=null
|
||||||
|
WHEN type=kotlin.Unit origin=null
|
||||||
|
BRANCH
|
||||||
|
if: CALL 'public final fun not (): kotlin.Boolean [operator] declared in kotlin.Boolean' type=kotlin.Boolean origin=EXCLEQ
|
||||||
|
$this: CALL 'public final fun EQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EXCLEQ
|
||||||
|
arg0: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:nn type:kotlin.Nothing? visibility:private [final]' type=kotlin.Nothing? origin=null
|
||||||
|
receiver: GET_VAR '<this>: <root>.TestData declared in <root>.TestData.equals' type=<root>.TestData origin=null
|
||||||
|
arg1: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:nn type:kotlin.Nothing? visibility:private [final]' type=kotlin.Nothing? origin=null
|
||||||
|
receiver: GET_VAR 'val tmp_0: <root>.TestData [val] declared in <root>.TestData.equals' type=<root>.TestData origin=null
|
||||||
|
then: RETURN type=kotlin.Nothing from='public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in <root>.TestData'
|
||||||
|
CONST Boolean type=kotlin.Boolean value=false
|
||||||
|
RETURN type=kotlin.Nothing from='public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in <root>.TestData'
|
||||||
|
CONST Boolean type=kotlin.Boolean value=true
|
||||||
|
FUN GENERATED_DATA_CLASS_MEMBER name:hashCode visibility:public modality:OPEN <> ($this:<root>.TestData) returnType:kotlin.Int
|
||||||
|
$this: VALUE_PARAMETER GENERATED_DATA_CLASS_MEMBER name:<this> type:<root>.TestData
|
||||||
|
BLOCK_BODY
|
||||||
|
RETURN type=kotlin.Nothing from='public open fun hashCode (): kotlin.Int declared in <root>.TestData'
|
||||||
|
WHEN type=kotlin.Int origin=null
|
||||||
|
BRANCH
|
||||||
|
if: CALL 'public final fun EQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EQEQ
|
||||||
|
arg0: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:nn type:kotlin.Nothing? visibility:private [final]' type=kotlin.Nothing? origin=null
|
||||||
|
receiver: GET_VAR '<this>: <root>.TestData declared in <root>.TestData.hashCode' type=<root>.TestData origin=null
|
||||||
|
arg1: CONST Null type=kotlin.Nothing? value=null
|
||||||
|
then: CONST Int type=kotlin.Int value=0
|
||||||
|
BRANCH
|
||||||
|
if: CONST Boolean type=kotlin.Boolean value=true
|
||||||
|
then: CALL 'public open fun hashCode (): kotlin.Int declared in kotlin.Any' type=kotlin.Int origin=null
|
||||||
|
$this: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:nn type:kotlin.Nothing? visibility:private [final]' type=kotlin.Nothing? origin=null
|
||||||
|
receiver: GET_VAR '<this>: <root>.TestData declared in <root>.TestData.hashCode' type=<root>.TestData origin=null
|
||||||
|
FUN GENERATED_DATA_CLASS_MEMBER name:toString visibility:public modality:OPEN <> ($this:<root>.TestData) returnType:kotlin.String
|
||||||
|
$this: VALUE_PARAMETER GENERATED_DATA_CLASS_MEMBER name:<this> type:<root>.TestData
|
||||||
|
BLOCK_BODY
|
||||||
|
RETURN type=kotlin.Nothing from='public open fun toString (): kotlin.String declared in <root>.TestData'
|
||||||
|
STRING_CONCATENATION type=kotlin.String
|
||||||
|
CONST String type=kotlin.String value="TestData("
|
||||||
|
CONST String type=kotlin.String value="nn="
|
||||||
|
GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:nn type:kotlin.Nothing? visibility:private [final]' type=kotlin.Nothing? origin=null
|
||||||
|
receiver: GET_VAR '<this>: <root>.TestData declared in <root>.TestData.toString' type=<root>.TestData origin=null
|
||||||
|
CONST String type=kotlin.String value=")"
|
||||||
CLASS CLASS name:TestInline modality:FINAL visibility:public [inline] superTypes:[kotlin.Any]
|
CLASS CLASS name:TestInline modality:FINAL visibility:public [inline] superTypes:[kotlin.Any]
|
||||||
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.TestInline
|
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.TestInline
|
||||||
CONSTRUCTOR visibility:public <> (nn:kotlin.Nothing?) returnType:<root>.TestInline [primary]
|
CONSTRUCTOR visibility:public <> (nn:kotlin.Nothing?) returnType:<root>.TestInline [primary]
|
||||||
|
|||||||
+98
-26
@@ -37,19 +37,55 @@ FILE fqName:<root> fileName:/lambdaInDataClassDefaultParameter.kt
|
|||||||
CALL 'public final fun <get-runA> (): kotlin.Function2<<root>.A, kotlin.String, kotlin.Unit> declared in <root>.A' type=kotlin.Function2<<root>.A, kotlin.String, kotlin.Unit> origin=GET_PROPERTY
|
CALL 'public final fun <get-runA> (): kotlin.Function2<<root>.A, kotlin.String, kotlin.Unit> declared in <root>.A' type=kotlin.Function2<<root>.A, kotlin.String, kotlin.Unit> origin=GET_PROPERTY
|
||||||
$this: GET_VAR '<this>: <root>.A declared in <root>.A.copy' type=<root>.A origin=null
|
$this: GET_VAR '<this>: <root>.A declared in <root>.A.copy' type=<root>.A origin=null
|
||||||
BLOCK_BODY
|
BLOCK_BODY
|
||||||
FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator]
|
FUN GENERATED_DATA_CLASS_MEMBER name:equals visibility:public modality:OPEN <> ($this:<root>.A, other:kotlin.Any?) returnType:kotlin.Boolean
|
||||||
overridden:
|
$this: VALUE_PARAMETER GENERATED_DATA_CLASS_MEMBER name:<this> type:<root>.A
|
||||||
public open fun equals (other: kotlin.Any?): kotlin.Boolean [operator] declared in kotlin.Any
|
VALUE_PARAMETER GENERATED_DATA_CLASS_MEMBER name:other index:0 type:kotlin.Any?
|
||||||
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
|
BLOCK_BODY
|
||||||
VALUE_PARAMETER name:other index:0 type:kotlin.Any?
|
WHEN type=kotlin.Unit origin=null
|
||||||
FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override]
|
BRANCH
|
||||||
overridden:
|
if: CALL 'public final fun EQEQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EQEQEQ
|
||||||
public open fun hashCode (): kotlin.Int declared in kotlin.Any
|
arg0: GET_VAR '<this>: <root>.A declared in <root>.A.equals' type=<root>.A origin=null
|
||||||
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
|
arg1: GET_VAR 'other: kotlin.Any? declared in <root>.A.equals' type=kotlin.Any? origin=null
|
||||||
FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String [fake_override]
|
then: RETURN type=kotlin.Nothing from='public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in <root>.A'
|
||||||
overridden:
|
CONST Boolean type=kotlin.Boolean value=true
|
||||||
public open fun toString (): kotlin.String declared in kotlin.Any
|
WHEN type=kotlin.Unit origin=null
|
||||||
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
|
BRANCH
|
||||||
|
if: TYPE_OP type=kotlin.Boolean origin=NOT_INSTANCEOF typeOperand=<root>.A
|
||||||
|
GET_VAR 'other: kotlin.Any? declared in <root>.A.equals' type=kotlin.Any? origin=null
|
||||||
|
then: RETURN type=kotlin.Nothing from='public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in <root>.A'
|
||||||
|
CONST Boolean type=kotlin.Boolean value=false
|
||||||
|
VAR IR_TEMPORARY_VARIABLE name:tmp_0 type:<root>.A [val]
|
||||||
|
TYPE_OP type=<root>.A origin=CAST typeOperand=<root>.A
|
||||||
|
GET_VAR 'other: kotlin.Any? declared in <root>.A.equals' type=kotlin.Any? origin=null
|
||||||
|
WHEN type=kotlin.Unit origin=null
|
||||||
|
BRANCH
|
||||||
|
if: CALL 'public final fun not (): kotlin.Boolean [operator] declared in kotlin.Boolean' type=kotlin.Boolean origin=EXCLEQ
|
||||||
|
$this: CALL 'public final fun EQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EXCLEQ
|
||||||
|
arg0: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:runA type:kotlin.Function2<<root>.A, kotlin.String, kotlin.Unit> visibility:private [final]' type=kotlin.Function2<<root>.A, kotlin.String, kotlin.Unit> origin=null
|
||||||
|
receiver: GET_VAR '<this>: <root>.A declared in <root>.A.equals' type=<root>.A origin=null
|
||||||
|
arg1: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:runA type:kotlin.Function2<<root>.A, kotlin.String, kotlin.Unit> visibility:private [final]' type=kotlin.Function2<<root>.A, kotlin.String, kotlin.Unit> origin=null
|
||||||
|
receiver: GET_VAR 'val tmp_0: <root>.A [val] declared in <root>.A.equals' type=<root>.A origin=null
|
||||||
|
then: RETURN type=kotlin.Nothing from='public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in <root>.A'
|
||||||
|
CONST Boolean type=kotlin.Boolean value=false
|
||||||
|
RETURN type=kotlin.Nothing from='public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in <root>.A'
|
||||||
|
CONST Boolean type=kotlin.Boolean value=true
|
||||||
|
FUN GENERATED_DATA_CLASS_MEMBER name:hashCode visibility:public modality:OPEN <> ($this:<root>.A) returnType:kotlin.Int
|
||||||
|
$this: VALUE_PARAMETER GENERATED_DATA_CLASS_MEMBER name:<this> type:<root>.A
|
||||||
|
BLOCK_BODY
|
||||||
|
RETURN type=kotlin.Nothing from='public open fun hashCode (): kotlin.Int declared in <root>.A'
|
||||||
|
CALL 'public open fun hashCode (): kotlin.Int declared in kotlin.Any' type=kotlin.Int origin=null
|
||||||
|
$this: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:runA type:kotlin.Function2<<root>.A, kotlin.String, kotlin.Unit> visibility:private [final]' type=kotlin.Function2<<root>.A, kotlin.String, kotlin.Unit> origin=null
|
||||||
|
receiver: GET_VAR '<this>: <root>.A declared in <root>.A.hashCode' type=<root>.A origin=null
|
||||||
|
FUN GENERATED_DATA_CLASS_MEMBER name:toString visibility:public modality:OPEN <> ($this:<root>.A) returnType:kotlin.String
|
||||||
|
$this: VALUE_PARAMETER GENERATED_DATA_CLASS_MEMBER name:<this> type:<root>.A
|
||||||
|
BLOCK_BODY
|
||||||
|
RETURN type=kotlin.Nothing from='public open fun toString (): kotlin.String declared in <root>.A'
|
||||||
|
STRING_CONCATENATION type=kotlin.String
|
||||||
|
CONST String type=kotlin.String value="A("
|
||||||
|
CONST String type=kotlin.String value="runA="
|
||||||
|
GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:runA type:kotlin.Function2<<root>.A, kotlin.String, kotlin.Unit> visibility:private [final]' type=kotlin.Function2<<root>.A, kotlin.String, kotlin.Unit> origin=null
|
||||||
|
receiver: GET_VAR '<this>: <root>.A declared in <root>.A.toString' type=<root>.A origin=null
|
||||||
|
CONST String type=kotlin.String value=")"
|
||||||
CLASS CLASS name:B modality:FINAL visibility:public [data] superTypes:[kotlin.Any]
|
CLASS CLASS name:B modality:FINAL visibility:public [data] superTypes:[kotlin.Any]
|
||||||
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.B
|
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.B
|
||||||
CONSTRUCTOR visibility:public <> (x:kotlin.Any) returnType:<root>.B [primary]
|
CONSTRUCTOR visibility:public <> (x:kotlin.Any) returnType:<root>.B [primary]
|
||||||
@@ -103,16 +139,52 @@ FILE fqName:<root> fileName:/lambdaInDataClassDefaultParameter.kt
|
|||||||
CALL 'public final fun <get-x> (): kotlin.Any declared in <root>.B' type=kotlin.Any origin=GET_PROPERTY
|
CALL 'public final fun <get-x> (): kotlin.Any declared in <root>.B' type=kotlin.Any origin=GET_PROPERTY
|
||||||
$this: GET_VAR '<this>: <root>.B declared in <root>.B.copy' type=<root>.B origin=null
|
$this: GET_VAR '<this>: <root>.B declared in <root>.B.copy' type=<root>.B origin=null
|
||||||
BLOCK_BODY
|
BLOCK_BODY
|
||||||
FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator]
|
FUN GENERATED_DATA_CLASS_MEMBER name:equals visibility:public modality:OPEN <> ($this:<root>.B, other:kotlin.Any?) returnType:kotlin.Boolean
|
||||||
overridden:
|
$this: VALUE_PARAMETER GENERATED_DATA_CLASS_MEMBER name:<this> type:<root>.B
|
||||||
public open fun equals (other: kotlin.Any?): kotlin.Boolean [operator] declared in kotlin.Any
|
VALUE_PARAMETER GENERATED_DATA_CLASS_MEMBER name:other index:0 type:kotlin.Any?
|
||||||
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
|
BLOCK_BODY
|
||||||
VALUE_PARAMETER name:other index:0 type:kotlin.Any?
|
WHEN type=kotlin.Unit origin=null
|
||||||
FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override]
|
BRANCH
|
||||||
overridden:
|
if: CALL 'public final fun EQEQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EQEQEQ
|
||||||
public open fun hashCode (): kotlin.Int declared in kotlin.Any
|
arg0: GET_VAR '<this>: <root>.B declared in <root>.B.equals' type=<root>.B origin=null
|
||||||
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
|
arg1: GET_VAR 'other: kotlin.Any? declared in <root>.B.equals' type=kotlin.Any? origin=null
|
||||||
FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String [fake_override]
|
then: RETURN type=kotlin.Nothing from='public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in <root>.B'
|
||||||
overridden:
|
CONST Boolean type=kotlin.Boolean value=true
|
||||||
public open fun toString (): kotlin.String declared in kotlin.Any
|
WHEN type=kotlin.Unit origin=null
|
||||||
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
|
BRANCH
|
||||||
|
if: TYPE_OP type=kotlin.Boolean origin=NOT_INSTANCEOF typeOperand=<root>.B
|
||||||
|
GET_VAR 'other: kotlin.Any? declared in <root>.B.equals' type=kotlin.Any? origin=null
|
||||||
|
then: RETURN type=kotlin.Nothing from='public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in <root>.B'
|
||||||
|
CONST Boolean type=kotlin.Boolean value=false
|
||||||
|
VAR IR_TEMPORARY_VARIABLE name:tmp_1 type:<root>.B [val]
|
||||||
|
TYPE_OP type=<root>.B origin=CAST typeOperand=<root>.B
|
||||||
|
GET_VAR 'other: kotlin.Any? declared in <root>.B.equals' type=kotlin.Any? origin=null
|
||||||
|
WHEN type=kotlin.Unit origin=null
|
||||||
|
BRANCH
|
||||||
|
if: CALL 'public final fun not (): kotlin.Boolean [operator] declared in kotlin.Boolean' type=kotlin.Boolean origin=EXCLEQ
|
||||||
|
$this: CALL 'public final fun EQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EXCLEQ
|
||||||
|
arg0: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:x type:kotlin.Any visibility:private [final]' type=kotlin.Any origin=null
|
||||||
|
receiver: GET_VAR '<this>: <root>.B declared in <root>.B.equals' type=<root>.B origin=null
|
||||||
|
arg1: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:x type:kotlin.Any visibility:private [final]' type=kotlin.Any origin=null
|
||||||
|
receiver: GET_VAR 'val tmp_1: <root>.B [val] declared in <root>.B.equals' type=<root>.B origin=null
|
||||||
|
then: RETURN type=kotlin.Nothing from='public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in <root>.B'
|
||||||
|
CONST Boolean type=kotlin.Boolean value=false
|
||||||
|
RETURN type=kotlin.Nothing from='public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in <root>.B'
|
||||||
|
CONST Boolean type=kotlin.Boolean value=true
|
||||||
|
FUN GENERATED_DATA_CLASS_MEMBER name:hashCode visibility:public modality:OPEN <> ($this:<root>.B) returnType:kotlin.Int
|
||||||
|
$this: VALUE_PARAMETER GENERATED_DATA_CLASS_MEMBER name:<this> type:<root>.B
|
||||||
|
BLOCK_BODY
|
||||||
|
RETURN type=kotlin.Nothing from='public open fun hashCode (): kotlin.Int declared in <root>.B'
|
||||||
|
CALL 'public open fun hashCode (): kotlin.Int declared in kotlin.Any' type=kotlin.Int origin=null
|
||||||
|
$this: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:x type:kotlin.Any visibility:private [final]' type=kotlin.Any origin=null
|
||||||
|
receiver: GET_VAR '<this>: <root>.B declared in <root>.B.hashCode' type=<root>.B origin=null
|
||||||
|
FUN GENERATED_DATA_CLASS_MEMBER name:toString visibility:public modality:OPEN <> ($this:<root>.B) returnType:kotlin.String
|
||||||
|
$this: VALUE_PARAMETER GENERATED_DATA_CLASS_MEMBER name:<this> type:<root>.B
|
||||||
|
BLOCK_BODY
|
||||||
|
RETURN type=kotlin.Nothing from='public open fun toString (): kotlin.String declared in <root>.B'
|
||||||
|
STRING_CONCATENATION type=kotlin.String
|
||||||
|
CONST String type=kotlin.String value="B("
|
||||||
|
CONST String type=kotlin.String value="x="
|
||||||
|
GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:x type:kotlin.Any visibility:private [final]' type=kotlin.Any origin=null
|
||||||
|
receiver: GET_VAR '<this>: <root>.B declared in <root>.B.toString' type=<root>.B origin=null
|
||||||
|
CONST String type=kotlin.String value=")"
|
||||||
|
|||||||
+78
-13
@@ -55,16 +55,81 @@ FILE fqName:<root> fileName:/dataClassMembers.kt
|
|||||||
CALL 'public final fun <get-y> (): kotlin.String declared in <root>.Test' type=kotlin.String origin=GET_PROPERTY
|
CALL 'public final fun <get-y> (): kotlin.String declared in <root>.Test' type=kotlin.String origin=GET_PROPERTY
|
||||||
$this: GET_VAR '<this>: <root>.Test<T of <root>.Test> declared in <root>.Test.copy' type=<root>.Test<T of <root>.Test> origin=null
|
$this: GET_VAR '<this>: <root>.Test<T of <root>.Test> declared in <root>.Test.copy' type=<root>.Test<T of <root>.Test> origin=null
|
||||||
BLOCK_BODY
|
BLOCK_BODY
|
||||||
FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator]
|
FUN GENERATED_DATA_CLASS_MEMBER name:equals visibility:public modality:OPEN <> ($this:<root>.Test<T of <root>.Test>, other:kotlin.Any?) returnType:kotlin.Boolean
|
||||||
overridden:
|
$this: VALUE_PARAMETER GENERATED_DATA_CLASS_MEMBER name:<this> type:<root>.Test<T of <root>.Test>
|
||||||
public open fun equals (other: kotlin.Any?): kotlin.Boolean [operator] declared in kotlin.Any
|
VALUE_PARAMETER GENERATED_DATA_CLASS_MEMBER name:other index:0 type:kotlin.Any?
|
||||||
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
|
BLOCK_BODY
|
||||||
VALUE_PARAMETER name:other index:0 type:kotlin.Any?
|
WHEN type=kotlin.Unit origin=null
|
||||||
FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override]
|
BRANCH
|
||||||
overridden:
|
if: CALL 'public final fun EQEQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EQEQEQ
|
||||||
public open fun hashCode (): kotlin.Int declared in kotlin.Any
|
arg0: GET_VAR '<this>: <root>.Test<T of <root>.Test> declared in <root>.Test.equals' type=<root>.Test<T of <root>.Test> origin=null
|
||||||
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
|
arg1: GET_VAR 'other: kotlin.Any? declared in <root>.Test.equals' type=kotlin.Any? origin=null
|
||||||
FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String [fake_override]
|
then: RETURN type=kotlin.Nothing from='public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in <root>.Test'
|
||||||
overridden:
|
CONST Boolean type=kotlin.Boolean value=true
|
||||||
public open fun toString (): kotlin.String declared in kotlin.Any
|
WHEN type=kotlin.Unit origin=null
|
||||||
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
|
BRANCH
|
||||||
|
if: TYPE_OP type=kotlin.Boolean origin=NOT_INSTANCEOF typeOperand=<root>.Test<T of <root>.Test>
|
||||||
|
GET_VAR 'other: kotlin.Any? declared in <root>.Test.equals' type=kotlin.Any? origin=null
|
||||||
|
then: RETURN type=kotlin.Nothing from='public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in <root>.Test'
|
||||||
|
CONST Boolean type=kotlin.Boolean value=false
|
||||||
|
VAR IR_TEMPORARY_VARIABLE name:tmp_0 type:<root>.Test<T of <root>.Test> [val]
|
||||||
|
TYPE_OP type=<root>.Test<T of <root>.Test> origin=CAST typeOperand=<root>.Test<T of <root>.Test>
|
||||||
|
GET_VAR 'other: kotlin.Any? declared in <root>.Test.equals' type=kotlin.Any? origin=null
|
||||||
|
WHEN type=kotlin.Unit origin=null
|
||||||
|
BRANCH
|
||||||
|
if: CALL 'public final fun not (): kotlin.Boolean [operator] declared in kotlin.Boolean' type=kotlin.Boolean origin=EXCLEQ
|
||||||
|
$this: CALL 'public final fun EQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EXCLEQ
|
||||||
|
arg0: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:x type:T of <root>.Test visibility:private [final]' type=T of <root>.Test origin=null
|
||||||
|
receiver: GET_VAR '<this>: <root>.Test<T of <root>.Test> declared in <root>.Test.equals' type=<root>.Test<T of <root>.Test> origin=null
|
||||||
|
arg1: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:x type:T of <root>.Test visibility:private [final]' type=T of <root>.Test origin=null
|
||||||
|
receiver: GET_VAR 'val tmp_0: <root>.Test<T of <root>.Test> [val] declared in <root>.Test.equals' type=<root>.Test<T of <root>.Test> origin=null
|
||||||
|
then: RETURN type=kotlin.Nothing from='public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in <root>.Test'
|
||||||
|
CONST Boolean type=kotlin.Boolean value=false
|
||||||
|
WHEN type=kotlin.Unit origin=null
|
||||||
|
BRANCH
|
||||||
|
if: CALL 'public final fun not (): kotlin.Boolean [operator] declared in kotlin.Boolean' type=kotlin.Boolean origin=EXCLEQ
|
||||||
|
$this: CALL 'public final fun EQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EXCLEQ
|
||||||
|
arg0: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:y type:kotlin.String visibility:private [final]' type=kotlin.String origin=null
|
||||||
|
receiver: GET_VAR '<this>: <root>.Test<T of <root>.Test> declared in <root>.Test.equals' type=<root>.Test<T of <root>.Test> origin=null
|
||||||
|
arg1: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:y type:kotlin.String visibility:private [final]' type=kotlin.String origin=null
|
||||||
|
receiver: GET_VAR 'val tmp_0: <root>.Test<T of <root>.Test> [val] declared in <root>.Test.equals' type=<root>.Test<T of <root>.Test> origin=null
|
||||||
|
then: RETURN type=kotlin.Nothing from='public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in <root>.Test'
|
||||||
|
CONST Boolean type=kotlin.Boolean value=false
|
||||||
|
RETURN type=kotlin.Nothing from='public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in <root>.Test'
|
||||||
|
CONST Boolean type=kotlin.Boolean value=true
|
||||||
|
FUN GENERATED_DATA_CLASS_MEMBER name:hashCode visibility:public modality:OPEN <> ($this:<root>.Test<T of <root>.Test>) returnType:kotlin.Int
|
||||||
|
$this: VALUE_PARAMETER GENERATED_DATA_CLASS_MEMBER name:<this> type:<root>.Test<T of <root>.Test>
|
||||||
|
BLOCK_BODY
|
||||||
|
RETURN type=kotlin.Nothing from='public open fun hashCode (): kotlin.Int declared in <root>.Test'
|
||||||
|
CALL 'public final fun plus (other: kotlin.Int): kotlin.Int [operator] declared in kotlin.Int' type=kotlin.Int origin=null
|
||||||
|
$this: CALL 'public final fun times (other: kotlin.Int): kotlin.Int [operator] declared in kotlin.Int' type=kotlin.Int origin=null
|
||||||
|
$this: WHEN type=kotlin.Int origin=null
|
||||||
|
BRANCH
|
||||||
|
if: CALL 'public final fun EQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EQEQ
|
||||||
|
arg0: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:x type:T of <root>.Test visibility:private [final]' type=T of <root>.Test origin=null
|
||||||
|
receiver: GET_VAR '<this>: <root>.Test<T of <root>.Test> declared in <root>.Test.hashCode' type=<root>.Test<T of <root>.Test> origin=null
|
||||||
|
arg1: CONST Null type=kotlin.Nothing? value=null
|
||||||
|
then: CONST Int type=kotlin.Int value=0
|
||||||
|
BRANCH
|
||||||
|
if: CONST Boolean type=kotlin.Boolean value=true
|
||||||
|
then: CALL 'public open fun hashCode (): kotlin.Int declared in kotlin.Any' type=kotlin.Int origin=null
|
||||||
|
$this: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:x type:T of <root>.Test visibility:private [final]' type=T of <root>.Test origin=null
|
||||||
|
receiver: GET_VAR '<this>: <root>.Test<T of <root>.Test> declared in <root>.Test.hashCode' type=<root>.Test<T of <root>.Test> origin=null
|
||||||
|
other: CONST Int type=kotlin.Int value=31
|
||||||
|
other: CALL 'public open fun hashCode (): kotlin.Int [fake_override] declared in kotlin.String' type=kotlin.Int origin=null
|
||||||
|
$this: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:y type:kotlin.String visibility:private [final]' type=kotlin.String origin=null
|
||||||
|
receiver: GET_VAR '<this>: <root>.Test<T of <root>.Test> declared in <root>.Test.hashCode' type=<root>.Test<T of <root>.Test> origin=null
|
||||||
|
FUN GENERATED_DATA_CLASS_MEMBER name:toString visibility:public modality:OPEN <> ($this:<root>.Test<T of <root>.Test>) returnType:kotlin.String
|
||||||
|
$this: VALUE_PARAMETER GENERATED_DATA_CLASS_MEMBER name:<this> type:<root>.Test<T of <root>.Test>
|
||||||
|
BLOCK_BODY
|
||||||
|
RETURN type=kotlin.Nothing from='public open fun toString (): kotlin.String declared in <root>.Test'
|
||||||
|
STRING_CONCATENATION type=kotlin.String
|
||||||
|
CONST String type=kotlin.String value="Test("
|
||||||
|
CONST String type=kotlin.String value="x="
|
||||||
|
GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:x type:T of <root>.Test visibility:private [final]' type=T of <root>.Test origin=null
|
||||||
|
receiver: GET_VAR '<this>: <root>.Test<T of <root>.Test> declared in <root>.Test.toString' type=<root>.Test<T of <root>.Test> origin=null
|
||||||
|
CONST String type=kotlin.String value=", "
|
||||||
|
CONST String type=kotlin.String value="y="
|
||||||
|
GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:y type:kotlin.String visibility:private [final]' type=kotlin.String origin=null
|
||||||
|
receiver: GET_VAR '<this>: <root>.Test<T of <root>.Test> declared in <root>.Test.toString' type=<root>.Test<T of <root>.Test> origin=null
|
||||||
|
CONST String type=kotlin.String value=")"
|
||||||
|
|||||||
@@ -52,19 +52,75 @@ FILE fqName:<root> fileName:/destructuringInLambda.kt
|
|||||||
CALL 'public final fun <get-y> (): kotlin.Int declared in <root>.A' type=kotlin.Int origin=GET_PROPERTY
|
CALL 'public final fun <get-y> (): kotlin.Int declared in <root>.A' type=kotlin.Int origin=GET_PROPERTY
|
||||||
$this: GET_VAR '<this>: <root>.A declared in <root>.A.copy' type=<root>.A origin=null
|
$this: GET_VAR '<this>: <root>.A declared in <root>.A.copy' type=<root>.A origin=null
|
||||||
BLOCK_BODY
|
BLOCK_BODY
|
||||||
FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator]
|
FUN GENERATED_DATA_CLASS_MEMBER name:equals visibility:public modality:OPEN <> ($this:<root>.A, other:kotlin.Any?) returnType:kotlin.Boolean
|
||||||
overridden:
|
$this: VALUE_PARAMETER GENERATED_DATA_CLASS_MEMBER name:<this> type:<root>.A
|
||||||
public open fun equals (other: kotlin.Any?): kotlin.Boolean [operator] declared in kotlin.Any
|
VALUE_PARAMETER GENERATED_DATA_CLASS_MEMBER name:other index:0 type:kotlin.Any?
|
||||||
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
|
BLOCK_BODY
|
||||||
VALUE_PARAMETER name:other index:0 type:kotlin.Any?
|
WHEN type=kotlin.Unit origin=null
|
||||||
FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override]
|
BRANCH
|
||||||
overridden:
|
if: CALL 'public final fun EQEQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EQEQEQ
|
||||||
public open fun hashCode (): kotlin.Int declared in kotlin.Any
|
arg0: GET_VAR '<this>: <root>.A declared in <root>.A.equals' type=<root>.A origin=null
|
||||||
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
|
arg1: GET_VAR 'other: kotlin.Any? declared in <root>.A.equals' type=kotlin.Any? origin=null
|
||||||
FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String [fake_override]
|
then: RETURN type=kotlin.Nothing from='public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in <root>.A'
|
||||||
overridden:
|
CONST Boolean type=kotlin.Boolean value=true
|
||||||
public open fun toString (): kotlin.String declared in kotlin.Any
|
WHEN type=kotlin.Unit origin=null
|
||||||
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
|
BRANCH
|
||||||
|
if: TYPE_OP type=kotlin.Boolean origin=NOT_INSTANCEOF typeOperand=<root>.A
|
||||||
|
GET_VAR 'other: kotlin.Any? declared in <root>.A.equals' type=kotlin.Any? origin=null
|
||||||
|
then: RETURN type=kotlin.Nothing from='public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in <root>.A'
|
||||||
|
CONST Boolean type=kotlin.Boolean value=false
|
||||||
|
VAR IR_TEMPORARY_VARIABLE name:tmp_0 type:<root>.A [val]
|
||||||
|
TYPE_OP type=<root>.A origin=CAST typeOperand=<root>.A
|
||||||
|
GET_VAR 'other: kotlin.Any? declared in <root>.A.equals' type=kotlin.Any? origin=null
|
||||||
|
WHEN type=kotlin.Unit origin=null
|
||||||
|
BRANCH
|
||||||
|
if: CALL 'public final fun not (): kotlin.Boolean [operator] declared in kotlin.Boolean' type=kotlin.Boolean origin=EXCLEQ
|
||||||
|
$this: CALL 'public final fun EQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EXCLEQ
|
||||||
|
arg0: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:x type:kotlin.Int visibility:private [final]' type=kotlin.Int origin=null
|
||||||
|
receiver: GET_VAR '<this>: <root>.A declared in <root>.A.equals' type=<root>.A origin=null
|
||||||
|
arg1: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:x type:kotlin.Int visibility:private [final]' type=kotlin.Int origin=null
|
||||||
|
receiver: GET_VAR 'val tmp_0: <root>.A [val] declared in <root>.A.equals' type=<root>.A origin=null
|
||||||
|
then: RETURN type=kotlin.Nothing from='public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in <root>.A'
|
||||||
|
CONST Boolean type=kotlin.Boolean value=false
|
||||||
|
WHEN type=kotlin.Unit origin=null
|
||||||
|
BRANCH
|
||||||
|
if: CALL 'public final fun not (): kotlin.Boolean [operator] declared in kotlin.Boolean' type=kotlin.Boolean origin=EXCLEQ
|
||||||
|
$this: CALL 'public final fun EQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EXCLEQ
|
||||||
|
arg0: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:y type:kotlin.Int visibility:private [final]' type=kotlin.Int origin=null
|
||||||
|
receiver: GET_VAR '<this>: <root>.A declared in <root>.A.equals' type=<root>.A origin=null
|
||||||
|
arg1: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:y type:kotlin.Int visibility:private [final]' type=kotlin.Int origin=null
|
||||||
|
receiver: GET_VAR 'val tmp_0: <root>.A [val] declared in <root>.A.equals' type=<root>.A origin=null
|
||||||
|
then: RETURN type=kotlin.Nothing from='public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in <root>.A'
|
||||||
|
CONST Boolean type=kotlin.Boolean value=false
|
||||||
|
RETURN type=kotlin.Nothing from='public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in <root>.A'
|
||||||
|
CONST Boolean type=kotlin.Boolean value=true
|
||||||
|
FUN GENERATED_DATA_CLASS_MEMBER name:hashCode visibility:public modality:OPEN <> ($this:<root>.A) returnType:kotlin.Int
|
||||||
|
$this: VALUE_PARAMETER GENERATED_DATA_CLASS_MEMBER name:<this> type:<root>.A
|
||||||
|
BLOCK_BODY
|
||||||
|
RETURN type=kotlin.Nothing from='public open fun hashCode (): kotlin.Int declared in <root>.A'
|
||||||
|
CALL 'public final fun plus (other: kotlin.Int): kotlin.Int [operator] declared in kotlin.Int' type=kotlin.Int origin=null
|
||||||
|
$this: CALL 'public final fun times (other: kotlin.Int): kotlin.Int [operator] declared in kotlin.Int' type=kotlin.Int origin=null
|
||||||
|
$this: CALL 'public open fun hashCode (): kotlin.Int [fake_override] declared in kotlin.Int' type=kotlin.Int origin=null
|
||||||
|
$this: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:x type:kotlin.Int visibility:private [final]' type=kotlin.Int origin=null
|
||||||
|
receiver: GET_VAR '<this>: <root>.A declared in <root>.A.hashCode' type=<root>.A origin=null
|
||||||
|
other: CONST Int type=kotlin.Int value=31
|
||||||
|
other: CALL 'public open fun hashCode (): kotlin.Int [fake_override] declared in kotlin.Int' type=kotlin.Int origin=null
|
||||||
|
$this: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:y type:kotlin.Int visibility:private [final]' type=kotlin.Int origin=null
|
||||||
|
receiver: GET_VAR '<this>: <root>.A declared in <root>.A.hashCode' type=<root>.A origin=null
|
||||||
|
FUN GENERATED_DATA_CLASS_MEMBER name:toString visibility:public modality:OPEN <> ($this:<root>.A) returnType:kotlin.String
|
||||||
|
$this: VALUE_PARAMETER GENERATED_DATA_CLASS_MEMBER name:<this> type:<root>.A
|
||||||
|
BLOCK_BODY
|
||||||
|
RETURN type=kotlin.Nothing from='public open fun toString (): kotlin.String declared in <root>.A'
|
||||||
|
STRING_CONCATENATION type=kotlin.String
|
||||||
|
CONST String type=kotlin.String value="A("
|
||||||
|
CONST String type=kotlin.String value="x="
|
||||||
|
GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:x type:kotlin.Int visibility:private [final]' type=kotlin.Int origin=null
|
||||||
|
receiver: GET_VAR '<this>: <root>.A declared in <root>.A.toString' type=<root>.A origin=null
|
||||||
|
CONST String type=kotlin.String value=", "
|
||||||
|
CONST String type=kotlin.String value="y="
|
||||||
|
GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:y type:kotlin.Int visibility:private [final]' type=kotlin.Int origin=null
|
||||||
|
receiver: GET_VAR '<this>: <root>.A declared in <root>.A.toString' type=<root>.A origin=null
|
||||||
|
CONST String type=kotlin.String value=")"
|
||||||
PROPERTY name:fn visibility:public modality:FINAL [var]
|
PROPERTY name:fn visibility:public modality:FINAL [var]
|
||||||
FIELD PROPERTY_BACKING_FIELD name:fn type:kotlin.Function1<<root>.A, kotlin.Int> visibility:private [static]
|
FIELD PROPERTY_BACKING_FIELD name:fn type:kotlin.Function1<<root>.A, kotlin.Int> visibility:private [static]
|
||||||
EXPRESSION_BODY
|
EXPRESSION_BODY
|
||||||
|
|||||||
+69
-13
@@ -167,16 +167,72 @@ FILE fqName:<root> fileName:/enhancedNullabilityInForLoop.kt
|
|||||||
CALL 'public final fun <get-y> (): kotlin.Int declared in <root>.P' type=kotlin.Int origin=GET_PROPERTY
|
CALL 'public final fun <get-y> (): kotlin.Int declared in <root>.P' type=kotlin.Int origin=GET_PROPERTY
|
||||||
$this: GET_VAR '<this>: <root>.P declared in <root>.P.copy' type=<root>.P origin=null
|
$this: GET_VAR '<this>: <root>.P declared in <root>.P.copy' type=<root>.P origin=null
|
||||||
BLOCK_BODY
|
BLOCK_BODY
|
||||||
FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator]
|
FUN GENERATED_DATA_CLASS_MEMBER name:equals visibility:public modality:OPEN <> ($this:<root>.P, other:kotlin.Any?) returnType:kotlin.Boolean
|
||||||
overridden:
|
$this: VALUE_PARAMETER GENERATED_DATA_CLASS_MEMBER name:<this> type:<root>.P
|
||||||
public open fun equals (other: kotlin.Any?): kotlin.Boolean [operator] declared in kotlin.Any
|
VALUE_PARAMETER GENERATED_DATA_CLASS_MEMBER name:other index:0 type:kotlin.Any?
|
||||||
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
|
BLOCK_BODY
|
||||||
VALUE_PARAMETER name:other index:0 type:kotlin.Any?
|
WHEN type=kotlin.Unit origin=null
|
||||||
FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override]
|
BRANCH
|
||||||
overridden:
|
if: CALL 'public final fun EQEQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EQEQEQ
|
||||||
public open fun hashCode (): kotlin.Int declared in kotlin.Any
|
arg0: GET_VAR '<this>: <root>.P declared in <root>.P.equals' type=<root>.P origin=null
|
||||||
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
|
arg1: GET_VAR 'other: kotlin.Any? declared in <root>.P.equals' type=kotlin.Any? origin=null
|
||||||
FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String [fake_override]
|
then: RETURN type=kotlin.Nothing from='public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in <root>.P'
|
||||||
overridden:
|
CONST Boolean type=kotlin.Boolean value=true
|
||||||
public open fun toString (): kotlin.String declared in kotlin.Any
|
WHEN type=kotlin.Unit origin=null
|
||||||
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
|
BRANCH
|
||||||
|
if: TYPE_OP type=kotlin.Boolean origin=NOT_INSTANCEOF typeOperand=<root>.P
|
||||||
|
GET_VAR 'other: kotlin.Any? declared in <root>.P.equals' type=kotlin.Any? origin=null
|
||||||
|
then: RETURN type=kotlin.Nothing from='public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in <root>.P'
|
||||||
|
CONST Boolean type=kotlin.Boolean value=false
|
||||||
|
VAR IR_TEMPORARY_VARIABLE name:tmp_5 type:<root>.P [val]
|
||||||
|
TYPE_OP type=<root>.P origin=CAST typeOperand=<root>.P
|
||||||
|
GET_VAR 'other: kotlin.Any? declared in <root>.P.equals' type=kotlin.Any? origin=null
|
||||||
|
WHEN type=kotlin.Unit origin=null
|
||||||
|
BRANCH
|
||||||
|
if: CALL 'public final fun not (): kotlin.Boolean [operator] declared in kotlin.Boolean' type=kotlin.Boolean origin=EXCLEQ
|
||||||
|
$this: CALL 'public final fun EQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EXCLEQ
|
||||||
|
arg0: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:x type:kotlin.Int visibility:private [final]' type=kotlin.Int origin=null
|
||||||
|
receiver: GET_VAR '<this>: <root>.P declared in <root>.P.equals' type=<root>.P origin=null
|
||||||
|
arg1: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:x type:kotlin.Int visibility:private [final]' type=kotlin.Int origin=null
|
||||||
|
receiver: GET_VAR 'val tmp_5: <root>.P [val] declared in <root>.P.equals' type=<root>.P origin=null
|
||||||
|
then: RETURN type=kotlin.Nothing from='public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in <root>.P'
|
||||||
|
CONST Boolean type=kotlin.Boolean value=false
|
||||||
|
WHEN type=kotlin.Unit origin=null
|
||||||
|
BRANCH
|
||||||
|
if: CALL 'public final fun not (): kotlin.Boolean [operator] declared in kotlin.Boolean' type=kotlin.Boolean origin=EXCLEQ
|
||||||
|
$this: CALL 'public final fun EQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EXCLEQ
|
||||||
|
arg0: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:y type:kotlin.Int visibility:private [final]' type=kotlin.Int origin=null
|
||||||
|
receiver: GET_VAR '<this>: <root>.P declared in <root>.P.equals' type=<root>.P origin=null
|
||||||
|
arg1: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:y type:kotlin.Int visibility:private [final]' type=kotlin.Int origin=null
|
||||||
|
receiver: GET_VAR 'val tmp_5: <root>.P [val] declared in <root>.P.equals' type=<root>.P origin=null
|
||||||
|
then: RETURN type=kotlin.Nothing from='public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in <root>.P'
|
||||||
|
CONST Boolean type=kotlin.Boolean value=false
|
||||||
|
RETURN type=kotlin.Nothing from='public open fun equals (other: kotlin.Any?): kotlin.Boolean declared in <root>.P'
|
||||||
|
CONST Boolean type=kotlin.Boolean value=true
|
||||||
|
FUN GENERATED_DATA_CLASS_MEMBER name:hashCode visibility:public modality:OPEN <> ($this:<root>.P) returnType:kotlin.Int
|
||||||
|
$this: VALUE_PARAMETER GENERATED_DATA_CLASS_MEMBER name:<this> type:<root>.P
|
||||||
|
BLOCK_BODY
|
||||||
|
RETURN type=kotlin.Nothing from='public open fun hashCode (): kotlin.Int declared in <root>.P'
|
||||||
|
CALL 'public final fun plus (other: kotlin.Int): kotlin.Int [operator] declared in kotlin.Int' type=kotlin.Int origin=null
|
||||||
|
$this: CALL 'public final fun times (other: kotlin.Int): kotlin.Int [operator] declared in kotlin.Int' type=kotlin.Int origin=null
|
||||||
|
$this: CALL 'public open fun hashCode (): kotlin.Int [fake_override] declared in kotlin.Int' type=kotlin.Int origin=null
|
||||||
|
$this: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:x type:kotlin.Int visibility:private [final]' type=kotlin.Int origin=null
|
||||||
|
receiver: GET_VAR '<this>: <root>.P declared in <root>.P.hashCode' type=<root>.P origin=null
|
||||||
|
other: CONST Int type=kotlin.Int value=31
|
||||||
|
other: CALL 'public open fun hashCode (): kotlin.Int [fake_override] declared in kotlin.Int' type=kotlin.Int origin=null
|
||||||
|
$this: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:y type:kotlin.Int visibility:private [final]' type=kotlin.Int origin=null
|
||||||
|
receiver: GET_VAR '<this>: <root>.P declared in <root>.P.hashCode' type=<root>.P origin=null
|
||||||
|
FUN GENERATED_DATA_CLASS_MEMBER name:toString visibility:public modality:OPEN <> ($this:<root>.P) returnType:kotlin.String
|
||||||
|
$this: VALUE_PARAMETER GENERATED_DATA_CLASS_MEMBER name:<this> type:<root>.P
|
||||||
|
BLOCK_BODY
|
||||||
|
RETURN type=kotlin.Nothing from='public open fun toString (): kotlin.String declared in <root>.P'
|
||||||
|
STRING_CONCATENATION type=kotlin.String
|
||||||
|
CONST String type=kotlin.String value="P("
|
||||||
|
CONST String type=kotlin.String value="x="
|
||||||
|
GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:x type:kotlin.Int visibility:private [final]' type=kotlin.Int origin=null
|
||||||
|
receiver: GET_VAR '<this>: <root>.P declared in <root>.P.toString' type=<root>.P origin=null
|
||||||
|
CONST String type=kotlin.String value=", "
|
||||||
|
CONST String type=kotlin.String value="y="
|
||||||
|
GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:y type:kotlin.Int visibility:private [final]' type=kotlin.Int origin=null
|
||||||
|
receiver: GET_VAR '<this>: <root>.P declared in <root>.P.toString' type=<root>.P origin=null
|
||||||
|
CONST String type=kotlin.String value=")"
|
||||||
|
|||||||
@@ -18,10 +18,10 @@ package org.jetbrains.kotlin.jvm.compiler
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
||||||
import org.jetbrains.kotlin.descriptors.findClassAcrossModuleDependencies
|
import org.jetbrains.kotlin.descriptors.findClassAcrossModuleDependencies
|
||||||
|
import org.jetbrains.kotlin.ir.util.findFirstFunction
|
||||||
import org.jetbrains.kotlin.name.ClassId
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
import org.jetbrains.kotlin.psi2ir.findFirstFunction
|
|
||||||
import org.jetbrains.kotlin.psi2ir.findSingleFunction
|
import org.jetbrains.kotlin.psi2ir.findSingleFunction
|
||||||
import org.jetbrains.kotlin.resolve.lazy.JvmResolveUtil
|
import org.jetbrains.kotlin.resolve.lazy.JvmResolveUtil
|
||||||
import org.jetbrains.kotlin.test.ConfigurationKind
|
import org.jetbrains.kotlin.test.ConfigurationKind
|
||||||
|
|||||||
Reference in New Issue
Block a user