[FIR] Extract LHS receiver of assignment operator statements

#KT-53490 Fixed
This commit is contained in:
Brian Norman
2023-06-30 17:13:05 +03:00
committed by Space Team
parent 14276642d4
commit 10ed26991d
45 changed files with 1894 additions and 124 deletions
@@ -9,11 +9,15 @@ FIR FILE:
FILE: [ResolvedTo(IMPORTS)] insidePlusAssignTarget.kt
[ResolvedTo(BODY_RESOLVE)] annotations container
public final [ResolvedTo(BODY_RESOLVE)] fun foo([ResolvedTo(BODY_RESOLVE)] x: R|kotlin/collections/MutableMap<kotlin/Int, kotlin/collections/MutableList<kotlin/String>>|): R|kotlin/Unit| {
R|<local>/x|.<Unresolved name: getOrPut>#(Int(1), <L> = [ResolvedTo(BODY_RESOLVE)] getOrPut@fun <anonymous>(): <ERROR TYPE REF: Unresolved name: mutableListOf> <inline=Unknown> {
^ <Unresolved name: mutableListOf>#<R|kotlin/String|>()
{
[ResolvedTo(BODY_RESOLVE)] lval <receiver>: R|kotlin/collections/MutableMap<kotlin/Int, kotlin/collections/MutableList<kotlin/String>>| = R|<local>/x|
R|<local>/<receiver>|.<Unresolved name: getOrPut>#(Int(1), <L> = [ResolvedTo(BODY_RESOLVE)] getOrPut@fun <anonymous>(): <ERROR TYPE REF: Unresolved name: mutableListOf> <inline=Unknown> {
^ <Unresolved name: mutableListOf>#<R|kotlin/String|>()
}
) = R|<local>/<receiver>|.<Unresolved name: getOrPut>#(Int(1), <L> = [ResolvedTo(BODY_RESOLVE)] getOrPut@fun <anonymous>(): <ERROR TYPE REF: Unresolved name: mutableListOf> <inline=Unknown> {
^ <Unresolved name: mutableListOf>#<R|kotlin/String|>()
}
).R|kotlin/plus|(String(str))
}
) = R|<local>/x|.<Unresolved name: getOrPut>#(Int(1), <L> = [ResolvedTo(BODY_RESOLVE)] getOrPut@fun <anonymous>(): <ERROR TYPE REF: Unresolved name: mutableListOf> <inline=Unknown> {
^ <Unresolved name: mutableListOf>#<R|kotlin/String|>()
}
).R|kotlin/plus|(String(str))
}
@@ -1,4 +1,8 @@
FILE: main.kt
public final fun test(b: R|B|): R|kotlin/Unit| {
R|<local>/b|.R|/B.text| = R|<local>/b|.R|/B.text|.R|kotlin/String.plus|(String())
{
lval <receiver>: R|B| = R|<local>/b|
R|<local>/<receiver>|.R|/B.text| = R|<local>/<receiver>|.R|/B.text|.R|kotlin/String.plus|(String())
}
}
@@ -1,4 +1,8 @@
FILE: main.kt
public final fun main(j: R|JavaClass|): R|kotlin/Unit| {
R|<local>/j|.R|/JavaClass.foo| = R|<local>/j|.R|/JavaClass.foo|.R|kotlin/String.plus|(String(OK))
{
lval <receiver>: R|JavaClass| = R|<local>/j|
R|<local>/<receiver>|.R|/JavaClass.foo| = R|<local>/<receiver>|.R|/JavaClass.foo|.R|kotlin/String.plus|(String(OK))
}
}
@@ -35001,12 +35001,24 @@ public class FirLightTreeBlackBoxCodegenTestGenerated extends AbstractFirLightTr
runTest("compiler/testData/codegen/box/operatorConventions/annotatedAssignment.kt");
}
@Test
@TestMetadata("assignToDotQualifiedWithSideEffect.kt")
public void testAssignToDotQualifiedWithSideEffect() throws Exception {
runTest("compiler/testData/codegen/box/operatorConventions/assignToDotQualifiedWithSideEffect.kt");
}
@Test
@TestMetadata("assignmentOperations.kt")
public void testAssignmentOperations() throws Exception {
runTest("compiler/testData/codegen/box/operatorConventions/assignmentOperations.kt");
}
@Test
@TestMetadata("augmentedAssigmentPlusLhsCount.kt")
public void testAugmentedAssigmentPlusLhsCount() throws Exception {
runTest("compiler/testData/codegen/box/operatorConventions/augmentedAssigmentPlusLhsCount.kt");
}
@Test
@TestMetadata("augmentedAssignmentInInitializer.kt")
public void testAugmentedAssignmentInInitializer() throws Exception {
@@ -35127,6 +35139,12 @@ public class FirLightTreeBlackBoxCodegenTestGenerated extends AbstractFirLightTr
runTest("compiler/testData/codegen/box/operatorConventions/plusExplicit.kt");
}
@Test
@TestMetadata("reassignmentLhsCaching.kt")
public void testReassignmentLhsCaching() throws Exception {
runTest("compiler/testData/codegen/box/operatorConventions/reassignmentLhsCaching.kt");
}
@Test
@TestMetadata("remAssignmentOperation.kt")
public void testRemAssignmentOperation() throws Exception {
@@ -35001,12 +35001,24 @@ public class FirPsiBlackBoxCodegenTestGenerated extends AbstractFirPsiBlackBoxCo
runTest("compiler/testData/codegen/box/operatorConventions/annotatedAssignment.kt");
}
@Test
@TestMetadata("assignToDotQualifiedWithSideEffect.kt")
public void testAssignToDotQualifiedWithSideEffect() throws Exception {
runTest("compiler/testData/codegen/box/operatorConventions/assignToDotQualifiedWithSideEffect.kt");
}
@Test
@TestMetadata("assignmentOperations.kt")
public void testAssignmentOperations() throws Exception {
runTest("compiler/testData/codegen/box/operatorConventions/assignmentOperations.kt");
}
@Test
@TestMetadata("augmentedAssigmentPlusLhsCount.kt")
public void testAugmentedAssigmentPlusLhsCount() throws Exception {
runTest("compiler/testData/codegen/box/operatorConventions/augmentedAssigmentPlusLhsCount.kt");
}
@Test
@TestMetadata("augmentedAssignmentInInitializer.kt")
public void testAugmentedAssignmentInInitializer() throws Exception {
@@ -35127,6 +35139,12 @@ public class FirPsiBlackBoxCodegenTestGenerated extends AbstractFirPsiBlackBoxCo
runTest("compiler/testData/codegen/box/operatorConventions/plusExplicit.kt");
}
@Test
@TestMetadata("reassignmentLhsCaching.kt")
public void testReassignmentLhsCaching() throws Exception {
runTest("compiler/testData/codegen/box/operatorConventions/reassignmentLhsCaching.kt");
}
@Test
@TestMetadata("remAssignmentOperation.kt")
public void testRemAssignmentOperation() throws Exception {
@@ -2594,6 +2594,12 @@ public class FirLightTreeJvmIrTextTestGenerated extends AbstractFirLightTreeJvmI
runTest("compiler/testData/ir/irText/firProblems/ArrayMap.kt");
}
@Test
@TestMetadata("AssignmentOperator.kt")
public void testAssignmentOperator() throws Exception {
runTest("compiler/testData/ir/irText/firProblems/AssignmentOperator.kt");
}
@Test
@TestMetadata("candidateSymbol.kt")
public void testCandidateSymbol() throws Exception {
@@ -2594,6 +2594,12 @@ public class FirPsiJvmIrTextTestGenerated extends AbstractFirPsiJvmIrTextTest {
runTest("compiler/testData/ir/irText/firProblems/ArrayMap.kt");
}
@Test
@TestMetadata("AssignmentOperator.kt")
public void testAssignmentOperator() throws Exception {
runTest("compiler/testData/ir/irText/firProblems/AssignmentOperator.kt");
}
@Test
@TestMetadata("candidateSymbol.kt")
public void testCandidateSymbol() throws Exception {
@@ -647,10 +647,11 @@ open class FirExpressionsResolveTransformer(transformer: FirAbstractBodyResolveT
)
dataFlowAnalyzer.exitFunctionCall(resolvedOperatorCall, callCompleted = true)
val leftArgumentDesugaredSource = leftArgument.source?.fakeElement(KtFakeSourceElementKind.DesugaredCompoundAssignment)
val unwrappedLeftArgument = leftArgument.unwrapSmartcastExpression()
val assignmentLeftArgument = buildDesugaredAssignmentValueReferenceExpression {
expressionRef = FirExpressionRef<FirExpression>().apply { bind(unwrappedLeftArgument) }
source = leftArgument.source?.fakeElement(KtFakeSourceElementKind.DesugaredCompoundAssignment)
source = leftArgumentDesugaredSource
}
val assignment =
@@ -660,16 +661,36 @@ open class FirExpressionsResolveTransformer(transformer: FirAbstractBodyResolveT
rValue = resolvedOperatorCall
annotations += assignmentOperatorStatement.annotations
}
return assignment.transform(transformer, ResolutionMode.ContextIndependent)
val receiverTemporaryVariable =
generateExplicitReceiverTemporaryVariable(session, unwrappedLeftArgument, leftArgumentDesugaredSource)
return if (receiverTemporaryVariable != null) {
buildBlock {
source = assignmentOperatorStatement.source?.fakeElement(KtFakeSourceElementKind.DesugaredCompoundAssignment)
annotations += assignmentOperatorStatement.annotations
statements += receiverTemporaryVariable
statements += assignment
}
} else {
assignment
}.transform(transformer, ResolutionMode.ContextIndependent)
}
fun chooseResolved(): FirStatement {
// If neither candidate is successful, choose whichever is resolved, prioritizing assign
val isAssignResolved = (assignCallReference as? FirErrorReferenceWithCandidate)?.diagnostic !is ConeUnresolvedNameError
val isOperatorResolved = (operatorCallReference as? FirErrorReferenceWithCandidate)?.diagnostic !is ConeUnresolvedNameError
return when {
isAssignResolved -> chooseAssign()
isOperatorResolved -> chooseOperator()
else -> chooseAssign()
}
}
fun reportAmbiguity(): FirStatement {
val operatorCallCandidate = operatorCallReference?.candidate
val assignmentCallCandidate = assignCallReference?.candidate
requireNotNull(operatorCallCandidate)
requireNotNull(assignmentCallCandidate)
val operatorCallCandidate = requireNotNull(operatorCallReference?.candidate)
val assignmentCallCandidate = requireNotNull(assignCallReference?.candidate)
return buildErrorExpression {
source = assignmentOperatorStatement.source
diagnostic = ConeOperatorAmbiguityError(listOf(operatorCallCandidate, assignmentCallCandidate))
@@ -678,16 +699,7 @@ open class FirExpressionsResolveTransformer(transformer: FirAbstractBodyResolveT
return when {
assignIsSuccessful && !lhsIsVar -> chooseAssign()
!assignIsSuccessful && !operatorIsSuccessful -> {
// If neither candidate is successful, choose whichever is resolved, prioritizing assign
val isAssignResolved = (assignCallReference as? FirErrorReferenceWithCandidate)?.diagnostic !is ConeUnresolvedNameError
val isOperatorResolved = (operatorCallReference as? FirErrorReferenceWithCandidate)?.diagnostic !is ConeUnresolvedNameError
when {
isAssignResolved -> chooseAssign()
isOperatorResolved -> chooseOperator()
else -> chooseAssign()
}
}
!assignIsSuccessful && !operatorIsSuccessful -> chooseResolved()
!assignIsSuccessful && operatorIsSuccessful -> chooseOperator()
assignIsSuccessful && !operatorIsSuccessful -> chooseAssign()
leftArgument.typeRef.coneType is ConeDynamicType -> chooseAssign()
@@ -750,25 +762,8 @@ open class FirExpressionsResolveTransformer(transformer: FirAbstractBodyResolveT
source = desugaredSource
annotations += incrementDecrementExpression.annotations
(expression as? FirQualifiedAccessExpression)?.explicitReceiver
// If a receiver x exists, write it to a temporary variable to prevent multiple calls to it.
// Exceptions: ResolvedQualifiers and ThisReceivers as they can't have side effects when called.
?.takeIf { it is FirQualifiedAccessExpression && it !is FirThisReceiverExpression }
?.let { receiver ->
// val <receiver> = x
statements += generateTemporaryVariable(SpecialNames.RECEIVER, receiver).also { property ->
// Change the expression from x.a to <receiver>.a
val newReceiverAccess =
property.toQualifiedAccess(fakeSource = receiver.source?.fakeElement(KtFakeSourceElementKind.DesugaredIncrementOrDecrement))
if (expression.explicitReceiver == expression.dispatchReceiver) {
expression.replaceDispatchReceiver(newReceiverAccess)
} else {
expression.replaceExtensionReceiver(newReceiverAccess)
}
expression.replaceExplicitReceiver(newReceiverAccess)
}
}
generateExplicitReceiverTemporaryVariable(session, expression, desugaredSource)
?.let { statements += it }
if (incrementDecrementExpression.isPrefix) {
// a = a.inc()
@@ -16,16 +16,15 @@ import org.jetbrains.kotlin.fir.declarations.FirProperty
import org.jetbrains.kotlin.fir.declarations.FirVariable
import org.jetbrains.kotlin.fir.declarations.builder.buildProperty
import org.jetbrains.kotlin.fir.declarations.impl.FirResolvedDeclarationStatusImpl
import org.jetbrains.kotlin.fir.expressions.FirAnnotation
import org.jetbrains.kotlin.fir.expressions.FirExpression
import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression
import org.jetbrains.kotlin.fir.expressions.*
import org.jetbrains.kotlin.fir.expressions.builder.buildPropertyAccessExpression
import org.jetbrains.kotlin.fir.references.FirSuperReference
import org.jetbrains.kotlin.fir.references.builder.buildResolvedNamedReference
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.types.builder.buildImplicitTypeRef
import org.jetbrains.kotlin.fir.types.impl.FirImplicitTypeRefImplWithoutSource
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.name.SpecialNames
fun FirVariable.toQualifiedAccess(
fakeSource: KtSourceElement? = source?.fakeElement(KtFakeSourceElementKind.ReferenceInAtomicQualifiedAccess),
@@ -66,3 +65,38 @@ fun generateTemporaryVariable(
}
}
fun generateExplicitReceiverTemporaryVariable(
session: FirSession,
expression: FirExpression,
source: KtSourceElement?,
): FirProperty? {
return (expression as? FirQualifiedAccessExpression)?.explicitReceiver
?.takeIf {
// If a receiver x exists, write it to a temporary variable to prevent multiple calls to it.
// Exceptions: ResolvedQualifiers, ThisReceivers, and SuperReference as they can't have side effects when called.
it !is FirResolvedQualifier
&& it !is FirThisReceiverExpression
&& !(it is FirQualifiedAccessExpression && it.calleeReference is FirSuperReference)
}
?.let { receiver ->
// val <receiver> = x
generateTemporaryVariable(
moduleData = session.moduleData,
source = source,
name = SpecialNames.RECEIVER,
initializer = receiver,
typeRef = receiver.typeRef.copyWithNewSource(source),
).also { property ->
// Change the expression from x.a to <receiver>.a
val newReceiverAccess =
property.toQualifiedAccess(fakeSource = receiver.source?.fakeElement(KtFakeSourceElementKind.DesugaredIncrementOrDecrement))
if (expression.explicitReceiver == expression.dispatchReceiver) {
expression.replaceDispatchReceiver(newReceiverAccess)
} else {
expression.replaceExtensionReceiver(newReceiverAccess)
}
expression.replaceExplicitReceiver(newReceiverAccess)
}
}
}
@@ -1,5 +1,3 @@
// IGNORE_BACKEND_K2: JS_IR
// FIR_STATUS: KT-53490
// EXPECTED_REACHABLE_NODES: 1286
package foo
@@ -59,4 +57,8 @@ fun box(): String {
assertEquals(3, a.prop)
return "OK"
}
}
fun assertEquals(first: Any?, second: Any?) {
if (first != second) throw AssertionError("$first != $second")
}
@@ -0,0 +1,52 @@
// TARGET_BACKEND: JVM_IR
// IGNORE_BACKEND_K1: JVM_IR
var cnt = 0
fun A?.getA(): A? {
cnt++
return this
}
fun get0(): Int {
cnt++
return 0
}
class A
var A?.b: A?
get() {
return this
}
set(v) {
}
operator fun A?.get(i: Int): A? = this
operator fun A?.set(i: Int, v: A?): A? {
return this
}
operator fun A?.plus(a: A?) = this
fun test(a: A?) {
a?.getA().b += null
a.getA().b += null
a?.b[get0()] += null
a.b[get0()] += null
a?.b[get0()][get0()] += null
a.b[get0()][get0()] += null
}
fun box(): String {
test(null)
if (cnt != 4) return "fail 1: $cnt"
cnt = 0
test(A())
if (cnt != 8) return "fail 2: $cnt"
return "OK"
}
@@ -1,5 +1,3 @@
// IGNORE_BACKEND_K2: JS_IR
// FIR_STATUS: KT-53490
// EXPECTED_REACHABLE_NODES: 1298
package foo
@@ -55,4 +53,8 @@ fun box(): String {
assertEquals("getArray();getArrayIndex();A.plus(3);foo;A.plus(20);bar();A.plus(200);", log)
return "OK"
}
}
fun assertEquals(first: Any?, second: Any?) {
if (first != second) throw AssertionError("$first != $second")
}
@@ -21,9 +21,12 @@ FILE fqName:<root> fileName:/javaSyntheticGenericPropertyAccess.kt
x: CALL 'public final fun inc (): kotlin.Int declared in kotlin.Int' type=kotlin.Int origin=null
$this: GET_VAR 'val tmp_1: kotlin.Int declared in <root>.test' type=kotlin.Int origin=null
GET_VAR 'val tmp_1: kotlin.Int declared in <root>.test' type=kotlin.Int origin=null
CALL 'public open fun setFoo (x: kotlin.Int): kotlin.Unit declared in <root>.J' type=kotlin.Unit origin=EQ
$this: GET_VAR 'j: <root>.J<F of <root>.test> declared in <root>.test' type=<root>.J<F of <root>.test> origin=null
x: CALL 'public final fun plus (other: kotlin.Int): kotlin.Int declared in kotlin.Int' type=kotlin.Int origin=null
$this: CALL 'public open fun getFoo (): kotlin.Int declared in <root>.J' type=kotlin.Int origin=GET_PROPERTY
$this: GET_VAR 'j: <root>.J<F of <root>.test> declared in <root>.test' type=<root>.J<F of <root>.test> origin=null
other: CONST Int type=kotlin.Int value=1
BLOCK type=kotlin.Unit origin=null
VAR IR_TEMPORARY_VARIABLE name:tmp_2 type:<root>.J<F of <root>.test> [val]
GET_VAR 'j: <root>.J<F of <root>.test> declared in <root>.test' type=<root>.J<F of <root>.test> origin=null
CALL 'public open fun setFoo (x: kotlin.Int): kotlin.Unit declared in <root>.J' type=kotlin.Unit origin=EQ
$this: GET_VAR 'val tmp_2: <root>.J<F of <root>.test> declared in <root>.test' type=<root>.J<F of <root>.test> origin=null
x: CALL 'public final fun plus (other: kotlin.Int): kotlin.Int declared in kotlin.Int' type=kotlin.Int origin=null
$this: CALL 'public open fun getFoo (): kotlin.Int declared in <root>.J' type=kotlin.Int origin=GET_PROPERTY
$this: GET_VAR 'val tmp_2: <root>.J<F of <root>.test> declared in <root>.test' type=<root>.J<F of <root>.test> origin=null
other: CONST Int type=kotlin.Int value=1
@@ -7,5 +7,8 @@ fun <F : Any?> test(j: J<F>) {
<receiver>.setFoo(x = <unary>.inc())
<unary>
} /*~> Unit */
j.setFoo(x = j.getFoo().plus(other = 1))
{ // BLOCK
val <receiver>: J<F> = j
<receiver>.setFoo(x = <receiver>.getFoo().plus(other = 1))
}
}
@@ -20,9 +20,12 @@ FILE fqName:<root> fileName:/javaSyntheticPropertyAccess.kt
x: CALL 'public final fun inc (): kotlin.Int declared in kotlin.Int' type=kotlin.Int origin=null
$this: GET_VAR 'val tmp_1: kotlin.Int declared in <root>.test' type=kotlin.Int origin=null
GET_VAR 'val tmp_1: kotlin.Int declared in <root>.test' type=kotlin.Int origin=null
CALL 'public open fun setFoo (x: kotlin.Int): kotlin.Unit declared in <root>.J' type=kotlin.Unit origin=EQ
$this: GET_VAR 'j: <root>.J declared in <root>.test' type=<root>.J origin=null
x: CALL 'public final fun plus (other: kotlin.Int): kotlin.Int declared in kotlin.Int' type=kotlin.Int origin=null
$this: CALL 'public open fun getFoo (): kotlin.Int declared in <root>.J' type=kotlin.Int origin=GET_PROPERTY
$this: GET_VAR 'j: <root>.J declared in <root>.test' type=<root>.J origin=null
other: CONST Int type=kotlin.Int value=1
BLOCK type=kotlin.Unit origin=null
VAR IR_TEMPORARY_VARIABLE name:tmp_2 type:<root>.J [val]
GET_VAR 'j: <root>.J declared in <root>.test' type=<root>.J origin=null
CALL 'public open fun setFoo (x: kotlin.Int): kotlin.Unit declared in <root>.J' type=kotlin.Unit origin=EQ
$this: GET_VAR 'val tmp_2: <root>.J declared in <root>.test' type=<root>.J origin=null
x: CALL 'public final fun plus (other: kotlin.Int): kotlin.Int declared in kotlin.Int' type=kotlin.Int origin=null
$this: CALL 'public open fun getFoo (): kotlin.Int declared in <root>.J' type=kotlin.Int origin=GET_PROPERTY
$this: GET_VAR 'val tmp_2: <root>.J declared in <root>.test' type=<root>.J origin=null
other: CONST Int type=kotlin.Int value=1
@@ -7,5 +7,8 @@ fun test(j: J) {
<receiver>.setFoo(x = <unary>.inc())
<unary>
} /*~> Unit */
j.setFoo(x = j.getFoo().plus(other = 1))
{ // BLOCK
val <receiver>: J = j
<receiver>.setFoo(x = <receiver>.getFoo().plus(other = 1))
}
}
@@ -74,42 +74,44 @@ FILE fqName:test fileName:/safeCallWithIncrementDecrement.kt
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
then: BLOCK type=kotlin.Int origin=null
VAR IR_TEMPORARY_VARIABLE name:tmp_2 type:kotlin.Int [val]
VAR IR_TEMPORARY_VARIABLE name:tmp_2 type:test.C [val]
GET_VAR 'val tmp_1: test.C? declared in test.testProperty' type=test.C? origin=null
VAR IR_TEMPORARY_VARIABLE name:tmp_3 type:kotlin.Int [val]
CALL 'public final fun <get-p> (): kotlin.Int declared in test' type=kotlin.Int origin=GET_PROPERTY
$receiver: GET_VAR 'val tmp_1: test.C? declared in test.testProperty' type=test.C? origin=null
$receiver: GET_VAR 'val tmp_2: test.C declared in test.testProperty' type=test.C origin=null
CALL 'public final fun <set-p> (value: kotlin.Int): kotlin.Unit declared in test' type=kotlin.Unit origin=EQ
$receiver: GET_VAR 'val tmp_1: test.C? declared in test.testProperty' type=test.C? origin=null
$receiver: GET_VAR 'val tmp_2: test.C declared in test.testProperty' type=test.C origin=null
value: CALL 'public final fun inc (): kotlin.Int declared in kotlin.Int' type=kotlin.Int origin=null
$this: GET_VAR 'val tmp_2: kotlin.Int declared in test.testProperty' type=kotlin.Int origin=null
GET_VAR 'val tmp_2: kotlin.Int declared in test.testProperty' type=kotlin.Int origin=null
$this: GET_VAR 'val tmp_3: kotlin.Int declared in test.testProperty' type=kotlin.Int origin=null
GET_VAR 'val tmp_3: kotlin.Int declared in test.testProperty' type=kotlin.Int origin=null
FUN name:testArrayAccess visibility:public modality:FINAL <> (nc:test.C?) returnType:kotlin.Unit
VALUE_PARAMETER name:nc index:0 type:test.C?
BLOCK_BODY
TYPE_OP type=kotlin.Unit origin=IMPLICIT_COERCION_TO_UNIT typeOperand=kotlin.Unit
BLOCK type=kotlin.Int? origin=SAFE_CALL
VAR IR_TEMPORARY_VARIABLE name:tmp_3 type:test.C? [val]
VAR IR_TEMPORARY_VARIABLE name:tmp_4 type:test.C? [val]
GET_VAR 'nc: test.C? declared in test.testArrayAccess' type=test.C? origin=null
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_VAR 'val tmp_3: test.C? declared in test.testArrayAccess' type=test.C? origin=null
arg0: GET_VAR 'val tmp_4: test.C? declared in test.testArrayAccess' type=test.C? origin=null
arg1: CONST Null type=kotlin.Nothing? value=null
then: CONST Null type=kotlin.Nothing? value=null
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
then: BLOCK type=kotlin.Int origin=null
VAR IR_TEMPORARY_VARIABLE name:tmp_4 type:kotlin.Int [val]
CALL 'public final fun <get-p> (): kotlin.Int declared in test' type=kotlin.Int origin=GET_PROPERTY
$receiver: GET_VAR 'val tmp_3: test.C? declared in test.testArrayAccess' type=test.C? origin=null
VAR IR_TEMPORARY_VARIABLE name:tmp_5 type:kotlin.Int [val]
CONST Int type=kotlin.Int value=0
CALL 'public final fun <get-p> (): kotlin.Int declared in test' type=kotlin.Int origin=GET_PROPERTY
$receiver: GET_VAR 'val tmp_4: test.C? declared in test.testArrayAccess' type=test.C? origin=null
VAR IR_TEMPORARY_VARIABLE name:tmp_6 type:kotlin.Int [val]
CONST Int type=kotlin.Int value=0
VAR IR_TEMPORARY_VARIABLE name:tmp_7 type:kotlin.Int [val]
CALL 'public final fun get (index: kotlin.Int): kotlin.Int declared in test' type=kotlin.Int origin=null
$receiver: GET_VAR 'val tmp_4: kotlin.Int declared in test.testArrayAccess' type=kotlin.Int origin=null
index: GET_VAR 'val tmp_5: kotlin.Int declared in test.testArrayAccess' type=kotlin.Int origin=null
$receiver: GET_VAR 'val tmp_5: kotlin.Int declared in test.testArrayAccess' type=kotlin.Int origin=null
index: GET_VAR 'val tmp_6: kotlin.Int declared in test.testArrayAccess' type=kotlin.Int origin=null
CALL 'public final fun set (index: kotlin.Int, value: kotlin.Int): kotlin.Unit declared in test' type=kotlin.Unit origin=null
$receiver: GET_VAR 'val tmp_4: kotlin.Int declared in test.testArrayAccess' type=kotlin.Int origin=null
index: GET_VAR 'val tmp_5: kotlin.Int declared in test.testArrayAccess' type=kotlin.Int origin=null
$receiver: GET_VAR 'val tmp_5: kotlin.Int declared in test.testArrayAccess' type=kotlin.Int origin=null
index: GET_VAR 'val tmp_6: kotlin.Int declared in test.testArrayAccess' type=kotlin.Int origin=null
value: CALL 'public final fun inc (): kotlin.Int declared in kotlin.Int' type=kotlin.Int origin=null
$this: GET_VAR 'val tmp_6: kotlin.Int declared in test.testArrayAccess' type=kotlin.Int origin=null
GET_VAR 'val tmp_6: kotlin.Int declared in test.testArrayAccess' type=kotlin.Int origin=null
$this: GET_VAR 'val tmp_7: kotlin.Int declared in test.testArrayAccess' type=kotlin.Int origin=null
GET_VAR 'val tmp_7: kotlin.Int declared in test.testArrayAccess' type=kotlin.Int origin=null
@@ -39,8 +39,9 @@ fun testProperty(nc: C?) {
when {
EQEQ(arg0 = tmp1_safe_receiver, arg1 = null) -> null
else -> { // BLOCK
val <unary>: Int = tmp1_safe_receiver.<get-p>()
tmp1_safe_receiver.<set-p>(value = <unary>.inc())
val <receiver>: C = tmp1_safe_receiver
val <unary>: Int = <receiver>.<get-p>()
<receiver>.<set-p>(value = <unary>.inc())
<unary>
}
}
@@ -0,0 +1,460 @@
FILE fqName:foo fileName:/AssignmentOperator.kt
CLASS CLASS name:A modality:FINAL visibility:public superTypes:[kotlin.Any]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:foo.A
CONSTRUCTOR visibility:public <> () returnType:foo.A [primary]
BLOCK_BODY
DELEGATING_CONSTRUCTOR_CALL 'public constructor <init> () declared in kotlin.Any'
INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:A modality:FINAL visibility:public superTypes:[kotlin.Any]'
PROPERTY name:prop visibility:public modality:FINAL [var]
FIELD PROPERTY_BACKING_FIELD name:prop type:kotlin.Int visibility:private
EXPRESSION_BODY
CONST Int type=kotlin.Int value=0
FUN DEFAULT_PROPERTY_ACCESSOR name:<get-prop> visibility:public modality:FINAL <> ($this:foo.A) returnType:kotlin.Int
correspondingProperty: PROPERTY name:prop visibility:public modality:FINAL [var]
$this: VALUE_PARAMETER name:<this> type:foo.A
BLOCK_BODY
RETURN type=kotlin.Nothing from='public final fun <get-prop> (): kotlin.Int declared in foo.A'
GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:prop type:kotlin.Int visibility:private' type=kotlin.Int origin=null
receiver: GET_VAR '<this>: foo.A declared in foo.A.<get-prop>' type=foo.A origin=null
FUN DEFAULT_PROPERTY_ACCESSOR name:<set-prop> visibility:public modality:FINAL <> ($this:foo.A, <set-?>:kotlin.Int) returnType:kotlin.Unit
correspondingProperty: PROPERTY name:prop visibility:public modality:FINAL [var]
$this: VALUE_PARAMETER name:<this> type:foo.A
VALUE_PARAMETER name:<set-?> index:0 type:kotlin.Int
BLOCK_BODY
SET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:prop type:kotlin.Int visibility:private' type=kotlin.Unit origin=null
receiver: GET_VAR '<this>: foo.A declared in foo.A.<set-prop>' type=foo.A origin=null
value: GET_VAR '<set-?>: kotlin.Int declared in foo.A.<set-prop>' type=kotlin.Int 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
CLASS OBJECT name:B modality:FINAL visibility:public superTypes:[kotlin.Any]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:foo.B
CONSTRUCTOR visibility:private <> () returnType:foo.B [primary]
BLOCK_BODY
DELEGATING_CONSTRUCTOR_CALL 'public constructor <init> () declared in kotlin.Any'
INSTANCE_INITIALIZER_CALL classDescriptor='CLASS OBJECT name:B modality:FINAL visibility:public superTypes:[kotlin.Any]'
PROPERTY name:prop visibility:public modality:FINAL [var]
FIELD PROPERTY_BACKING_FIELD name:prop type:kotlin.Int visibility:private
EXPRESSION_BODY
CONST Int type=kotlin.Int value=0
FUN DEFAULT_PROPERTY_ACCESSOR name:<get-prop> visibility:public modality:FINAL <> ($this:foo.B) returnType:kotlin.Int
correspondingProperty: PROPERTY name:prop visibility:public modality:FINAL [var]
$this: VALUE_PARAMETER name:<this> type:foo.B
BLOCK_BODY
RETURN type=kotlin.Nothing from='public final fun <get-prop> (): kotlin.Int declared in foo.B'
GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:prop type:kotlin.Int visibility:private' type=kotlin.Int origin=null
receiver: GET_VAR '<this>: foo.B declared in foo.B.<get-prop>' type=foo.B origin=null
FUN DEFAULT_PROPERTY_ACCESSOR name:<set-prop> visibility:public modality:FINAL <> ($this:foo.B, <set-?>:kotlin.Int) returnType:kotlin.Unit
correspondingProperty: PROPERTY name:prop visibility:public modality:FINAL [var]
$this: VALUE_PARAMETER name:<this> type:foo.B
VALUE_PARAMETER name:<set-?> index:0 type:kotlin.Int
BLOCK_BODY
SET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:prop type:kotlin.Int visibility:private' type=kotlin.Unit origin=null
receiver: GET_VAR '<this>: foo.B declared in foo.B.<set-prop>' type=foo.B origin=null
value: GET_VAR '<set-?>: kotlin.Int declared in foo.B.<set-prop>' type=kotlin.Int 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
PROPERTY name:array visibility:public modality:FINAL [val]
FIELD PROPERTY_BACKING_FIELD name:array type:kotlin.Array<kotlin.Int> visibility:private [final,static]
EXPRESSION_BODY
CALL 'public final fun arrayOf <T> (vararg elements: T of kotlin.arrayOf): kotlin.Array<T of kotlin.arrayOf> declared in kotlin' type=kotlin.Array<kotlin.Int> origin=null
<T>: kotlin.Int
elements: VARARG type=kotlin.Array<out kotlin.Int> varargElementType=kotlin.Int
CONST Int type=kotlin.Int value=0
FUN DEFAULT_PROPERTY_ACCESSOR name:<get-array> visibility:public modality:FINAL <> () returnType:kotlin.Array<kotlin.Int>
correspondingProperty: PROPERTY name:array visibility:public modality:FINAL [val]
BLOCK_BODY
RETURN type=kotlin.Nothing from='public final fun <get-array> (): kotlin.Array<kotlin.Int> declared in foo'
GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:array type:kotlin.Array<kotlin.Int> visibility:private [final,static]' type=kotlin.Array<kotlin.Int> origin=null
FUN name:id visibility:public modality:FINAL <T> (t:T of foo.id) returnType:T of foo.id
TYPE_PARAMETER name:T index:0 variance: superTypes:[kotlin.Any?] reified:false
VALUE_PARAMETER name:t index:0 type:T of foo.id
BLOCK_BODY
RETURN type=kotlin.Nothing from='public final fun id <T> (t: T of foo.id): T of foo.id declared in foo'
GET_VAR 't: T of foo.id declared in foo.id' type=T of foo.id origin=null
FUN name:main visibility:public modality:FINAL <> () returnType:kotlin.Unit
BLOCK_BODY
VAR name:a type:foo.A [val]
CONSTRUCTOR_CALL 'public constructor <init> () declared in foo.A' type=foo.A origin=null
CALL 'public final fun <set-prop> (<set-?>: kotlin.Int): kotlin.Unit declared in foo.A' type=kotlin.Unit origin=EQ
$this: CALL 'public final fun id <T> (t: T of foo.id): T of foo.id declared in foo' type=foo.A origin=null
<T>: foo.A
t: GET_VAR 'val a: foo.A declared in foo.main' type=foo.A origin=null
<set-?>: CONST Int type=kotlin.Int value=10
BLOCK type=kotlin.Unit origin=null
VAR IR_TEMPORARY_VARIABLE name:tmp_0 type:foo.A [val]
CALL 'public final fun id <T> (t: T of foo.id): T of foo.id declared in foo' type=foo.A origin=null
<T>: foo.A
t: GET_VAR 'val a: foo.A declared in foo.main' type=foo.A origin=null
CALL 'public final fun <set-prop> (<set-?>: kotlin.Int): kotlin.Unit declared in foo.A' type=kotlin.Unit origin=EQ
$this: GET_VAR 'val tmp_0: foo.A declared in foo.main' type=foo.A origin=null
<set-?>: CALL 'public final fun plus (other: kotlin.Int): kotlin.Int declared in kotlin.Int' type=kotlin.Int origin=null
$this: CALL 'public final fun <get-prop> (): kotlin.Int declared in foo.A' type=kotlin.Int origin=GET_PROPERTY
$this: GET_VAR 'val tmp_0: foo.A declared in foo.main' type=foo.A origin=null
other: CONST Int type=kotlin.Int value=20
BLOCK type=kotlin.Unit origin=null
VAR IR_TEMPORARY_VARIABLE name:tmp_1 type:foo.A [val]
CALL 'public final fun id <T> (t: T of foo.id): T of foo.id declared in foo' type=foo.A origin=null
<T>: foo.A
t: GET_VAR 'val a: foo.A declared in foo.main' type=foo.A origin=null
CALL 'public final fun <set-prop> (<set-?>: kotlin.Int): kotlin.Unit declared in foo.A' type=kotlin.Unit origin=EQ
$this: GET_VAR 'val tmp_1: foo.A declared in foo.main' type=foo.A origin=null
<set-?>: CALL 'public final fun minus (other: kotlin.Int): kotlin.Int declared in kotlin.Int' type=kotlin.Int origin=null
$this: CALL 'public final fun <get-prop> (): kotlin.Int declared in foo.A' type=kotlin.Int origin=GET_PROPERTY
$this: GET_VAR 'val tmp_1: foo.A declared in foo.main' type=foo.A origin=null
other: CONST Int type=kotlin.Int value=20
BLOCK type=kotlin.Unit origin=null
VAR IR_TEMPORARY_VARIABLE name:tmp_2 type:foo.A [val]
CALL 'public final fun id <T> (t: T of foo.id): T of foo.id declared in foo' type=foo.A origin=null
<T>: foo.A
t: GET_VAR 'val a: foo.A declared in foo.main' type=foo.A origin=null
CALL 'public final fun <set-prop> (<set-?>: kotlin.Int): kotlin.Unit declared in foo.A' type=kotlin.Unit origin=EQ
$this: GET_VAR 'val tmp_2: foo.A declared in foo.main' type=foo.A origin=null
<set-?>: CALL 'public final fun times (other: kotlin.Int): kotlin.Int declared in kotlin.Int' type=kotlin.Int origin=null
$this: CALL 'public final fun <get-prop> (): kotlin.Int declared in foo.A' type=kotlin.Int origin=GET_PROPERTY
$this: GET_VAR 'val tmp_2: foo.A declared in foo.main' type=foo.A origin=null
other: CONST Int type=kotlin.Int value=2
BLOCK type=kotlin.Unit origin=null
VAR IR_TEMPORARY_VARIABLE name:tmp_3 type:foo.A [val]
CALL 'public final fun id <T> (t: T of foo.id): T of foo.id declared in foo' type=foo.A origin=null
<T>: foo.A
t: GET_VAR 'val a: foo.A declared in foo.main' type=foo.A origin=null
CALL 'public final fun <set-prop> (<set-?>: kotlin.Int): kotlin.Unit declared in foo.A' type=kotlin.Unit origin=EQ
$this: GET_VAR 'val tmp_3: foo.A declared in foo.main' type=foo.A origin=null
<set-?>: CALL 'public final fun div (other: kotlin.Int): kotlin.Int declared in kotlin.Int' type=kotlin.Int origin=null
$this: CALL 'public final fun <get-prop> (): kotlin.Int declared in foo.A' type=kotlin.Int origin=GET_PROPERTY
$this: GET_VAR 'val tmp_3: foo.A declared in foo.main' type=foo.A origin=null
other: CONST Int type=kotlin.Int value=5
BLOCK type=kotlin.Unit origin=null
VAR IR_TEMPORARY_VARIABLE name:tmp_4 type:foo.A [val]
CALL 'public final fun id <T> (t: T of foo.id): T of foo.id declared in foo' type=foo.A origin=null
<T>: foo.A
t: GET_VAR 'val a: foo.A declared in foo.main' type=foo.A origin=null
CALL 'public final fun <set-prop> (<set-?>: kotlin.Int): kotlin.Unit declared in foo.A' type=kotlin.Unit origin=EQ
$this: GET_VAR 'val tmp_4: foo.A declared in foo.main' type=foo.A origin=null
<set-?>: CALL 'public final fun rem (other: kotlin.Int): kotlin.Int declared in kotlin.Int' type=kotlin.Int origin=null
$this: CALL 'public final fun <get-prop> (): kotlin.Int declared in foo.A' type=kotlin.Int origin=GET_PROPERTY
$this: GET_VAR 'val tmp_4: foo.A declared in foo.main' type=foo.A origin=null
other: CONST Int type=kotlin.Int value=3
TYPE_OP type=kotlin.Unit origin=IMPLICIT_COERCION_TO_UNIT typeOperand=kotlin.Unit
BLOCK type=kotlin.Int origin=null
VAR IR_TEMPORARY_VARIABLE name:tmp_5 type:foo.A [val]
CALL 'public final fun id <T> (t: T of foo.id): T of foo.id declared in foo' type=foo.A origin=null
<T>: foo.A
t: GET_VAR 'val a: foo.A declared in foo.main' type=foo.A origin=null
VAR IR_TEMPORARY_VARIABLE name:tmp_6 type:kotlin.Int [val]
CALL 'public final fun <get-prop> (): kotlin.Int declared in foo.A' type=kotlin.Int origin=GET_PROPERTY
$this: GET_VAR 'val tmp_5: foo.A declared in foo.main' type=foo.A origin=null
CALL 'public final fun <set-prop> (<set-?>: kotlin.Int): kotlin.Unit declared in foo.A' type=kotlin.Unit origin=EQ
$this: GET_VAR 'val tmp_5: foo.A declared in foo.main' type=foo.A origin=null
<set-?>: CALL 'public final fun inc (): kotlin.Int declared in kotlin.Int' type=kotlin.Int origin=null
$this: GET_VAR 'val tmp_6: kotlin.Int declared in foo.main' type=kotlin.Int origin=null
GET_VAR 'val tmp_6: kotlin.Int declared in foo.main' type=kotlin.Int origin=null
TYPE_OP type=kotlin.Unit origin=IMPLICIT_COERCION_TO_UNIT typeOperand=kotlin.Unit
BLOCK type=kotlin.Int origin=null
VAR IR_TEMPORARY_VARIABLE name:tmp_7 type:foo.A [val]
CALL 'public final fun id <T> (t: T of foo.id): T of foo.id declared in foo' type=foo.A origin=null
<T>: foo.A
t: GET_VAR 'val a: foo.A declared in foo.main' type=foo.A origin=null
VAR IR_TEMPORARY_VARIABLE name:tmp_8 type:kotlin.Int [val]
CALL 'public final fun <get-prop> (): kotlin.Int declared in foo.A' type=kotlin.Int origin=GET_PROPERTY
$this: GET_VAR 'val tmp_7: foo.A declared in foo.main' type=foo.A origin=null
CALL 'public final fun <set-prop> (<set-?>: kotlin.Int): kotlin.Unit declared in foo.A' type=kotlin.Unit origin=EQ
$this: GET_VAR 'val tmp_7: foo.A declared in foo.main' type=foo.A origin=null
<set-?>: CALL 'public final fun dec (): kotlin.Int declared in kotlin.Int' type=kotlin.Int origin=null
$this: GET_VAR 'val tmp_8: kotlin.Int declared in foo.main' type=kotlin.Int origin=null
GET_VAR 'val tmp_8: kotlin.Int declared in foo.main' type=kotlin.Int origin=null
TYPE_OP type=kotlin.Unit origin=IMPLICIT_COERCION_TO_UNIT typeOperand=kotlin.Unit
BLOCK type=kotlin.Int origin=null
VAR IR_TEMPORARY_VARIABLE name:tmp_9 type:foo.A [val]
CALL 'public final fun id <T> (t: T of foo.id): T of foo.id declared in foo' type=foo.A origin=null
<T>: foo.A
t: GET_VAR 'val a: foo.A declared in foo.main' type=foo.A origin=null
CALL 'public final fun <set-prop> (<set-?>: kotlin.Int): kotlin.Unit declared in foo.A' type=kotlin.Unit origin=EQ
$this: GET_VAR 'val tmp_9: foo.A declared in foo.main' type=foo.A origin=null
<set-?>: CALL 'public final fun inc (): kotlin.Int declared in kotlin.Int' type=kotlin.Int origin=null
$this: CALL 'public final fun <get-prop> (): kotlin.Int declared in foo.A' type=kotlin.Int origin=GET_PROPERTY
$this: GET_VAR 'val tmp_9: foo.A declared in foo.main' type=foo.A origin=null
CALL 'public final fun <get-prop> (): kotlin.Int declared in foo.A' type=kotlin.Int origin=GET_PROPERTY
$this: GET_VAR 'val tmp_9: foo.A declared in foo.main' type=foo.A origin=null
TYPE_OP type=kotlin.Unit origin=IMPLICIT_COERCION_TO_UNIT typeOperand=kotlin.Unit
BLOCK type=kotlin.Int origin=null
VAR IR_TEMPORARY_VARIABLE name:tmp_10 type:foo.A [val]
CALL 'public final fun id <T> (t: T of foo.id): T of foo.id declared in foo' type=foo.A origin=null
<T>: foo.A
t: GET_VAR 'val a: foo.A declared in foo.main' type=foo.A origin=null
CALL 'public final fun <set-prop> (<set-?>: kotlin.Int): kotlin.Unit declared in foo.A' type=kotlin.Unit origin=EQ
$this: GET_VAR 'val tmp_10: foo.A declared in foo.main' type=foo.A origin=null
<set-?>: CALL 'public final fun dec (): kotlin.Int declared in kotlin.Int' type=kotlin.Int origin=null
$this: CALL 'public final fun <get-prop> (): kotlin.Int declared in foo.A' type=kotlin.Int origin=GET_PROPERTY
$this: GET_VAR 'val tmp_10: foo.A declared in foo.main' type=foo.A origin=null
CALL 'public final fun <get-prop> (): kotlin.Int declared in foo.A' type=kotlin.Int origin=GET_PROPERTY
$this: GET_VAR 'val tmp_10: foo.A declared in foo.main' type=foo.A origin=null
TYPE_OP type=kotlin.Unit origin=IMPLICIT_COERCION_TO_UNIT typeOperand=kotlin.Unit
BLOCK type=kotlin.Int origin=null
VAR IR_TEMPORARY_VARIABLE name:tmp_11 type:kotlin.Int [val]
CALL 'public final fun <get-prop> (): kotlin.Int declared in foo.B' type=kotlin.Int origin=GET_PROPERTY
$this: GET_OBJECT 'CLASS OBJECT name:B modality:FINAL visibility:public superTypes:[kotlin.Any]' type=foo.B
CALL 'public final fun <set-prop> (<set-?>: kotlin.Int): kotlin.Unit declared in foo.B' type=kotlin.Unit origin=EQ
$this: GET_OBJECT 'CLASS OBJECT name:B modality:FINAL visibility:public superTypes:[kotlin.Any]' type=foo.B
<set-?>: CALL 'public final fun inc (): kotlin.Int declared in kotlin.Int' type=kotlin.Int origin=null
$this: GET_VAR 'val tmp_11: kotlin.Int declared in foo.main' type=kotlin.Int origin=null
GET_VAR 'val tmp_11: kotlin.Int declared in foo.main' type=kotlin.Int origin=null
TYPE_OP type=kotlin.Unit origin=IMPLICIT_COERCION_TO_UNIT typeOperand=kotlin.Unit
BLOCK type=kotlin.Int origin=null
VAR IR_TEMPORARY_VARIABLE name:tmp_12 type:kotlin.Int [val]
CALL 'public final fun <get-prop> (): kotlin.Int declared in foo.B' type=kotlin.Int origin=GET_PROPERTY
$this: GET_OBJECT 'CLASS OBJECT name:B modality:FINAL visibility:public superTypes:[kotlin.Any]' type=foo.B
CALL 'public final fun <set-prop> (<set-?>: kotlin.Int): kotlin.Unit declared in foo.B' type=kotlin.Unit origin=EQ
$this: GET_OBJECT 'CLASS OBJECT name:B modality:FINAL visibility:public superTypes:[kotlin.Any]' type=foo.B
<set-?>: CALL 'public final fun dec (): kotlin.Int declared in kotlin.Int' type=kotlin.Int origin=null
$this: GET_VAR 'val tmp_12: kotlin.Int declared in foo.main' type=kotlin.Int origin=null
GET_VAR 'val tmp_12: kotlin.Int declared in foo.main' type=kotlin.Int origin=null
TYPE_OP type=kotlin.Unit origin=IMPLICIT_COERCION_TO_UNIT typeOperand=kotlin.Unit
BLOCK type=kotlin.Int origin=null
CALL 'public final fun <set-prop> (<set-?>: kotlin.Int): kotlin.Unit declared in foo.B' type=kotlin.Unit origin=EQ
$this: GET_OBJECT 'CLASS OBJECT name:B modality:FINAL visibility:public superTypes:[kotlin.Any]' type=foo.B
<set-?>: CALL 'public final fun inc (): kotlin.Int declared in kotlin.Int' type=kotlin.Int origin=null
$this: CALL 'public final fun <get-prop> (): kotlin.Int declared in foo.B' type=kotlin.Int origin=GET_PROPERTY
$this: GET_OBJECT 'CLASS OBJECT name:B modality:FINAL visibility:public superTypes:[kotlin.Any]' type=foo.B
CALL 'public final fun <get-prop> (): kotlin.Int declared in foo.B' type=kotlin.Int origin=GET_PROPERTY
$this: GET_OBJECT 'CLASS OBJECT name:B modality:FINAL visibility:public superTypes:[kotlin.Any]' type=foo.B
TYPE_OP type=kotlin.Unit origin=IMPLICIT_COERCION_TO_UNIT typeOperand=kotlin.Unit
BLOCK type=kotlin.Int origin=null
CALL 'public final fun <set-prop> (<set-?>: kotlin.Int): kotlin.Unit declared in foo.B' type=kotlin.Unit origin=EQ
$this: GET_OBJECT 'CLASS OBJECT name:B modality:FINAL visibility:public superTypes:[kotlin.Any]' type=foo.B
<set-?>: CALL 'public final fun dec (): kotlin.Int declared in kotlin.Int' type=kotlin.Int origin=null
$this: CALL 'public final fun <get-prop> (): kotlin.Int declared in foo.B' type=kotlin.Int origin=GET_PROPERTY
$this: GET_OBJECT 'CLASS OBJECT name:B modality:FINAL visibility:public superTypes:[kotlin.Any]' type=foo.B
CALL 'public final fun <get-prop> (): kotlin.Int declared in foo.B' type=kotlin.Int origin=GET_PROPERTY
$this: GET_OBJECT 'CLASS OBJECT name:B modality:FINAL visibility:public superTypes:[kotlin.Any]' type=foo.B
CALL 'public final fun set (index: kotlin.Int, value: T of kotlin.Array): kotlin.Unit declared in kotlin.Array' type=kotlin.Unit origin=null
$this: CALL 'public final fun id <T> (t: T of foo.id): T of foo.id declared in foo' type=kotlin.Array<kotlin.Int> origin=null
<T>: kotlin.Array<kotlin.Int>
t: CALL 'public final fun <get-array> (): kotlin.Array<kotlin.Int> declared in foo' type=kotlin.Array<kotlin.Int> origin=GET_PROPERTY
index: CONST Int type=kotlin.Int value=0
value: CONST Int type=kotlin.Int value=10
BLOCK type=kotlin.Unit origin=null
VAR IR_TEMPORARY_VARIABLE name:tmp_13 type:kotlin.Array<kotlin.Int> [val]
CALL 'public final fun id <T> (t: T of foo.id): T of foo.id declared in foo' type=kotlin.Array<kotlin.Int> origin=null
<T>: kotlin.Array<kotlin.Int>
t: CALL 'public final fun <get-array> (): kotlin.Array<kotlin.Int> declared in foo' type=kotlin.Array<kotlin.Int> origin=GET_PROPERTY
VAR IR_TEMPORARY_VARIABLE name:tmp_14 type:kotlin.Int [val]
CONST Int type=kotlin.Int value=0
CALL 'public final fun set (index: kotlin.Int, value: T of kotlin.Array): kotlin.Unit declared in kotlin.Array' type=kotlin.Unit origin=null
$this: GET_VAR 'val tmp_13: kotlin.Array<kotlin.Int> declared in foo.main' type=kotlin.Array<kotlin.Int> origin=null
index: GET_VAR 'val tmp_14: kotlin.Int declared in foo.main' type=kotlin.Int origin=null
value: CALL 'public final fun plus (other: kotlin.Int): kotlin.Int declared in kotlin.Int' type=kotlin.Int origin=null
$this: CALL 'public final fun get (index: kotlin.Int): T of kotlin.Array declared in kotlin.Array' type=kotlin.Int origin=null
$this: GET_VAR 'val tmp_13: kotlin.Array<kotlin.Int> declared in foo.main' type=kotlin.Array<kotlin.Int> origin=null
index: GET_VAR 'val tmp_14: kotlin.Int declared in foo.main' type=kotlin.Int origin=null
other: CONST Int type=kotlin.Int value=20
BLOCK type=kotlin.Unit origin=null
VAR IR_TEMPORARY_VARIABLE name:tmp_15 type:kotlin.Array<kotlin.Int> [val]
CALL 'public final fun id <T> (t: T of foo.id): T of foo.id declared in foo' type=kotlin.Array<kotlin.Int> origin=null
<T>: kotlin.Array<kotlin.Int>
t: CALL 'public final fun <get-array> (): kotlin.Array<kotlin.Int> declared in foo' type=kotlin.Array<kotlin.Int> origin=GET_PROPERTY
VAR IR_TEMPORARY_VARIABLE name:tmp_16 type:kotlin.Int [val]
CONST Int type=kotlin.Int value=0
CALL 'public final fun set (index: kotlin.Int, value: T of kotlin.Array): kotlin.Unit declared in kotlin.Array' type=kotlin.Unit origin=null
$this: GET_VAR 'val tmp_15: kotlin.Array<kotlin.Int> declared in foo.main' type=kotlin.Array<kotlin.Int> origin=null
index: GET_VAR 'val tmp_16: kotlin.Int declared in foo.main' type=kotlin.Int origin=null
value: CALL 'public final fun minus (other: kotlin.Int): kotlin.Int declared in kotlin.Int' type=kotlin.Int origin=null
$this: CALL 'public final fun get (index: kotlin.Int): T of kotlin.Array declared in kotlin.Array' type=kotlin.Int origin=null
$this: GET_VAR 'val tmp_15: kotlin.Array<kotlin.Int> declared in foo.main' type=kotlin.Array<kotlin.Int> origin=null
index: GET_VAR 'val tmp_16: kotlin.Int declared in foo.main' type=kotlin.Int origin=null
other: CONST Int type=kotlin.Int value=20
BLOCK type=kotlin.Unit origin=null
VAR IR_TEMPORARY_VARIABLE name:tmp_17 type:kotlin.Array<kotlin.Int> [val]
CALL 'public final fun id <T> (t: T of foo.id): T of foo.id declared in foo' type=kotlin.Array<kotlin.Int> origin=null
<T>: kotlin.Array<kotlin.Int>
t: CALL 'public final fun <get-array> (): kotlin.Array<kotlin.Int> declared in foo' type=kotlin.Array<kotlin.Int> origin=GET_PROPERTY
VAR IR_TEMPORARY_VARIABLE name:tmp_18 type:kotlin.Int [val]
CONST Int type=kotlin.Int value=0
CALL 'public final fun set (index: kotlin.Int, value: T of kotlin.Array): kotlin.Unit declared in kotlin.Array' type=kotlin.Unit origin=null
$this: GET_VAR 'val tmp_17: kotlin.Array<kotlin.Int> declared in foo.main' type=kotlin.Array<kotlin.Int> origin=null
index: GET_VAR 'val tmp_18: kotlin.Int declared in foo.main' type=kotlin.Int origin=null
value: CALL 'public final fun times (other: kotlin.Int): kotlin.Int declared in kotlin.Int' type=kotlin.Int origin=null
$this: CALL 'public final fun get (index: kotlin.Int): T of kotlin.Array declared in kotlin.Array' type=kotlin.Int origin=null
$this: GET_VAR 'val tmp_17: kotlin.Array<kotlin.Int> declared in foo.main' type=kotlin.Array<kotlin.Int> origin=null
index: GET_VAR 'val tmp_18: kotlin.Int declared in foo.main' type=kotlin.Int origin=null
other: CONST Int type=kotlin.Int value=2
BLOCK type=kotlin.Unit origin=null
VAR IR_TEMPORARY_VARIABLE name:tmp_19 type:kotlin.Array<kotlin.Int> [val]
CALL 'public final fun id <T> (t: T of foo.id): T of foo.id declared in foo' type=kotlin.Array<kotlin.Int> origin=null
<T>: kotlin.Array<kotlin.Int>
t: CALL 'public final fun <get-array> (): kotlin.Array<kotlin.Int> declared in foo' type=kotlin.Array<kotlin.Int> origin=GET_PROPERTY
VAR IR_TEMPORARY_VARIABLE name:tmp_20 type:kotlin.Int [val]
CONST Int type=kotlin.Int value=0
CALL 'public final fun set (index: kotlin.Int, value: T of kotlin.Array): kotlin.Unit declared in kotlin.Array' type=kotlin.Unit origin=null
$this: GET_VAR 'val tmp_19: kotlin.Array<kotlin.Int> declared in foo.main' type=kotlin.Array<kotlin.Int> origin=null
index: GET_VAR 'val tmp_20: kotlin.Int declared in foo.main' type=kotlin.Int origin=null
value: CALL 'public final fun div (other: kotlin.Int): kotlin.Int declared in kotlin.Int' type=kotlin.Int origin=null
$this: CALL 'public final fun get (index: kotlin.Int): T of kotlin.Array declared in kotlin.Array' type=kotlin.Int origin=null
$this: GET_VAR 'val tmp_19: kotlin.Array<kotlin.Int> declared in foo.main' type=kotlin.Array<kotlin.Int> origin=null
index: GET_VAR 'val tmp_20: kotlin.Int declared in foo.main' type=kotlin.Int origin=null
other: CONST Int type=kotlin.Int value=5
BLOCK type=kotlin.Unit origin=null
VAR IR_TEMPORARY_VARIABLE name:tmp_21 type:kotlin.Array<kotlin.Int> [val]
CALL 'public final fun id <T> (t: T of foo.id): T of foo.id declared in foo' type=kotlin.Array<kotlin.Int> origin=null
<T>: kotlin.Array<kotlin.Int>
t: CALL 'public final fun <get-array> (): kotlin.Array<kotlin.Int> declared in foo' type=kotlin.Array<kotlin.Int> origin=GET_PROPERTY
VAR IR_TEMPORARY_VARIABLE name:tmp_22 type:kotlin.Int [val]
CONST Int type=kotlin.Int value=0
CALL 'public final fun set (index: kotlin.Int, value: T of kotlin.Array): kotlin.Unit declared in kotlin.Array' type=kotlin.Unit origin=null
$this: GET_VAR 'val tmp_21: kotlin.Array<kotlin.Int> declared in foo.main' type=kotlin.Array<kotlin.Int> origin=null
index: GET_VAR 'val tmp_22: kotlin.Int declared in foo.main' type=kotlin.Int origin=null
value: CALL 'public final fun rem (other: kotlin.Int): kotlin.Int declared in kotlin.Int' type=kotlin.Int origin=null
$this: CALL 'public final fun get (index: kotlin.Int): T of kotlin.Array declared in kotlin.Array' type=kotlin.Int origin=null
$this: GET_VAR 'val tmp_21: kotlin.Array<kotlin.Int> declared in foo.main' type=kotlin.Array<kotlin.Int> origin=null
index: GET_VAR 'val tmp_22: kotlin.Int declared in foo.main' type=kotlin.Int origin=null
other: CONST Int type=kotlin.Int value=3
VAR IR_TEMPORARY_VARIABLE name:tmp_23 type:kotlin.Array<kotlin.Int> [val]
CALL 'public final fun id <T> (t: T of foo.id): T of foo.id declared in foo' type=kotlin.Array<kotlin.Int> origin=null
<T>: kotlin.Array<kotlin.Int>
t: CALL 'public final fun <get-array> (): kotlin.Array<kotlin.Int> declared in foo' type=kotlin.Array<kotlin.Int> origin=GET_PROPERTY
VAR IR_TEMPORARY_VARIABLE name:tmp_24 type:kotlin.Int [val]
CONST Int type=kotlin.Int value=0
VAR IR_TEMPORARY_VARIABLE name:tmp_25 type:kotlin.Int [val]
CALL 'public final fun get (index: kotlin.Int): T of kotlin.Array declared in kotlin.Array' type=kotlin.Int origin=null
$this: GET_VAR 'val tmp_23: kotlin.Array<kotlin.Int> declared in foo.main' type=kotlin.Array<kotlin.Int> origin=null
index: GET_VAR 'val tmp_24: kotlin.Int declared in foo.main' type=kotlin.Int origin=null
CALL 'public final fun set (index: kotlin.Int, value: T of kotlin.Array): kotlin.Unit declared in kotlin.Array' type=kotlin.Unit origin=null
$this: GET_VAR 'val tmp_23: kotlin.Array<kotlin.Int> declared in foo.main' type=kotlin.Array<kotlin.Int> origin=null
index: GET_VAR 'val tmp_24: kotlin.Int declared in foo.main' type=kotlin.Int origin=null
value: CALL 'public final fun inc (): kotlin.Int declared in kotlin.Int' type=kotlin.Int origin=null
$this: GET_VAR 'val tmp_25: kotlin.Int declared in foo.main' type=kotlin.Int origin=null
TYPE_OP type=kotlin.Unit origin=IMPLICIT_COERCION_TO_UNIT typeOperand=kotlin.Unit
GET_VAR 'val tmp_25: kotlin.Int declared in foo.main' type=kotlin.Int origin=null
VAR IR_TEMPORARY_VARIABLE name:tmp_26 type:kotlin.Array<kotlin.Int> [val]
CALL 'public final fun id <T> (t: T of foo.id): T of foo.id declared in foo' type=kotlin.Array<kotlin.Int> origin=null
<T>: kotlin.Array<kotlin.Int>
t: CALL 'public final fun <get-array> (): kotlin.Array<kotlin.Int> declared in foo' type=kotlin.Array<kotlin.Int> origin=GET_PROPERTY
VAR IR_TEMPORARY_VARIABLE name:tmp_27 type:kotlin.Int [val]
CONST Int type=kotlin.Int value=0
VAR IR_TEMPORARY_VARIABLE name:tmp_28 type:kotlin.Int [val]
CALL 'public final fun get (index: kotlin.Int): T of kotlin.Array declared in kotlin.Array' type=kotlin.Int origin=null
$this: GET_VAR 'val tmp_26: kotlin.Array<kotlin.Int> declared in foo.main' type=kotlin.Array<kotlin.Int> origin=null
index: GET_VAR 'val tmp_27: kotlin.Int declared in foo.main' type=kotlin.Int origin=null
CALL 'public final fun set (index: kotlin.Int, value: T of kotlin.Array): kotlin.Unit declared in kotlin.Array' type=kotlin.Unit origin=null
$this: GET_VAR 'val tmp_26: kotlin.Array<kotlin.Int> declared in foo.main' type=kotlin.Array<kotlin.Int> origin=null
index: GET_VAR 'val tmp_27: kotlin.Int declared in foo.main' type=kotlin.Int origin=null
value: CALL 'public final fun dec (): kotlin.Int declared in kotlin.Int' type=kotlin.Int origin=null
$this: GET_VAR 'val tmp_28: kotlin.Int declared in foo.main' type=kotlin.Int origin=null
TYPE_OP type=kotlin.Unit origin=IMPLICIT_COERCION_TO_UNIT typeOperand=kotlin.Unit
GET_VAR 'val tmp_28: kotlin.Int declared in foo.main' type=kotlin.Int origin=null
VAR IR_TEMPORARY_VARIABLE name:tmp_29 type:kotlin.Array<kotlin.Int> [val]
CALL 'public final fun id <T> (t: T of foo.id): T of foo.id declared in foo' type=kotlin.Array<kotlin.Int> origin=null
<T>: kotlin.Array<kotlin.Int>
t: CALL 'public final fun <get-array> (): kotlin.Array<kotlin.Int> declared in foo' type=kotlin.Array<kotlin.Int> origin=GET_PROPERTY
VAR IR_TEMPORARY_VARIABLE name:tmp_30 type:kotlin.Int [val]
CONST Int type=kotlin.Int value=0
CALL 'public final fun set (index: kotlin.Int, value: T of kotlin.Array): kotlin.Unit declared in kotlin.Array' type=kotlin.Unit origin=null
$this: GET_VAR 'val tmp_29: kotlin.Array<kotlin.Int> declared in foo.main' type=kotlin.Array<kotlin.Int> origin=null
index: GET_VAR 'val tmp_30: kotlin.Int declared in foo.main' type=kotlin.Int origin=null
value: CALL 'public final fun inc (): kotlin.Int declared in kotlin.Int' type=kotlin.Int origin=null
$this: CALL 'public final fun get (index: kotlin.Int): T of kotlin.Array declared in kotlin.Array' type=kotlin.Int origin=null
$this: GET_VAR 'val tmp_29: kotlin.Array<kotlin.Int> declared in foo.main' type=kotlin.Array<kotlin.Int> origin=null
index: GET_VAR 'val tmp_30: kotlin.Int declared in foo.main' type=kotlin.Int origin=null
TYPE_OP type=kotlin.Unit origin=IMPLICIT_COERCION_TO_UNIT typeOperand=kotlin.Unit
CALL 'public final fun get (index: kotlin.Int): T of kotlin.Array declared in kotlin.Array' type=kotlin.Int origin=null
$this: GET_VAR 'val tmp_29: kotlin.Array<kotlin.Int> declared in foo.main' type=kotlin.Array<kotlin.Int> origin=null
index: GET_VAR 'val tmp_30: kotlin.Int declared in foo.main' type=kotlin.Int origin=null
VAR IR_TEMPORARY_VARIABLE name:tmp_31 type:kotlin.Array<kotlin.Int> [val]
CALL 'public final fun id <T> (t: T of foo.id): T of foo.id declared in foo' type=kotlin.Array<kotlin.Int> origin=null
<T>: kotlin.Array<kotlin.Int>
t: CALL 'public final fun <get-array> (): kotlin.Array<kotlin.Int> declared in foo' type=kotlin.Array<kotlin.Int> origin=GET_PROPERTY
VAR IR_TEMPORARY_VARIABLE name:tmp_32 type:kotlin.Int [val]
CONST Int type=kotlin.Int value=0
CALL 'public final fun set (index: kotlin.Int, value: T of kotlin.Array): kotlin.Unit declared in kotlin.Array' type=kotlin.Unit origin=null
$this: GET_VAR 'val tmp_31: kotlin.Array<kotlin.Int> declared in foo.main' type=kotlin.Array<kotlin.Int> origin=null
index: GET_VAR 'val tmp_32: kotlin.Int declared in foo.main' type=kotlin.Int origin=null
value: CALL 'public final fun dec (): kotlin.Int declared in kotlin.Int' type=kotlin.Int origin=null
$this: CALL 'public final fun get (index: kotlin.Int): T of kotlin.Array declared in kotlin.Array' type=kotlin.Int origin=null
$this: GET_VAR 'val tmp_31: kotlin.Array<kotlin.Int> declared in foo.main' type=kotlin.Array<kotlin.Int> origin=null
index: GET_VAR 'val tmp_32: kotlin.Int declared in foo.main' type=kotlin.Int origin=null
TYPE_OP type=kotlin.Unit origin=IMPLICIT_COERCION_TO_UNIT typeOperand=kotlin.Unit
CALL 'public final fun get (index: kotlin.Int): T of kotlin.Array declared in kotlin.Array' type=kotlin.Int origin=null
$this: GET_VAR 'val tmp_31: kotlin.Array<kotlin.Int> declared in foo.main' type=kotlin.Array<kotlin.Int> origin=null
index: GET_VAR 'val tmp_32: kotlin.Int declared in foo.main' type=kotlin.Int origin=null
VAR IR_TEMPORARY_VARIABLE name:tmp_33 type:kotlin.Array<kotlin.Int> [val]
CALL 'public final fun <get-array> (): kotlin.Array<kotlin.Int> declared in foo' type=kotlin.Array<kotlin.Int> origin=GET_PROPERTY
VAR IR_TEMPORARY_VARIABLE name:tmp_34 type:kotlin.Int [val]
CONST Int type=kotlin.Int value=0
VAR IR_TEMPORARY_VARIABLE name:tmp_35 type:kotlin.Int [val]
CALL 'public final fun get (index: kotlin.Int): T of kotlin.Array declared in kotlin.Array' type=kotlin.Int origin=null
$this: GET_VAR 'val tmp_33: kotlin.Array<kotlin.Int> declared in foo.main' type=kotlin.Array<kotlin.Int> origin=null
index: GET_VAR 'val tmp_34: kotlin.Int declared in foo.main' type=kotlin.Int origin=null
CALL 'public final fun set (index: kotlin.Int, value: T of kotlin.Array): kotlin.Unit declared in kotlin.Array' type=kotlin.Unit origin=null
$this: GET_VAR 'val tmp_33: kotlin.Array<kotlin.Int> declared in foo.main' type=kotlin.Array<kotlin.Int> origin=null
index: GET_VAR 'val tmp_34: kotlin.Int declared in foo.main' type=kotlin.Int origin=null
value: CALL 'public final fun inc (): kotlin.Int declared in kotlin.Int' type=kotlin.Int origin=null
$this: GET_VAR 'val tmp_35: kotlin.Int declared in foo.main' type=kotlin.Int origin=null
TYPE_OP type=kotlin.Unit origin=IMPLICIT_COERCION_TO_UNIT typeOperand=kotlin.Unit
GET_VAR 'val tmp_35: kotlin.Int declared in foo.main' type=kotlin.Int origin=null
VAR IR_TEMPORARY_VARIABLE name:tmp_36 type:kotlin.Array<kotlin.Int> [val]
CALL 'public final fun <get-array> (): kotlin.Array<kotlin.Int> declared in foo' type=kotlin.Array<kotlin.Int> origin=GET_PROPERTY
VAR IR_TEMPORARY_VARIABLE name:tmp_37 type:kotlin.Int [val]
CONST Int type=kotlin.Int value=0
VAR IR_TEMPORARY_VARIABLE name:tmp_38 type:kotlin.Int [val]
CALL 'public final fun get (index: kotlin.Int): T of kotlin.Array declared in kotlin.Array' type=kotlin.Int origin=null
$this: GET_VAR 'val tmp_36: kotlin.Array<kotlin.Int> declared in foo.main' type=kotlin.Array<kotlin.Int> origin=null
index: GET_VAR 'val tmp_37: kotlin.Int declared in foo.main' type=kotlin.Int origin=null
CALL 'public final fun set (index: kotlin.Int, value: T of kotlin.Array): kotlin.Unit declared in kotlin.Array' type=kotlin.Unit origin=null
$this: GET_VAR 'val tmp_36: kotlin.Array<kotlin.Int> declared in foo.main' type=kotlin.Array<kotlin.Int> origin=null
index: GET_VAR 'val tmp_37: kotlin.Int declared in foo.main' type=kotlin.Int origin=null
value: CALL 'public final fun dec (): kotlin.Int declared in kotlin.Int' type=kotlin.Int origin=null
$this: GET_VAR 'val tmp_38: kotlin.Int declared in foo.main' type=kotlin.Int origin=null
TYPE_OP type=kotlin.Unit origin=IMPLICIT_COERCION_TO_UNIT typeOperand=kotlin.Unit
GET_VAR 'val tmp_38: kotlin.Int declared in foo.main' type=kotlin.Int origin=null
VAR IR_TEMPORARY_VARIABLE name:tmp_39 type:kotlin.Array<kotlin.Int> [val]
CALL 'public final fun <get-array> (): kotlin.Array<kotlin.Int> declared in foo' type=kotlin.Array<kotlin.Int> origin=GET_PROPERTY
VAR IR_TEMPORARY_VARIABLE name:tmp_40 type:kotlin.Int [val]
CONST Int type=kotlin.Int value=0
CALL 'public final fun set (index: kotlin.Int, value: T of kotlin.Array): kotlin.Unit declared in kotlin.Array' type=kotlin.Unit origin=null
$this: GET_VAR 'val tmp_39: kotlin.Array<kotlin.Int> declared in foo.main' type=kotlin.Array<kotlin.Int> origin=null
index: GET_VAR 'val tmp_40: kotlin.Int declared in foo.main' type=kotlin.Int origin=null
value: CALL 'public final fun inc (): kotlin.Int declared in kotlin.Int' type=kotlin.Int origin=null
$this: CALL 'public final fun get (index: kotlin.Int): T of kotlin.Array declared in kotlin.Array' type=kotlin.Int origin=null
$this: GET_VAR 'val tmp_39: kotlin.Array<kotlin.Int> declared in foo.main' type=kotlin.Array<kotlin.Int> origin=null
index: GET_VAR 'val tmp_40: kotlin.Int declared in foo.main' type=kotlin.Int origin=null
TYPE_OP type=kotlin.Unit origin=IMPLICIT_COERCION_TO_UNIT typeOperand=kotlin.Unit
CALL 'public final fun get (index: kotlin.Int): T of kotlin.Array declared in kotlin.Array' type=kotlin.Int origin=null
$this: GET_VAR 'val tmp_39: kotlin.Array<kotlin.Int> declared in foo.main' type=kotlin.Array<kotlin.Int> origin=null
index: GET_VAR 'val tmp_40: kotlin.Int declared in foo.main' type=kotlin.Int origin=null
VAR IR_TEMPORARY_VARIABLE name:tmp_41 type:kotlin.Array<kotlin.Int> [val]
CALL 'public final fun <get-array> (): kotlin.Array<kotlin.Int> declared in foo' type=kotlin.Array<kotlin.Int> origin=GET_PROPERTY
VAR IR_TEMPORARY_VARIABLE name:tmp_42 type:kotlin.Int [val]
CONST Int type=kotlin.Int value=0
CALL 'public final fun set (index: kotlin.Int, value: T of kotlin.Array): kotlin.Unit declared in kotlin.Array' type=kotlin.Unit origin=null
$this: GET_VAR 'val tmp_41: kotlin.Array<kotlin.Int> declared in foo.main' type=kotlin.Array<kotlin.Int> origin=null
index: GET_VAR 'val tmp_42: kotlin.Int declared in foo.main' type=kotlin.Int origin=null
value: CALL 'public final fun dec (): kotlin.Int declared in kotlin.Int' type=kotlin.Int origin=null
$this: CALL 'public final fun get (index: kotlin.Int): T of kotlin.Array declared in kotlin.Array' type=kotlin.Int origin=null
$this: GET_VAR 'val tmp_41: kotlin.Array<kotlin.Int> declared in foo.main' type=kotlin.Array<kotlin.Int> origin=null
index: GET_VAR 'val tmp_42: kotlin.Int declared in foo.main' type=kotlin.Int origin=null
TYPE_OP type=kotlin.Unit origin=IMPLICIT_COERCION_TO_UNIT typeOperand=kotlin.Unit
CALL 'public final fun get (index: kotlin.Int): T of kotlin.Array declared in kotlin.Array' type=kotlin.Int origin=null
$this: GET_VAR 'val tmp_41: kotlin.Array<kotlin.Int> declared in foo.main' type=kotlin.Array<kotlin.Int> origin=null
index: GET_VAR 'val tmp_42: kotlin.Int declared in foo.main' type=kotlin.Int origin=null
@@ -0,0 +1,164 @@
package foo
class A {
constructor() /* primary */ {
super/*Any*/()
/* <init>() */
}
var prop: Int
field = 0
get
set
}
object B {
private constructor() /* primary */ {
super/*Any*/()
/* <init>() */
}
var prop: Int
field = 0
get
set
}
val array: Array<Int>
field = arrayOf<Int>(elements = [0])
get
fun <T : Any?> id(t: T): T {
return t
}
fun main() {
val a: A = A()
id<A>(t = a).<set-prop>(<set-?> = 10)
{ // BLOCK
val <receiver>: A = id<A>(t = a)
<receiver>.<set-prop>(<set-?> = <receiver>.<get-prop>().plus(other = 20))
}
{ // BLOCK
val <receiver>: A = id<A>(t = a)
<receiver>.<set-prop>(<set-?> = <receiver>.<get-prop>().minus(other = 20))
}
{ // BLOCK
val <receiver>: A = id<A>(t = a)
<receiver>.<set-prop>(<set-?> = <receiver>.<get-prop>().times(other = 2))
}
{ // BLOCK
val <receiver>: A = id<A>(t = a)
<receiver>.<set-prop>(<set-?> = <receiver>.<get-prop>().div(other = 5))
}
{ // BLOCK
val <receiver>: A = id<A>(t = a)
<receiver>.<set-prop>(<set-?> = <receiver>.<get-prop>().rem(other = 3))
}
{ // BLOCK
val <receiver>: A = id<A>(t = a)
val <unary>: Int = <receiver>.<get-prop>()
<receiver>.<set-prop>(<set-?> = <unary>.inc())
<unary>
} /*~> Unit */
{ // BLOCK
val <receiver>: A = id<A>(t = a)
val <unary>: Int = <receiver>.<get-prop>()
<receiver>.<set-prop>(<set-?> = <unary>.dec())
<unary>
} /*~> Unit */
{ // BLOCK
val <receiver>: A = id<A>(t = a)
<receiver>.<set-prop>(<set-?> = <receiver>.<get-prop>().inc())
<receiver>.<get-prop>()
} /*~> Unit */
{ // BLOCK
val <receiver>: A = id<A>(t = a)
<receiver>.<set-prop>(<set-?> = <receiver>.<get-prop>().dec())
<receiver>.<get-prop>()
} /*~> Unit */
{ // BLOCK
val <unary>: Int = B.<get-prop>()
B.<set-prop>(<set-?> = <unary>.inc())
<unary>
} /*~> Unit */
{ // BLOCK
val <unary>: Int = B.<get-prop>()
B.<set-prop>(<set-?> = <unary>.dec())
<unary>
} /*~> Unit */
{ // BLOCK
B.<set-prop>(<set-?> = B.<get-prop>().inc())
B.<get-prop>()
} /*~> Unit */
{ // BLOCK
B.<set-prop>(<set-?> = B.<get-prop>().dec())
B.<get-prop>()
} /*~> Unit */
id<Array<Int>>(t = <get-array>()).set(index = 0, value = 10)
{ // BLOCK
val <array>: Array<Int> = id<Array<Int>>(t = <get-array>())
val <index_0>: Int = 0
<array>.set(index = <index_0>, value = <array>.get(index = <index_0>).plus(other = 20))
}
{ // BLOCK
val <array>: Array<Int> = id<Array<Int>>(t = <get-array>())
val <index_0>: Int = 0
<array>.set(index = <index_0>, value = <array>.get(index = <index_0>).minus(other = 20))
}
{ // BLOCK
val <array>: Array<Int> = id<Array<Int>>(t = <get-array>())
val <index_0>: Int = 0
<array>.set(index = <index_0>, value = <array>.get(index = <index_0>).times(other = 2))
}
{ // BLOCK
val <array>: Array<Int> = id<Array<Int>>(t = <get-array>())
val <index_0>: Int = 0
<array>.set(index = <index_0>, value = <array>.get(index = <index_0>).div(other = 5))
}
{ // BLOCK
val <array>: Array<Int> = id<Array<Int>>(t = <get-array>())
val <index_0>: Int = 0
<array>.set(index = <index_0>, value = <array>.get(index = <index_0>).rem(other = 3))
}
val <array>: Array<Int> = id<Array<Int>>(t = <get-array>())
val <index_0>: Int = 0
val <unary>: Int = <array>.get(index = <index_0>)
<array>.set(index = <index_0>, value = <unary>.inc())
<unary> /*~> Unit */
val <array>: Array<Int> = id<Array<Int>>(t = <get-array>())
val <index_0>: Int = 0
val <unary>: Int = <array>.get(index = <index_0>)
<array>.set(index = <index_0>, value = <unary>.dec())
<unary> /*~> Unit */
val <array>: Array<Int> = id<Array<Int>>(t = <get-array>())
val <index_0>: Int = 0
<array>.set(index = <index_0>, value = <array>.get(index = <index_0>).inc())
<array>.get(index = <index_0>) /*~> Unit */
val <array>: Array<Int> = id<Array<Int>>(t = <get-array>())
val <index_0>: Int = 0
<array>.set(index = <index_0>, value = <array>.get(index = <index_0>).dec())
<array>.get(index = <index_0>) /*~> Unit */
val <array>: Array<Int> = <get-array>()
val <index_0>: Int = 0
val <unary>: Int = <array>.get(index = <index_0>)
<array>.set(index = <index_0>, value = <unary>.inc())
<unary> /*~> Unit */
val <array>: Array<Int> = <get-array>()
val <index_0>: Int = 0
val <unary>: Int = <array>.get(index = <index_0>)
<array>.set(index = <index_0>, value = <unary>.dec())
<unary> /*~> Unit */
val <array>: Array<Int> = <get-array>()
val <index_0>: Int = 0
<array>.set(index = <index_0>, value = <array>.get(index = <index_0>).inc())
<array>.get(index = <index_0>) /*~> Unit */
val <array>: Array<Int> = <get-array>()
val <index_0>: Int = 0
<array>.set(index = <index_0>, value = <array>.get(index = <index_0>).dec())
<array>.get(index = <index_0>) /*~> Unit */
}
@@ -0,0 +1,484 @@
FILE fqName:foo fileName:/AssignmentOperator.kt
CLASS CLASS name:A modality:FINAL visibility:public superTypes:[kotlin.Any]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:foo.A
CONSTRUCTOR visibility:public <> () returnType:foo.A [primary]
BLOCK_BODY
DELEGATING_CONSTRUCTOR_CALL 'public constructor <init> () declared in kotlin.Any'
INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:A modality:FINAL visibility:public superTypes:[kotlin.Any]'
PROPERTY name:prop visibility:public modality:FINAL [var]
FIELD PROPERTY_BACKING_FIELD name:prop type:kotlin.Int visibility:private
EXPRESSION_BODY
CONST Int type=kotlin.Int value=0
FUN DEFAULT_PROPERTY_ACCESSOR name:<get-prop> visibility:public modality:FINAL <> ($this:foo.A) returnType:kotlin.Int
correspondingProperty: PROPERTY name:prop visibility:public modality:FINAL [var]
$this: VALUE_PARAMETER name:<this> type:foo.A
BLOCK_BODY
RETURN type=kotlin.Nothing from='public final fun <get-prop> (): kotlin.Int declared in foo.A'
GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:prop type:kotlin.Int visibility:private' type=kotlin.Int origin=null
receiver: GET_VAR '<this>: foo.A declared in foo.A.<get-prop>' type=foo.A origin=null
FUN DEFAULT_PROPERTY_ACCESSOR name:<set-prop> visibility:public modality:FINAL <> ($this:foo.A, <set-?>:kotlin.Int) returnType:kotlin.Unit
correspondingProperty: PROPERTY name:prop visibility:public modality:FINAL [var]
$this: VALUE_PARAMETER name:<this> type:foo.A
VALUE_PARAMETER name:<set-?> index:0 type:kotlin.Int
BLOCK_BODY
SET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:prop type:kotlin.Int visibility:private' type=kotlin.Unit origin=null
receiver: GET_VAR '<this>: foo.A declared in foo.A.<set-prop>' type=foo.A origin=null
value: GET_VAR '<set-?>: kotlin.Int declared in foo.A.<set-prop>' type=kotlin.Int 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
CLASS OBJECT name:B modality:FINAL visibility:public superTypes:[kotlin.Any]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:foo.B
CONSTRUCTOR visibility:private <> () returnType:foo.B [primary]
BLOCK_BODY
DELEGATING_CONSTRUCTOR_CALL 'public constructor <init> () declared in kotlin.Any'
INSTANCE_INITIALIZER_CALL classDescriptor='CLASS OBJECT name:B modality:FINAL visibility:public superTypes:[kotlin.Any]'
PROPERTY name:prop visibility:public modality:FINAL [var]
FIELD PROPERTY_BACKING_FIELD name:prop type:kotlin.Int visibility:private
EXPRESSION_BODY
CONST Int type=kotlin.Int value=0
FUN DEFAULT_PROPERTY_ACCESSOR name:<get-prop> visibility:public modality:FINAL <> ($this:foo.B) returnType:kotlin.Int
correspondingProperty: PROPERTY name:prop visibility:public modality:FINAL [var]
$this: VALUE_PARAMETER name:<this> type:foo.B
BLOCK_BODY
RETURN type=kotlin.Nothing from='public final fun <get-prop> (): kotlin.Int declared in foo.B'
GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:prop type:kotlin.Int visibility:private' type=kotlin.Int origin=null
receiver: GET_VAR '<this>: foo.B declared in foo.B.<get-prop>' type=foo.B origin=null
FUN DEFAULT_PROPERTY_ACCESSOR name:<set-prop> visibility:public modality:FINAL <> ($this:foo.B, <set-?>:kotlin.Int) returnType:kotlin.Unit
correspondingProperty: PROPERTY name:prop visibility:public modality:FINAL [var]
$this: VALUE_PARAMETER name:<this> type:foo.B
VALUE_PARAMETER name:<set-?> index:0 type:kotlin.Int
BLOCK_BODY
SET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:prop type:kotlin.Int visibility:private' type=kotlin.Unit origin=null
receiver: GET_VAR '<this>: foo.B declared in foo.B.<set-prop>' type=foo.B origin=null
value: GET_VAR '<set-?>: kotlin.Int declared in foo.B.<set-prop>' type=kotlin.Int 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
PROPERTY name:array visibility:public modality:FINAL [val]
FIELD PROPERTY_BACKING_FIELD name:array type:kotlin.Array<kotlin.Int> visibility:private [final,static]
EXPRESSION_BODY
CALL 'public final fun arrayOf <T> (vararg elements: T of kotlin.arrayOf): kotlin.Array<T of kotlin.arrayOf> declared in kotlin' type=kotlin.Array<kotlin.Int> origin=null
<T>: kotlin.Int
elements: VARARG type=kotlin.Array<out kotlin.Int> varargElementType=kotlin.Int
CONST Int type=kotlin.Int value=0
FUN DEFAULT_PROPERTY_ACCESSOR name:<get-array> visibility:public modality:FINAL <> () returnType:kotlin.Array<kotlin.Int>
correspondingProperty: PROPERTY name:array visibility:public modality:FINAL [val]
BLOCK_BODY
RETURN type=kotlin.Nothing from='public final fun <get-array> (): kotlin.Array<kotlin.Int> declared in foo'
GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:array type:kotlin.Array<kotlin.Int> visibility:private [final,static]' type=kotlin.Array<kotlin.Int> origin=null
FUN name:id visibility:public modality:FINAL <T> (t:T of foo.id) returnType:T of foo.id
TYPE_PARAMETER name:T index:0 variance: superTypes:[kotlin.Any?] reified:false
VALUE_PARAMETER name:t index:0 type:T of foo.id
BLOCK_BODY
RETURN type=kotlin.Nothing from='public final fun id <T> (t: T of foo.id): T of foo.id declared in foo'
GET_VAR 't: T of foo.id declared in foo.id' type=T of foo.id origin=null
FUN name:main visibility:public modality:FINAL <> () returnType:kotlin.Unit
BLOCK_BODY
VAR name:a type:foo.A [val]
CONSTRUCTOR_CALL 'public constructor <init> () declared in foo.A' type=foo.A origin=null
CALL 'public final fun <set-prop> (<set-?>: kotlin.Int): kotlin.Unit declared in foo.A' type=kotlin.Unit origin=EQ
$this: CALL 'public final fun id <T> (t: T of foo.id): T of foo.id declared in foo' type=foo.A origin=null
<T>: foo.A
t: GET_VAR 'val a: foo.A declared in foo.main' type=foo.A origin=null
<set-?>: CONST Int type=kotlin.Int value=10
BLOCK type=kotlin.Unit origin=PLUSEQ
VAR IR_TEMPORARY_VARIABLE name:tmp_0 type:foo.A [val]
CALL 'public final fun id <T> (t: T of foo.id): T of foo.id declared in foo' type=foo.A origin=null
<T>: foo.A
t: GET_VAR 'val a: foo.A declared in foo.main' type=foo.A origin=null
CALL 'public final fun <set-prop> (<set-?>: kotlin.Int): kotlin.Unit declared in foo.A' type=kotlin.Unit origin=PLUSEQ
$this: GET_VAR 'val tmp_0: foo.A declared in foo.main' type=foo.A origin=null
<set-?>: CALL 'public final fun plus (other: kotlin.Int): kotlin.Int declared in kotlin.Int' type=kotlin.Int origin=PLUSEQ
$this: CALL 'public final fun <get-prop> (): kotlin.Int declared in foo.A' type=kotlin.Int origin=PLUSEQ
$this: GET_VAR 'val tmp_0: foo.A declared in foo.main' type=foo.A origin=null
other: CONST Int type=kotlin.Int value=20
BLOCK type=kotlin.Unit origin=MINUSEQ
VAR IR_TEMPORARY_VARIABLE name:tmp_1 type:foo.A [val]
CALL 'public final fun id <T> (t: T of foo.id): T of foo.id declared in foo' type=foo.A origin=null
<T>: foo.A
t: GET_VAR 'val a: foo.A declared in foo.main' type=foo.A origin=null
CALL 'public final fun <set-prop> (<set-?>: kotlin.Int): kotlin.Unit declared in foo.A' type=kotlin.Unit origin=MINUSEQ
$this: GET_VAR 'val tmp_1: foo.A declared in foo.main' type=foo.A origin=null
<set-?>: CALL 'public final fun minus (other: kotlin.Int): kotlin.Int declared in kotlin.Int' type=kotlin.Int origin=MINUSEQ
$this: CALL 'public final fun <get-prop> (): kotlin.Int declared in foo.A' type=kotlin.Int origin=MINUSEQ
$this: GET_VAR 'val tmp_1: foo.A declared in foo.main' type=foo.A origin=null
other: CONST Int type=kotlin.Int value=20
BLOCK type=kotlin.Unit origin=MULTEQ
VAR IR_TEMPORARY_VARIABLE name:tmp_2 type:foo.A [val]
CALL 'public final fun id <T> (t: T of foo.id): T of foo.id declared in foo' type=foo.A origin=null
<T>: foo.A
t: GET_VAR 'val a: foo.A declared in foo.main' type=foo.A origin=null
CALL 'public final fun <set-prop> (<set-?>: kotlin.Int): kotlin.Unit declared in foo.A' type=kotlin.Unit origin=MULTEQ
$this: GET_VAR 'val tmp_2: foo.A declared in foo.main' type=foo.A origin=null
<set-?>: CALL 'public final fun times (other: kotlin.Int): kotlin.Int declared in kotlin.Int' type=kotlin.Int origin=MULTEQ
$this: CALL 'public final fun <get-prop> (): kotlin.Int declared in foo.A' type=kotlin.Int origin=MULTEQ
$this: GET_VAR 'val tmp_2: foo.A declared in foo.main' type=foo.A origin=null
other: CONST Int type=kotlin.Int value=2
BLOCK type=kotlin.Unit origin=DIVEQ
VAR IR_TEMPORARY_VARIABLE name:tmp_3 type:foo.A [val]
CALL 'public final fun id <T> (t: T of foo.id): T of foo.id declared in foo' type=foo.A origin=null
<T>: foo.A
t: GET_VAR 'val a: foo.A declared in foo.main' type=foo.A origin=null
CALL 'public final fun <set-prop> (<set-?>: kotlin.Int): kotlin.Unit declared in foo.A' type=kotlin.Unit origin=DIVEQ
$this: GET_VAR 'val tmp_3: foo.A declared in foo.main' type=foo.A origin=null
<set-?>: CALL 'public final fun div (other: kotlin.Int): kotlin.Int declared in kotlin.Int' type=kotlin.Int origin=DIVEQ
$this: CALL 'public final fun <get-prop> (): kotlin.Int declared in foo.A' type=kotlin.Int origin=DIVEQ
$this: GET_VAR 'val tmp_3: foo.A declared in foo.main' type=foo.A origin=null
other: CONST Int type=kotlin.Int value=5
BLOCK type=kotlin.Unit origin=PERCEQ
VAR IR_TEMPORARY_VARIABLE name:tmp_4 type:foo.A [val]
CALL 'public final fun id <T> (t: T of foo.id): T of foo.id declared in foo' type=foo.A origin=null
<T>: foo.A
t: GET_VAR 'val a: foo.A declared in foo.main' type=foo.A origin=null
CALL 'public final fun <set-prop> (<set-?>: kotlin.Int): kotlin.Unit declared in foo.A' type=kotlin.Unit origin=PERCEQ
$this: GET_VAR 'val tmp_4: foo.A declared in foo.main' type=foo.A origin=null
<set-?>: CALL 'public final fun rem (other: kotlin.Int): kotlin.Int declared in kotlin.Int' type=kotlin.Int origin=PERCEQ
$this: CALL 'public final fun <get-prop> (): kotlin.Int declared in foo.A' type=kotlin.Int origin=PERCEQ
$this: GET_VAR 'val tmp_4: foo.A declared in foo.main' type=foo.A origin=null
other: CONST Int type=kotlin.Int value=3
TYPE_OP type=kotlin.Unit origin=IMPLICIT_COERCION_TO_UNIT typeOperand=kotlin.Unit
BLOCK type=kotlin.Int origin=POSTFIX_INCR
VAR IR_TEMPORARY_VARIABLE name:tmp_5 type:foo.A [val]
CALL 'public final fun id <T> (t: T of foo.id): T of foo.id declared in foo' type=foo.A origin=null
<T>: foo.A
t: GET_VAR 'val a: foo.A declared in foo.main' type=foo.A origin=null
BLOCK type=kotlin.Int origin=POSTFIX_INCR
VAR IR_TEMPORARY_VARIABLE name:tmp_6 type:kotlin.Int [val]
CALL 'public final fun <get-prop> (): kotlin.Int declared in foo.A' type=kotlin.Int origin=POSTFIX_INCR
$this: GET_VAR 'val tmp_5: foo.A declared in foo.main' type=foo.A origin=null
CALL 'public final fun <set-prop> (<set-?>: kotlin.Int): kotlin.Unit declared in foo.A' type=kotlin.Unit origin=POSTFIX_INCR
$this: GET_VAR 'val tmp_5: foo.A declared in foo.main' type=foo.A origin=null
<set-?>: CALL 'public final fun inc (): kotlin.Int declared in kotlin.Int' type=kotlin.Int origin=POSTFIX_INCR
$this: GET_VAR 'val tmp_6: kotlin.Int declared in foo.main' type=kotlin.Int origin=null
GET_VAR 'val tmp_6: kotlin.Int declared in foo.main' type=kotlin.Int origin=null
TYPE_OP type=kotlin.Unit origin=IMPLICIT_COERCION_TO_UNIT typeOperand=kotlin.Unit
BLOCK type=kotlin.Int origin=POSTFIX_DECR
VAR IR_TEMPORARY_VARIABLE name:tmp_7 type:foo.A [val]
CALL 'public final fun id <T> (t: T of foo.id): T of foo.id declared in foo' type=foo.A origin=null
<T>: foo.A
t: GET_VAR 'val a: foo.A declared in foo.main' type=foo.A origin=null
BLOCK type=kotlin.Int origin=POSTFIX_DECR
VAR IR_TEMPORARY_VARIABLE name:tmp_8 type:kotlin.Int [val]
CALL 'public final fun <get-prop> (): kotlin.Int declared in foo.A' type=kotlin.Int origin=POSTFIX_DECR
$this: GET_VAR 'val tmp_7: foo.A declared in foo.main' type=foo.A origin=null
CALL 'public final fun <set-prop> (<set-?>: kotlin.Int): kotlin.Unit declared in foo.A' type=kotlin.Unit origin=POSTFIX_DECR
$this: GET_VAR 'val tmp_7: foo.A declared in foo.main' type=foo.A origin=null
<set-?>: CALL 'public final fun dec (): kotlin.Int declared in kotlin.Int' type=kotlin.Int origin=POSTFIX_DECR
$this: GET_VAR 'val tmp_8: kotlin.Int declared in foo.main' type=kotlin.Int origin=null
GET_VAR 'val tmp_8: kotlin.Int declared in foo.main' type=kotlin.Int origin=null
TYPE_OP type=kotlin.Unit origin=IMPLICIT_COERCION_TO_UNIT typeOperand=kotlin.Unit
BLOCK type=kotlin.Int origin=PREFIX_INCR
VAR IR_TEMPORARY_VARIABLE name:tmp_9 type:foo.A [val]
CALL 'public final fun id <T> (t: T of foo.id): T of foo.id declared in foo' type=foo.A origin=null
<T>: foo.A
t: GET_VAR 'val a: foo.A declared in foo.main' type=foo.A origin=null
BLOCK type=kotlin.Int origin=PREFIX_INCR
CALL 'public final fun <set-prop> (<set-?>: kotlin.Int): kotlin.Unit declared in foo.A' type=kotlin.Unit origin=PREFIX_INCR
$this: GET_VAR 'val tmp_9: foo.A declared in foo.main' type=foo.A origin=null
<set-?>: CALL 'public final fun inc (): kotlin.Int declared in kotlin.Int' type=kotlin.Int origin=PREFIX_INCR
$this: CALL 'public final fun <get-prop> (): kotlin.Int declared in foo.A' type=kotlin.Int origin=PREFIX_INCR
$this: GET_VAR 'val tmp_9: foo.A declared in foo.main' type=foo.A origin=null
CALL 'public final fun <get-prop> (): kotlin.Int declared in foo.A' type=kotlin.Int origin=PREFIX_INCR
$this: GET_VAR 'val tmp_9: foo.A declared in foo.main' type=foo.A origin=null
TYPE_OP type=kotlin.Unit origin=IMPLICIT_COERCION_TO_UNIT typeOperand=kotlin.Unit
BLOCK type=kotlin.Int origin=PREFIX_DECR
VAR IR_TEMPORARY_VARIABLE name:tmp_10 type:foo.A [val]
CALL 'public final fun id <T> (t: T of foo.id): T of foo.id declared in foo' type=foo.A origin=null
<T>: foo.A
t: GET_VAR 'val a: foo.A declared in foo.main' type=foo.A origin=null
BLOCK type=kotlin.Int origin=PREFIX_DECR
CALL 'public final fun <set-prop> (<set-?>: kotlin.Int): kotlin.Unit declared in foo.A' type=kotlin.Unit origin=PREFIX_DECR
$this: GET_VAR 'val tmp_10: foo.A declared in foo.main' type=foo.A origin=null
<set-?>: CALL 'public final fun dec (): kotlin.Int declared in kotlin.Int' type=kotlin.Int origin=PREFIX_DECR
$this: CALL 'public final fun <get-prop> (): kotlin.Int declared in foo.A' type=kotlin.Int origin=PREFIX_DECR
$this: GET_VAR 'val tmp_10: foo.A declared in foo.main' type=foo.A origin=null
CALL 'public final fun <get-prop> (): kotlin.Int declared in foo.A' type=kotlin.Int origin=PREFIX_DECR
$this: GET_VAR 'val tmp_10: foo.A declared in foo.main' type=foo.A origin=null
TYPE_OP type=kotlin.Unit origin=IMPLICIT_COERCION_TO_UNIT typeOperand=kotlin.Unit
BLOCK type=kotlin.Int origin=POSTFIX_INCR
VAR IR_TEMPORARY_VARIABLE name:tmp_11 type:foo.B [val]
GET_OBJECT 'CLASS OBJECT name:B modality:FINAL visibility:public superTypes:[kotlin.Any]' type=foo.B
BLOCK type=kotlin.Int origin=POSTFIX_INCR
VAR IR_TEMPORARY_VARIABLE name:tmp_12 type:kotlin.Int [val]
CALL 'public final fun <get-prop> (): kotlin.Int declared in foo.B' type=kotlin.Int origin=POSTFIX_INCR
$this: GET_VAR 'val tmp_11: foo.B declared in foo.main' type=foo.B origin=null
CALL 'public final fun <set-prop> (<set-?>: kotlin.Int): kotlin.Unit declared in foo.B' type=kotlin.Unit origin=POSTFIX_INCR
$this: GET_VAR 'val tmp_11: foo.B declared in foo.main' type=foo.B origin=null
<set-?>: CALL 'public final fun inc (): kotlin.Int declared in kotlin.Int' type=kotlin.Int origin=POSTFIX_INCR
$this: GET_VAR 'val tmp_12: kotlin.Int declared in foo.main' type=kotlin.Int origin=null
GET_VAR 'val tmp_12: kotlin.Int declared in foo.main' type=kotlin.Int origin=null
TYPE_OP type=kotlin.Unit origin=IMPLICIT_COERCION_TO_UNIT typeOperand=kotlin.Unit
BLOCK type=kotlin.Int origin=POSTFIX_DECR
VAR IR_TEMPORARY_VARIABLE name:tmp_13 type:foo.B [val]
GET_OBJECT 'CLASS OBJECT name:B modality:FINAL visibility:public superTypes:[kotlin.Any]' type=foo.B
BLOCK type=kotlin.Int origin=POSTFIX_DECR
VAR IR_TEMPORARY_VARIABLE name:tmp_14 type:kotlin.Int [val]
CALL 'public final fun <get-prop> (): kotlin.Int declared in foo.B' type=kotlin.Int origin=POSTFIX_DECR
$this: GET_VAR 'val tmp_13: foo.B declared in foo.main' type=foo.B origin=null
CALL 'public final fun <set-prop> (<set-?>: kotlin.Int): kotlin.Unit declared in foo.B' type=kotlin.Unit origin=POSTFIX_DECR
$this: GET_VAR 'val tmp_13: foo.B declared in foo.main' type=foo.B origin=null
<set-?>: CALL 'public final fun dec (): kotlin.Int declared in kotlin.Int' type=kotlin.Int origin=POSTFIX_DECR
$this: GET_VAR 'val tmp_14: kotlin.Int declared in foo.main' type=kotlin.Int origin=null
GET_VAR 'val tmp_14: kotlin.Int declared in foo.main' type=kotlin.Int origin=null
TYPE_OP type=kotlin.Unit origin=IMPLICIT_COERCION_TO_UNIT typeOperand=kotlin.Unit
BLOCK type=kotlin.Int origin=PREFIX_INCR
VAR IR_TEMPORARY_VARIABLE name:tmp_15 type:foo.B [val]
GET_OBJECT 'CLASS OBJECT name:B modality:FINAL visibility:public superTypes:[kotlin.Any]' type=foo.B
BLOCK type=kotlin.Int origin=PREFIX_INCR
CALL 'public final fun <set-prop> (<set-?>: kotlin.Int): kotlin.Unit declared in foo.B' type=kotlin.Unit origin=PREFIX_INCR
$this: GET_VAR 'val tmp_15: foo.B declared in foo.main' type=foo.B origin=null
<set-?>: CALL 'public final fun inc (): kotlin.Int declared in kotlin.Int' type=kotlin.Int origin=PREFIX_INCR
$this: CALL 'public final fun <get-prop> (): kotlin.Int declared in foo.B' type=kotlin.Int origin=PREFIX_INCR
$this: GET_VAR 'val tmp_15: foo.B declared in foo.main' type=foo.B origin=null
CALL 'public final fun <get-prop> (): kotlin.Int declared in foo.B' type=kotlin.Int origin=PREFIX_INCR
$this: GET_VAR 'val tmp_15: foo.B declared in foo.main' type=foo.B origin=null
TYPE_OP type=kotlin.Unit origin=IMPLICIT_COERCION_TO_UNIT typeOperand=kotlin.Unit
BLOCK type=kotlin.Int origin=PREFIX_DECR
VAR IR_TEMPORARY_VARIABLE name:tmp_16 type:foo.B [val]
GET_OBJECT 'CLASS OBJECT name:B modality:FINAL visibility:public superTypes:[kotlin.Any]' type=foo.B
BLOCK type=kotlin.Int origin=PREFIX_DECR
CALL 'public final fun <set-prop> (<set-?>: kotlin.Int): kotlin.Unit declared in foo.B' type=kotlin.Unit origin=PREFIX_DECR
$this: GET_VAR 'val tmp_16: foo.B declared in foo.main' type=foo.B origin=null
<set-?>: CALL 'public final fun dec (): kotlin.Int declared in kotlin.Int' type=kotlin.Int origin=PREFIX_DECR
$this: CALL 'public final fun <get-prop> (): kotlin.Int declared in foo.B' type=kotlin.Int origin=PREFIX_DECR
$this: GET_VAR 'val tmp_16: foo.B declared in foo.main' type=foo.B origin=null
CALL 'public final fun <get-prop> (): kotlin.Int declared in foo.B' type=kotlin.Int origin=PREFIX_DECR
$this: GET_VAR 'val tmp_16: foo.B declared in foo.main' type=foo.B origin=null
CALL 'public final fun set (index: kotlin.Int, value: T of kotlin.Array): kotlin.Unit declared in kotlin.Array' type=kotlin.Unit origin=EQ
$this: CALL 'public final fun id <T> (t: T of foo.id): T of foo.id declared in foo' type=kotlin.Array<kotlin.Int> origin=null
<T>: kotlin.Array<kotlin.Int>
t: CALL 'public final fun <get-array> (): kotlin.Array<kotlin.Int> declared in foo' type=kotlin.Array<kotlin.Int> origin=GET_PROPERTY
index: CONST Int type=kotlin.Int value=0
value: CONST Int type=kotlin.Int value=10
BLOCK type=kotlin.Unit origin=PLUSEQ
VAR IR_TEMPORARY_VARIABLE name:tmp_17 type:kotlin.Array<kotlin.Int> [val]
CALL 'public final fun id <T> (t: T of foo.id): T of foo.id declared in foo' type=kotlin.Array<kotlin.Int> origin=null
<T>: kotlin.Array<kotlin.Int>
t: CALL 'public final fun <get-array> (): kotlin.Array<kotlin.Int> declared in foo' type=kotlin.Array<kotlin.Int> origin=GET_PROPERTY
VAR IR_TEMPORARY_VARIABLE name:tmp_18 type:kotlin.Int [val]
CONST Int type=kotlin.Int value=0
CALL 'public final fun set (index: kotlin.Int, value: T of kotlin.Array): kotlin.Unit declared in kotlin.Array' type=kotlin.Unit origin=PLUSEQ
$this: GET_VAR 'val tmp_17: kotlin.Array<kotlin.Int> declared in foo.main' type=kotlin.Array<kotlin.Int> origin=null
index: GET_VAR 'val tmp_18: kotlin.Int declared in foo.main' type=kotlin.Int origin=null
value: CALL 'public final fun plus (other: kotlin.Int): kotlin.Int declared in kotlin.Int' type=kotlin.Int origin=PLUSEQ
$this: CALL 'public final fun get (index: kotlin.Int): T of kotlin.Array declared in kotlin.Array' type=kotlin.Int origin=PLUSEQ
$this: GET_VAR 'val tmp_17: kotlin.Array<kotlin.Int> declared in foo.main' type=kotlin.Array<kotlin.Int> origin=null
index: GET_VAR 'val tmp_18: kotlin.Int declared in foo.main' type=kotlin.Int origin=null
other: CONST Int type=kotlin.Int value=20
BLOCK type=kotlin.Unit origin=MINUSEQ
VAR IR_TEMPORARY_VARIABLE name:tmp_19 type:kotlin.Array<kotlin.Int> [val]
CALL 'public final fun id <T> (t: T of foo.id): T of foo.id declared in foo' type=kotlin.Array<kotlin.Int> origin=null
<T>: kotlin.Array<kotlin.Int>
t: CALL 'public final fun <get-array> (): kotlin.Array<kotlin.Int> declared in foo' type=kotlin.Array<kotlin.Int> origin=GET_PROPERTY
VAR IR_TEMPORARY_VARIABLE name:tmp_20 type:kotlin.Int [val]
CONST Int type=kotlin.Int value=0
CALL 'public final fun set (index: kotlin.Int, value: T of kotlin.Array): kotlin.Unit declared in kotlin.Array' type=kotlin.Unit origin=MINUSEQ
$this: GET_VAR 'val tmp_19: kotlin.Array<kotlin.Int> declared in foo.main' type=kotlin.Array<kotlin.Int> origin=null
index: GET_VAR 'val tmp_20: kotlin.Int declared in foo.main' type=kotlin.Int origin=null
value: CALL 'public final fun minus (other: kotlin.Int): kotlin.Int declared in kotlin.Int' type=kotlin.Int origin=MINUSEQ
$this: CALL 'public final fun get (index: kotlin.Int): T of kotlin.Array declared in kotlin.Array' type=kotlin.Int origin=MINUSEQ
$this: GET_VAR 'val tmp_19: kotlin.Array<kotlin.Int> declared in foo.main' type=kotlin.Array<kotlin.Int> origin=null
index: GET_VAR 'val tmp_20: kotlin.Int declared in foo.main' type=kotlin.Int origin=null
other: CONST Int type=kotlin.Int value=20
BLOCK type=kotlin.Unit origin=MULTEQ
VAR IR_TEMPORARY_VARIABLE name:tmp_21 type:kotlin.Array<kotlin.Int> [val]
CALL 'public final fun id <T> (t: T of foo.id): T of foo.id declared in foo' type=kotlin.Array<kotlin.Int> origin=null
<T>: kotlin.Array<kotlin.Int>
t: CALL 'public final fun <get-array> (): kotlin.Array<kotlin.Int> declared in foo' type=kotlin.Array<kotlin.Int> origin=GET_PROPERTY
VAR IR_TEMPORARY_VARIABLE name:tmp_22 type:kotlin.Int [val]
CONST Int type=kotlin.Int value=0
CALL 'public final fun set (index: kotlin.Int, value: T of kotlin.Array): kotlin.Unit declared in kotlin.Array' type=kotlin.Unit origin=MULTEQ
$this: GET_VAR 'val tmp_21: kotlin.Array<kotlin.Int> declared in foo.main' type=kotlin.Array<kotlin.Int> origin=null
index: GET_VAR 'val tmp_22: kotlin.Int declared in foo.main' type=kotlin.Int origin=null
value: CALL 'public final fun times (other: kotlin.Int): kotlin.Int declared in kotlin.Int' type=kotlin.Int origin=MULTEQ
$this: CALL 'public final fun get (index: kotlin.Int): T of kotlin.Array declared in kotlin.Array' type=kotlin.Int origin=MULTEQ
$this: GET_VAR 'val tmp_21: kotlin.Array<kotlin.Int> declared in foo.main' type=kotlin.Array<kotlin.Int> origin=null
index: GET_VAR 'val tmp_22: kotlin.Int declared in foo.main' type=kotlin.Int origin=null
other: CONST Int type=kotlin.Int value=2
BLOCK type=kotlin.Unit origin=DIVEQ
VAR IR_TEMPORARY_VARIABLE name:tmp_23 type:kotlin.Array<kotlin.Int> [val]
CALL 'public final fun id <T> (t: T of foo.id): T of foo.id declared in foo' type=kotlin.Array<kotlin.Int> origin=null
<T>: kotlin.Array<kotlin.Int>
t: CALL 'public final fun <get-array> (): kotlin.Array<kotlin.Int> declared in foo' type=kotlin.Array<kotlin.Int> origin=GET_PROPERTY
VAR IR_TEMPORARY_VARIABLE name:tmp_24 type:kotlin.Int [val]
CONST Int type=kotlin.Int value=0
CALL 'public final fun set (index: kotlin.Int, value: T of kotlin.Array): kotlin.Unit declared in kotlin.Array' type=kotlin.Unit origin=DIVEQ
$this: GET_VAR 'val tmp_23: kotlin.Array<kotlin.Int> declared in foo.main' type=kotlin.Array<kotlin.Int> origin=null
index: GET_VAR 'val tmp_24: kotlin.Int declared in foo.main' type=kotlin.Int origin=null
value: CALL 'public final fun div (other: kotlin.Int): kotlin.Int declared in kotlin.Int' type=kotlin.Int origin=DIVEQ
$this: CALL 'public final fun get (index: kotlin.Int): T of kotlin.Array declared in kotlin.Array' type=kotlin.Int origin=DIVEQ
$this: GET_VAR 'val tmp_23: kotlin.Array<kotlin.Int> declared in foo.main' type=kotlin.Array<kotlin.Int> origin=null
index: GET_VAR 'val tmp_24: kotlin.Int declared in foo.main' type=kotlin.Int origin=null
other: CONST Int type=kotlin.Int value=5
BLOCK type=kotlin.Unit origin=PERCEQ
VAR IR_TEMPORARY_VARIABLE name:tmp_25 type:kotlin.Array<kotlin.Int> [val]
CALL 'public final fun id <T> (t: T of foo.id): T of foo.id declared in foo' type=kotlin.Array<kotlin.Int> origin=null
<T>: kotlin.Array<kotlin.Int>
t: CALL 'public final fun <get-array> (): kotlin.Array<kotlin.Int> declared in foo' type=kotlin.Array<kotlin.Int> origin=GET_PROPERTY
VAR IR_TEMPORARY_VARIABLE name:tmp_26 type:kotlin.Int [val]
CONST Int type=kotlin.Int value=0
CALL 'public final fun set (index: kotlin.Int, value: T of kotlin.Array): kotlin.Unit declared in kotlin.Array' type=kotlin.Unit origin=PERCEQ
$this: GET_VAR 'val tmp_25: kotlin.Array<kotlin.Int> declared in foo.main' type=kotlin.Array<kotlin.Int> origin=null
index: GET_VAR 'val tmp_26: kotlin.Int declared in foo.main' type=kotlin.Int origin=null
value: CALL 'public final fun rem (other: kotlin.Int): kotlin.Int declared in kotlin.Int' type=kotlin.Int origin=PERCEQ
$this: CALL 'public final fun get (index: kotlin.Int): T of kotlin.Array declared in kotlin.Array' type=kotlin.Int origin=PERCEQ
$this: GET_VAR 'val tmp_25: kotlin.Array<kotlin.Int> declared in foo.main' type=kotlin.Array<kotlin.Int> origin=null
index: GET_VAR 'val tmp_26: kotlin.Int declared in foo.main' type=kotlin.Int origin=null
other: CONST Int type=kotlin.Int value=3
TYPE_OP type=kotlin.Unit origin=IMPLICIT_COERCION_TO_UNIT typeOperand=kotlin.Unit
BLOCK type=kotlin.Int origin=POSTFIX_INCR
VAR IR_TEMPORARY_VARIABLE name:tmp_27 type:kotlin.Array<kotlin.Int> [val]
CALL 'public final fun id <T> (t: T of foo.id): T of foo.id declared in foo' type=kotlin.Array<kotlin.Int> origin=null
<T>: kotlin.Array<kotlin.Int>
t: CALL 'public final fun <get-array> (): kotlin.Array<kotlin.Int> declared in foo' type=kotlin.Array<kotlin.Int> origin=GET_PROPERTY
VAR IR_TEMPORARY_VARIABLE name:tmp_28 type:kotlin.Int [val]
CONST Int type=kotlin.Int value=0
VAR IR_TEMPORARY_VARIABLE name:tmp_29 type:kotlin.Int [val]
CALL 'public final fun get (index: kotlin.Int): T of kotlin.Array declared in kotlin.Array' type=kotlin.Int origin=POSTFIX_INCR
$this: GET_VAR 'val tmp_27: kotlin.Array<kotlin.Int> declared in foo.main' type=kotlin.Array<kotlin.Int> origin=null
index: GET_VAR 'val tmp_28: kotlin.Int declared in foo.main' type=kotlin.Int origin=null
CALL 'public final fun set (index: kotlin.Int, value: T of kotlin.Array): kotlin.Unit declared in kotlin.Array' type=kotlin.Unit origin=POSTFIX_INCR
$this: GET_VAR 'val tmp_27: kotlin.Array<kotlin.Int> declared in foo.main' type=kotlin.Array<kotlin.Int> origin=null
index: GET_VAR 'val tmp_28: kotlin.Int declared in foo.main' type=kotlin.Int origin=null
value: CALL 'public final fun inc (): kotlin.Int declared in kotlin.Int' type=kotlin.Int origin=POSTFIX_INCR
$this: GET_VAR 'val tmp_29: kotlin.Int declared in foo.main' type=kotlin.Int origin=null
GET_VAR 'val tmp_29: kotlin.Int declared in foo.main' type=kotlin.Int origin=null
TYPE_OP type=kotlin.Unit origin=IMPLICIT_COERCION_TO_UNIT typeOperand=kotlin.Unit
BLOCK type=kotlin.Int origin=POSTFIX_DECR
VAR IR_TEMPORARY_VARIABLE name:tmp_30 type:kotlin.Array<kotlin.Int> [val]
CALL 'public final fun id <T> (t: T of foo.id): T of foo.id declared in foo' type=kotlin.Array<kotlin.Int> origin=null
<T>: kotlin.Array<kotlin.Int>
t: CALL 'public final fun <get-array> (): kotlin.Array<kotlin.Int> declared in foo' type=kotlin.Array<kotlin.Int> origin=GET_PROPERTY
VAR IR_TEMPORARY_VARIABLE name:tmp_31 type:kotlin.Int [val]
CONST Int type=kotlin.Int value=0
VAR IR_TEMPORARY_VARIABLE name:tmp_32 type:kotlin.Int [val]
CALL 'public final fun get (index: kotlin.Int): T of kotlin.Array declared in kotlin.Array' type=kotlin.Int origin=POSTFIX_DECR
$this: GET_VAR 'val tmp_30: kotlin.Array<kotlin.Int> declared in foo.main' type=kotlin.Array<kotlin.Int> origin=null
index: GET_VAR 'val tmp_31: kotlin.Int declared in foo.main' type=kotlin.Int origin=null
CALL 'public final fun set (index: kotlin.Int, value: T of kotlin.Array): kotlin.Unit declared in kotlin.Array' type=kotlin.Unit origin=POSTFIX_DECR
$this: GET_VAR 'val tmp_30: kotlin.Array<kotlin.Int> declared in foo.main' type=kotlin.Array<kotlin.Int> origin=null
index: GET_VAR 'val tmp_31: kotlin.Int declared in foo.main' type=kotlin.Int origin=null
value: CALL 'public final fun dec (): kotlin.Int declared in kotlin.Int' type=kotlin.Int origin=POSTFIX_DECR
$this: GET_VAR 'val tmp_32: kotlin.Int declared in foo.main' type=kotlin.Int origin=null
GET_VAR 'val tmp_32: kotlin.Int declared in foo.main' type=kotlin.Int origin=null
TYPE_OP type=kotlin.Unit origin=IMPLICIT_COERCION_TO_UNIT typeOperand=kotlin.Unit
BLOCK type=kotlin.Int origin=PREFIX_INCR
VAR IR_TEMPORARY_VARIABLE name:tmp_33 type:kotlin.Array<kotlin.Int> [val]
CALL 'public final fun id <T> (t: T of foo.id): T of foo.id declared in foo' type=kotlin.Array<kotlin.Int> origin=null
<T>: kotlin.Array<kotlin.Int>
t: CALL 'public final fun <get-array> (): kotlin.Array<kotlin.Int> declared in foo' type=kotlin.Array<kotlin.Int> origin=GET_PROPERTY
VAR IR_TEMPORARY_VARIABLE name:tmp_34 type:kotlin.Int [val]
CONST Int type=kotlin.Int value=0
CALL 'public final fun set (index: kotlin.Int, value: T of kotlin.Array): kotlin.Unit declared in kotlin.Array' type=kotlin.Unit origin=PREFIX_INCR
$this: GET_VAR 'val tmp_33: kotlin.Array<kotlin.Int> declared in foo.main' type=kotlin.Array<kotlin.Int> origin=null
index: GET_VAR 'val tmp_34: kotlin.Int declared in foo.main' type=kotlin.Int origin=null
value: CALL 'public final fun inc (): kotlin.Int declared in kotlin.Int' type=kotlin.Int origin=PREFIX_INCR
$this: CALL 'public final fun get (index: kotlin.Int): T of kotlin.Array declared in kotlin.Array' type=kotlin.Int origin=PREFIX_INCR
$this: GET_VAR 'val tmp_33: kotlin.Array<kotlin.Int> declared in foo.main' type=kotlin.Array<kotlin.Int> origin=null
index: GET_VAR 'val tmp_34: kotlin.Int declared in foo.main' type=kotlin.Int origin=null
CALL 'public final fun get (index: kotlin.Int): T of kotlin.Array declared in kotlin.Array' type=kotlin.Int origin=PREFIX_INCR
$this: GET_VAR 'val tmp_33: kotlin.Array<kotlin.Int> declared in foo.main' type=kotlin.Array<kotlin.Int> origin=null
index: GET_VAR 'val tmp_34: kotlin.Int declared in foo.main' type=kotlin.Int origin=null
TYPE_OP type=kotlin.Unit origin=IMPLICIT_COERCION_TO_UNIT typeOperand=kotlin.Unit
BLOCK type=kotlin.Int origin=PREFIX_DECR
VAR IR_TEMPORARY_VARIABLE name:tmp_35 type:kotlin.Array<kotlin.Int> [val]
CALL 'public final fun id <T> (t: T of foo.id): T of foo.id declared in foo' type=kotlin.Array<kotlin.Int> origin=null
<T>: kotlin.Array<kotlin.Int>
t: CALL 'public final fun <get-array> (): kotlin.Array<kotlin.Int> declared in foo' type=kotlin.Array<kotlin.Int> origin=GET_PROPERTY
VAR IR_TEMPORARY_VARIABLE name:tmp_36 type:kotlin.Int [val]
CONST Int type=kotlin.Int value=0
CALL 'public final fun set (index: kotlin.Int, value: T of kotlin.Array): kotlin.Unit declared in kotlin.Array' type=kotlin.Unit origin=PREFIX_DECR
$this: GET_VAR 'val tmp_35: kotlin.Array<kotlin.Int> declared in foo.main' type=kotlin.Array<kotlin.Int> origin=null
index: GET_VAR 'val tmp_36: kotlin.Int declared in foo.main' type=kotlin.Int origin=null
value: CALL 'public final fun dec (): kotlin.Int declared in kotlin.Int' type=kotlin.Int origin=PREFIX_DECR
$this: CALL 'public final fun get (index: kotlin.Int): T of kotlin.Array declared in kotlin.Array' type=kotlin.Int origin=PREFIX_DECR
$this: GET_VAR 'val tmp_35: kotlin.Array<kotlin.Int> declared in foo.main' type=kotlin.Array<kotlin.Int> origin=null
index: GET_VAR 'val tmp_36: kotlin.Int declared in foo.main' type=kotlin.Int origin=null
CALL 'public final fun get (index: kotlin.Int): T of kotlin.Array declared in kotlin.Array' type=kotlin.Int origin=PREFIX_DECR
$this: GET_VAR 'val tmp_35: kotlin.Array<kotlin.Int> declared in foo.main' type=kotlin.Array<kotlin.Int> origin=null
index: GET_VAR 'val tmp_36: kotlin.Int declared in foo.main' type=kotlin.Int origin=null
TYPE_OP type=kotlin.Unit origin=IMPLICIT_COERCION_TO_UNIT typeOperand=kotlin.Unit
BLOCK type=kotlin.Int origin=POSTFIX_INCR
VAR IR_TEMPORARY_VARIABLE name:tmp_37 type:kotlin.Array<kotlin.Int> [val]
CALL 'public final fun <get-array> (): kotlin.Array<kotlin.Int> declared in foo' type=kotlin.Array<kotlin.Int> origin=GET_PROPERTY
VAR IR_TEMPORARY_VARIABLE name:tmp_38 type:kotlin.Int [val]
CONST Int type=kotlin.Int value=0
VAR IR_TEMPORARY_VARIABLE name:tmp_39 type:kotlin.Int [val]
CALL 'public final fun get (index: kotlin.Int): T of kotlin.Array declared in kotlin.Array' type=kotlin.Int origin=POSTFIX_INCR
$this: GET_VAR 'val tmp_37: kotlin.Array<kotlin.Int> declared in foo.main' type=kotlin.Array<kotlin.Int> origin=null
index: GET_VAR 'val tmp_38: kotlin.Int declared in foo.main' type=kotlin.Int origin=null
CALL 'public final fun set (index: kotlin.Int, value: T of kotlin.Array): kotlin.Unit declared in kotlin.Array' type=kotlin.Unit origin=POSTFIX_INCR
$this: GET_VAR 'val tmp_37: kotlin.Array<kotlin.Int> declared in foo.main' type=kotlin.Array<kotlin.Int> origin=null
index: GET_VAR 'val tmp_38: kotlin.Int declared in foo.main' type=kotlin.Int origin=null
value: CALL 'public final fun inc (): kotlin.Int declared in kotlin.Int' type=kotlin.Int origin=POSTFIX_INCR
$this: GET_VAR 'val tmp_39: kotlin.Int declared in foo.main' type=kotlin.Int origin=null
GET_VAR 'val tmp_39: kotlin.Int declared in foo.main' type=kotlin.Int origin=null
TYPE_OP type=kotlin.Unit origin=IMPLICIT_COERCION_TO_UNIT typeOperand=kotlin.Unit
BLOCK type=kotlin.Int origin=POSTFIX_DECR
VAR IR_TEMPORARY_VARIABLE name:tmp_40 type:kotlin.Array<kotlin.Int> [val]
CALL 'public final fun <get-array> (): kotlin.Array<kotlin.Int> declared in foo' type=kotlin.Array<kotlin.Int> origin=GET_PROPERTY
VAR IR_TEMPORARY_VARIABLE name:tmp_41 type:kotlin.Int [val]
CONST Int type=kotlin.Int value=0
VAR IR_TEMPORARY_VARIABLE name:tmp_42 type:kotlin.Int [val]
CALL 'public final fun get (index: kotlin.Int): T of kotlin.Array declared in kotlin.Array' type=kotlin.Int origin=POSTFIX_DECR
$this: GET_VAR 'val tmp_40: kotlin.Array<kotlin.Int> declared in foo.main' type=kotlin.Array<kotlin.Int> origin=null
index: GET_VAR 'val tmp_41: kotlin.Int declared in foo.main' type=kotlin.Int origin=null
CALL 'public final fun set (index: kotlin.Int, value: T of kotlin.Array): kotlin.Unit declared in kotlin.Array' type=kotlin.Unit origin=POSTFIX_DECR
$this: GET_VAR 'val tmp_40: kotlin.Array<kotlin.Int> declared in foo.main' type=kotlin.Array<kotlin.Int> origin=null
index: GET_VAR 'val tmp_41: kotlin.Int declared in foo.main' type=kotlin.Int origin=null
value: CALL 'public final fun dec (): kotlin.Int declared in kotlin.Int' type=kotlin.Int origin=POSTFIX_DECR
$this: GET_VAR 'val tmp_42: kotlin.Int declared in foo.main' type=kotlin.Int origin=null
GET_VAR 'val tmp_42: kotlin.Int declared in foo.main' type=kotlin.Int origin=null
TYPE_OP type=kotlin.Unit origin=IMPLICIT_COERCION_TO_UNIT typeOperand=kotlin.Unit
BLOCK type=kotlin.Int origin=PREFIX_INCR
VAR IR_TEMPORARY_VARIABLE name:tmp_43 type:kotlin.Array<kotlin.Int> [val]
CALL 'public final fun <get-array> (): kotlin.Array<kotlin.Int> declared in foo' type=kotlin.Array<kotlin.Int> origin=GET_PROPERTY
VAR IR_TEMPORARY_VARIABLE name:tmp_44 type:kotlin.Int [val]
CONST Int type=kotlin.Int value=0
CALL 'public final fun set (index: kotlin.Int, value: T of kotlin.Array): kotlin.Unit declared in kotlin.Array' type=kotlin.Unit origin=PREFIX_INCR
$this: GET_VAR 'val tmp_43: kotlin.Array<kotlin.Int> declared in foo.main' type=kotlin.Array<kotlin.Int> origin=null
index: GET_VAR 'val tmp_44: kotlin.Int declared in foo.main' type=kotlin.Int origin=null
value: CALL 'public final fun inc (): kotlin.Int declared in kotlin.Int' type=kotlin.Int origin=PREFIX_INCR
$this: CALL 'public final fun get (index: kotlin.Int): T of kotlin.Array declared in kotlin.Array' type=kotlin.Int origin=PREFIX_INCR
$this: GET_VAR 'val tmp_43: kotlin.Array<kotlin.Int> declared in foo.main' type=kotlin.Array<kotlin.Int> origin=null
index: GET_VAR 'val tmp_44: kotlin.Int declared in foo.main' type=kotlin.Int origin=null
CALL 'public final fun get (index: kotlin.Int): T of kotlin.Array declared in kotlin.Array' type=kotlin.Int origin=PREFIX_INCR
$this: GET_VAR 'val tmp_43: kotlin.Array<kotlin.Int> declared in foo.main' type=kotlin.Array<kotlin.Int> origin=null
index: GET_VAR 'val tmp_44: kotlin.Int declared in foo.main' type=kotlin.Int origin=null
TYPE_OP type=kotlin.Unit origin=IMPLICIT_COERCION_TO_UNIT typeOperand=kotlin.Unit
BLOCK type=kotlin.Int origin=PREFIX_DECR
VAR IR_TEMPORARY_VARIABLE name:tmp_45 type:kotlin.Array<kotlin.Int> [val]
CALL 'public final fun <get-array> (): kotlin.Array<kotlin.Int> declared in foo' type=kotlin.Array<kotlin.Int> origin=GET_PROPERTY
VAR IR_TEMPORARY_VARIABLE name:tmp_46 type:kotlin.Int [val]
CONST Int type=kotlin.Int value=0
CALL 'public final fun set (index: kotlin.Int, value: T of kotlin.Array): kotlin.Unit declared in kotlin.Array' type=kotlin.Unit origin=PREFIX_DECR
$this: GET_VAR 'val tmp_45: kotlin.Array<kotlin.Int> declared in foo.main' type=kotlin.Array<kotlin.Int> origin=null
index: GET_VAR 'val tmp_46: kotlin.Int declared in foo.main' type=kotlin.Int origin=null
value: CALL 'public final fun dec (): kotlin.Int declared in kotlin.Int' type=kotlin.Int origin=PREFIX_DECR
$this: CALL 'public final fun get (index: kotlin.Int): T of kotlin.Array declared in kotlin.Array' type=kotlin.Int origin=PREFIX_DECR
$this: GET_VAR 'val tmp_45: kotlin.Array<kotlin.Int> declared in foo.main' type=kotlin.Array<kotlin.Int> origin=null
index: GET_VAR 'val tmp_46: kotlin.Int declared in foo.main' type=kotlin.Int origin=null
CALL 'public final fun get (index: kotlin.Int): T of kotlin.Array declared in kotlin.Array' type=kotlin.Int origin=PREFIX_DECR
$this: GET_VAR 'val tmp_45: kotlin.Array<kotlin.Int> declared in foo.main' type=kotlin.Array<kotlin.Int> origin=null
index: GET_VAR 'val tmp_46: kotlin.Int declared in foo.main' type=kotlin.Int origin=null
@@ -0,0 +1,54 @@
// MUTE_SIGNATURE_COMPARISON_K2: JVM_IR
package foo
class A {
var prop: Int = 0
}
object B {
var prop: Int = 0
}
val array: Array<Int> = arrayOf(0)
fun <T> id(t: T): T {
return t
}
fun main() {
val a = A()
id(a).prop = 10
id(a).prop += 20
id(a).prop -= 20
id(a).prop *= 2
id(a).prop /= 5
id(a).prop %= 3
id(a).prop++
id(a).prop--
++id(a).prop
--id(a).prop
B.prop++
B.prop--
++B.prop
--B.prop
id(array)[0] = 10
id(array)[0] += 20
id(array)[0] -= 20
id(array)[0] *= 2
id(array)[0] /= 5
id(array)[0] %= 3
id(array)[0]++
id(array)[0]--
++id(array)[0]
--id(array)[0]
array[0]++
array[0]--
++array[0]
--array[0]
}
@@ -0,0 +1,200 @@
package foo
class A {
constructor() /* primary */ {
super/*Any*/()
/* <init>() */
}
var prop: Int
field = 0
get
set
}
object B {
private constructor() /* primary */ {
super/*Any*/()
/* <init>() */
}
var prop: Int
field = 0
get
set
}
val array: Array<Int>
field = arrayOf<Int>(elements = [0])
get
fun <T : Any?> id(t: T): T {
return t
}
fun main() {
val a: A = A()
id<A>(t = a).<set-prop>(<set-?> = 10)
{ // BLOCK
val tmp0_this: A = id<A>(t = a)
tmp0_this.<set-prop>(<set-?> = tmp0_this.<get-prop>().plus(other = 20))
}
{ // BLOCK
val tmp1_this: A = id<A>(t = a)
tmp1_this.<set-prop>(<set-?> = tmp1_this.<get-prop>().minus(other = 20))
}
{ // BLOCK
val tmp2_this: A = id<A>(t = a)
tmp2_this.<set-prop>(<set-?> = tmp2_this.<get-prop>().times(other = 2))
}
{ // BLOCK
val tmp3_this: A = id<A>(t = a)
tmp3_this.<set-prop>(<set-?> = tmp3_this.<get-prop>().div(other = 5))
}
{ // BLOCK
val tmp4_this: A = id<A>(t = a)
tmp4_this.<set-prop>(<set-?> = tmp4_this.<get-prop>().rem(other = 3))
}
{ // BLOCK
val tmp5_this: A = id<A>(t = a)
{ // BLOCK
val tmp6: Int = tmp5_this.<get-prop>()
tmp5_this.<set-prop>(<set-?> = tmp6.inc())
tmp6
}
} /*~> Unit */
{ // BLOCK
val tmp7_this: A = id<A>(t = a)
{ // BLOCK
val tmp8: Int = tmp7_this.<get-prop>()
tmp7_this.<set-prop>(<set-?> = tmp8.dec())
tmp8
}
} /*~> Unit */
{ // BLOCK
val tmp9_this: A = id<A>(t = a)
{ // BLOCK
tmp9_this.<set-prop>(<set-?> = tmp9_this.<get-prop>().inc())
tmp9_this.<get-prop>()
}
} /*~> Unit */
{ // BLOCK
val tmp10_this: A = id<A>(t = a)
{ // BLOCK
tmp10_this.<set-prop>(<set-?> = tmp10_this.<get-prop>().dec())
tmp10_this.<get-prop>()
}
} /*~> Unit */
{ // BLOCK
val tmp11_this: B = B
{ // BLOCK
val tmp12: Int = tmp11_this.<get-prop>()
tmp11_this.<set-prop>(<set-?> = tmp12.inc())
tmp12
}
} /*~> Unit */
{ // BLOCK
val tmp13_this: B = B
{ // BLOCK
val tmp14: Int = tmp13_this.<get-prop>()
tmp13_this.<set-prop>(<set-?> = tmp14.dec())
tmp14
}
} /*~> Unit */
{ // BLOCK
val tmp15_this: B = B
{ // BLOCK
tmp15_this.<set-prop>(<set-?> = tmp15_this.<get-prop>().inc())
tmp15_this.<get-prop>()
}
} /*~> Unit */
{ // BLOCK
val tmp16_this: B = B
{ // BLOCK
tmp16_this.<set-prop>(<set-?> = tmp16_this.<get-prop>().dec())
tmp16_this.<get-prop>()
}
} /*~> Unit */
id<Array<Int>>(t = <get-array>()).set(index = 0, value = 10)
{ // BLOCK
val tmp17_array: Array<Int> = id<Array<Int>>(t = <get-array>())
val tmp18_index0: Int = 0
tmp17_array.set(index = tmp18_index0, value = tmp17_array.get(index = tmp18_index0).plus(other = 20))
}
{ // BLOCK
val tmp19_array: Array<Int> = id<Array<Int>>(t = <get-array>())
val tmp20_index0: Int = 0
tmp19_array.set(index = tmp20_index0, value = tmp19_array.get(index = tmp20_index0).minus(other = 20))
}
{ // BLOCK
val tmp21_array: Array<Int> = id<Array<Int>>(t = <get-array>())
val tmp22_index0: Int = 0
tmp21_array.set(index = tmp22_index0, value = tmp21_array.get(index = tmp22_index0).times(other = 2))
}
{ // BLOCK
val tmp23_array: Array<Int> = id<Array<Int>>(t = <get-array>())
val tmp24_index0: Int = 0
tmp23_array.set(index = tmp24_index0, value = tmp23_array.get(index = tmp24_index0).div(other = 5))
}
{ // BLOCK
val tmp25_array: Array<Int> = id<Array<Int>>(t = <get-array>())
val tmp26_index0: Int = 0
tmp25_array.set(index = tmp26_index0, value = tmp25_array.get(index = tmp26_index0).rem(other = 3))
}
{ // BLOCK
val tmp27_array: Array<Int> = id<Array<Int>>(t = <get-array>())
val tmp28_index0: Int = 0
val tmp29: Int = tmp27_array.get(index = tmp28_index0)
tmp27_array.set(index = tmp28_index0, value = tmp29.inc())
tmp29
} /*~> Unit */
{ // BLOCK
val tmp30_array: Array<Int> = id<Array<Int>>(t = <get-array>())
val tmp31_index0: Int = 0
val tmp32: Int = tmp30_array.get(index = tmp31_index0)
tmp30_array.set(index = tmp31_index0, value = tmp32.dec())
tmp32
} /*~> Unit */
{ // BLOCK
val tmp33_array: Array<Int> = id<Array<Int>>(t = <get-array>())
val tmp34_index0: Int = 0
tmp33_array.set(index = tmp34_index0, value = tmp33_array.get(index = tmp34_index0).inc())
tmp33_array.get(index = tmp34_index0)
} /*~> Unit */
{ // BLOCK
val tmp35_array: Array<Int> = id<Array<Int>>(t = <get-array>())
val tmp36_index0: Int = 0
tmp35_array.set(index = tmp36_index0, value = tmp35_array.get(index = tmp36_index0).dec())
tmp35_array.get(index = tmp36_index0)
} /*~> Unit */
{ // BLOCK
val tmp37_array: Array<Int> = <get-array>()
val tmp38_index0: Int = 0
val tmp39: Int = tmp37_array.get(index = tmp38_index0)
tmp37_array.set(index = tmp38_index0, value = tmp39.inc())
tmp39
} /*~> Unit */
{ // BLOCK
val tmp40_array: Array<Int> = <get-array>()
val tmp41_index0: Int = 0
val tmp42: Int = tmp40_array.get(index = tmp41_index0)
tmp40_array.set(index = tmp41_index0, value = tmp42.dec())
tmp42
} /*~> Unit */
{ // BLOCK
val tmp43_array: Array<Int> = <get-array>()
val tmp44_index0: Int = 0
tmp43_array.set(index = tmp44_index0, value = tmp43_array.get(index = tmp44_index0).inc())
tmp43_array.get(index = tmp44_index0)
} /*~> Unit */
{ // BLOCK
val tmp45_array: Array<Int> = <get-array>()
val tmp46_index0: Int = 0
tmp45_array.set(index = tmp46_index0, value = tmp45_array.get(index = tmp46_index0).dec())
tmp45_array.get(index = tmp46_index0)
} /*~> Unit */
}
@@ -0,0 +1,84 @@
package foo
// CHECK:
// Mangled name: foo{}array
// Public signature: foo/array|6187513897999240281[0]
val array: Array<Int>
// CHECK JVM_IR:
// Mangled name: foo#<get-array>(){}kotlin.Array<kotlin.Int>
// Public signature: foo/array.<get-array>|7467926770652597701[0]
// CHECK JS_IR NATIVE:
// Mangled name: foo#<get-array>(){}
// Public signature: foo/array.<get-array>|-7741494344808015919[0]
get
// CHECK:
// Mangled name: foo.A
// Public signature: foo/A|null[0]
class A {
// CHECK:
// Mangled name: foo.A{}prop
// Public signature: foo/A.prop|3598315380056892812[0]
var prop: Int
// CHECK JVM_IR:
// Mangled name: foo.A#<get-prop>(){}kotlin.Int
// Public signature: foo/A.prop.<get-prop>|-2094203252476742575[0]
// CHECK JS_IR NATIVE:
// Mangled name: foo.A#<get-prop>(){}
// Public signature: foo/A.prop.<get-prop>|-5734736374948136327[0]
get
// CHECK:
// Mangled name: foo.A#<set-prop>(kotlin.Int){}
// Public signature: foo/A.prop.<set-prop>|3724820243841906450[0]
set
// CHECK:
// Mangled name: foo.A#<init>(){}
// Public signature: foo/A.<init>|-5645683436151566731[0]
constructor() /* primary */
}
// CHECK:
// Mangled name: foo.B
// Public signature: foo/B|null[0]
object B {
// CHECK:
// Mangled name: foo.B{}prop
// Public signature: foo/B.prop|3598315380056892812[0]
var prop: Int
// CHECK JVM_IR:
// Mangled name: foo.B#<get-prop>(){}kotlin.Int
// Public signature: foo/B.prop.<get-prop>|-2094203252476742575[0]
// CHECK JS_IR NATIVE:
// Mangled name: foo.B#<get-prop>(){}
// Public signature: foo/B.prop.<get-prop>|-5734736374948136327[0]
get
// CHECK:
// Mangled name: foo.B#<set-prop>(kotlin.Int){}
// Public signature: foo/B.prop.<set-prop>|3724820243841906450[0]
set
// CHECK:
// Mangled name: foo.B#<init>(){}
// Public signature: foo/B.<init>|-5645683436151566731[0]
private constructor() /* primary */
}
// CHECK JVM_IR:
// Mangled name: foo#id(0:0){0§<kotlin.Any?>}0:0
// Public signature: foo/id|-6791396263062521506[0]
// CHECK JS_IR NATIVE:
// Mangled name: foo#id(0:0){0§<kotlin.Any?>}
// Public signature: foo/id|9187295668833355463[0]
fun <T : Any?> id(t: T): T
// CHECK JVM_IR:
// Mangled name computed from Ir: foo#main(){}
// Mangled name computed from Descriptor: foo#main(){}%AssignmentOperator.kt
// Public signature: foo/main|7392120756922895329[0]
// CHECK JS_IR NATIVE:
// Mangled name: foo#main(){}
// Public signature: foo/main|-4284757841571462650[0]
fun main(): Unit
@@ -33309,6 +33309,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
runTest("compiler/testData/codegen/box/operatorConventions/annotatedAssignment.kt");
}
@Test
@TestMetadata("assignToDotQualifiedWithSideEffect.kt")
public void testAssignToDotQualifiedWithSideEffect() throws Exception {
runTest("compiler/testData/codegen/box/operatorConventions/assignToDotQualifiedWithSideEffect.kt");
}
@Test
@TestMetadata("assignmentOperations.kt")
public void testAssignmentOperations() throws Exception {
@@ -33435,6 +33441,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
runTest("compiler/testData/codegen/box/operatorConventions/plusExplicit.kt");
}
@Test
@TestMetadata("reassignmentLhsCaching.kt")
public void testReassignmentLhsCaching() throws Exception {
runTest("compiler/testData/codegen/box/operatorConventions/reassignmentLhsCaching.kt");
}
@Test
@TestMetadata("remAssignmentOperation.kt")
public void testRemAssignmentOperation() throws Exception {
@@ -35001,12 +35001,24 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes
runTest("compiler/testData/codegen/box/operatorConventions/annotatedAssignment.kt");
}
@Test
@TestMetadata("assignToDotQualifiedWithSideEffect.kt")
public void testAssignToDotQualifiedWithSideEffect() throws Exception {
runTest("compiler/testData/codegen/box/operatorConventions/assignToDotQualifiedWithSideEffect.kt");
}
@Test
@TestMetadata("assignmentOperations.kt")
public void testAssignmentOperations() throws Exception {
runTest("compiler/testData/codegen/box/operatorConventions/assignmentOperations.kt");
}
@Test
@TestMetadata("augmentedAssigmentPlusLhsCount.kt")
public void testAugmentedAssigmentPlusLhsCount() throws Exception {
runTest("compiler/testData/codegen/box/operatorConventions/augmentedAssigmentPlusLhsCount.kt");
}
@Test
@TestMetadata("augmentedAssignmentInInitializer.kt")
public void testAugmentedAssignmentInInitializer() throws Exception {
@@ -35127,6 +35139,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes
runTest("compiler/testData/codegen/box/operatorConventions/plusExplicit.kt");
}
@Test
@TestMetadata("reassignmentLhsCaching.kt")
public void testReassignmentLhsCaching() throws Exception {
runTest("compiler/testData/codegen/box/operatorConventions/reassignmentLhsCaching.kt");
}
@Test
@TestMetadata("remAssignmentOperation.kt")
public void testRemAssignmentOperation() throws Exception {
@@ -35001,12 +35001,24 @@ public class IrBlackBoxCodegenWithIrInlinerTestGenerated extends AbstractIrBlack
runTest("compiler/testData/codegen/box/operatorConventions/annotatedAssignment.kt");
}
@Test
@TestMetadata("assignToDotQualifiedWithSideEffect.kt")
public void testAssignToDotQualifiedWithSideEffect() throws Exception {
runTest("compiler/testData/codegen/box/operatorConventions/assignToDotQualifiedWithSideEffect.kt");
}
@Test
@TestMetadata("assignmentOperations.kt")
public void testAssignmentOperations() throws Exception {
runTest("compiler/testData/codegen/box/operatorConventions/assignmentOperations.kt");
}
@Test
@TestMetadata("augmentedAssigmentPlusLhsCount.kt")
public void testAugmentedAssigmentPlusLhsCount() throws Exception {
runTest("compiler/testData/codegen/box/operatorConventions/augmentedAssigmentPlusLhsCount.kt");
}
@Test
@TestMetadata("augmentedAssignmentInInitializer.kt")
public void testAugmentedAssignmentInInitializer() throws Exception {
@@ -35127,6 +35139,12 @@ public class IrBlackBoxCodegenWithIrInlinerTestGenerated extends AbstractIrBlack
runTest("compiler/testData/codegen/box/operatorConventions/plusExplicit.kt");
}
@Test
@TestMetadata("reassignmentLhsCaching.kt")
public void testReassignmentLhsCaching() throws Exception {
runTest("compiler/testData/codegen/box/operatorConventions/reassignmentLhsCaching.kt");
}
@Test
@TestMetadata("remAssignmentOperation.kt")
public void testRemAssignmentOperation() throws Exception {
@@ -2594,6 +2594,12 @@ public class ClassicJvmIrTextTestGenerated extends AbstractClassicJvmIrTextTest
runTest("compiler/testData/ir/irText/firProblems/ArrayMap.kt");
}
@Test
@TestMetadata("AssignmentOperator.kt")
public void testAssignmentOperator() throws Exception {
runTest("compiler/testData/ir/irText/firProblems/AssignmentOperator.kt");
}
@Test
@TestMetadata("candidateSymbol.kt")
public void testCandidateSymbol() throws Exception {
@@ -29833,6 +29833,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes
@TestDataPath("$PROJECT_ROOT")
@RunWith(JUnit3RunnerWithInners.class)
public static class OperatorConventions extends AbstractLightAnalysisModeTest {
@TestMetadata("augmentedAssigmentPlusLhsCount.kt")
public void ignoreAugmentedAssigmentPlusLhsCount() throws Exception {
runTest("compiler/testData/codegen/box/operatorConventions/augmentedAssigmentPlusLhsCount.kt");
}
private void runTest(String testDataFilePath) throws Exception {
KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath);
}
@@ -29846,6 +29851,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes
runTest("compiler/testData/codegen/box/operatorConventions/annotatedAssignment.kt");
}
@TestMetadata("assignToDotQualifiedWithSideEffect.kt")
public void testAssignToDotQualifiedWithSideEffect() throws Exception {
runTest("compiler/testData/codegen/box/operatorConventions/assignToDotQualifiedWithSideEffect.kt");
}
@TestMetadata("assignmentOperations.kt")
public void testAssignmentOperations() throws Exception {
runTest("compiler/testData/codegen/box/operatorConventions/assignmentOperations.kt");
@@ -29951,6 +29961,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes
runTest("compiler/testData/codegen/box/operatorConventions/plusExplicit.kt");
}
@TestMetadata("reassignmentLhsCaching.kt")
public void testReassignmentLhsCaching() throws Exception {
runTest("compiler/testData/codegen/box/operatorConventions/reassignmentLhsCaching.kt");
}
@TestMetadata("remAssignmentOperation.kt")
public void testRemAssignmentOperation() throws Exception {
runTest("compiler/testData/codegen/box/operatorConventions/remAssignmentOperation.kt");
@@ -1965,6 +1965,11 @@ public class KlibIrTextTestCaseGenerated extends AbstractKlibIrTextTestCase {
runTest("compiler/testData/ir/irText/firProblems/ArrayMap.kt");
}
@TestMetadata("AssignmentOperator.kt")
public void testAssignmentOperator() throws Exception {
runTest("compiler/testData/ir/irText/firProblems/AssignmentOperator.kt");
}
@TestMetadata("candidateSymbol.kt")
public void testCandidateSymbol() throws Exception {
runTest("compiler/testData/ir/irText/firProblems/candidateSymbol.kt");
@@ -3303,12 +3303,6 @@ public class FirJsBoxTestGenerated extends AbstractFirJsBoxTest {
runTest("js/js.translator/testData/box/expression/evaluationOrder/assignToArrayElementWithSideEffect.kt");
}
@Test
@TestMetadata("assignToDotQualifiedWithSideEffect.kt")
public void testAssignToDotQualifiedWithSideEffect() throws Exception {
runTest("js/js.translator/testData/box/expression/evaluationOrder/assignToDotQualifiedWithSideEffect.kt");
}
@Test
@TestMetadata("booleanAndOr.kt")
public void testBooleanAndOr() throws Exception {
@@ -3465,12 +3459,6 @@ public class FirJsBoxTestGenerated extends AbstractFirJsBoxTest {
runTest("js/js.translator/testData/box/expression/evaluationOrder/orOrWithSideEffect.kt");
}
@Test
@TestMetadata("reassignmentLhsCaching.kt")
public void testReassignmentLhsCaching() throws Exception {
runTest("js/js.translator/testData/box/expression/evaluationOrder/reassignmentLhsCaching.kt");
}
@Test
@TestMetadata("secondaryConstructorTemporaryVars.kt")
public void testSecondaryConstructorTemporaryVars() throws Exception {
@@ -24645,6 +24645,12 @@ public class FirJsCodegenBoxTestGenerated extends AbstractFirJsCodegenBoxTest {
runTest("compiler/testData/codegen/box/operatorConventions/annotatedAssignment.kt");
}
@Test
@TestMetadata("assignToDotQualifiedWithSideEffect.kt")
public void testAssignToDotQualifiedWithSideEffect() throws Exception {
runTest("compiler/testData/codegen/box/operatorConventions/assignToDotQualifiedWithSideEffect.kt");
}
@Test
@TestMetadata("assignmentOperations.kt")
public void testAssignmentOperations() throws Exception {
@@ -24771,6 +24777,12 @@ public class FirJsCodegenBoxTestGenerated extends AbstractFirJsCodegenBoxTest {
runTest("compiler/testData/codegen/box/operatorConventions/plusExplicit.kt");
}
@Test
@TestMetadata("reassignmentLhsCaching.kt")
public void testReassignmentLhsCaching() throws Exception {
runTest("compiler/testData/codegen/box/operatorConventions/reassignmentLhsCaching.kt");
}
@Test
@TestMetadata("remAssignmentOperation.kt")
public void testRemAssignmentOperation() throws Exception {
@@ -2252,6 +2252,12 @@ public class FirLightTreeJsIrTextTestGenerated extends AbstractFirLightTreeJsIrT
runTest("compiler/testData/ir/irText/firProblems/ArrayMap.kt");
}
@Test
@TestMetadata("AssignmentOperator.kt")
public void testAssignmentOperator() throws Exception {
runTest("compiler/testData/ir/irText/firProblems/AssignmentOperator.kt");
}
@Test
@TestMetadata("candidateSymbol.kt")
public void testCandidateSymbol() throws Exception {
@@ -2252,6 +2252,12 @@ public class FirPsiJsIrTextTestGenerated extends AbstractFirPsiJsIrTextTest {
runTest("compiler/testData/ir/irText/firProblems/ArrayMap.kt");
}
@Test
@TestMetadata("AssignmentOperator.kt")
public void testAssignmentOperator() throws Exception {
runTest("compiler/testData/ir/irText/firProblems/AssignmentOperator.kt");
}
@Test
@TestMetadata("candidateSymbol.kt")
public void testCandidateSymbol() throws Exception {
@@ -2252,6 +2252,12 @@ public class ClassicJsIrTextTestGenerated extends AbstractClassicJsIrTextTest {
runTest("compiler/testData/ir/irText/firProblems/ArrayMap.kt");
}
@Test
@TestMetadata("AssignmentOperator.kt")
public void testAssignmentOperator() throws Exception {
runTest("compiler/testData/ir/irText/firProblems/AssignmentOperator.kt");
}
@Test
@TestMetadata("candidateSymbol.kt")
public void testCandidateSymbol() throws Exception {
@@ -3409,12 +3409,6 @@ public class IrBoxJsES6TestGenerated extends AbstractIrBoxJsES6Test {
runTest("js/js.translator/testData/box/expression/evaluationOrder/assignToArrayElementWithSideEffect.kt");
}
@Test
@TestMetadata("assignToDotQualifiedWithSideEffect.kt")
public void testAssignToDotQualifiedWithSideEffect() throws Exception {
runTest("js/js.translator/testData/box/expression/evaluationOrder/assignToDotQualifiedWithSideEffect.kt");
}
@Test
@TestMetadata("booleanAndOr.kt")
public void testBooleanAndOr() throws Exception {
@@ -3571,12 +3565,6 @@ public class IrBoxJsES6TestGenerated extends AbstractIrBoxJsES6Test {
runTest("js/js.translator/testData/box/expression/evaluationOrder/orOrWithSideEffect.kt");
}
@Test
@TestMetadata("reassignmentLhsCaching.kt")
public void testReassignmentLhsCaching() throws Exception {
runTest("js/js.translator/testData/box/expression/evaluationOrder/reassignmentLhsCaching.kt");
}
@Test
@TestMetadata("secondaryConstructorTemporaryVars.kt")
public void testSecondaryConstructorTemporaryVars() throws Exception {
@@ -3303,12 +3303,6 @@ public class IrBoxJsTestGenerated extends AbstractIrBoxJsTest {
runTest("js/js.translator/testData/box/expression/evaluationOrder/assignToArrayElementWithSideEffect.kt");
}
@Test
@TestMetadata("assignToDotQualifiedWithSideEffect.kt")
public void testAssignToDotQualifiedWithSideEffect() throws Exception {
runTest("js/js.translator/testData/box/expression/evaluationOrder/assignToDotQualifiedWithSideEffect.kt");
}
@Test
@TestMetadata("booleanAndOr.kt")
public void testBooleanAndOr() throws Exception {
@@ -3465,12 +3459,6 @@ public class IrBoxJsTestGenerated extends AbstractIrBoxJsTest {
runTest("js/js.translator/testData/box/expression/evaluationOrder/orOrWithSideEffect.kt");
}
@Test
@TestMetadata("reassignmentLhsCaching.kt")
public void testReassignmentLhsCaching() throws Exception {
runTest("js/js.translator/testData/box/expression/evaluationOrder/reassignmentLhsCaching.kt");
}
@Test
@TestMetadata("secondaryConstructorTemporaryVars.kt")
public void testSecondaryConstructorTemporaryVars() throws Exception {
@@ -24645,6 +24645,12 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest {
runTest("compiler/testData/codegen/box/operatorConventions/annotatedAssignment.kt");
}
@Test
@TestMetadata("assignToDotQualifiedWithSideEffect.kt")
public void testAssignToDotQualifiedWithSideEffect() throws Exception {
runTest("compiler/testData/codegen/box/operatorConventions/assignToDotQualifiedWithSideEffect.kt");
}
@Test
@TestMetadata("assignmentOperations.kt")
public void testAssignmentOperations() throws Exception {
@@ -24771,6 +24777,12 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest {
runTest("compiler/testData/codegen/box/operatorConventions/plusExplicit.kt");
}
@Test
@TestMetadata("reassignmentLhsCaching.kt")
public void testReassignmentLhsCaching() throws Exception {
runTest("compiler/testData/codegen/box/operatorConventions/reassignmentLhsCaching.kt");
}
@Test
@TestMetadata("remAssignmentOperation.kt")
public void testRemAssignmentOperation() throws Exception {
@@ -24645,6 +24645,12 @@ public class IrJsES6CodegenBoxTestGenerated extends AbstractIrJsES6CodegenBoxTes
runTest("compiler/testData/codegen/box/operatorConventions/annotatedAssignment.kt");
}
@Test
@TestMetadata("assignToDotQualifiedWithSideEffect.kt")
public void testAssignToDotQualifiedWithSideEffect() throws Exception {
runTest("compiler/testData/codegen/box/operatorConventions/assignToDotQualifiedWithSideEffect.kt");
}
@Test
@TestMetadata("assignmentOperations.kt")
public void testAssignmentOperations() throws Exception {
@@ -24771,6 +24777,12 @@ public class IrJsES6CodegenBoxTestGenerated extends AbstractIrJsES6CodegenBoxTes
runTest("compiler/testData/codegen/box/operatorConventions/plusExplicit.kt");
}
@Test
@TestMetadata("reassignmentLhsCaching.kt")
public void testReassignmentLhsCaching() throws Exception {
runTest("compiler/testData/codegen/box/operatorConventions/reassignmentLhsCaching.kt");
}
@Test
@TestMetadata("remAssignmentOperation.kt")
public void testRemAssignmentOperation() throws Exception {
@@ -27644,6 +27644,12 @@ public class FirNativeCodegenBoxTestGenerated extends AbstractNativeCodegenBoxTe
runTest("compiler/testData/codegen/box/operatorConventions/annotatedAssignment.kt");
}
@Test
@TestMetadata("assignToDotQualifiedWithSideEffect.kt")
public void testAssignToDotQualifiedWithSideEffect() throws Exception {
runTest("compiler/testData/codegen/box/operatorConventions/assignToDotQualifiedWithSideEffect.kt");
}
@Test
@TestMetadata("assignmentOperations.kt")
public void testAssignmentOperations() throws Exception {
@@ -27770,6 +27776,12 @@ public class FirNativeCodegenBoxTestGenerated extends AbstractNativeCodegenBoxTe
runTest("compiler/testData/codegen/box/operatorConventions/plusExplicit.kt");
}
@Test
@TestMetadata("reassignmentLhsCaching.kt")
public void testReassignmentLhsCaching() throws Exception {
runTest("compiler/testData/codegen/box/operatorConventions/reassignmentLhsCaching.kt");
}
@Test
@TestMetadata("remAssignmentOperation.kt")
public void testRemAssignmentOperation() throws Exception {
@@ -28276,6 +28276,12 @@ public class FirNativeCodegenBoxTestNoPLGenerated extends AbstractNativeCodegenB
runTest("compiler/testData/codegen/box/operatorConventions/annotatedAssignment.kt");
}
@Test
@TestMetadata("assignToDotQualifiedWithSideEffect.kt")
public void testAssignToDotQualifiedWithSideEffect() throws Exception {
runTest("compiler/testData/codegen/box/operatorConventions/assignToDotQualifiedWithSideEffect.kt");
}
@Test
@TestMetadata("assignmentOperations.kt")
public void testAssignmentOperations() throws Exception {
@@ -28402,6 +28408,12 @@ public class FirNativeCodegenBoxTestNoPLGenerated extends AbstractNativeCodegenB
runTest("compiler/testData/codegen/box/operatorConventions/plusExplicit.kt");
}
@Test
@TestMetadata("reassignmentLhsCaching.kt")
public void testReassignmentLhsCaching() throws Exception {
runTest("compiler/testData/codegen/box/operatorConventions/reassignmentLhsCaching.kt");
}
@Test
@TestMetadata("remAssignmentOperation.kt")
public void testRemAssignmentOperation() throws Exception {
@@ -27329,6 +27329,12 @@ public class NativeCodegenBoxTestGenerated extends AbstractNativeCodegenBoxTest
runTest("compiler/testData/codegen/box/operatorConventions/annotatedAssignment.kt");
}
@Test
@TestMetadata("assignToDotQualifiedWithSideEffect.kt")
public void testAssignToDotQualifiedWithSideEffect() throws Exception {
runTest("compiler/testData/codegen/box/operatorConventions/assignToDotQualifiedWithSideEffect.kt");
}
@Test
@TestMetadata("assignmentOperations.kt")
public void testAssignmentOperations() throws Exception {
@@ -27455,6 +27461,12 @@ public class NativeCodegenBoxTestGenerated extends AbstractNativeCodegenBoxTest
runTest("compiler/testData/codegen/box/operatorConventions/plusExplicit.kt");
}
@Test
@TestMetadata("reassignmentLhsCaching.kt")
public void testReassignmentLhsCaching() throws Exception {
runTest("compiler/testData/codegen/box/operatorConventions/reassignmentLhsCaching.kt");
}
@Test
@TestMetadata("remAssignmentOperation.kt")
public void testRemAssignmentOperation() throws Exception {
@@ -27645,6 +27645,12 @@ public class NativeCodegenBoxTestNoPLGenerated extends AbstractNativeCodegenBoxT
runTest("compiler/testData/codegen/box/operatorConventions/annotatedAssignment.kt");
}
@Test
@TestMetadata("assignToDotQualifiedWithSideEffect.kt")
public void testAssignToDotQualifiedWithSideEffect() throws Exception {
runTest("compiler/testData/codegen/box/operatorConventions/assignToDotQualifiedWithSideEffect.kt");
}
@Test
@TestMetadata("assignmentOperations.kt")
public void testAssignmentOperations() throws Exception {
@@ -27771,6 +27777,12 @@ public class NativeCodegenBoxTestNoPLGenerated extends AbstractNativeCodegenBoxT
runTest("compiler/testData/codegen/box/operatorConventions/plusExplicit.kt");
}
@Test
@TestMetadata("reassignmentLhsCaching.kt")
public void testReassignmentLhsCaching() throws Exception {
runTest("compiler/testData/codegen/box/operatorConventions/reassignmentLhsCaching.kt");
}
@Test
@TestMetadata("remAssignmentOperation.kt")
public void testRemAssignmentOperation() throws Exception {
@@ -24411,6 +24411,12 @@ public class FirWasmCodegenBoxTestGenerated extends AbstractFirWasmCodegenBoxTes
runTest("compiler/testData/codegen/box/operatorConventions/annotatedAssignment.kt");
}
@Test
@TestMetadata("assignToDotQualifiedWithSideEffect.kt")
public void testAssignToDotQualifiedWithSideEffect() throws Exception {
runTest("compiler/testData/codegen/box/operatorConventions/assignToDotQualifiedWithSideEffect.kt");
}
@Test
@TestMetadata("assignmentOperations.kt")
public void testAssignmentOperations() throws Exception {
@@ -24537,6 +24543,12 @@ public class FirWasmCodegenBoxTestGenerated extends AbstractFirWasmCodegenBoxTes
runTest("compiler/testData/codegen/box/operatorConventions/plusExplicit.kt");
}
@Test
@TestMetadata("reassignmentLhsCaching.kt")
public void testReassignmentLhsCaching() throws Exception {
runTest("compiler/testData/codegen/box/operatorConventions/reassignmentLhsCaching.kt");
}
@Test
@TestMetadata("remAssignmentOperation.kt")
public void testRemAssignmentOperation() throws Exception {
@@ -24411,6 +24411,12 @@ public class K1WasmCodegenBoxTestGenerated extends AbstractK1WasmCodegenBoxTest
runTest("compiler/testData/codegen/box/operatorConventions/annotatedAssignment.kt");
}
@Test
@TestMetadata("assignToDotQualifiedWithSideEffect.kt")
public void testAssignToDotQualifiedWithSideEffect() throws Exception {
runTest("compiler/testData/codegen/box/operatorConventions/assignToDotQualifiedWithSideEffect.kt");
}
@Test
@TestMetadata("assignmentOperations.kt")
public void testAssignmentOperations() throws Exception {
@@ -24537,6 +24543,12 @@ public class K1WasmCodegenBoxTestGenerated extends AbstractK1WasmCodegenBoxTest
runTest("compiler/testData/codegen/box/operatorConventions/plusExplicit.kt");
}
@Test
@TestMetadata("reassignmentLhsCaching.kt")
public void testReassignmentLhsCaching() throws Exception {
runTest("compiler/testData/codegen/box/operatorConventions/reassignmentLhsCaching.kt");
}
@Test
@TestMetadata("remAssignmentOperation.kt")
public void testRemAssignmentOperation() throws Exception {