[FIR2IR] Align object receiver generation with K1
#KT-59548 Fixed
This commit is contained in:
committed by
Space Team
parent
14327d51ed
commit
c605cb9855
@@ -11,7 +11,6 @@ import org.jetbrains.kotlin.KtNodeTypes
|
|||||||
import org.jetbrains.kotlin.KtPsiSourceElement
|
import org.jetbrains.kotlin.KtPsiSourceElement
|
||||||
import org.jetbrains.kotlin.KtSourceElement
|
import org.jetbrains.kotlin.KtSourceElement
|
||||||
import org.jetbrains.kotlin.contracts.description.LogicOperationKind
|
import org.jetbrains.kotlin.contracts.description.LogicOperationKind
|
||||||
import org.jetbrains.kotlin.descriptors.ClassKind
|
|
||||||
import org.jetbrains.kotlin.descriptors.Modality
|
import org.jetbrains.kotlin.descriptors.Modality
|
||||||
import org.jetbrains.kotlin.descriptors.Visibilities
|
import org.jetbrains.kotlin.descriptors.Visibilities
|
||||||
import org.jetbrains.kotlin.diagnostics.findChildByType
|
import org.jetbrains.kotlin.diagnostics.findChildByType
|
||||||
@@ -48,7 +47,7 @@ import org.jetbrains.kotlin.ir.types.impl.IrErrorTypeImpl
|
|||||||
import org.jetbrains.kotlin.ir.util.constructors
|
import org.jetbrains.kotlin.ir.util.constructors
|
||||||
import org.jetbrains.kotlin.ir.util.defaultConstructor
|
import org.jetbrains.kotlin.ir.util.defaultConstructor
|
||||||
import org.jetbrains.kotlin.ir.util.defaultType
|
import org.jetbrains.kotlin.ir.util.defaultType
|
||||||
import org.jetbrains.kotlin.ir.util.parentClassOrNull
|
import org.jetbrains.kotlin.ir.util.isObject
|
||||||
import org.jetbrains.kotlin.lexer.KtTokens
|
import org.jetbrains.kotlin.lexer.KtTokens
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
import org.jetbrains.kotlin.name.SpecialNames
|
import org.jetbrains.kotlin.name.SpecialNames
|
||||||
@@ -595,15 +594,12 @@ class Fir2IrVisitor(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Note that this mimics psi2ir [StatementGenerator#isThisForClassPhysicallyAvailable].
|
// Note that this mimics psi2ir [StatementGenerator#shouldGenerateReceiverAsSingletonReference].
|
||||||
private fun isThisForClassPhysicallyAvailable(irClass: IrClass): Boolean {
|
private fun shouldGenerateReceiverAsSingletonReference(irClass: IrClass): Boolean {
|
||||||
var lastClass = conversionScope.lastClass()
|
val scopeOwner = conversionScope.parent()
|
||||||
while (lastClass != null) {
|
return irClass.isObject &&
|
||||||
if (irClass == lastClass) return true
|
scopeOwner != irClass && // For anonymous initializers
|
||||||
if (!lastClass.isInner) return false
|
!((scopeOwner is IrFunction || scopeOwner is IrProperty || scopeOwner is IrField) && (scopeOwner as IrDeclaration).parent == irClass) // Members of object
|
||||||
lastClass = lastClass.parentClassOrNull
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitThisReceiverExpression(
|
override fun visitThisReceiverExpression(
|
||||||
@@ -624,8 +620,8 @@ class Fir2IrVisitor(
|
|||||||
} else {
|
} else {
|
||||||
classifierStorage.getIrClassSymbol(boundSymbol).owner
|
classifierStorage.getIrClassSymbol(boundSymbol).owner
|
||||||
}
|
}
|
||||||
// NB: IR generates anonymous objects as classes, not singleton objects
|
|
||||||
if (firClass is FirRegularClass && firClass.classKind == ClassKind.OBJECT && !isThisForClassPhysicallyAvailable(irClass)) {
|
if (shouldGenerateReceiverAsSingletonReference(irClass)) {
|
||||||
return thisReceiverExpression.convertWithOffsets { startOffset, endOffset ->
|
return thisReceiverExpression.convertWithOffsets { startOffset, endOffset ->
|
||||||
IrGetObjectValueImpl(startOffset, endOffset, irClass.defaultType, irClass.symbol)
|
IrGetObjectValueImpl(startOffset, endOffset, irClass.defaultType, irClass.symbol)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,191 +0,0 @@
|
|||||||
FILE fqName:<root> fileName:/objectReference.kt
|
|
||||||
CLASS OBJECT name:Z modality:FINAL visibility:public superTypes:[kotlin.Any]
|
|
||||||
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.Z
|
|
||||||
CONSTRUCTOR visibility:private <> () returnType:<root>.Z [primary]
|
|
||||||
BLOCK_BODY
|
|
||||||
DELEGATING_CONSTRUCTOR_CALL 'public constructor <init> () declared in kotlin.Any'
|
|
||||||
INSTANCE_INITIALIZER_CALL classDescriptor='CLASS OBJECT name:Z modality:FINAL visibility:public superTypes:[kotlin.Any]'
|
|
||||||
PROPERTY name:counter visibility:public modality:FINAL [var]
|
|
||||||
FIELD PROPERTY_BACKING_FIELD name:counter type:kotlin.Int visibility:private
|
|
||||||
EXPRESSION_BODY
|
|
||||||
CONST Int type=kotlin.Int value=0
|
|
||||||
FUN DEFAULT_PROPERTY_ACCESSOR name:<get-counter> visibility:public modality:FINAL <> ($this:<root>.Z) returnType:kotlin.Int
|
|
||||||
correspondingProperty: PROPERTY name:counter visibility:public modality:FINAL [var]
|
|
||||||
$this: VALUE_PARAMETER name:<this> type:<root>.Z
|
|
||||||
BLOCK_BODY
|
|
||||||
RETURN type=kotlin.Nothing from='public final fun <get-counter> (): kotlin.Int declared in <root>.Z'
|
|
||||||
GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:counter type:kotlin.Int visibility:private' type=kotlin.Int origin=null
|
|
||||||
receiver: GET_VAR '<this>: <root>.Z declared in <root>.Z.<get-counter>' type=<root>.Z origin=null
|
|
||||||
FUN DEFAULT_PROPERTY_ACCESSOR name:<set-counter> visibility:public modality:FINAL <> ($this:<root>.Z, <set-?>:kotlin.Int) returnType:kotlin.Unit
|
|
||||||
correspondingProperty: PROPERTY name:counter visibility:public modality:FINAL [var]
|
|
||||||
$this: VALUE_PARAMETER name:<this> type:<root>.Z
|
|
||||||
VALUE_PARAMETER name:<set-?> index:0 type:kotlin.Int
|
|
||||||
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.<set-counter>' type=<root>.Z origin=null
|
|
||||||
value: GET_VAR '<set-?>: kotlin.Int declared in <root>.Z.<set-counter>' type=kotlin.Int origin=null
|
|
||||||
FUN name:foo visibility:public modality:FINAL <> ($this:<root>.Z) returnType:kotlin.Unit
|
|
||||||
$this: VALUE_PARAMETER name:<this> type:<root>.Z
|
|
||||||
BLOCK_BODY
|
|
||||||
FUN name:bar visibility:public modality:FINAL <> ($this:<root>.Z) returnType:kotlin.Unit
|
|
||||||
$this: VALUE_PARAMETER name:<this> type:<root>.Z
|
|
||||||
BLOCK_BODY
|
|
||||||
CALL 'public final fun <set-counter> (<set-?>: kotlin.Int): kotlin.Unit declared in <root>.Z' type=kotlin.Unit origin=EQ
|
|
||||||
$this: GET_VAR '<this>: <root>.Z declared in <root>.Z.bar' type=<root>.Z origin=null
|
|
||||||
<set-?>: 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.bar' type=<root>.Z origin=null
|
|
||||||
CALL 'public final fun <set-counter> (<set-?>: kotlin.Int): kotlin.Unit declared in <root>.Z' type=kotlin.Unit origin=EQ
|
|
||||||
$this: GET_OBJECT 'CLASS OBJECT name:Z modality:FINAL visibility:public superTypes:[kotlin.Any]' type=<root>.Z
|
|
||||||
<set-?>: 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_OBJECT 'CLASS OBJECT name:Z modality:FINAL visibility:public superTypes:[kotlin.Any]' type=<root>.Z
|
|
||||||
CLASS CLASS name:Nested modality:FINAL visibility:public superTypes:[kotlin.Any]
|
|
||||||
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.Z.Nested
|
|
||||||
CONSTRUCTOR visibility:public <> () returnType:<root>.Z.Nested [primary]
|
|
||||||
BLOCK_BODY
|
|
||||||
DELEGATING_CONSTRUCTOR_CALL 'public constructor <init> () declared in kotlin.Any'
|
|
||||||
INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:Nested modality:FINAL visibility:public superTypes:[kotlin.Any]'
|
|
||||||
ANONYMOUS_INITIALIZER isStatic=false
|
|
||||||
BLOCK_BODY
|
|
||||||
CALL 'public final fun <set-counter> (<set-?>: kotlin.Int): kotlin.Unit declared in <root>.Z' type=kotlin.Unit origin=EQ
|
|
||||||
$this: GET_OBJECT 'CLASS OBJECT name:Z modality:FINAL visibility:public superTypes:[kotlin.Any]' type=<root>.Z
|
|
||||||
<set-?>: 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_OBJECT 'CLASS OBJECT name:Z modality:FINAL visibility:public superTypes:[kotlin.Any]' type=<root>.Z
|
|
||||||
CALL 'public final fun <set-counter> (<set-?>: kotlin.Int): kotlin.Unit declared in <root>.Z' type=kotlin.Unit origin=EQ
|
|
||||||
$this: GET_OBJECT 'CLASS OBJECT name:Z modality:FINAL visibility:public superTypes:[kotlin.Any]' type=<root>.Z
|
|
||||||
<set-?>: 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_OBJECT 'CLASS OBJECT name:Z modality:FINAL visibility:public superTypes:[kotlin.Any]' type=<root>.Z
|
|
||||||
FUN name:test visibility:public modality:FINAL <> ($this:<root>.Z.Nested) returnType:kotlin.Unit
|
|
||||||
$this: VALUE_PARAMETER name:<this> type:<root>.Z.Nested
|
|
||||||
BLOCK_BODY
|
|
||||||
CALL 'public final fun <set-counter> (<set-?>: kotlin.Int): kotlin.Unit declared in <root>.Z' type=kotlin.Unit origin=EQ
|
|
||||||
$this: GET_OBJECT 'CLASS OBJECT name:Z modality:FINAL visibility:public superTypes:[kotlin.Any]' type=<root>.Z
|
|
||||||
<set-?>: 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_OBJECT 'CLASS OBJECT name:Z modality:FINAL visibility:public superTypes:[kotlin.Any]' type=<root>.Z
|
|
||||||
CALL 'public final fun <set-counter> (<set-?>: kotlin.Int): kotlin.Unit declared in <root>.Z' type=kotlin.Unit origin=EQ
|
|
||||||
$this: GET_OBJECT 'CLASS OBJECT name:Z modality:FINAL visibility:public superTypes:[kotlin.Any]' type=<root>.Z
|
|
||||||
<set-?>: 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_OBJECT 'CLASS OBJECT name:Z modality:FINAL visibility:public superTypes:[kotlin.Any]' type=<root>.Z
|
|
||||||
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 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
|
|
||||||
PROPERTY name:aLambda visibility:public modality:FINAL [val]
|
|
||||||
FIELD PROPERTY_BACKING_FIELD name:aLambda type:kotlin.Function0<kotlin.Unit> visibility:private [final]
|
|
||||||
EXPRESSION_BODY
|
|
||||||
FUN_EXPR type=kotlin.Function0<kotlin.Unit> origin=LAMBDA
|
|
||||||
FUN LOCAL_FUNCTION_FOR_LAMBDA name:<anonymous> visibility:local modality:FINAL <> () returnType:kotlin.Unit
|
|
||||||
BLOCK_BODY
|
|
||||||
CALL 'public final fun <set-counter> (<set-?>: kotlin.Int): kotlin.Unit declared in <root>.Z' type=kotlin.Unit origin=EQ
|
|
||||||
$this: GET_VAR '<this>: <root>.Z declared in <root>.Z' type=<root>.Z origin=null
|
|
||||||
<set-?>: 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
|
|
||||||
CALL 'public final fun <set-counter> (<set-?>: kotlin.Int): kotlin.Unit declared in <root>.Z' type=kotlin.Unit origin=EQ
|
|
||||||
$this: GET_OBJECT 'CLASS OBJECT name:Z modality:FINAL visibility:public superTypes:[kotlin.Any]' type=<root>.Z
|
|
||||||
<set-?>: 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_OBJECT 'CLASS OBJECT name:Z modality:FINAL visibility:public superTypes:[kotlin.Any]' type=<root>.Z
|
|
||||||
FUN DEFAULT_PROPERTY_ACCESSOR name:<get-aLambda> visibility:public modality:FINAL <> ($this:<root>.Z) returnType:kotlin.Function0<kotlin.Unit>
|
|
||||||
correspondingProperty: PROPERTY name:aLambda visibility:public modality:FINAL [val]
|
|
||||||
$this: VALUE_PARAMETER name:<this> type:<root>.Z
|
|
||||||
BLOCK_BODY
|
|
||||||
RETURN type=kotlin.Nothing from='public final fun <get-aLambda> (): kotlin.Function0<kotlin.Unit> declared in <root>.Z'
|
|
||||||
GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:aLambda type:kotlin.Function0<kotlin.Unit> visibility:private [final]' type=kotlin.Function0<kotlin.Unit> origin=null
|
|
||||||
receiver: GET_VAR '<this>: <root>.Z declared in <root>.Z.<get-aLambda>' type=<root>.Z origin=null
|
|
||||||
PROPERTY name:anObject visibility:public modality:FINAL [val]
|
|
||||||
FIELD PROPERTY_BACKING_FIELD name:anObject type:kotlin.Any visibility:private [final]
|
|
||||||
EXPRESSION_BODY
|
|
||||||
BLOCK type=<root>.Z.anObject.<no name provided> origin=OBJECT_LITERAL
|
|
||||||
CLASS CLASS name:<no name provided> modality:FINAL visibility:local superTypes:[kotlin.Any]
|
|
||||||
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.Z.anObject.<no name provided>
|
|
||||||
CONSTRUCTOR visibility:public <> () returnType:<root>.Z.anObject.<no name provided> [primary]
|
|
||||||
BLOCK_BODY
|
|
||||||
DELEGATING_CONSTRUCTOR_CALL 'public constructor <init> () declared in kotlin.Any'
|
|
||||||
INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:<no name provided> modality:FINAL visibility:local superTypes:[kotlin.Any]'
|
|
||||||
ANONYMOUS_INITIALIZER isStatic=false
|
|
||||||
BLOCK_BODY
|
|
||||||
CALL 'public final fun <set-counter> (<set-?>: kotlin.Int): kotlin.Unit declared in <root>.Z' type=kotlin.Unit origin=EQ
|
|
||||||
$this: GET_OBJECT 'CLASS OBJECT name:Z modality:FINAL visibility:public superTypes:[kotlin.Any]' type=<root>.Z
|
|
||||||
<set-?>: 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_OBJECT 'CLASS OBJECT name:Z modality:FINAL visibility:public superTypes:[kotlin.Any]' type=<root>.Z
|
|
||||||
CALL 'public final fun <set-counter> (<set-?>: kotlin.Int): kotlin.Unit declared in <root>.Z' type=kotlin.Unit origin=EQ
|
|
||||||
$this: GET_OBJECT 'CLASS OBJECT name:Z modality:FINAL visibility:public superTypes:[kotlin.Any]' type=<root>.Z
|
|
||||||
<set-?>: 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_OBJECT 'CLASS OBJECT name:Z modality:FINAL visibility:public superTypes:[kotlin.Any]' type=<root>.Z
|
|
||||||
FUN name:test visibility:public modality:FINAL <> ($this:<root>.Z.anObject.<no name provided>) returnType:kotlin.Unit
|
|
||||||
$this: VALUE_PARAMETER name:<this> type:<root>.Z.anObject.<no name provided>
|
|
||||||
BLOCK_BODY
|
|
||||||
CALL 'public final fun <set-counter> (<set-?>: kotlin.Int): kotlin.Unit declared in <root>.Z' type=kotlin.Unit origin=EQ
|
|
||||||
$this: GET_OBJECT 'CLASS OBJECT name:Z modality:FINAL visibility:public superTypes:[kotlin.Any]' type=<root>.Z
|
|
||||||
<set-?>: 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_OBJECT 'CLASS OBJECT name:Z modality:FINAL visibility:public superTypes:[kotlin.Any]' type=<root>.Z
|
|
||||||
CALL 'public final fun <set-counter> (<set-?>: kotlin.Int): kotlin.Unit declared in <root>.Z' type=kotlin.Unit origin=EQ
|
|
||||||
$this: GET_OBJECT 'CLASS OBJECT name:Z modality:FINAL visibility:public superTypes:[kotlin.Any]' type=<root>.Z
|
|
||||||
<set-?>: 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_OBJECT 'CLASS OBJECT name:Z modality:FINAL visibility:public superTypes:[kotlin.Any]' type=<root>.Z
|
|
||||||
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 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
|
|
||||||
CONSTRUCTOR_CALL 'public constructor <init> () declared in <root>.Z.anObject.<no name provided>' type=<root>.Z.anObject.<no name provided> origin=OBJECT_LITERAL
|
|
||||||
FUN DEFAULT_PROPERTY_ACCESSOR name:<get-anObject> visibility:public modality:FINAL <> ($this:<root>.Z) returnType:kotlin.Any
|
|
||||||
correspondingProperty: PROPERTY name:anObject visibility:public modality:FINAL [val]
|
|
||||||
$this: VALUE_PARAMETER name:<this> type:<root>.Z
|
|
||||||
BLOCK_BODY
|
|
||||||
RETURN type=kotlin.Nothing from='public final fun <get-anObject> (): kotlin.Any declared in <root>.Z'
|
|
||||||
GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:anObject type:kotlin.Any visibility:private [final]' type=kotlin.Any origin=null
|
|
||||||
receiver: GET_VAR '<this>: <root>.Z declared in <root>.Z.<get-anObject>' type=<root>.Z origin=null
|
|
||||||
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 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
|
|
||||||
FUN name:test visibility:public modality:FINAL <> ($receiver:<root>.Z) returnType:kotlin.Unit
|
|
||||||
$receiver: VALUE_PARAMETER name:<this> type:<root>.Z
|
|
||||||
BLOCK_BODY
|
|
||||||
CALL 'public final fun <set-counter> (<set-?>: kotlin.Int): kotlin.Unit declared in <root>.Z' type=kotlin.Unit origin=EQ
|
|
||||||
$this: GET_VAR '<this>: <root>.Z declared in <root>.test' type=<root>.Z origin=null
|
|
||||||
<set-?>: 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>.test' type=<root>.Z origin=null
|
|
||||||
CALL 'public final fun <set-counter> (<set-?>: kotlin.Int): kotlin.Unit declared in <root>.Z' type=kotlin.Unit origin=EQ
|
|
||||||
$this: GET_OBJECT 'CLASS OBJECT name:Z modality:FINAL visibility:public superTypes:[kotlin.Any]' type=<root>.Z
|
|
||||||
<set-?>: 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_OBJECT 'CLASS OBJECT name:Z modality:FINAL visibility:public superTypes:[kotlin.Any]' type=<root>.Z
|
|
||||||
@@ -1,92 +0,0 @@
|
|||||||
object Z {
|
|
||||||
private constructor() /* primary */ {
|
|
||||||
super/*Any*/()
|
|
||||||
/* <init>() */
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
var counter: Int
|
|
||||||
field = 0
|
|
||||||
get
|
|
||||||
set
|
|
||||||
|
|
||||||
fun foo() {
|
|
||||||
}
|
|
||||||
|
|
||||||
fun bar() {
|
|
||||||
<this>.<set-counter>(<set-?> = 1)
|
|
||||||
<this>.foo()
|
|
||||||
Z.<set-counter>(<set-?> = 1)
|
|
||||||
Z.foo()
|
|
||||||
}
|
|
||||||
|
|
||||||
class Nested {
|
|
||||||
constructor() /* primary */ {
|
|
||||||
super/*Any*/()
|
|
||||||
/* <init>() */
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
init {
|
|
||||||
Z.<set-counter>(<set-?> = 1)
|
|
||||||
Z.foo()
|
|
||||||
Z.<set-counter>(<set-?> = 1)
|
|
||||||
Z.foo()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun test() {
|
|
||||||
Z.<set-counter>(<set-?> = 1)
|
|
||||||
Z.foo()
|
|
||||||
Z.<set-counter>(<set-?> = 1)
|
|
||||||
Z.foo()
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
val aLambda: Function0<Unit>
|
|
||||||
field = local fun <anonymous>() {
|
|
||||||
<this>.<set-counter>(<set-?> = 1)
|
|
||||||
<this>.foo()
|
|
||||||
Z.<set-counter>(<set-?> = 1)
|
|
||||||
Z.foo()
|
|
||||||
}
|
|
||||||
|
|
||||||
get
|
|
||||||
|
|
||||||
val anObject: Any
|
|
||||||
field = { // BLOCK
|
|
||||||
local class <no name provided> {
|
|
||||||
constructor() /* primary */ {
|
|
||||||
super/*Any*/()
|
|
||||||
/* <init>() */
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
init {
|
|
||||||
Z.<set-counter>(<set-?> = 1)
|
|
||||||
Z.foo()
|
|
||||||
Z.<set-counter>(<set-?> = 1)
|
|
||||||
Z.foo()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun test() {
|
|
||||||
Z.<set-counter>(<set-?> = 1)
|
|
||||||
Z.foo()
|
|
||||||
Z.<set-counter>(<set-?> = 1)
|
|
||||||
Z.foo()
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
<no name provided>()
|
|
||||||
}
|
|
||||||
get
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
fun Z.test() {
|
|
||||||
<this>.<set-counter>(<set-?> = 1)
|
|
||||||
<this>.foo()
|
|
||||||
Z.<set-counter>(<set-?> = 1)
|
|
||||||
Z.foo()
|
|
||||||
}
|
|
||||||
@@ -84,6 +84,23 @@ FILE fqName:<root> fileName:/objectReference.kt
|
|||||||
overridden:
|
overridden:
|
||||||
public open fun toString (): kotlin.String declared in kotlin.Any
|
public open fun toString (): kotlin.String declared in kotlin.Any
|
||||||
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
|
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
|
||||||
|
FUN name:aFun visibility:public modality:FINAL <> ($this:<root>.Z) returnType:kotlin.Unit
|
||||||
|
$this: VALUE_PARAMETER name:<this> type:<root>.Z
|
||||||
|
BLOCK_BODY
|
||||||
|
CALL 'public final fun withLambda (f: kotlin.Function0<kotlin.Unit>): kotlin.Unit declared in <root>' type=kotlin.Unit origin=null
|
||||||
|
f: FUN_EXPR type=kotlin.Function0<kotlin.Unit> origin=LAMBDA
|
||||||
|
FUN LOCAL_FUNCTION_FOR_LAMBDA name:<anonymous> visibility:local modality:FINAL <> () returnType:kotlin.Unit
|
||||||
|
BLOCK_BODY
|
||||||
|
CALL 'public final fun <set-counter> (<set-?>: kotlin.Int): kotlin.Unit declared in <root>.Z' type=kotlin.Unit origin=EQ
|
||||||
|
$this: GET_OBJECT 'CLASS OBJECT name:Z modality:FINAL visibility:public superTypes:[kotlin.Any]' type=<root>.Z
|
||||||
|
<set-?>: 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_OBJECT 'CLASS OBJECT name:Z modality:FINAL visibility:public superTypes:[kotlin.Any]' type=<root>.Z
|
||||||
|
CALL 'public final fun <set-counter> (<set-?>: kotlin.Int): kotlin.Unit declared in <root>.Z' type=kotlin.Unit origin=EQ
|
||||||
|
$this: GET_OBJECT 'CLASS OBJECT name:Z modality:FINAL visibility:public superTypes:[kotlin.Any]' type=<root>.Z
|
||||||
|
<set-?>: 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_OBJECT 'CLASS OBJECT name:Z modality:FINAL visibility:public superTypes:[kotlin.Any]' type=<root>.Z
|
||||||
PROPERTY name:aLambda visibility:public modality:FINAL [val]
|
PROPERTY name:aLambda visibility:public modality:FINAL [val]
|
||||||
FIELD PROPERTY_BACKING_FIELD name:aLambda type:kotlin.Function0<kotlin.Unit> visibility:private [final]
|
FIELD PROPERTY_BACKING_FIELD name:aLambda type:kotlin.Function0<kotlin.Unit> visibility:private [final]
|
||||||
EXPRESSION_BODY
|
EXPRESSION_BODY
|
||||||
@@ -189,3 +206,6 @@ FILE fqName:<root> fileName:/objectReference.kt
|
|||||||
<set-?>: CONST Int type=kotlin.Int value=1
|
<set-?>: CONST Int type=kotlin.Int value=1
|
||||||
CALL 'public final fun foo (): kotlin.Unit declared in <root>.Z' type=kotlin.Unit origin=null
|
CALL 'public final fun foo (): kotlin.Unit declared in <root>.Z' type=kotlin.Unit origin=null
|
||||||
$this: GET_OBJECT 'CLASS OBJECT name:Z modality:FINAL visibility:public superTypes:[kotlin.Any]' type=<root>.Z
|
$this: GET_OBJECT 'CLASS OBJECT name:Z modality:FINAL visibility:public superTypes:[kotlin.Any]' type=<root>.Z
|
||||||
|
FUN name:withLambda visibility:public modality:FINAL <> (f:kotlin.Function0<kotlin.Unit>) returnType:kotlin.Unit
|
||||||
|
VALUE_PARAMETER name:f index:0 type:kotlin.Function0<kotlin.Unit>
|
||||||
|
BLOCK_BODY
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
// FIR_IDENTICAL
|
||||||
object Z {
|
object Z {
|
||||||
var counter = 0
|
var counter = 0
|
||||||
fun foo() {}
|
fun foo() {}
|
||||||
@@ -25,6 +26,15 @@ object Z {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun aFun() {
|
||||||
|
withLambda {
|
||||||
|
counter = 1
|
||||||
|
foo()
|
||||||
|
Z.counter = 1
|
||||||
|
Z.foo()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
val aLambda = {
|
val aLambda = {
|
||||||
counter = 1
|
counter = 1
|
||||||
foo()
|
foo()
|
||||||
@@ -55,3 +65,5 @@ fun Z.test() {
|
|||||||
Z.counter = 1
|
Z.counter = 1
|
||||||
Z.foo()
|
Z.foo()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun withLambda(f: () -> Unit) {}
|
||||||
|
|||||||
@@ -43,6 +43,16 @@ object Z {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun aFun() {
|
||||||
|
withLambda(f = local fun <anonymous>() {
|
||||||
|
Z.<set-counter>(<set-?> = 1)
|
||||||
|
Z.foo()
|
||||||
|
Z.<set-counter>(<set-?> = 1)
|
||||||
|
Z.foo()
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
val aLambda: Function0<Unit>
|
val aLambda: Function0<Unit>
|
||||||
field = local fun <anonymous>() {
|
field = local fun <anonymous>() {
|
||||||
Z.<set-counter>(<set-?> = 1)
|
Z.<set-counter>(<set-?> = 1)
|
||||||
@@ -90,3 +100,7 @@ fun Z.test() {
|
|||||||
Z.<set-counter>(<set-?> = 1)
|
Z.<set-counter>(<set-?> = 1)
|
||||||
Z.foo()
|
Z.foo()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun withLambda(f: Function0<Unit>) {
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -76,6 +76,12 @@ object Z {
|
|||||||
// Public signature debug description: <init>(){}
|
// Public signature debug description: <init>(){}
|
||||||
private constructor() /* primary */
|
private constructor() /* primary */
|
||||||
|
|
||||||
|
// CHECK:
|
||||||
|
// Mangled name: Z#aFun(){}
|
||||||
|
// Public signature: /Z.aFun|-596272525427331003[0]
|
||||||
|
// Public signature debug description: aFun(){}
|
||||||
|
fun aFun(): Unit
|
||||||
|
|
||||||
// CHECK:
|
// CHECK:
|
||||||
// Mangled name: Z#bar(){}
|
// Mangled name: Z#bar(){}
|
||||||
// Public signature: /Z.bar|496682602797471549[0]
|
// Public signature: /Z.bar|496682602797471549[0]
|
||||||
@@ -96,3 +102,9 @@ object Z {
|
|||||||
// Public signature debug description: test@Z(){}
|
// Public signature debug description: test@Z(){}
|
||||||
fun Z.test(): Unit
|
fun Z.test(): Unit
|
||||||
|
|
||||||
|
// CHECK:
|
||||||
|
// Mangled name: #withLambda(kotlin.Function0<kotlin.Unit>){}
|
||||||
|
// Public signature: /withLambda|-1561447572468305971[0]
|
||||||
|
// Public signature debug description: withLambda(kotlin.Function0<kotlin.Unit>){}
|
||||||
|
fun withLambda(f: Function0<Unit>): Unit
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user