e8a640851a
Generate the expression with the original type and then insert an implicit conversion. That matches the behavior of psi2ir better and therefore avoids breaking backend assumptions. In particular, IrGetValue expects the type of the underlying symbol and the type of the IrGetValue to be the same.
112 lines
8.1 KiB
Plaintext
Vendored
112 lines
8.1 KiB
Plaintext
Vendored
FILE fqName:<root> fileName:/kt23030.kt
|
|
FUN name:compareTo visibility:public modality:FINAL <> ($receiver:kotlin.Int, c:kotlin.Char) returnType:kotlin.Int [operator]
|
|
$receiver: VALUE_PARAMETER name:<this> type:kotlin.Int
|
|
VALUE_PARAMETER name:c index:0 type:kotlin.Char
|
|
BLOCK_BODY
|
|
RETURN type=kotlin.Nothing from='public final fun compareTo (c: kotlin.Char): kotlin.Int [operator] declared in <root>'
|
|
CONST Int type=kotlin.Int value=0
|
|
FUN name:testOverloadedCompareToCall visibility:public modality:FINAL <> (x:kotlin.Int, y:kotlin.Char) returnType:kotlin.Boolean
|
|
VALUE_PARAMETER name:x index:0 type:kotlin.Int
|
|
VALUE_PARAMETER name:y index:1 type:kotlin.Char
|
|
BLOCK_BODY
|
|
RETURN type=kotlin.Nothing from='public final fun testOverloadedCompareToCall (x: kotlin.Int, y: kotlin.Char): kotlin.Boolean declared in <root>'
|
|
ERROR_CALL 'Comparison of arguments with different types: kotlin/Int, kotlin/Char' type=kotlin.Boolean
|
|
FUN name:testOverloadedCompareToCallWithSmartCast visibility:public modality:FINAL <> (x:kotlin.Any, y:kotlin.Any) returnType:kotlin.Boolean
|
|
VALUE_PARAMETER name:x index:0 type:kotlin.Any
|
|
VALUE_PARAMETER name:y index:1 type:kotlin.Any
|
|
BLOCK_BODY
|
|
RETURN type=kotlin.Nothing from='public final fun testOverloadedCompareToCallWithSmartCast (x: kotlin.Any, y: kotlin.Any): kotlin.Boolean declared in <root>'
|
|
WHEN type=kotlin.Boolean origin=ANDAND
|
|
BRANCH
|
|
if: WHEN type=kotlin.Boolean origin=ANDAND
|
|
BRANCH
|
|
if: TYPE_OP type=kotlin.Boolean origin=INSTANCEOF typeOperand=kotlin.Int
|
|
GET_VAR 'x: kotlin.Any declared in <root>.testOverloadedCompareToCallWithSmartCast' type=kotlin.Any origin=null
|
|
then: TYPE_OP type=kotlin.Boolean origin=INSTANCEOF typeOperand=kotlin.Char
|
|
GET_VAR 'y: kotlin.Any declared in <root>.testOverloadedCompareToCallWithSmartCast' type=kotlin.Any origin=null
|
|
BRANCH
|
|
if: CONST Boolean type=kotlin.Boolean value=true
|
|
then: CONST Boolean type=kotlin.Boolean value=false
|
|
then: ERROR_CALL 'Comparison of arguments with different types: kotlin/Int, kotlin/Char' type=kotlin.Boolean
|
|
BRANCH
|
|
if: CONST Boolean type=kotlin.Boolean value=true
|
|
then: CONST Boolean type=kotlin.Boolean value=false
|
|
FUN name:testEqualsWithSmartCast visibility:public modality:FINAL <> (x:kotlin.Any, y:kotlin.Any) returnType:kotlin.Boolean
|
|
VALUE_PARAMETER name:x index:0 type:kotlin.Any
|
|
VALUE_PARAMETER name:y index:1 type:kotlin.Any
|
|
BLOCK_BODY
|
|
RETURN type=kotlin.Nothing from='public final fun testEqualsWithSmartCast (x: kotlin.Any, y: kotlin.Any): kotlin.Boolean declared in <root>'
|
|
WHEN type=kotlin.Boolean origin=ANDAND
|
|
BRANCH
|
|
if: WHEN type=kotlin.Boolean origin=ANDAND
|
|
BRANCH
|
|
if: TYPE_OP type=kotlin.Boolean origin=INSTANCEOF typeOperand=kotlin.Int
|
|
GET_VAR 'x: kotlin.Any declared in <root>.testEqualsWithSmartCast' type=kotlin.Any origin=null
|
|
then: TYPE_OP type=kotlin.Boolean origin=INSTANCEOF typeOperand=kotlin.Char
|
|
GET_VAR 'y: kotlin.Any declared in <root>.testEqualsWithSmartCast' type=kotlin.Any origin=null
|
|
BRANCH
|
|
if: CONST Boolean type=kotlin.Boolean value=true
|
|
then: CONST Boolean type=kotlin.Boolean value=false
|
|
then: CALL 'public final fun EQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EQEQ
|
|
arg0: TYPE_OP type=kotlin.Int origin=IMPLICIT_CAST typeOperand=kotlin.Int
|
|
GET_VAR 'x: kotlin.Any declared in <root>.testEqualsWithSmartCast' type=kotlin.Any origin=null
|
|
arg1: TYPE_OP type=kotlin.Char origin=IMPLICIT_CAST typeOperand=kotlin.Char
|
|
GET_VAR 'y: kotlin.Any declared in <root>.testEqualsWithSmartCast' type=kotlin.Any origin=null
|
|
BRANCH
|
|
if: CONST Boolean type=kotlin.Boolean value=true
|
|
then: CONST Boolean type=kotlin.Boolean value=false
|
|
CLASS CLASS name:C modality:FINAL visibility:public superTypes:[kotlin.Any]
|
|
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.C
|
|
CONSTRUCTOR visibility:public <> () returnType:<root>.C [primary]
|
|
BLOCK_BODY
|
|
DELEGATING_CONSTRUCTOR_CALL 'public constructor <init> () [primary] declared in kotlin.Any'
|
|
INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:C modality:FINAL visibility:public superTypes:[kotlin.Any]'
|
|
FUN name:compareTo visibility:public modality:FINAL <> ($this:<root>.C, $receiver:kotlin.Int, c:kotlin.Char) returnType:kotlin.Int [operator]
|
|
$this: VALUE_PARAMETER name:<this> type:<root>.C
|
|
$receiver: VALUE_PARAMETER name:<this> type:kotlin.Int
|
|
VALUE_PARAMETER name:c index:0 type:kotlin.Char
|
|
BLOCK_BODY
|
|
RETURN type=kotlin.Nothing from='public final fun compareTo (c: kotlin.Char): kotlin.Int [operator] declared in <root>.C'
|
|
CONST Int type=kotlin.Int value=0
|
|
FUN name:testMemberExtensionCompareToCall visibility:public modality:FINAL <> ($this:<root>.C, x:kotlin.Int, y:kotlin.Char) returnType:kotlin.Boolean
|
|
$this: VALUE_PARAMETER name:<this> type:<root>.C
|
|
VALUE_PARAMETER name:x index:0 type:kotlin.Int
|
|
VALUE_PARAMETER name:y index:1 type:kotlin.Char
|
|
BLOCK_BODY
|
|
RETURN type=kotlin.Nothing from='public final fun testMemberExtensionCompareToCall (x: kotlin.Int, y: kotlin.Char): kotlin.Boolean declared in <root>.C'
|
|
ERROR_CALL 'Comparison of arguments with different types: kotlin/Int, kotlin/Char' type=kotlin.Boolean
|
|
FUN name:testMemberExtensionCompareToCallWithSmartCast visibility:public modality:FINAL <> ($this:<root>.C, x:kotlin.Any, y:kotlin.Any) returnType:kotlin.Boolean
|
|
$this: VALUE_PARAMETER name:<this> type:<root>.C
|
|
VALUE_PARAMETER name:x index:0 type:kotlin.Any
|
|
VALUE_PARAMETER name:y index:1 type:kotlin.Any
|
|
BLOCK_BODY
|
|
RETURN type=kotlin.Nothing from='public final fun testMemberExtensionCompareToCallWithSmartCast (x: kotlin.Any, y: kotlin.Any): kotlin.Boolean declared in <root>.C'
|
|
WHEN type=kotlin.Boolean origin=ANDAND
|
|
BRANCH
|
|
if: WHEN type=kotlin.Boolean origin=ANDAND
|
|
BRANCH
|
|
if: TYPE_OP type=kotlin.Boolean origin=INSTANCEOF typeOperand=kotlin.Int
|
|
GET_VAR 'x: kotlin.Any declared in <root>.C.testMemberExtensionCompareToCallWithSmartCast' type=kotlin.Any origin=null
|
|
then: TYPE_OP type=kotlin.Boolean origin=INSTANCEOF typeOperand=kotlin.Char
|
|
GET_VAR 'y: kotlin.Any declared in <root>.C.testMemberExtensionCompareToCallWithSmartCast' type=kotlin.Any origin=null
|
|
BRANCH
|
|
if: CONST Boolean type=kotlin.Boolean value=true
|
|
then: CONST Boolean type=kotlin.Boolean value=false
|
|
then: ERROR_CALL 'Comparison of arguments with different types: kotlin/Int, kotlin/Char' type=kotlin.Boolean
|
|
BRANCH
|
|
if: CONST Boolean type=kotlin.Boolean value=true
|
|
then: CONST Boolean type=kotlin.Boolean value=false
|
|
FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator]
|
|
overridden:
|
|
public open fun equals (other: kotlin.Any?): kotlin.Boolean [operator] declared in kotlin.Any
|
|
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
|
|
VALUE_PARAMETER name:other index:0 type:kotlin.Any?
|
|
FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override]
|
|
overridden:
|
|
public open fun hashCode (): kotlin.Int declared in kotlin.Any
|
|
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
|
|
FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String [fake_override]
|
|
overridden:
|
|
public open fun toString (): kotlin.String declared in kotlin.Any
|
|
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
|