[FIR] Capture receiver for pre/postfix dec/increment of qualified access
This prevents double-evaluation of the receiver expression, which may have side-effects. E.g.: a.b++
This commit is contained in:
committed by
Mikhail Glukhikh
parent
393189db8d
commit
f55ff8eb1b
+14
-1
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.fir.lightTree.converter
|
|||||||
|
|
||||||
import com.intellij.lang.LighterASTNode
|
import com.intellij.lang.LighterASTNode
|
||||||
import com.intellij.openapi.util.Ref
|
import com.intellij.openapi.util.Ref
|
||||||
|
import com.intellij.psi.TokenType
|
||||||
import com.intellij.psi.tree.IElementType
|
import com.intellij.psi.tree.IElementType
|
||||||
import com.intellij.util.diff.FlyweightCapableTreeStructure
|
import com.intellij.util.diff.FlyweightCapableTreeStructure
|
||||||
import org.jetbrains.kotlin.KtNodeTypes
|
import org.jetbrains.kotlin.KtNodeTypes
|
||||||
@@ -81,13 +82,25 @@ open class BaseConverter(
|
|||||||
return this.getChildNodesByType(type).firstOrNull()
|
return this.getChildNodesByType(type).firstOrNull()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override val LighterASTNode?.receiverExpression: LighterASTNode?
|
||||||
|
get() {
|
||||||
|
var candidate: LighterASTNode? = null
|
||||||
|
this?.forEachChildren {
|
||||||
|
when (it.tokenType) {
|
||||||
|
DOT, SAFE_ACCESS -> return if (candidate?.elementType != TokenType.ERROR_ELEMENT) candidate else null
|
||||||
|
else -> candidate = it
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
||||||
override val LighterASTNode?.selectorExpression: LighterASTNode?
|
override val LighterASTNode?.selectorExpression: LighterASTNode?
|
||||||
get() {
|
get() {
|
||||||
var isSelector = false
|
var isSelector = false
|
||||||
this?.forEachChildren {
|
this?.forEachChildren {
|
||||||
when (it.tokenType) {
|
when (it.tokenType) {
|
||||||
DOT, SAFE_ACCESS -> isSelector = true
|
DOT, SAFE_ACCESS -> isSelector = true
|
||||||
else -> if (isSelector) return it
|
else -> if (isSelector) return if (it.elementType != TokenType.ERROR_ELEMENT) it else null
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return null
|
return null
|
||||||
|
|||||||
@@ -122,6 +122,9 @@ class RawFirBuilder(
|
|||||||
return (this as KtAnnotatedExpression).baseExpression
|
return (this as KtAnnotatedExpression).baseExpression
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override val PsiElement?.receiverExpression: PsiElement?
|
||||||
|
get() = (this as? KtQualifiedExpression)?.receiverExpression
|
||||||
|
|
||||||
override val PsiElement?.selectorExpression: PsiElement?
|
override val PsiElement?.selectorExpression: PsiElement?
|
||||||
get() = (this as? KtQualifiedExpression)?.selectorExpression
|
get() = (this as? KtQualifiedExpression)?.selectorExpression
|
||||||
|
|
||||||
|
|||||||
@@ -8,14 +8,12 @@ FILE: unary.kt
|
|||||||
}
|
}
|
||||||
|
|
||||||
lval x2: <implicit> = {
|
lval x2: <implicit> = {
|
||||||
lval <unary>: <implicit> = x#
|
x# = x#.inc#()
|
||||||
x# = R|<local>/<unary>|.inc#()
|
|
||||||
x#
|
x#
|
||||||
}
|
}
|
||||||
|
|
||||||
lval x3: <implicit> = {
|
lval x3: <implicit> = {
|
||||||
lval <unary>: <implicit> = x#
|
x# = x#.dec#()
|
||||||
x# = R|<local>/<unary>|.dec#()
|
|
||||||
x#
|
x#
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -43,15 +41,16 @@ FILE: unary.kt
|
|||||||
}
|
}
|
||||||
public? final? fun test2(x: X): R|kotlin/Unit| {
|
public? final? fun test2(x: X): R|kotlin/Unit| {
|
||||||
lval x1: <implicit> = {
|
lval x1: <implicit> = {
|
||||||
lval <unary>: <implicit> = x#.i#
|
lval <receiver>: <implicit> = x#
|
||||||
x#.i# = R|<local>/<unary>|.inc#()
|
lval <unary>: <implicit> = R|<local>/<receiver>|.i#
|
||||||
|
R|<local>/<receiver>|.i# = R|<local>/<unary>|.inc#()
|
||||||
R|<local>/<unary>|
|
R|<local>/<unary>|
|
||||||
}
|
}
|
||||||
|
|
||||||
lval x2: <implicit> = {
|
lval x2: <implicit> = {
|
||||||
lval <unary>: <implicit> = x#.i#
|
lval <receiver>: <implicit> = x#
|
||||||
lval <unary-result>: <implicit> = R|<local>/<unary>|.inc#()
|
lval <unary-result>: <implicit> = R|<local>/<receiver>|.i#.inc#()
|
||||||
x#.i# = R|<local>/<unary-result>|
|
R|<local>/<receiver>|.i# = R|<local>/<unary-result>|
|
||||||
R|<local>/<unary-result>|
|
R|<local>/<unary-result>|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -64,8 +63,7 @@ FILE: unary.kt
|
|||||||
}
|
}
|
||||||
|
|
||||||
lval x2: <implicit> = {
|
lval x2: <implicit> = {
|
||||||
lval <unary>: <implicit> = arr#.get#(IntegerLiteral(1))
|
lval <unary-result>: <implicit> = arr#.get#(IntegerLiteral(1)).inc#()
|
||||||
lval <unary-result>: <implicit> = R|<local>/<unary>|.inc#()
|
|
||||||
arr#.set#(IntegerLiteral(1), R|<local>/<unary-result>|)
|
arr#.set#(IntegerLiteral(1), R|<local>/<unary-result>|)
|
||||||
R|<local>/<unary-result>|
|
R|<local>/<unary-result>|
|
||||||
}
|
}
|
||||||
@@ -88,8 +86,7 @@ FILE: unary.kt
|
|||||||
}
|
}
|
||||||
|
|
||||||
lval x2: <implicit> = {
|
lval x2: <implicit> = {
|
||||||
lval <unary>: <implicit> = y#.arr#.get#(IntegerLiteral(1))
|
lval <unary-result>: <implicit> = y#.arr#.get#(IntegerLiteral(1)).inc#()
|
||||||
lval <unary-result>: <implicit> = R|<local>/<unary>|.inc#()
|
|
||||||
y#.arr#.set#(IntegerLiteral(1), R|<local>/<unary-result>|)
|
y#.arr#.set#(IntegerLiteral(1), R|<local>/<unary-result>|)
|
||||||
R|<local>/<unary-result>|
|
R|<local>/<unary-result>|
|
||||||
}
|
}
|
||||||
|
|||||||
+176
-15
@@ -19,10 +19,12 @@ import org.jetbrains.kotlin.fir.expressions.*
|
|||||||
import org.jetbrains.kotlin.fir.expressions.builder.*
|
import org.jetbrains.kotlin.fir.expressions.builder.*
|
||||||
import org.jetbrains.kotlin.fir.references.FirReference
|
import org.jetbrains.kotlin.fir.references.FirReference
|
||||||
import org.jetbrains.kotlin.fir.references.builder.*
|
import org.jetbrains.kotlin.fir.references.builder.*
|
||||||
|
import org.jetbrains.kotlin.fir.references.impl.FirSimpleNamedReference
|
||||||
import org.jetbrains.kotlin.fir.symbols.CallableId
|
import org.jetbrains.kotlin.fir.symbols.CallableId
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.*
|
import org.jetbrains.kotlin.fir.symbols.impl.*
|
||||||
import org.jetbrains.kotlin.fir.types.*
|
import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef
|
||||||
import org.jetbrains.kotlin.fir.types.builder.*
|
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||||
|
import org.jetbrains.kotlin.fir.types.builder.buildResolvedTypeRef
|
||||||
import org.jetbrains.kotlin.fir.types.impl.ConeClassLikeTypeImpl
|
import org.jetbrains.kotlin.fir.types.impl.ConeClassLikeTypeImpl
|
||||||
import org.jetbrains.kotlin.fir.types.impl.ConeTypeParameterTypeImpl
|
import org.jetbrains.kotlin.fir.types.impl.ConeTypeParameterTypeImpl
|
||||||
import org.jetbrains.kotlin.lexer.KtTokens.CLOSING_QUOTE
|
import org.jetbrains.kotlin.lexer.KtTokens.CLOSING_QUOTE
|
||||||
@@ -50,6 +52,7 @@ abstract class BaseFirBuilder<T>(val baseSession: FirSession, val context: Conte
|
|||||||
abstract fun T.getExpressionInParentheses(): T?
|
abstract fun T.getExpressionInParentheses(): T?
|
||||||
abstract fun T.getAnnotatedExpression(): T?
|
abstract fun T.getAnnotatedExpression(): T?
|
||||||
abstract fun T.getChildNodeByType(type: IElementType): T?
|
abstract fun T.getChildNodeByType(type: IElementType): T?
|
||||||
|
abstract val T?.receiverExpression: T?
|
||||||
abstract val T?.selectorExpression: T?
|
abstract val T?.selectorExpression: T?
|
||||||
|
|
||||||
/**** Class name utils ****/
|
/**** Class name utils ****/
|
||||||
@@ -383,14 +386,17 @@ abstract class BaseFirBuilder<T>(val baseSession: FirSession, val context: Conte
|
|||||||
*
|
*
|
||||||
* result:
|
* result:
|
||||||
* {
|
* {
|
||||||
* val <unary> = argument
|
* val <unary-result> = argument.inc()
|
||||||
* argument = <unary>.inc()
|
* argument = <unary-result>
|
||||||
* ^argument
|
* ^<unary-result>
|
||||||
* }
|
* }
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// TODO: Refactor, support receiver capturing in case of a.b
|
// TODO:
|
||||||
|
// 1. Support receiver capturing for `array.b++` (elementType == ARRAY_ACCESS_EXPRESSION).
|
||||||
|
// 2. Support receiver capturing for `a?.b++` (elementType == SAFE_ACCESS_EXPRESSION).
|
||||||
|
// 3. Add box test cases for #1 and #2 where receiver expression has side effects.
|
||||||
fun generateIncrementOrDecrementBlock(
|
fun generateIncrementOrDecrementBlock(
|
||||||
baseExpression: T,
|
baseExpression: T,
|
||||||
operationReference: T?,
|
operationReference: T?,
|
||||||
@@ -405,31 +411,67 @@ abstract class BaseFirBuilder<T>(val baseSession: FirSession, val context: Conte
|
|||||||
diagnostic = ConeSimpleDiagnostic("Inc/dec without operand", DiagnosticKind.Syntax)
|
diagnostic = ConeSimpleDiagnostic("Inc/dec without operand", DiagnosticKind.Syntax)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (argument.elementType == PARENTHESIZED) {
|
||||||
|
return generateIncrementOrDecrementBlock(
|
||||||
|
baseExpression,
|
||||||
|
operationReference,
|
||||||
|
argument.getExpressionInParentheses(),
|
||||||
|
callName,
|
||||||
|
prefix,
|
||||||
|
convert
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (argument.elementType == DOT_QUALIFIED_EXPRESSION) {
|
||||||
|
return generateIncrementOrDecrementBlockForQualifiedAccess(
|
||||||
|
baseExpression,
|
||||||
|
operationReference,
|
||||||
|
argument,
|
||||||
|
callName,
|
||||||
|
prefix,
|
||||||
|
convert
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
return buildBlock {
|
return buildBlock {
|
||||||
val baseSource = baseExpression?.toFirSourceElement()
|
val baseSource = baseExpression?.toFirSourceElement()
|
||||||
val desugaredSource = baseSource?.fakeElement(FirFakeSourceElementKind.DesugaredIncrementOrDecrement)
|
val desugaredSource = baseSource?.fakeElement(FirFakeSourceElementKind.DesugaredIncrementOrDecrement)
|
||||||
source = desugaredSource
|
source = desugaredSource
|
||||||
val tempName = Name.special("<unary>")
|
|
||||||
val temporaryVariable = generateTemporaryVariable(
|
// initialValueVar is only used for postfix increment/decrement (stores the argument value before increment/decrement).
|
||||||
|
val initialValueVar = generateTemporaryVariable(
|
||||||
this@BaseFirBuilder.baseSession,
|
this@BaseFirBuilder.baseSession,
|
||||||
desugaredSource,
|
desugaredSource,
|
||||||
tempName,
|
Name.special("<unary>"),
|
||||||
argument.convert()
|
argument.convert()
|
||||||
)
|
)
|
||||||
statements += temporaryVariable
|
|
||||||
val resultName = Name.special("<unary-result>")
|
// resultInitializer is the expression for `argument.inc()`
|
||||||
val resultInitializer = buildFunctionCall {
|
val resultInitializer = buildFunctionCall {
|
||||||
source = desugaredSource
|
source = desugaredSource
|
||||||
calleeReference = buildSimpleNamedReference {
|
calleeReference = buildSimpleNamedReference {
|
||||||
source = operationReference?.toFirSourceElement()
|
source = operationReference?.toFirSourceElement()
|
||||||
name = callName
|
name = callName
|
||||||
}
|
}
|
||||||
explicitReceiver = generateResolvedAccessExpression(desugaredSource, temporaryVariable)
|
explicitReceiver = if (prefix) {
|
||||||
|
argument.convert()
|
||||||
|
} else {
|
||||||
|
generateResolvedAccessExpression(desugaredSource, initialValueVar)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
val resultVar = generateTemporaryVariable(this@BaseFirBuilder.baseSession, desugaredSource, resultName, resultInitializer)
|
|
||||||
|
// resultVar is only used for prefix increment/decrement.
|
||||||
|
val resultVar = generateTemporaryVariable(
|
||||||
|
this@BaseFirBuilder.baseSession,
|
||||||
|
desugaredSource,
|
||||||
|
Name.special("<unary-result>"),
|
||||||
|
resultInitializer
|
||||||
|
)
|
||||||
|
|
||||||
val assignment = argument.generateAssignment(
|
val assignment = argument.generateAssignment(
|
||||||
desugaredSource,
|
desugaredSource,
|
||||||
argument,
|
null,
|
||||||
if (prefix && argument.elementType != REFERENCE_EXPRESSION)
|
if (prefix && argument.elementType != REFERENCE_EXPRESSION)
|
||||||
generateResolvedAccessExpression(source, resultVar)
|
generateResolvedAccessExpression(source, resultVar)
|
||||||
else
|
else
|
||||||
@@ -455,8 +497,127 @@ abstract class BaseFirBuilder<T>(val baseSession: FirSession, val context: Conte
|
|||||||
statements += generateAccessExpression(desugaredSource, argument.getReferencedNameAsName())
|
statements += generateAccessExpression(desugaredSource, argument.getReferencedNameAsName())
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
statements += initialValueVar
|
||||||
appendAssignment()
|
appendAssignment()
|
||||||
statements += generateResolvedAccessExpression(desugaredSource, temporaryVariable)
|
statements += generateResolvedAccessExpression(desugaredSource, initialValueVar)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* given:
|
||||||
|
* a.b++
|
||||||
|
*
|
||||||
|
* result:
|
||||||
|
* {
|
||||||
|
* val <receiver> = a
|
||||||
|
* val <unary> = <receiver>.b
|
||||||
|
* <receiver>.b = <unary>.inc()
|
||||||
|
* ^<unary>
|
||||||
|
* }
|
||||||
|
*
|
||||||
|
* given:
|
||||||
|
* ++a.b
|
||||||
|
*
|
||||||
|
* result:
|
||||||
|
* {
|
||||||
|
* val <receiver> = a
|
||||||
|
* val <unary-result> = <receiver>.b.inc()
|
||||||
|
* <receiver>.b = <unary-result>
|
||||||
|
* ^<unary-result>
|
||||||
|
* }
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private fun generateIncrementOrDecrementBlockForQualifiedAccess(
|
||||||
|
baseExpression: T,
|
||||||
|
operationReference: T?,
|
||||||
|
argument: T,
|
||||||
|
callName: Name,
|
||||||
|
prefix: Boolean,
|
||||||
|
convert: T.() -> FirExpression
|
||||||
|
): FirExpression {
|
||||||
|
return buildBlock {
|
||||||
|
val baseSource = baseExpression?.toFirSourceElement()
|
||||||
|
val desugaredSource = baseSource?.fakeElement(FirFakeSourceElementKind.DesugaredIncrementOrDecrement)
|
||||||
|
source = desugaredSource
|
||||||
|
|
||||||
|
val argumentReceiver = argument.receiverExpression
|
||||||
|
val argumentSelector = argument.selectorExpression
|
||||||
|
|
||||||
|
val argumentReceiverVariable = generateTemporaryVariable(
|
||||||
|
this@BaseFirBuilder.baseSession,
|
||||||
|
argumentReceiver?.toFirSourceElement(),
|
||||||
|
Name.special("<receiver>"),
|
||||||
|
argumentReceiver?.convert() ?: buildErrorExpression {
|
||||||
|
source = argument.toFirSourceElement()
|
||||||
|
diagnostic = ConeSimpleDiagnostic("Qualified expression without receiver", DiagnosticKind.Syntax)
|
||||||
|
}
|
||||||
|
).also { statements += it }
|
||||||
|
|
||||||
|
val firArgument = generateResolvedAccessExpression(argumentReceiverVariable.source, argumentReceiverVariable).let { receiver ->
|
||||||
|
val firArgumentSelector = argumentSelector?.convert() ?: buildErrorExpression {
|
||||||
|
source = argument.toFirSourceElement()
|
||||||
|
diagnostic = ConeSimpleDiagnostic("Qualified expression without selector", DiagnosticKind.Syntax)
|
||||||
|
}
|
||||||
|
firArgumentSelector.also { if (it is FirQualifiedAccessExpression) it.replaceExplicitReceiver(receiver) }
|
||||||
|
}
|
||||||
|
|
||||||
|
// initialValueVar is only used for postfix increment/decrement (stores the argument value before increment/decrement).
|
||||||
|
val initialValueVar = generateTemporaryVariable(
|
||||||
|
this@BaseFirBuilder.baseSession,
|
||||||
|
desugaredSource,
|
||||||
|
Name.special("<unary>"),
|
||||||
|
firArgument
|
||||||
|
)
|
||||||
|
|
||||||
|
// resultInitializer is the expression for `argument.inc()`
|
||||||
|
val resultInitializer = buildFunctionCall {
|
||||||
|
source = desugaredSource
|
||||||
|
calleeReference = buildSimpleNamedReference {
|
||||||
|
source = operationReference?.toFirSourceElement()
|
||||||
|
name = callName
|
||||||
|
}
|
||||||
|
explicitReceiver = if (prefix) {
|
||||||
|
firArgument
|
||||||
|
} else {
|
||||||
|
generateResolvedAccessExpression(desugaredSource, initialValueVar)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// resultVar is only used for prefix increment/decrement.
|
||||||
|
val resultVar = generateTemporaryVariable(
|
||||||
|
this@BaseFirBuilder.baseSession,
|
||||||
|
desugaredSource,
|
||||||
|
Name.special("<unary-result>"),
|
||||||
|
resultInitializer
|
||||||
|
)
|
||||||
|
|
||||||
|
fun appendAssignment() {
|
||||||
|
if (firArgument is FirQualifiedAccessExpression) {
|
||||||
|
statements += buildVariableAssignment {
|
||||||
|
source = desugaredSource
|
||||||
|
rValue = if (prefix) {
|
||||||
|
generateResolvedAccessExpression(source, resultVar)
|
||||||
|
} else {
|
||||||
|
resultInitializer
|
||||||
|
}
|
||||||
|
explicitReceiver = generateResolvedAccessExpression(argumentReceiverVariable.source, argumentReceiverVariable)
|
||||||
|
calleeReference = buildSimpleNamedReference {
|
||||||
|
source = firArgument.calleeReference.source
|
||||||
|
name = (firArgument.calleeReference as FirSimpleNamedReference).name
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (prefix) {
|
||||||
|
statements += resultVar
|
||||||
|
appendAssignment()
|
||||||
|
statements += generateResolvedAccessExpression(desugaredSource, resultVar)
|
||||||
|
} else {
|
||||||
|
statements += initialValueVar
|
||||||
|
appendAssignment()
|
||||||
|
statements += generateResolvedAccessExpression(desugaredSource, initialValueVar)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
// IGNORE_BACKEND_FIR: JVM_IR
|
|
||||||
// TARGET_BACKEND: JVM
|
// TARGET_BACKEND: JVM
|
||||||
|
|
||||||
// WITH_RUNTIME
|
// WITH_RUNTIME
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
// IGNORE_BACKEND_FIR: JVM_IR
|
|
||||||
// TARGET_BACKEND: JVM
|
// TARGET_BACKEND: JVM
|
||||||
|
|
||||||
// WITH_RUNTIME
|
// WITH_RUNTIME
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
// IGNORE_BACKEND_FIR: JVM_IR
|
|
||||||
var holder = ""
|
var holder = ""
|
||||||
var globalA: A = A(-1)
|
var globalA: A = A(-1)
|
||||||
get(): A {
|
get(): A {
|
||||||
|
|||||||
@@ -106,22 +106,18 @@ FILE fqName:<root> fileName:/breakContinueInLoopHeader.kt
|
|||||||
WHILE label=Outer origin=WHILE_LOOP
|
WHILE label=Outer origin=WHILE_LOOP
|
||||||
condition: CONST Boolean type=kotlin.Boolean value=true
|
condition: CONST Boolean type=kotlin.Boolean value=true
|
||||||
body: BLOCK type=kotlin.Unit origin=WHILE_LOOP
|
body: BLOCK type=kotlin.Unit origin=WHILE_LOOP
|
||||||
VAR IR_TEMPORARY_VARIABLE name:tmp_6 type:kotlin.Int [val]
|
|
||||||
GET_VAR 'var i: kotlin.Int [var] declared in <root>.test5' type=kotlin.Int origin=null
|
|
||||||
SET_VAR 'var i: kotlin.Int [var] declared in <root>.test5' type=kotlin.Unit origin=EQ
|
SET_VAR 'var i: kotlin.Int [var] declared in <root>.test5' type=kotlin.Unit origin=EQ
|
||||||
CALL 'public final fun inc (): kotlin.Int [operator] declared in kotlin.Int' type=kotlin.Int origin=null
|
CALL 'public final fun inc (): kotlin.Int [operator] declared in kotlin.Int' type=kotlin.Int origin=null
|
||||||
$this: GET_VAR 'val tmp_6: kotlin.Int [val] declared in <root>.test5' type=kotlin.Int origin=null
|
$this: GET_VAR 'var i: kotlin.Int [var] declared in <root>.test5' type=kotlin.Int origin=null
|
||||||
TYPE_OP type=kotlin.Unit origin=IMPLICIT_COERCION_TO_UNIT typeOperand=kotlin.Unit
|
TYPE_OP type=kotlin.Unit origin=IMPLICIT_COERCION_TO_UNIT typeOperand=kotlin.Unit
|
||||||
GET_VAR 'var i: kotlin.Int [var] declared in <root>.test5' type=kotlin.Int origin=null
|
GET_VAR 'var i: kotlin.Int [var] declared in <root>.test5' type=kotlin.Int origin=null
|
||||||
VAR name:j type:kotlin.Int [var]
|
VAR name:j type:kotlin.Int [var]
|
||||||
CONST Int type=kotlin.Int value=0
|
CONST Int type=kotlin.Int value=0
|
||||||
DO_WHILE label=Inner origin=DO_WHILE_LOOP
|
DO_WHILE label=Inner origin=DO_WHILE_LOOP
|
||||||
body: COMPOSITE type=kotlin.Int origin=DO_WHILE_LOOP
|
body: COMPOSITE type=kotlin.Int origin=DO_WHILE_LOOP
|
||||||
VAR IR_TEMPORARY_VARIABLE name:tmp_7 type:kotlin.Int [val]
|
|
||||||
GET_VAR 'var j: kotlin.Int [var] declared in <root>.test5' type=kotlin.Int origin=null
|
|
||||||
SET_VAR 'var j: kotlin.Int [var] declared in <root>.test5' type=kotlin.Unit origin=EQ
|
SET_VAR 'var j: kotlin.Int [var] declared in <root>.test5' type=kotlin.Unit origin=EQ
|
||||||
CALL 'public final fun inc (): kotlin.Int [operator] declared in kotlin.Int' type=kotlin.Int origin=null
|
CALL 'public final fun inc (): kotlin.Int [operator] declared in kotlin.Int' type=kotlin.Int origin=null
|
||||||
$this: GET_VAR 'val tmp_7: kotlin.Int [val] declared in <root>.test5' type=kotlin.Int origin=null
|
$this: GET_VAR 'var j: kotlin.Int [var] declared in <root>.test5' type=kotlin.Int origin=null
|
||||||
GET_VAR 'var j: kotlin.Int [var] declared in <root>.test5' type=kotlin.Int origin=null
|
GET_VAR 'var j: kotlin.Int [var] declared in <root>.test5' type=kotlin.Int origin=null
|
||||||
condition: WHEN type=kotlin.Boolean origin=IF
|
condition: WHEN type=kotlin.Boolean origin=IF
|
||||||
BRANCH
|
BRANCH
|
||||||
|
|||||||
@@ -109,11 +109,9 @@ FILE fqName:<root> fileName:/breakContinueInWhen.kt
|
|||||||
CONST String type=kotlin.String value=""
|
CONST String type=kotlin.String value=""
|
||||||
DO_WHILE label=null origin=DO_WHILE_LOOP
|
DO_WHILE label=null origin=DO_WHILE_LOOP
|
||||||
body: COMPOSITE type=kotlin.Unit origin=DO_WHILE_LOOP
|
body: COMPOSITE type=kotlin.Unit origin=DO_WHILE_LOOP
|
||||||
VAR IR_TEMPORARY_VARIABLE name:tmp_2 type:kotlin.Int [val]
|
|
||||||
GET_VAR 'var k: kotlin.Int [var] declared in <root>.testContinueDoWhile' type=kotlin.Int origin=null
|
|
||||||
SET_VAR 'var k: kotlin.Int [var] declared in <root>.testContinueDoWhile' type=kotlin.Unit origin=EQ
|
SET_VAR 'var k: kotlin.Int [var] declared in <root>.testContinueDoWhile' type=kotlin.Unit origin=EQ
|
||||||
CALL 'public final fun inc (): kotlin.Int [operator] declared in kotlin.Int' type=kotlin.Int origin=null
|
CALL 'public final fun inc (): kotlin.Int [operator] declared in kotlin.Int' type=kotlin.Int origin=null
|
||||||
$this: GET_VAR 'val tmp_2: kotlin.Int [val] declared in <root>.testContinueDoWhile' type=kotlin.Int origin=null
|
$this: GET_VAR 'var k: kotlin.Int [var] declared in <root>.testContinueDoWhile' type=kotlin.Int origin=null
|
||||||
TYPE_OP type=kotlin.Unit origin=IMPLICIT_COERCION_TO_UNIT typeOperand=kotlin.Unit
|
TYPE_OP type=kotlin.Unit origin=IMPLICIT_COERCION_TO_UNIT typeOperand=kotlin.Unit
|
||||||
GET_VAR 'var k: kotlin.Int [var] declared in <root>.testContinueDoWhile' type=kotlin.Int origin=null
|
GET_VAR 'var k: kotlin.Int [var] declared in <root>.testContinueDoWhile' type=kotlin.Int origin=null
|
||||||
WHEN type=kotlin.Unit origin=WHEN
|
WHEN type=kotlin.Unit origin=WHEN
|
||||||
|
|||||||
+26
-20
@@ -143,33 +143,39 @@ FILE fqName:<root> fileName:/complexAugmentedAssignment.kt
|
|||||||
GET_VAR 'val tmp_0: kotlin.Int [val] declared in <root>.test1' type=kotlin.Int origin=null
|
GET_VAR 'val tmp_0: kotlin.Int [val] declared in <root>.test1' type=kotlin.Int origin=null
|
||||||
FUN name:test2 visibility:public modality:FINAL <> () returnType:kotlin.Unit
|
FUN name:test2 visibility:public modality:FINAL <> () returnType:kotlin.Unit
|
||||||
BLOCK_BODY
|
BLOCK_BODY
|
||||||
VAR IR_TEMPORARY_VARIABLE name:tmp_3 type:kotlin.Int [val]
|
VAR IR_TEMPORARY_VARIABLE name:tmp_3 type:<root>.X1 [val]
|
||||||
CALL 'public final fun <get-x1> (): kotlin.Int declared in <root>.X1' type=kotlin.Int origin=GET_PROPERTY
|
GET_OBJECT 'CLASS OBJECT name:X1 modality:FINAL visibility:public superTypes:[kotlin.Any]' type=<root>.X1
|
||||||
$this: GET_OBJECT 'CLASS OBJECT name:X1 modality:FINAL visibility:public superTypes:[kotlin.Any]' type=<root>.X1
|
|
||||||
CALL 'public final fun <set-x1> (<set-?>: kotlin.Int): kotlin.Unit declared in <root>.X1' type=kotlin.Unit origin=EQ
|
|
||||||
$this: GET_OBJECT 'CLASS OBJECT name:X1 modality:FINAL visibility:public superTypes:[kotlin.Any]' type=<root>.X1
|
|
||||||
<set-?>: CALL 'public final fun inc (): kotlin.Int [operator] declared in kotlin.Int' type=kotlin.Int origin=null
|
|
||||||
$this: GET_VAR 'val tmp_3: kotlin.Int [val] declared in <root>.test2' type=kotlin.Int origin=null
|
|
||||||
TYPE_OP type=kotlin.Unit origin=IMPLICIT_COERCION_TO_UNIT typeOperand=kotlin.Unit
|
|
||||||
GET_VAR 'val tmp_3: kotlin.Int [val] declared in <root>.test2' type=kotlin.Int origin=null
|
|
||||||
VAR IR_TEMPORARY_VARIABLE name:tmp_4 type:kotlin.Int [val]
|
VAR IR_TEMPORARY_VARIABLE name:tmp_4 type:kotlin.Int [val]
|
||||||
CALL 'public final fun <get-x2> (): kotlin.Int declared in <root>.X1.X2' type=kotlin.Int origin=GET_PROPERTY
|
CALL 'public final fun <get-x1> (): kotlin.Int declared in <root>.X1' type=kotlin.Int origin=GET_PROPERTY
|
||||||
$this: GET_OBJECT 'CLASS OBJECT name:X2 modality:FINAL visibility:public superTypes:[kotlin.Any]' type=<root>.X1.X2
|
$this: GET_VAR 'val tmp_3: <root>.X1 [val] declared in <root>.test2' type=<root>.X1 origin=null
|
||||||
CALL 'public final fun <set-x2> (<set-?>: kotlin.Int): kotlin.Unit declared in <root>.X1.X2' type=kotlin.Unit origin=EQ
|
CALL 'public final fun <set-x1> (<set-?>: kotlin.Int): kotlin.Unit declared in <root>.X1' type=kotlin.Unit origin=EQ
|
||||||
$this: GET_OBJECT 'CLASS OBJECT name:X2 modality:FINAL visibility:public superTypes:[kotlin.Any]' type=<root>.X1.X2
|
$this: GET_VAR 'val tmp_3: <root>.X1 [val] declared in <root>.test2' type=<root>.X1 origin=null
|
||||||
<set-?>: CALL 'public final fun inc (): kotlin.Int [operator] declared in kotlin.Int' type=kotlin.Int origin=null
|
<set-?>: CALL 'public final fun inc (): kotlin.Int [operator] declared in kotlin.Int' type=kotlin.Int origin=null
|
||||||
$this: GET_VAR 'val tmp_4: kotlin.Int [val] declared in <root>.test2' type=kotlin.Int origin=null
|
$this: GET_VAR 'val tmp_4: kotlin.Int [val] declared in <root>.test2' type=kotlin.Int origin=null
|
||||||
TYPE_OP type=kotlin.Unit origin=IMPLICIT_COERCION_TO_UNIT typeOperand=kotlin.Unit
|
TYPE_OP type=kotlin.Unit origin=IMPLICIT_COERCION_TO_UNIT typeOperand=kotlin.Unit
|
||||||
GET_VAR 'val tmp_4: kotlin.Int [val] declared in <root>.test2' type=kotlin.Int origin=null
|
GET_VAR 'val tmp_4: kotlin.Int [val] declared in <root>.test2' type=kotlin.Int origin=null
|
||||||
VAR IR_TEMPORARY_VARIABLE name:tmp_5 type:kotlin.Int [val]
|
VAR IR_TEMPORARY_VARIABLE name:tmp_5 type:<root>.X1.X2 [val]
|
||||||
CALL 'public final fun <get-x3> (): kotlin.Int declared in <root>.X1.X2.X3' type=kotlin.Int origin=GET_PROPERTY
|
GET_OBJECT 'CLASS OBJECT name:X2 modality:FINAL visibility:public superTypes:[kotlin.Any]' type=<root>.X1.X2
|
||||||
$this: GET_OBJECT 'CLASS OBJECT name:X3 modality:FINAL visibility:public superTypes:[kotlin.Any]' type=<root>.X1.X2.X3
|
VAR IR_TEMPORARY_VARIABLE name:tmp_6 type:kotlin.Int [val]
|
||||||
CALL 'public final fun <set-x3> (<set-?>: kotlin.Int): kotlin.Unit declared in <root>.X1.X2.X3' type=kotlin.Unit origin=EQ
|
CALL 'public final fun <get-x2> (): kotlin.Int declared in <root>.X1.X2' type=kotlin.Int origin=GET_PROPERTY
|
||||||
$this: GET_OBJECT 'CLASS OBJECT name:X3 modality:FINAL visibility:public superTypes:[kotlin.Any]' type=<root>.X1.X2.X3
|
$this: GET_VAR 'val tmp_5: <root>.X1.X2 [val] declared in <root>.test2' type=<root>.X1.X2 origin=null
|
||||||
|
CALL 'public final fun <set-x2> (<set-?>: kotlin.Int): kotlin.Unit declared in <root>.X1.X2' type=kotlin.Unit origin=EQ
|
||||||
|
$this: GET_VAR 'val tmp_5: <root>.X1.X2 [val] declared in <root>.test2' type=<root>.X1.X2 origin=null
|
||||||
<set-?>: CALL 'public final fun inc (): kotlin.Int [operator] declared in kotlin.Int' type=kotlin.Int origin=null
|
<set-?>: CALL 'public final fun inc (): kotlin.Int [operator] declared in kotlin.Int' type=kotlin.Int origin=null
|
||||||
$this: GET_VAR 'val tmp_5: kotlin.Int [val] declared in <root>.test2' type=kotlin.Int origin=null
|
$this: GET_VAR 'val tmp_6: kotlin.Int [val] declared in <root>.test2' type=kotlin.Int origin=null
|
||||||
TYPE_OP type=kotlin.Unit origin=IMPLICIT_COERCION_TO_UNIT typeOperand=kotlin.Unit
|
TYPE_OP type=kotlin.Unit origin=IMPLICIT_COERCION_TO_UNIT typeOperand=kotlin.Unit
|
||||||
GET_VAR 'val tmp_5: kotlin.Int [val] declared in <root>.test2' type=kotlin.Int origin=null
|
GET_VAR 'val tmp_6: kotlin.Int [val] declared in <root>.test2' type=kotlin.Int origin=null
|
||||||
|
VAR IR_TEMPORARY_VARIABLE name:tmp_7 type:<root>.X1.X2.X3 [val]
|
||||||
|
GET_OBJECT 'CLASS OBJECT name:X3 modality:FINAL visibility:public superTypes:[kotlin.Any]' type=<root>.X1.X2.X3
|
||||||
|
VAR IR_TEMPORARY_VARIABLE name:tmp_8 type:kotlin.Int [val]
|
||||||
|
CALL 'public final fun <get-x3> (): kotlin.Int declared in <root>.X1.X2.X3' type=kotlin.Int origin=GET_PROPERTY
|
||||||
|
$this: GET_VAR 'val tmp_7: <root>.X1.X2.X3 [val] declared in <root>.test2' type=<root>.X1.X2.X3 origin=null
|
||||||
|
CALL 'public final fun <set-x3> (<set-?>: kotlin.Int): kotlin.Unit declared in <root>.X1.X2.X3' type=kotlin.Unit origin=EQ
|
||||||
|
$this: GET_VAR 'val tmp_7: <root>.X1.X2.X3 [val] declared in <root>.test2' type=<root>.X1.X2.X3 origin=null
|
||||||
|
<set-?>: CALL 'public final fun inc (): kotlin.Int [operator] declared in kotlin.Int' type=kotlin.Int origin=null
|
||||||
|
$this: GET_VAR 'val tmp_8: kotlin.Int [val] declared in <root>.test2' type=kotlin.Int origin=null
|
||||||
|
TYPE_OP type=kotlin.Unit origin=IMPLICIT_COERCION_TO_UNIT typeOperand=kotlin.Unit
|
||||||
|
GET_VAR 'val tmp_8: kotlin.Int [val] declared in <root>.test2' type=kotlin.Int origin=null
|
||||||
CLASS CLASS name:B modality:FINAL visibility:public superTypes:[kotlin.Any]
|
CLASS CLASS name:B modality:FINAL visibility:public superTypes:[kotlin.Any]
|
||||||
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.B
|
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.B
|
||||||
CONSTRUCTOR visibility:public <> (s:kotlin.Int) returnType:<root>.B [primary]
|
CONSTRUCTOR visibility:public <> (s:kotlin.Int) returnType:<root>.B [primary]
|
||||||
|
|||||||
@@ -33,19 +33,15 @@ FILE fqName:<root> fileName:/incrementDecrement.kt
|
|||||||
CONST Int type=kotlin.Int value=0
|
CONST Int type=kotlin.Int value=0
|
||||||
VAR name:x1 type:kotlin.Int [val]
|
VAR name:x1 type:kotlin.Int [val]
|
||||||
BLOCK type=kotlin.Int origin=null
|
BLOCK type=kotlin.Int origin=null
|
||||||
VAR IR_TEMPORARY_VARIABLE name:tmp_0 type:kotlin.Int [val]
|
|
||||||
GET_VAR 'var x: kotlin.Int [var] declared in <root>.testVarPrefix' type=kotlin.Int origin=null
|
|
||||||
SET_VAR 'var x: kotlin.Int [var] declared in <root>.testVarPrefix' type=kotlin.Unit origin=EQ
|
SET_VAR 'var x: kotlin.Int [var] declared in <root>.testVarPrefix' type=kotlin.Unit origin=EQ
|
||||||
CALL 'public final fun inc (): kotlin.Int [operator] declared in kotlin.Int' type=kotlin.Int origin=null
|
CALL 'public final fun inc (): kotlin.Int [operator] declared in kotlin.Int' type=kotlin.Int origin=null
|
||||||
$this: GET_VAR 'val tmp_0: kotlin.Int [val] declared in <root>.testVarPrefix' type=kotlin.Int origin=null
|
$this: GET_VAR 'var x: kotlin.Int [var] declared in <root>.testVarPrefix' type=kotlin.Int origin=null
|
||||||
GET_VAR 'var x: kotlin.Int [var] declared in <root>.testVarPrefix' type=kotlin.Int origin=null
|
GET_VAR 'var x: kotlin.Int [var] declared in <root>.testVarPrefix' type=kotlin.Int origin=null
|
||||||
VAR name:x2 type:kotlin.Int [val]
|
VAR name:x2 type:kotlin.Int [val]
|
||||||
BLOCK type=kotlin.Int origin=null
|
BLOCK type=kotlin.Int origin=null
|
||||||
VAR IR_TEMPORARY_VARIABLE name:tmp_1 type:kotlin.Int [val]
|
|
||||||
GET_VAR 'var x: kotlin.Int [var] declared in <root>.testVarPrefix' type=kotlin.Int origin=null
|
|
||||||
SET_VAR 'var x: kotlin.Int [var] declared in <root>.testVarPrefix' type=kotlin.Unit origin=EQ
|
SET_VAR 'var x: kotlin.Int [var] declared in <root>.testVarPrefix' type=kotlin.Unit origin=EQ
|
||||||
CALL 'public final fun dec (): kotlin.Int [operator] declared in kotlin.Int' type=kotlin.Int origin=null
|
CALL 'public final fun dec (): kotlin.Int [operator] declared in kotlin.Int' type=kotlin.Int origin=null
|
||||||
$this: GET_VAR 'val tmp_1: kotlin.Int [val] declared in <root>.testVarPrefix' type=kotlin.Int origin=null
|
$this: GET_VAR 'var x: kotlin.Int [var] declared in <root>.testVarPrefix' type=kotlin.Int origin=null
|
||||||
GET_VAR 'var x: kotlin.Int [var] declared in <root>.testVarPrefix' type=kotlin.Int origin=null
|
GET_VAR 'var x: kotlin.Int [var] declared in <root>.testVarPrefix' type=kotlin.Int origin=null
|
||||||
FUN name:testVarPostfix visibility:public modality:FINAL <> () returnType:kotlin.Unit
|
FUN name:testVarPostfix visibility:public modality:FINAL <> () returnType:kotlin.Unit
|
||||||
BLOCK_BODY
|
BLOCK_BODY
|
||||||
@@ -53,91 +49,81 @@ FILE fqName:<root> fileName:/incrementDecrement.kt
|
|||||||
CONST Int type=kotlin.Int value=0
|
CONST Int type=kotlin.Int value=0
|
||||||
VAR name:x1 type:kotlin.Int [val]
|
VAR name:x1 type:kotlin.Int [val]
|
||||||
BLOCK type=kotlin.Int origin=null
|
BLOCK type=kotlin.Int origin=null
|
||||||
VAR IR_TEMPORARY_VARIABLE name:tmp_2 type:kotlin.Int [val]
|
VAR IR_TEMPORARY_VARIABLE name:tmp_0 type:kotlin.Int [val]
|
||||||
GET_VAR 'var x: kotlin.Int [var] declared in <root>.testVarPostfix' type=kotlin.Int origin=null
|
GET_VAR 'var x: kotlin.Int [var] declared in <root>.testVarPostfix' type=kotlin.Int origin=null
|
||||||
SET_VAR 'var x: kotlin.Int [var] declared in <root>.testVarPostfix' type=kotlin.Unit origin=EQ
|
SET_VAR 'var x: kotlin.Int [var] declared in <root>.testVarPostfix' type=kotlin.Unit origin=EQ
|
||||||
CALL 'public final fun inc (): kotlin.Int [operator] declared in kotlin.Int' type=kotlin.Int origin=null
|
CALL 'public final fun inc (): kotlin.Int [operator] declared in kotlin.Int' type=kotlin.Int origin=null
|
||||||
$this: GET_VAR 'val tmp_2: kotlin.Int [val] declared in <root>.testVarPostfix' type=kotlin.Int origin=null
|
$this: GET_VAR 'val tmp_0: kotlin.Int [val] declared in <root>.testVarPostfix' type=kotlin.Int origin=null
|
||||||
GET_VAR 'val tmp_2: kotlin.Int [val] declared in <root>.testVarPostfix' type=kotlin.Int origin=null
|
GET_VAR 'val tmp_0: kotlin.Int [val] declared in <root>.testVarPostfix' type=kotlin.Int origin=null
|
||||||
VAR name:x2 type:kotlin.Int [val]
|
VAR name:x2 type:kotlin.Int [val]
|
||||||
BLOCK type=kotlin.Int origin=null
|
BLOCK type=kotlin.Int origin=null
|
||||||
VAR IR_TEMPORARY_VARIABLE name:tmp_3 type:kotlin.Int [val]
|
VAR IR_TEMPORARY_VARIABLE name:tmp_1 type:kotlin.Int [val]
|
||||||
GET_VAR 'var x: kotlin.Int [var] declared in <root>.testVarPostfix' type=kotlin.Int origin=null
|
GET_VAR 'var x: kotlin.Int [var] declared in <root>.testVarPostfix' type=kotlin.Int origin=null
|
||||||
SET_VAR 'var x: kotlin.Int [var] declared in <root>.testVarPostfix' type=kotlin.Unit origin=EQ
|
SET_VAR 'var x: kotlin.Int [var] declared in <root>.testVarPostfix' type=kotlin.Unit origin=EQ
|
||||||
CALL 'public final fun dec (): kotlin.Int [operator] declared in kotlin.Int' type=kotlin.Int origin=null
|
CALL 'public final fun dec (): kotlin.Int [operator] declared in kotlin.Int' type=kotlin.Int origin=null
|
||||||
$this: GET_VAR 'val tmp_3: kotlin.Int [val] declared in <root>.testVarPostfix' type=kotlin.Int origin=null
|
$this: GET_VAR 'val tmp_1: kotlin.Int [val] declared in <root>.testVarPostfix' type=kotlin.Int origin=null
|
||||||
GET_VAR 'val tmp_3: kotlin.Int [val] declared in <root>.testVarPostfix' type=kotlin.Int origin=null
|
GET_VAR 'val tmp_1: kotlin.Int [val] declared in <root>.testVarPostfix' type=kotlin.Int origin=null
|
||||||
FUN name:testPropPrefix visibility:public modality:FINAL <> () returnType:kotlin.Unit
|
FUN name:testPropPrefix visibility:public modality:FINAL <> () returnType:kotlin.Unit
|
||||||
BLOCK_BODY
|
BLOCK_BODY
|
||||||
VAR name:p1 type:kotlin.Int [val]
|
VAR name:p1 type:kotlin.Int [val]
|
||||||
BLOCK type=kotlin.Int origin=null
|
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 <root>' type=kotlin.Int origin=GET_PROPERTY
|
|
||||||
CALL 'public final fun <set-p> (<set-?>: kotlin.Int): kotlin.Unit declared in <root>' type=kotlin.Unit origin=EQ
|
CALL 'public final fun <set-p> (<set-?>: kotlin.Int): kotlin.Unit declared in <root>' type=kotlin.Unit origin=EQ
|
||||||
<set-?>: CALL 'public final fun inc (): kotlin.Int [operator] declared in kotlin.Int' type=kotlin.Int origin=null
|
<set-?>: CALL 'public final fun inc (): kotlin.Int [operator] declared in kotlin.Int' type=kotlin.Int origin=null
|
||||||
$this: GET_VAR 'val tmp_4: kotlin.Int [val] declared in <root>.testPropPrefix' type=kotlin.Int origin=null
|
$this: CALL 'public final fun <get-p> (): kotlin.Int declared in <root>' type=kotlin.Int origin=GET_PROPERTY
|
||||||
CALL 'public final fun <get-p> (): kotlin.Int declared in <root>' type=kotlin.Int origin=GET_PROPERTY
|
CALL 'public final fun <get-p> (): kotlin.Int declared in <root>' type=kotlin.Int origin=GET_PROPERTY
|
||||||
VAR name:p2 type:kotlin.Int [val]
|
VAR name:p2 type:kotlin.Int [val]
|
||||||
BLOCK type=kotlin.Int origin=null
|
BLOCK type=kotlin.Int origin=null
|
||||||
VAR IR_TEMPORARY_VARIABLE name:tmp_5 type:kotlin.Int [val]
|
|
||||||
CALL 'public final fun <get-p> (): kotlin.Int declared in <root>' type=kotlin.Int origin=GET_PROPERTY
|
|
||||||
CALL 'public final fun <set-p> (<set-?>: kotlin.Int): kotlin.Unit declared in <root>' type=kotlin.Unit origin=EQ
|
CALL 'public final fun <set-p> (<set-?>: kotlin.Int): kotlin.Unit declared in <root>' type=kotlin.Unit origin=EQ
|
||||||
<set-?>: CALL 'public final fun dec (): kotlin.Int [operator] declared in kotlin.Int' type=kotlin.Int origin=null
|
<set-?>: CALL 'public final fun dec (): kotlin.Int [operator] declared in kotlin.Int' type=kotlin.Int origin=null
|
||||||
$this: GET_VAR 'val tmp_5: kotlin.Int [val] declared in <root>.testPropPrefix' type=kotlin.Int origin=null
|
$this: CALL 'public final fun <get-p> (): kotlin.Int declared in <root>' type=kotlin.Int origin=GET_PROPERTY
|
||||||
CALL 'public final fun <get-p> (): kotlin.Int declared in <root>' type=kotlin.Int origin=GET_PROPERTY
|
CALL 'public final fun <get-p> (): kotlin.Int declared in <root>' type=kotlin.Int origin=GET_PROPERTY
|
||||||
FUN name:testPropPostfix visibility:public modality:FINAL <> () returnType:kotlin.Unit
|
FUN name:testPropPostfix visibility:public modality:FINAL <> () returnType:kotlin.Unit
|
||||||
BLOCK_BODY
|
BLOCK_BODY
|
||||||
VAR name:p1 type:kotlin.Int [val]
|
VAR name:p1 type:kotlin.Int [val]
|
||||||
BLOCK type=kotlin.Int origin=null
|
BLOCK type=kotlin.Int origin=null
|
||||||
VAR IR_TEMPORARY_VARIABLE name:tmp_6 type:kotlin.Int [val]
|
VAR IR_TEMPORARY_VARIABLE name:tmp_2 type:kotlin.Int [val]
|
||||||
CALL 'public final fun <get-p> (): kotlin.Int declared in <root>' type=kotlin.Int origin=GET_PROPERTY
|
CALL 'public final fun <get-p> (): kotlin.Int declared in <root>' type=kotlin.Int origin=GET_PROPERTY
|
||||||
CALL 'public final fun <set-p> (<set-?>: kotlin.Int): kotlin.Unit declared in <root>' type=kotlin.Unit origin=EQ
|
CALL 'public final fun <set-p> (<set-?>: kotlin.Int): kotlin.Unit declared in <root>' type=kotlin.Unit origin=EQ
|
||||||
<set-?>: CALL 'public final fun inc (): kotlin.Int [operator] declared in kotlin.Int' type=kotlin.Int origin=null
|
<set-?>: CALL 'public final fun inc (): kotlin.Int [operator] declared in kotlin.Int' type=kotlin.Int origin=null
|
||||||
$this: GET_VAR 'val tmp_6: kotlin.Int [val] declared in <root>.testPropPostfix' type=kotlin.Int origin=null
|
$this: GET_VAR 'val tmp_2: kotlin.Int [val] declared in <root>.testPropPostfix' type=kotlin.Int origin=null
|
||||||
GET_VAR 'val tmp_6: kotlin.Int [val] declared in <root>.testPropPostfix' type=kotlin.Int origin=null
|
GET_VAR 'val tmp_2: kotlin.Int [val] declared in <root>.testPropPostfix' type=kotlin.Int origin=null
|
||||||
VAR name:p2 type:kotlin.Int [val]
|
VAR name:p2 type:kotlin.Int [val]
|
||||||
BLOCK type=kotlin.Int origin=null
|
BLOCK type=kotlin.Int origin=null
|
||||||
VAR IR_TEMPORARY_VARIABLE name:tmp_7 type:kotlin.Int [val]
|
|
||||||
CALL 'public final fun <get-p> (): kotlin.Int declared in <root>' type=kotlin.Int origin=GET_PROPERTY
|
|
||||||
CALL 'public final fun <set-p> (<set-?>: kotlin.Int): kotlin.Unit declared in <root>' type=kotlin.Unit origin=EQ
|
CALL 'public final fun <set-p> (<set-?>: kotlin.Int): kotlin.Unit declared in <root>' type=kotlin.Unit origin=EQ
|
||||||
<set-?>: CALL 'public final fun dec (): kotlin.Int [operator] declared in kotlin.Int' type=kotlin.Int origin=null
|
<set-?>: CALL 'public final fun dec (): kotlin.Int [operator] declared in kotlin.Int' type=kotlin.Int origin=null
|
||||||
$this: GET_VAR 'val tmp_7: kotlin.Int [val] declared in <root>.testPropPostfix' type=kotlin.Int origin=null
|
$this: CALL 'public final fun <get-p> (): kotlin.Int declared in <root>' type=kotlin.Int origin=GET_PROPERTY
|
||||||
CALL 'public final fun <get-p> (): kotlin.Int declared in <root>' type=kotlin.Int origin=GET_PROPERTY
|
CALL 'public final fun <get-p> (): kotlin.Int declared in <root>' type=kotlin.Int origin=GET_PROPERTY
|
||||||
FUN name:testArrayPrefix visibility:public modality:FINAL <> () returnType:kotlin.Unit
|
FUN name:testArrayPrefix visibility:public modality:FINAL <> () returnType:kotlin.Unit
|
||||||
BLOCK_BODY
|
BLOCK_BODY
|
||||||
VAR name:a1 type:kotlin.Int [val]
|
VAR name:a1 type:kotlin.Int [val]
|
||||||
BLOCK type=kotlin.Int origin=null
|
BLOCK type=kotlin.Int origin=null
|
||||||
VAR IR_TEMPORARY_VARIABLE name:tmp_8 type:kotlin.Int [val]
|
VAR IR_TEMPORARY_VARIABLE name:tmp_3 type:kotlin.Int [val]
|
||||||
CALL 'public final fun get (index: kotlin.Int): kotlin.Int [operator] declared in kotlin.IntArray' type=kotlin.Int origin=null
|
|
||||||
$this: CALL 'public final fun <get-arr> (): kotlin.IntArray declared in <root>' type=kotlin.IntArray origin=GET_PROPERTY
|
|
||||||
index: CONST Int type=kotlin.Int value=0
|
|
||||||
VAR IR_TEMPORARY_VARIABLE name:tmp_9 type:kotlin.Int [val]
|
|
||||||
CALL 'public final fun inc (): kotlin.Int [operator] declared in kotlin.Int' type=kotlin.Int origin=null
|
CALL 'public final fun inc (): kotlin.Int [operator] declared in kotlin.Int' type=kotlin.Int origin=null
|
||||||
$this: GET_VAR 'val tmp_8: kotlin.Int [val] declared in <root>.testArrayPrefix' type=kotlin.Int origin=null
|
$this: CALL 'public final fun get (index: kotlin.Int): kotlin.Int [operator] declared in kotlin.IntArray' type=kotlin.Int origin=null
|
||||||
|
$this: CALL 'public final fun <get-arr> (): kotlin.IntArray declared in <root>' type=kotlin.IntArray origin=GET_PROPERTY
|
||||||
|
index: CONST Int type=kotlin.Int value=0
|
||||||
CALL 'public final fun set (index: kotlin.Int, value: kotlin.Int): kotlin.Unit [operator] declared in kotlin.IntArray' type=kotlin.Unit origin=null
|
CALL 'public final fun set (index: kotlin.Int, value: kotlin.Int): kotlin.Unit [operator] declared in kotlin.IntArray' type=kotlin.Unit origin=null
|
||||||
$this: CALL 'public final fun <get-arr> (): kotlin.IntArray declared in <root>' type=kotlin.IntArray origin=GET_PROPERTY
|
$this: CALL 'public final fun <get-arr> (): kotlin.IntArray declared in <root>' type=kotlin.IntArray origin=GET_PROPERTY
|
||||||
index: CONST Int type=kotlin.Int value=0
|
index: CONST Int type=kotlin.Int value=0
|
||||||
value: GET_VAR 'val tmp_9: kotlin.Int [val] declared in <root>.testArrayPrefix' type=kotlin.Int origin=null
|
value: GET_VAR 'val tmp_3: kotlin.Int [val] declared in <root>.testArrayPrefix' type=kotlin.Int origin=null
|
||||||
GET_VAR 'val tmp_9: kotlin.Int [val] declared in <root>.testArrayPrefix' type=kotlin.Int origin=null
|
GET_VAR 'val tmp_3: kotlin.Int [val] declared in <root>.testArrayPrefix' type=kotlin.Int origin=null
|
||||||
VAR name:a2 type:kotlin.Int [val]
|
VAR name:a2 type:kotlin.Int [val]
|
||||||
BLOCK type=kotlin.Int origin=null
|
BLOCK type=kotlin.Int origin=null
|
||||||
VAR IR_TEMPORARY_VARIABLE name:tmp_10 type:kotlin.Int [val]
|
VAR IR_TEMPORARY_VARIABLE name:tmp_4 type:kotlin.Int [val]
|
||||||
CALL 'public final fun get (index: kotlin.Int): kotlin.Int [operator] declared in kotlin.IntArray' type=kotlin.Int origin=null
|
|
||||||
$this: CALL 'public final fun <get-arr> (): kotlin.IntArray declared in <root>' type=kotlin.IntArray origin=GET_PROPERTY
|
|
||||||
index: CONST Int type=kotlin.Int value=0
|
|
||||||
VAR IR_TEMPORARY_VARIABLE name:tmp_11 type:kotlin.Int [val]
|
|
||||||
CALL 'public final fun dec (): kotlin.Int [operator] declared in kotlin.Int' type=kotlin.Int origin=null
|
CALL 'public final fun dec (): kotlin.Int [operator] declared in kotlin.Int' type=kotlin.Int origin=null
|
||||||
$this: GET_VAR 'val tmp_10: kotlin.Int [val] declared in <root>.testArrayPrefix' type=kotlin.Int origin=null
|
$this: CALL 'public final fun get (index: kotlin.Int): kotlin.Int [operator] declared in kotlin.IntArray' type=kotlin.Int origin=null
|
||||||
|
$this: CALL 'public final fun <get-arr> (): kotlin.IntArray declared in <root>' type=kotlin.IntArray origin=GET_PROPERTY
|
||||||
|
index: CONST Int type=kotlin.Int value=0
|
||||||
CALL 'public final fun set (index: kotlin.Int, value: kotlin.Int): kotlin.Unit [operator] declared in kotlin.IntArray' type=kotlin.Unit origin=null
|
CALL 'public final fun set (index: kotlin.Int, value: kotlin.Int): kotlin.Unit [operator] declared in kotlin.IntArray' type=kotlin.Unit origin=null
|
||||||
$this: CALL 'public final fun <get-arr> (): kotlin.IntArray declared in <root>' type=kotlin.IntArray origin=GET_PROPERTY
|
$this: CALL 'public final fun <get-arr> (): kotlin.IntArray declared in <root>' type=kotlin.IntArray origin=GET_PROPERTY
|
||||||
index: CONST Int type=kotlin.Int value=0
|
index: CONST Int type=kotlin.Int value=0
|
||||||
value: GET_VAR 'val tmp_11: kotlin.Int [val] declared in <root>.testArrayPrefix' type=kotlin.Int origin=null
|
value: GET_VAR 'val tmp_4: kotlin.Int [val] declared in <root>.testArrayPrefix' type=kotlin.Int origin=null
|
||||||
GET_VAR 'val tmp_11: kotlin.Int [val] declared in <root>.testArrayPrefix' type=kotlin.Int origin=null
|
GET_VAR 'val tmp_4: kotlin.Int [val] declared in <root>.testArrayPrefix' type=kotlin.Int origin=null
|
||||||
FUN name:testArrayPostfix visibility:public modality:FINAL <> () returnType:kotlin.Unit
|
FUN name:testArrayPostfix visibility:public modality:FINAL <> () returnType:kotlin.Unit
|
||||||
BLOCK_BODY
|
BLOCK_BODY
|
||||||
VAR name:a1 type:kotlin.Int [val]
|
VAR name:a1 type:kotlin.Int [val]
|
||||||
BLOCK type=kotlin.Int origin=null
|
BLOCK type=kotlin.Int origin=null
|
||||||
VAR IR_TEMPORARY_VARIABLE name:tmp_12 type:kotlin.Int [val]
|
VAR IR_TEMPORARY_VARIABLE name:tmp_5 type:kotlin.Int [val]
|
||||||
CALL 'public final fun get (index: kotlin.Int): kotlin.Int [operator] declared in kotlin.IntArray' type=kotlin.Int origin=null
|
CALL 'public final fun get (index: kotlin.Int): kotlin.Int [operator] declared in kotlin.IntArray' type=kotlin.Int origin=null
|
||||||
$this: CALL 'public final fun <get-arr> (): kotlin.IntArray declared in <root>' type=kotlin.IntArray origin=GET_PROPERTY
|
$this: CALL 'public final fun <get-arr> (): kotlin.IntArray declared in <root>' type=kotlin.IntArray origin=GET_PROPERTY
|
||||||
index: CONST Int type=kotlin.Int value=0
|
index: CONST Int type=kotlin.Int value=0
|
||||||
@@ -145,11 +131,11 @@ FILE fqName:<root> fileName:/incrementDecrement.kt
|
|||||||
$this: CALL 'public final fun <get-arr> (): kotlin.IntArray declared in <root>' type=kotlin.IntArray origin=GET_PROPERTY
|
$this: CALL 'public final fun <get-arr> (): kotlin.IntArray declared in <root>' type=kotlin.IntArray origin=GET_PROPERTY
|
||||||
index: CONST Int type=kotlin.Int value=0
|
index: CONST Int type=kotlin.Int value=0
|
||||||
value: CALL 'public final fun inc (): kotlin.Int [operator] declared in kotlin.Int' type=kotlin.Int origin=null
|
value: CALL 'public final fun inc (): kotlin.Int [operator] declared in kotlin.Int' type=kotlin.Int origin=null
|
||||||
$this: GET_VAR 'val tmp_12: kotlin.Int [val] declared in <root>.testArrayPostfix' type=kotlin.Int origin=null
|
$this: GET_VAR 'val tmp_5: kotlin.Int [val] declared in <root>.testArrayPostfix' type=kotlin.Int origin=null
|
||||||
GET_VAR 'val tmp_12: kotlin.Int [val] declared in <root>.testArrayPostfix' type=kotlin.Int origin=null
|
GET_VAR 'val tmp_5: kotlin.Int [val] declared in <root>.testArrayPostfix' type=kotlin.Int origin=null
|
||||||
VAR name:a2 type:kotlin.Int [val]
|
VAR name:a2 type:kotlin.Int [val]
|
||||||
BLOCK type=kotlin.Int origin=null
|
BLOCK type=kotlin.Int origin=null
|
||||||
VAR IR_TEMPORARY_VARIABLE name:tmp_13 type:kotlin.Int [val]
|
VAR IR_TEMPORARY_VARIABLE name:tmp_6 type:kotlin.Int [val]
|
||||||
CALL 'public final fun get (index: kotlin.Int): kotlin.Int [operator] declared in kotlin.IntArray' type=kotlin.Int origin=null
|
CALL 'public final fun get (index: kotlin.Int): kotlin.Int [operator] declared in kotlin.IntArray' type=kotlin.Int origin=null
|
||||||
$this: CALL 'public final fun <get-arr> (): kotlin.IntArray declared in <root>' type=kotlin.IntArray origin=GET_PROPERTY
|
$this: CALL 'public final fun <get-arr> (): kotlin.IntArray declared in <root>' type=kotlin.IntArray origin=GET_PROPERTY
|
||||||
index: CONST Int type=kotlin.Int value=0
|
index: CONST Int type=kotlin.Int value=0
|
||||||
@@ -157,5 +143,5 @@ FILE fqName:<root> fileName:/incrementDecrement.kt
|
|||||||
$this: CALL 'public final fun <get-arr> (): kotlin.IntArray declared in <root>' type=kotlin.IntArray origin=GET_PROPERTY
|
$this: CALL 'public final fun <get-arr> (): kotlin.IntArray declared in <root>' type=kotlin.IntArray origin=GET_PROPERTY
|
||||||
index: CONST Int type=kotlin.Int value=0
|
index: CONST Int type=kotlin.Int value=0
|
||||||
value: CALL 'public final fun dec (): kotlin.Int [operator] declared in kotlin.Int' type=kotlin.Int origin=null
|
value: CALL 'public final fun dec (): kotlin.Int [operator] declared in kotlin.Int' type=kotlin.Int origin=null
|
||||||
$this: GET_VAR 'val tmp_13: kotlin.Int [val] declared in <root>.testArrayPostfix' type=kotlin.Int origin=null
|
$this: GET_VAR 'val tmp_6: kotlin.Int [val] declared in <root>.testArrayPostfix' type=kotlin.Int origin=null
|
||||||
GET_VAR 'val tmp_13: kotlin.Int [val] declared in <root>.testArrayPostfix' type=kotlin.Int origin=null
|
GET_VAR 'val tmp_6: kotlin.Int [val] declared in <root>.testArrayPostfix' type=kotlin.Int origin=null
|
||||||
|
|||||||
+7
-5
@@ -9,15 +9,17 @@ FILE fqName:<root> fileName:/javaSyntheticGenericPropertyAccess.kt
|
|||||||
CALL 'public open fun setFoo (x: kotlin.Int): kotlin.Unit declared in <root>.J' type=kotlin.Unit origin=EQ
|
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
|
$this: GET_VAR 'j: <root>.J<F of <root>.test> declared in <root>.test' type=<root>.J<F of <root>.test> origin=null
|
||||||
x: CONST Int type=kotlin.Int value=1
|
x: CONST Int type=kotlin.Int value=1
|
||||||
VAR IR_TEMPORARY_VARIABLE name:tmp_0 type:kotlin.Int [val]
|
VAR IR_TEMPORARY_VARIABLE name:tmp_0 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
|
||||||
|
VAR IR_TEMPORARY_VARIABLE name:tmp_1 type:kotlin.Int [val]
|
||||||
CALL 'public open fun getFoo (): kotlin.Int declared in <root>.J' type=kotlin.Int origin=GET_PROPERTY
|
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
|
$this: GET_VAR 'val tmp_0: <root>.J<F of <root>.test> [val] 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
|
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
|
$this: GET_VAR 'val tmp_0: <root>.J<F of <root>.test> [val] declared in <root>.test' type=<root>.J<F of <root>.test> origin=null
|
||||||
x: CALL 'public final fun inc (): kotlin.Int [operator] declared in kotlin.Int' type=kotlin.Int origin=null
|
x: CALL 'public final fun inc (): kotlin.Int [operator] declared in kotlin.Int' type=kotlin.Int origin=null
|
||||||
$this: GET_VAR 'val tmp_0: kotlin.Int [val] declared in <root>.test' type=kotlin.Int origin=null
|
$this: GET_VAR 'val tmp_1: kotlin.Int [val] declared in <root>.test' type=kotlin.Int origin=null
|
||||||
TYPE_OP type=kotlin.Unit origin=IMPLICIT_COERCION_TO_UNIT typeOperand=kotlin.Unit
|
TYPE_OP type=kotlin.Unit origin=IMPLICIT_COERCION_TO_UNIT typeOperand=kotlin.Unit
|
||||||
GET_VAR 'val tmp_0: kotlin.Int [val] declared in <root>.test' type=kotlin.Int origin=null
|
GET_VAR 'val tmp_1: kotlin.Int [val] 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
|
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
|
$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 [operator] declared in kotlin.Int' type=kotlin.Int origin=null
|
x: CALL 'public final fun plus (other: kotlin.Int): kotlin.Int [operator] declared in kotlin.Int' type=kotlin.Int origin=null
|
||||||
|
|||||||
+7
-5
@@ -8,15 +8,17 @@ FILE fqName:<root> fileName:/javaSyntheticPropertyAccess.kt
|
|||||||
CALL 'public open fun setFoo (x: kotlin.Int): kotlin.Unit declared in <root>.J' type=kotlin.Unit origin=EQ
|
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
|
$this: GET_VAR 'j: <root>.J declared in <root>.test' type=<root>.J origin=null
|
||||||
x: CONST Int type=kotlin.Int value=1
|
x: CONST Int type=kotlin.Int value=1
|
||||||
VAR IR_TEMPORARY_VARIABLE name:tmp_0 type:kotlin.Int [val]
|
VAR IR_TEMPORARY_VARIABLE name:tmp_0 type:<root>.J [val]
|
||||||
|
GET_VAR 'j: <root>.J declared in <root>.test' type=<root>.J origin=null
|
||||||
|
VAR IR_TEMPORARY_VARIABLE name:tmp_1 type:kotlin.Int [val]
|
||||||
CALL 'public open fun getFoo (): kotlin.Int declared in <root>.J' type=kotlin.Int origin=GET_PROPERTY
|
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
|
$this: GET_VAR 'val tmp_0: <root>.J [val] 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
|
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
|
$this: GET_VAR 'val tmp_0: <root>.J [val] declared in <root>.test' type=<root>.J origin=null
|
||||||
x: CALL 'public final fun inc (): kotlin.Int [operator] declared in kotlin.Int' type=kotlin.Int origin=null
|
x: CALL 'public final fun inc (): kotlin.Int [operator] declared in kotlin.Int' type=kotlin.Int origin=null
|
||||||
$this: GET_VAR 'val tmp_0: kotlin.Int [val] declared in <root>.test' type=kotlin.Int origin=null
|
$this: GET_VAR 'val tmp_1: kotlin.Int [val] declared in <root>.test' type=kotlin.Int origin=null
|
||||||
TYPE_OP type=kotlin.Unit origin=IMPLICIT_COERCION_TO_UNIT typeOperand=kotlin.Unit
|
TYPE_OP type=kotlin.Unit origin=IMPLICIT_COERCION_TO_UNIT typeOperand=kotlin.Unit
|
||||||
GET_VAR 'val tmp_0: kotlin.Int [val] declared in <root>.test' type=kotlin.Int origin=null
|
GET_VAR 'val tmp_1: kotlin.Int [val] 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
|
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
|
$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 [operator] declared in kotlin.Int' type=kotlin.Int origin=null
|
x: CALL 'public final fun plus (other: kotlin.Int): kotlin.Int [operator] declared in kotlin.Int' type=kotlin.Int origin=null
|
||||||
|
|||||||
Reference in New Issue
Block a user