[FIR2IR]: fix translation of this references in instance methods
Currently FirThisReceiverExpression of instance methods are translated to references of the class' thisReceiver, not the method's dispatch receiver, which causes problems with IrFrameMap::typeOf, as the class' thisReceiver is not in the typeMap. This commit translates non-qualified "this" references of instance methods to references of the methods' dispatch receiver.
This commit is contained in:
committed by
Mikhail Glukhikh
parent
6b4e5bc2f0
commit
573188bdc4
@@ -31,10 +31,10 @@ FILE fqName:<root> fileName:/objectReference.kt
|
||||
$this: VALUE_PARAMETER name:<this> type:<root>.Z
|
||||
BLOCK_BODY
|
||||
SET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:counter type:kotlin.Int visibility:private' type=kotlin.Unit origin=null
|
||||
receiver: GET_VAR '<this>: <root>.Z declared in <root>.Z' type=<root>.Z origin=null
|
||||
receiver: GET_VAR '<this>: <root>.Z declared in <root>.Z.bar' type=<root>.Z origin=null
|
||||
value: CONST Int type=kotlin.Int value=1
|
||||
CALL 'public final fun foo (): kotlin.Unit declared in <root>.Z' type=kotlin.Unit origin=null
|
||||
$this: GET_VAR '<this>: <root>.Z declared in <root>.Z' type=<root>.Z origin=null
|
||||
$this: GET_VAR '<this>: <root>.Z declared in <root>.Z.bar' type=<root>.Z origin=null
|
||||
SET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:counter type:kotlin.Int visibility:private' type=kotlin.Unit origin=null
|
||||
receiver: GET_OBJECT 'CLASS OBJECT name:Z modality:FINAL visibility:public superTypes:[kotlin.Any]' type=<root>.Z
|
||||
value: CONST Int type=kotlin.Int value=1
|
||||
@@ -92,10 +92,10 @@ FILE fqName:<root> fileName:/objectReference.kt
|
||||
$this: VALUE_PARAMETER name:<this> type:<root>.Z
|
||||
BLOCK_BODY
|
||||
SET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:counter type:kotlin.Int visibility:private' type=kotlin.Unit origin=null
|
||||
receiver: GET_VAR '<this>: <root>.Z declared in <root>.Z' type=<root>.Z origin=null
|
||||
receiver: GET_VAR '<this>: <root>.Z declared in <root>.Z.aLambda.<anonymous>' type=<root>.Z origin=null
|
||||
value: CONST Int type=kotlin.Int value=1
|
||||
CALL 'public final fun foo (): kotlin.Unit declared in <root>.Z' type=kotlin.Unit origin=null
|
||||
$this: GET_VAR '<this>: <root>.Z declared in <root>.Z' type=<root>.Z origin=null
|
||||
$this: GET_VAR '<this>: <root>.Z declared in <root>.Z.aLambda.<anonymous>' type=<root>.Z origin=null
|
||||
SET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:counter type:kotlin.Int visibility:private' type=kotlin.Unit origin=null
|
||||
receiver: GET_OBJECT 'CLASS OBJECT name:Z modality:FINAL visibility:public superTypes:[kotlin.Any]' type=<root>.Z
|
||||
value: CONST Int type=kotlin.Int value=1
|
||||
@@ -134,10 +134,10 @@ FILE fqName:<root> fileName:/objectReference.kt
|
||||
$this: VALUE_PARAMETER name:<this> type:<root>.Z.anObject.<no name provided>
|
||||
BLOCK_BODY
|
||||
SET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:counter type:kotlin.Int visibility:private' type=kotlin.Unit origin=null
|
||||
receiver: GET_VAR '<this>: <root>.Z declared in <root>.Z' type=<root>.Z origin=null
|
||||
receiver: GET_VAR '<this>: <root>.Z.anObject.<no name provided> declared in <root>.Z.anObject.<no name provided>.test' type=<root>.Z.anObject.<no name provided> origin=null
|
||||
value: CONST Int type=kotlin.Int value=1
|
||||
CALL 'public final fun foo (): kotlin.Unit declared in <root>.Z' type=kotlin.Unit origin=null
|
||||
$this: GET_VAR '<this>: <root>.Z declared in <root>.Z' type=<root>.Z origin=null
|
||||
$this: GET_VAR '<this>: <root>.Z.anObject.<no name provided> declared in <root>.Z.anObject.<no name provided>.test' type=<root>.Z.anObject.<no name provided> origin=null
|
||||
SET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:counter type:kotlin.Int visibility:private' type=kotlin.Unit origin=null
|
||||
receiver: GET_OBJECT 'CLASS OBJECT name:Z modality:FINAL visibility:public superTypes:[kotlin.Any]' type=<root>.Z
|
||||
value: CONST Int type=kotlin.Int value=1
|
||||
|
||||
Reference in New Issue
Block a user