Unary operators.

This commit is contained in:
Dmitry Petrov
2016-08-22 16:05:42 +03:00
committed by Dmitry Petrov
parent 97593fa19e
commit 985f3b20c7
42 changed files with 629 additions and 270 deletions
+4 -4
View File
@@ -7,13 +7,13 @@ IrFile /arrayAssignment.kt
elements: DUMMY vararg type=kotlin.Int
CALL .set type=kotlin.Unit operator=EQ
$this: GET_VAR x type=kotlin.IntArray operator=null
index: LITERAL Int type=kotlin.Int value='1'
value: LITERAL Int type=kotlin.Int value='0'
index: CONST Int type=kotlin.Int value='1'
value: CONST Int type=kotlin.Int value='0'
IrFunction public fun foo(): kotlin.Int
IrExpressionBody
BLOCK type=<no-type> hasResult=false operator=null
RETURN type=<no-type>
LITERAL Int type=kotlin.Int value='1'
CONST Int type=kotlin.Int value='1'
IrFunction public fun test2(): kotlin.Unit
IrExpressionBody
BLOCK type=<no-type> hasResult=false operator=null
@@ -21,4 +21,4 @@ IrFile /arrayAssignment.kt
$this: CALL .intArrayOf type=kotlin.IntArray operator=null
elements: DUMMY vararg type=kotlin.Int
index: CALL .foo type=kotlin.Int operator=null
value: LITERAL Int type=kotlin.Int value='1'
value: CONST Int type=kotlin.Int value='1'
+8 -8
View File
@@ -9,7 +9,7 @@ IrFile /arrayAugmentedAssignment1.kt
IrExpressionBody
BLOCK type=<no-type> hasResult=false operator=null
RETURN type=<no-type>
LITERAL Int type=kotlin.Int value='42'
CONST Int type=kotlin.Int value='42'
IrFunction public fun testVariable(): kotlin.Unit
IrExpressionBody
BLOCK type=<no-type> hasResult=false operator=null
@@ -18,23 +18,23 @@ IrFile /arrayAugmentedAssignment1.kt
BLOCK type=kotlin.Unit hasResult=false operator=PLUSEQ
CALL .set type=kotlin.Unit operator=PLUSEQ
$this: GET_VAR x type=kotlin.IntArray operator=null
index: LITERAL Int type=kotlin.Int value='0'
index: CONST Int type=kotlin.Int value='0'
value: CALL .plus type=kotlin.Int operator=PLUSEQ
$this: CALL .get type=kotlin.Int operator=PLUSEQ
$this: GET_VAR x type=kotlin.IntArray operator=null
index: LITERAL Int type=kotlin.Int value='0'
other: LITERAL Int type=kotlin.Int value='1'
index: CONST Int type=kotlin.Int value='0'
other: CONST Int type=kotlin.Int value='1'
BLOCK type=kotlin.Unit hasResult=false operator=MULTEQ
VAR val tmp0_array: kotlin.IntArray
CALL .foo type=kotlin.IntArray operator=null
CALL .set type=kotlin.Unit operator=MULTEQ
$this: GET_VAR tmp0_array type=kotlin.IntArray operator=null
index: LITERAL Int type=kotlin.Int value='0'
index: CONST Int type=kotlin.Int value='0'
value: CALL .times type=kotlin.Int operator=MULTEQ
$this: CALL .get type=kotlin.Int operator=MULTEQ
$this: GET_VAR tmp0_array type=kotlin.IntArray operator=null
index: LITERAL Int type=kotlin.Int value='0'
other: LITERAL Int type=kotlin.Int value='2'
index: CONST Int type=kotlin.Int value='0'
other: CONST Int type=kotlin.Int value='2'
BLOCK type=kotlin.Unit hasResult=false operator=MINUSEQ
VAR val tmp1_array: kotlin.IntArray
CALL .foo type=kotlin.IntArray operator=null
@@ -47,4 +47,4 @@ IrFile /arrayAugmentedAssignment1.kt
$this: CALL .get type=kotlin.Int operator=MINUSEQ
$this: GET_VAR tmp1_array type=kotlin.IntArray operator=null
index: GET_VAR tmp2_index0 type=kotlin.Int operator=null
other: LITERAL Int type=kotlin.Int value='1'
other: CONST Int type=kotlin.Int value='1'
+3 -3
View File
@@ -8,9 +8,9 @@ IrFile /arrayAugmentedAssignment2.kt
CALL .set type=kotlin.Unit operator=PLUSEQ
$this: $RECEIVER of: test type=IB
$receiver: GET_VAR a type=IA operator=null
index: LITERAL String type=kotlin.String value=''
index: CONST String type=kotlin.String value=''
value: CALL .plus type=kotlin.Int operator=PLUSEQ
$this: CALL .get type=kotlin.Int operator=PLUSEQ
$this: GET_VAR a type=IA operator=null
index: LITERAL String type=kotlin.String value=''
other: LITERAL Int type=kotlin.Int value='42'
index: CONST String type=kotlin.String value=''
other: CONST Int type=kotlin.Int value='42'
+4 -4
View File
@@ -4,16 +4,16 @@ IrFile /assignments.kt
IrExpressionBody
BLOCK type=<no-type> hasResult=false operator=null
VAR var x: kotlin.Int
LITERAL Int type=kotlin.Int value='0'
CONST Int type=kotlin.Int value='0'
SET_VAR x type=<no-type> operator=EQ
LITERAL Int type=kotlin.Int value='1'
CONST Int type=kotlin.Int value='1'
SET_VAR x type=<no-type> operator=EQ
CALL .plus type=kotlin.Int operator=PLUS
$this: GET_VAR x type=kotlin.Int operator=null
other: LITERAL Int type=kotlin.Int value='1'
other: CONST Int type=kotlin.Int value='1'
IrFunction public fun test2(/*0*/ r: Ref): kotlin.Unit
IrExpressionBody
BLOCK type=<no-type> hasResult=false operator=null
CALL .<set-x> type=kotlin.Unit operator=EQ
$this: GET_VAR r type=Ref operator=null
<set-?>: LITERAL Int type=kotlin.Int value='0'
<set-?>: CONST Int type=kotlin.Int value='0'
+12 -12
View File
@@ -1,52 +1,52 @@
IrFile /augmentedAssignment1.kt
IrProperty public var p: kotlin.Int getter=null setter=null
IrExpressionBody
LITERAL Int type=kotlin.Int value='0'
CONST Int type=kotlin.Int value='0'
IrFunction public fun testVariable(): kotlin.Unit
IrExpressionBody
BLOCK type=kotlin.Int hasResult=true operator=null
VAR var x: kotlin.Int
LITERAL Int type=kotlin.Int value='0'
CONST Int type=kotlin.Int value='0'
SET_VAR x type=<no-type> operator=PLUSEQ
CALL .plus type=kotlin.Int operator=PLUSEQ
$this: GET_VAR x type=kotlin.Int operator=PLUSEQ
other: LITERAL Int type=kotlin.Int value='1'
other: CONST Int type=kotlin.Int value='1'
SET_VAR x type=<no-type> operator=MINUSEQ
CALL .minus type=kotlin.Int operator=MINUSEQ
$this: GET_VAR x type=kotlin.Int operator=MINUSEQ
other: LITERAL Int type=kotlin.Int value='2'
other: CONST Int type=kotlin.Int value='2'
SET_VAR x type=<no-type> operator=MULTEQ
CALL .times type=kotlin.Int operator=MULTEQ
$this: GET_VAR x type=kotlin.Int operator=MULTEQ
other: LITERAL Int type=kotlin.Int value='3'
other: CONST Int type=kotlin.Int value='3'
SET_VAR x type=<no-type> operator=DIVEQ
CALL .div type=kotlin.Int operator=DIVEQ
$this: GET_VAR x type=kotlin.Int operator=DIVEQ
other: LITERAL Int type=kotlin.Int value='4'
other: CONST Int type=kotlin.Int value='4'
SET_VAR x type=<no-type> operator=PERCEQ
CALL .mod type=kotlin.Int operator=PERCEQ
$this: GET_VAR x type=kotlin.Int operator=PERCEQ
other: LITERAL Int type=kotlin.Int value='5'
other: CONST Int type=kotlin.Int value='5'
IrFunction public fun testProperty(): kotlin.Unit
IrExpressionBody
BLOCK type=kotlin.Int hasResult=true operator=null
CALL .<set-p> type=kotlin.Unit operator=PLUSEQ
<set-?>: CALL .plus type=kotlin.Int operator=PLUSEQ
$this: CALL .<get-p> type=kotlin.Int operator=GET_PROPERTY
other: LITERAL Int type=kotlin.Int value='1'
other: CONST Int type=kotlin.Int value='1'
CALL .<set-p> type=kotlin.Unit operator=MINUSEQ
<set-?>: CALL .minus type=kotlin.Int operator=MINUSEQ
$this: CALL .<get-p> type=kotlin.Int operator=GET_PROPERTY
other: LITERAL Int type=kotlin.Int value='2'
other: CONST Int type=kotlin.Int value='2'
CALL .<set-p> type=kotlin.Unit operator=MULTEQ
<set-?>: CALL .times type=kotlin.Int operator=MULTEQ
$this: CALL .<get-p> type=kotlin.Int operator=GET_PROPERTY
other: LITERAL Int type=kotlin.Int value='3'
other: CONST Int type=kotlin.Int value='3'
CALL .<set-p> type=kotlin.Unit operator=DIVEQ
<set-?>: CALL .div type=kotlin.Int operator=DIVEQ
$this: CALL .<get-p> type=kotlin.Int operator=GET_PROPERTY
other: LITERAL Int type=kotlin.Int value='4'
other: CONST Int type=kotlin.Int value='4'
CALL .<set-p> type=kotlin.Unit operator=PERCEQ
<set-?>: CALL .mod type=kotlin.Int operator=PERCEQ
$this: CALL .<get-p> type=kotlin.Int operator=GET_PROPERTY
other: LITERAL Int type=kotlin.Int value='5'
other: CONST Int type=kotlin.Int value='5'
+10 -10
View File
@@ -25,34 +25,34 @@ IrFile /augmentedAssignment2.kt
CALL .<init> type=A operator=null
CALL .plusAssign type=kotlin.Unit operator=PLUSEQ
$receiver: GET_VAR a type=A operator=PLUSEQ
s: LITERAL String type=kotlin.String value='+='
s: CONST String type=kotlin.String value='+='
CALL .minusAssign type=kotlin.Unit operator=MINUSEQ
$receiver: GET_VAR a type=A operator=MINUSEQ
s: LITERAL String type=kotlin.String value='-='
s: CONST String type=kotlin.String value='-='
CALL .timesAssign type=kotlin.Unit operator=MULTEQ
$receiver: GET_VAR a type=A operator=MULTEQ
s: LITERAL String type=kotlin.String value='*='
s: CONST String type=kotlin.String value='*='
CALL .divAssign type=kotlin.Unit operator=DIVEQ
$receiver: GET_VAR a type=A operator=DIVEQ
s: LITERAL String type=kotlin.String value='/='
s: CONST String type=kotlin.String value='/='
CALL .modAssign type=kotlin.Unit operator=PERCEQ
$receiver: GET_VAR a type=A operator=PERCEQ
s: LITERAL String type=kotlin.String value='*='
s: CONST String type=kotlin.String value='*='
IrFunction public fun testProperty(): kotlin.Unit
IrExpressionBody
BLOCK type=<no-type> hasResult=false operator=null
CALL .plusAssign type=kotlin.Unit operator=PLUSEQ
$receiver: CALL .<get-p> type=A operator=GET_PROPERTY
s: LITERAL String type=kotlin.String value='+='
s: CONST String type=kotlin.String value='+='
CALL .minusAssign type=kotlin.Unit operator=MINUSEQ
$receiver: CALL .<get-p> type=A operator=GET_PROPERTY
s: LITERAL String type=kotlin.String value='-='
s: CONST String type=kotlin.String value='-='
CALL .timesAssign type=kotlin.Unit operator=MULTEQ
$receiver: CALL .<get-p> type=A operator=GET_PROPERTY
s: LITERAL String type=kotlin.String value='*='
s: CONST String type=kotlin.String value='*='
CALL .divAssign type=kotlin.Unit operator=DIVEQ
$receiver: CALL .<get-p> type=A operator=GET_PROPERTY
s: LITERAL String type=kotlin.String value='/='
s: CONST String type=kotlin.String value='/='
CALL .modAssign type=kotlin.Unit operator=PERCEQ
$receiver: CALL .<get-p> type=A operator=GET_PROPERTY
s: LITERAL String type=kotlin.String value='%='
s: CONST String type=kotlin.String value='%='
+2 -2
View File
@@ -6,14 +6,14 @@ IrFile /booleanOperators.kt
WHEN type=kotlin.Boolean operator=ANDAND
if: GET_VAR a type=kotlin.Boolean operator=null
then: GET_VAR b type=kotlin.Boolean operator=null
else: LITERAL Boolean type=kotlin.Boolean value='false'
else: CONST Boolean type=kotlin.Boolean value='false'
IrFunction public fun test2(/*0*/ a: kotlin.Boolean, /*1*/ b: kotlin.Boolean): kotlin.Boolean
IrExpressionBody
BLOCK type=<no-type> hasResult=false operator=null
RETURN type=<no-type>
WHEN type=kotlin.Boolean operator=OROR
if: GET_VAR a type=kotlin.Boolean operator=null
then: LITERAL Boolean type=kotlin.Boolean value='true'
then: CONST Boolean type=kotlin.Boolean value='true'
else: GET_VAR b type=kotlin.Boolean operator=null
IrFunction public fun test1x(/*0*/ a: kotlin.Boolean, /*1*/ b: kotlin.Boolean): kotlin.Boolean
IrExpressionBody
+1 -1
View File
@@ -3,4 +3,4 @@ IrFile /boxOk.kt
IrExpressionBody
BLOCK type=<no-type> hasResult=false operator=null
RETURN type=<no-type>
LITERAL String type=kotlin.String value='OK'
CONST String type=kotlin.String value='OK'
+5 -5
View File
@@ -6,22 +6,22 @@ IrFile /callWithReorderedArguments.kt
IrExpressionBody
BLOCK type=<no-type> hasResult=false operator=null
RETURN type=<no-type>
LITERAL Int type=kotlin.Int value='1'
CONST Int type=kotlin.Int value='1'
IrFunction public fun noReorder2(): kotlin.Int
IrExpressionBody
BLOCK type=<no-type> hasResult=false operator=null
RETURN type=<no-type>
LITERAL Int type=kotlin.Int value='2'
CONST Int type=kotlin.Int value='2'
IrFunction public fun reordered1(): kotlin.Int
IrExpressionBody
BLOCK type=<no-type> hasResult=false operator=null
RETURN type=<no-type>
LITERAL Int type=kotlin.Int value='1'
CONST Int type=kotlin.Int value='1'
IrFunction public fun reordered2(): kotlin.Int
IrExpressionBody
BLOCK type=<no-type> hasResult=false operator=null
RETURN type=<no-type>
LITERAL Int type=kotlin.Int value='2'
CONST Int type=kotlin.Int value='2'
IrFunction public fun test(): kotlin.Unit
IrExpressionBody
BLOCK type=<no-type> hasResult=false operator=null
@@ -41,4 +41,4 @@ IrFile /callWithReorderedArguments.kt
CALL .reordered2 type=kotlin.Int operator=null
CALL .foo type=kotlin.Unit operator=null
a: GET_VAR tmp2_a type=kotlin.Int operator=null
b: LITERAL Int type=kotlin.Int value='1'
b: CONST Int type=kotlin.Int value='1'
+1 -1
View File
@@ -10,7 +10,7 @@ IrFile /calls.kt
RETURN type=<no-type>
CALL .foo type=kotlin.Int operator=null
x: GET_VAR x type=kotlin.Int operator=null
y: LITERAL Int type=kotlin.Int value='1'
y: CONST Int type=kotlin.Int value='1'
IrFunction public fun qux(/*0*/ x: kotlin.Int): kotlin.Int
IrExpressionBody
BLOCK type=<no-type> hasResult=false operator=null
+10 -1
View File
@@ -1,8 +1,17 @@
val p: Any? = null
fun foo(): Any? = null
fun test1(a: Any?, b: Any) = a ?: b
fun test2(a: String?, b: Any) = a ?: b
fun test3(a: Any?, b: Any?): String {
if (b !is String) return ""
if (a !is String?) return ""
return a ?: b
}
}
fun test4(x: Any) = p ?: x
fun test5(x: Any) = foo() ?: x
+59 -5
View File
@@ -1,14 +1,32 @@
IrFile /elvis.kt
IrProperty public val p: kotlin.Any? = null getter=null setter=null
IrExpressionBody
CONST Null type=kotlin.Nothing? value='null'
IrFunction public fun foo(): kotlin.Any?
IrExpressionBody
BLOCK type=<no-type> hasResult=false operator=null
RETURN type=<no-type>
CONST Null type=kotlin.Nothing? value='null'
IrFunction public fun test1(/*0*/ a: kotlin.Any?, /*1*/ b: kotlin.Any): kotlin.Any
IrExpressionBody
BLOCK type=<no-type> hasResult=false operator=null
RETURN type=<no-type>
DUMMY elvis type=kotlin.Any
WHEN type=kotlin.Any operator=ELVIS
if: CALL .EQEQ type=kotlin.Boolean operator=ELVIS
arg0: GET_VAR a type=kotlin.Any? operator=null
arg1: CONST Null type=kotlin.Nothing? value='null'
then: GET_VAR b type=kotlin.Any operator=null
else: GET_VAR a type=kotlin.Any? operator=null
IrFunction public fun test2(/*0*/ a: kotlin.String?, /*1*/ b: kotlin.Any): kotlin.Any
IrExpressionBody
BLOCK type=<no-type> hasResult=false operator=null
RETURN type=<no-type>
DUMMY elvis type=kotlin.Any
WHEN type=kotlin.Any operator=ELVIS
if: CALL .EQEQ type=kotlin.Boolean operator=ELVIS
arg0: GET_VAR a type=kotlin.String? operator=null
arg1: CONST Null type=kotlin.Nothing? value='null'
then: GET_VAR b type=kotlin.Any operator=null
else: GET_VAR a type=kotlin.String? operator=null
IrFunction public fun test3(/*0*/ a: kotlin.Any?, /*1*/ b: kotlin.Any?): kotlin.String
IrExpressionBody
BLOCK type=<no-type> hasResult=false operator=null
@@ -16,11 +34,47 @@ IrFile /elvis.kt
if: TYPE_OP operator=NOT_INSTANCEOF typeOperand=kotlin.String
GET_VAR b type=kotlin.Any? operator=null
then: RETURN type=<no-type>
LITERAL String type=kotlin.String value=''
CONST String type=kotlin.String value=''
WHEN type=kotlin.Unit operator=IF
if: TYPE_OP operator=NOT_INSTANCEOF typeOperand=kotlin.String?
GET_VAR a type=kotlin.Any? operator=null
then: RETURN type=<no-type>
LITERAL String type=kotlin.String value=''
CONST String type=kotlin.String value=''
RETURN type=<no-type>
DUMMY elvis type=kotlin.String
BLOCK type=kotlin.String hasResult=true operator=ELVIS
VAR val tmp0: kotlin.String?
TYPE_OP operator=IMPLICIT_CAST typeOperand=kotlin.String?
GET_VAR a type=kotlin.Any? operator=null
WHEN type=kotlin.String operator=ELVIS
if: CALL .EQEQ type=kotlin.Boolean operator=ELVIS
arg0: GET_VAR tmp0 type=kotlin.String? operator=null
arg1: CONST Null type=kotlin.Nothing? value='null'
then: TYPE_OP operator=IMPLICIT_CAST typeOperand=kotlin.String
GET_VAR b type=kotlin.Any? operator=null
else: GET_VAR tmp0 type=kotlin.String? operator=null
IrFunction public fun test4(/*0*/ x: kotlin.Any): kotlin.Any
IrExpressionBody
BLOCK type=<no-type> hasResult=false operator=null
RETURN type=<no-type>
BLOCK type=kotlin.Any hasResult=true operator=ELVIS
VAR val tmp0: kotlin.Any?
CALL .<get-p> type=kotlin.Any? operator=GET_PROPERTY
WHEN type=kotlin.Any operator=ELVIS
if: CALL .EQEQ type=kotlin.Boolean operator=ELVIS
arg0: GET_VAR tmp0 type=kotlin.Any? operator=null
arg1: CONST Null type=kotlin.Nothing? value='null'
then: GET_VAR x type=kotlin.Any operator=null
else: GET_VAR tmp0 type=kotlin.Any? operator=null
IrFunction public fun test5(/*0*/ x: kotlin.Any): kotlin.Any
IrExpressionBody
BLOCK type=<no-type> hasResult=false operator=null
RETURN type=<no-type>
BLOCK type=kotlin.Any hasResult=true operator=ELVIS
VAR val tmp0: kotlin.Any?
CALL .foo type=kotlin.Any? operator=null
WHEN type=kotlin.Any operator=ELVIS
if: CALL .EQEQ type=kotlin.Boolean operator=ELVIS
arg0: GET_VAR tmp0 type=kotlin.Any? operator=null
arg1: CONST Null type=kotlin.Nothing? value='null'
then: GET_VAR x type=kotlin.Any operator=null
else: GET_VAR tmp0 type=kotlin.Any? operator=null
@@ -4,7 +4,7 @@ IrFile /extensionPropertyGetterCall.kt
IrExpressionBody
BLOCK type=<no-type> hasResult=false operator=null
RETURN type=<no-type>
LITERAL String type=kotlin.String value='OK'
CONST String type=kotlin.String value='OK'
IrFunction public fun kotlin.String.test5(): kotlin.String
IrExpressionBody
BLOCK type=<no-type> hasResult=false operator=null
+8 -7
View File
@@ -7,11 +7,12 @@ IrFile /ifElseIf.kt
if: CALL .GT0 type=kotlin.Boolean operator=GT
arg0: CALL .compareTo type=kotlin.Int operator=GT
$this: GET_VAR i type=kotlin.Int operator=null
other: LITERAL Int type=kotlin.Int value='0'
then: LITERAL Int type=kotlin.Int value='1'
if: CALL .GT0 type=kotlin.Boolean operator=GT
arg0: CALL .compareTo type=kotlin.Int operator=GT
other: CONST Int type=kotlin.Int value='0'
then: CONST Int type=kotlin.Int value='1'
if: CALL .LT0 type=kotlin.Boolean operator=LT
arg0: CALL .compareTo type=kotlin.Int operator=LT
$this: GET_VAR i type=kotlin.Int operator=null
other: LITERAL Int type=kotlin.Int value='0'
then: LITERAL Int type=kotlin.Int value='1'
else: LITERAL Int type=kotlin.Int value='0'
other: CONST Int type=kotlin.Int value='0'
then: CALL .unaryMinus type=kotlin.Int operator=UMINUS
$this: CONST Int type=kotlin.Int value='1'
else: CONST Int type=kotlin.Int value='0'
+10 -3
View File
@@ -3,6 +3,13 @@ IrFile /implicitCastOnPlatformType.kt
IrExpressionBody
BLOCK type=<no-type> hasResult=false operator=null
RETURN type=<no-type>
CALL .IMPLICIT_NOT_NULL type=kotlin.Any operator=IMPLICIT_NOTNULL
arg0: CALL .getProperty type=kotlin.String! operator=null
p0: LITERAL String type=kotlin.String value='test'
BLOCK type=kotlin.String hasResult=true operator=IMPLICIT_NOTNULL
VAR val tmp0: kotlin.String!
CALL .getProperty type=kotlin.String! operator=null
p0: CONST String type=kotlin.String value='test'
WHEN type=kotlin.String operator=IMPLICIT_NOTNULL
if: CALL .EQEQ type=kotlin.Boolean operator=IMPLICIT_NOTNULL
arg0: GET_VAR tmp0 type=kotlin.String! operator=null
arg1: CONST Null type=kotlin.Nothing? value='null'
then: CALL .THROW_NPE type=kotlin.Nothing operator=IMPLICIT_NOTNULL
else: GET_VAR tmp0 type=kotlin.String! operator=null
+19 -3
View File
@@ -1,18 +1,34 @@
var p: Int = 0
val arr = intArrayOf(1, 2, 3)
fun testVar() {
fun testVarPrefix() {
var x = 0
val x1 = ++x
val x2 = --x
}
fun testProp() {
fun testVarPostfix() {
var x = 0
val x1 = x++
val x2 = x--
}
fun testPropPrefix() {
val p1 = ++p
val p2 = --p
}
fun testArray() {
fun testPropPostfix() {
val p1 = p++
val p2 = --p
}
fun testArrayPrefix() {
val a1 = ++arr[0]
val a2 = --arr[0]
}
fun testArrayPostfix() {
val a1 = arr[0]++
val a2 = arr[0]--
}
+80 -9
View File
@@ -1,16 +1,16 @@
IrFile /incrementDecrement.kt
IrProperty public var p: kotlin.Int getter=null setter=null
IrExpressionBody
LITERAL Int type=kotlin.Int value='0'
CONST Int type=kotlin.Int value='0'
IrProperty public val arr: kotlin.IntArray getter=null setter=null
IrExpressionBody
CALL .intArrayOf type=kotlin.IntArray operator=null
elements: DUMMY vararg type=kotlin.Int
IrFunction public fun testVar(): kotlin.Unit
IrFunction public fun testVarPrefix(): kotlin.Unit
IrExpressionBody
BLOCK type=<no-type> hasResult=false operator=null
VAR var x: kotlin.Int
LITERAL Int type=kotlin.Int value='0'
CONST Int type=kotlin.Int value='0'
VAR val x1: kotlin.Int
BLOCK type=kotlin.Int hasResult=true operator=PREFIX_INCR
VAR val tmp0: kotlin.Int
@@ -27,7 +27,28 @@ IrFile /incrementDecrement.kt
SET_VAR x type=<no-type> operator=PREFIX_DECR
GET_VAR tmp1 type=kotlin.Int operator=null
GET_VAR tmp1 type=kotlin.Int operator=null
IrFunction public fun testProp(): kotlin.Unit
IrFunction public fun testVarPostfix(): kotlin.Unit
IrExpressionBody
BLOCK type=<no-type> hasResult=false operator=null
VAR var x: kotlin.Int
CONST Int type=kotlin.Int value='0'
VAR val x1: kotlin.Int
BLOCK type=kotlin.Int hasResult=true operator=POSTFIX_INCR
VAR val tmp0: kotlin.Int
GET_VAR x type=kotlin.Int operator=POSTFIX_INCR
SET_VAR x type=<no-type> operator=POSTFIX_INCR
CALL .inc type=kotlin.Int operator=POSTFIX_INCR
$this: GET_VAR tmp0 type=kotlin.Int operator=POSTFIX_INCR
GET_VAR tmp0 type=kotlin.Int operator=null
VAR val x2: kotlin.Int
BLOCK type=kotlin.Int hasResult=true operator=POSTFIX_DECR
VAR val tmp1: kotlin.Int
GET_VAR x type=kotlin.Int operator=POSTFIX_DECR
SET_VAR x type=<no-type> operator=POSTFIX_DECR
CALL .dec type=kotlin.Int operator=POSTFIX_DECR
$this: GET_VAR tmp1 type=kotlin.Int operator=POSTFIX_DECR
GET_VAR tmp1 type=kotlin.Int operator=null
IrFunction public fun testPropPrefix(): kotlin.Unit
IrExpressionBody
BLOCK type=<no-type> hasResult=false operator=null
VAR val p1: kotlin.Int
@@ -46,7 +67,26 @@ IrFile /incrementDecrement.kt
CALL .<set-p> type=kotlin.Unit operator=PREFIX_DECR
<set-?>: GET_VAR tmp1 type=kotlin.Int operator=null
GET_VAR tmp1 type=kotlin.Int operator=null
IrFunction public fun testArray(): kotlin.Unit
IrFunction public fun testPropPostfix(): kotlin.Unit
IrExpressionBody
BLOCK type=<no-type> hasResult=false operator=null
VAR val p1: kotlin.Int
BLOCK type=kotlin.Int hasResult=true operator=POSTFIX_INCR
VAR val tmp0: kotlin.Int
CALL .<get-p> type=kotlin.Int operator=GET_PROPERTY
CALL .<set-p> type=kotlin.Unit operator=POSTFIX_INCR
<set-?>: CALL .inc type=kotlin.Int operator=POSTFIX_INCR
$this: GET_VAR tmp0 type=kotlin.Int operator=POSTFIX_INCR
GET_VAR tmp0 type=kotlin.Int operator=null
VAR val p2: kotlin.Int
BLOCK type=kotlin.Int hasResult=true operator=PREFIX_DECR
VAR val tmp1: kotlin.Int
CALL .dec type=kotlin.Int operator=PREFIX_DECR
$this: CALL .<get-p> type=kotlin.Int operator=GET_PROPERTY
CALL .<set-p> type=kotlin.Unit operator=PREFIX_DECR
<set-?>: GET_VAR tmp1 type=kotlin.Int operator=null
GET_VAR tmp1 type=kotlin.Int operator=null
IrFunction public fun testArrayPrefix(): kotlin.Unit
IrExpressionBody
BLOCK type=<no-type> hasResult=false operator=null
VAR val a1: kotlin.Int
@@ -57,10 +97,10 @@ IrFile /incrementDecrement.kt
CALL .inc type=kotlin.Int operator=PREFIX_INCR
$this: CALL .get type=kotlin.Int operator=PREFIX_INCR
$this: GET_VAR tmp0_array type=kotlin.IntArray operator=null
index: LITERAL Int type=kotlin.Int value='0'
index: CONST Int type=kotlin.Int value='0'
CALL .set type=kotlin.Unit operator=PREFIX_INCR
$this: GET_VAR tmp0_array type=kotlin.IntArray operator=null
index: LITERAL Int type=kotlin.Int value='0'
index: CONST Int type=kotlin.Int value='0'
value: GET_VAR tmp1 type=kotlin.Int operator=null
GET_VAR tmp1 type=kotlin.Int operator=null
VAR val a2: kotlin.Int
@@ -71,9 +111,40 @@ IrFile /incrementDecrement.kt
CALL .dec type=kotlin.Int operator=PREFIX_DECR
$this: CALL .get type=kotlin.Int operator=PREFIX_DECR
$this: GET_VAR tmp2_array type=kotlin.IntArray operator=null
index: LITERAL Int type=kotlin.Int value='0'
index: CONST Int type=kotlin.Int value='0'
CALL .set type=kotlin.Unit operator=PREFIX_DECR
$this: GET_VAR tmp2_array type=kotlin.IntArray operator=null
index: LITERAL Int type=kotlin.Int value='0'
index: CONST Int type=kotlin.Int value='0'
value: GET_VAR tmp3 type=kotlin.Int operator=null
GET_VAR tmp3 type=kotlin.Int operator=null
IrFunction public fun testArrayPostfix(): kotlin.Unit
IrExpressionBody
BLOCK type=<no-type> hasResult=false operator=null
VAR val a1: kotlin.Int
BLOCK type=kotlin.Int hasResult=true operator=POSTFIX_INCR
VAR val tmp0_array: kotlin.IntArray
CALL .<get-arr> type=kotlin.IntArray operator=GET_PROPERTY
VAR val tmp1: kotlin.Int
CALL .get type=kotlin.Int operator=POSTFIX_INCR
$this: GET_VAR tmp0_array type=kotlin.IntArray operator=null
index: CONST Int type=kotlin.Int value='0'
CALL .set type=kotlin.Unit operator=POSTFIX_INCR
$this: GET_VAR tmp0_array type=kotlin.IntArray operator=null
index: CONST Int type=kotlin.Int value='0'
value: CALL .inc type=kotlin.Int operator=POSTFIX_INCR
$this: GET_VAR tmp1 type=kotlin.Int operator=null
GET_VAR tmp1 type=kotlin.Int operator=null
VAR val a2: kotlin.Int
BLOCK type=kotlin.Int hasResult=true operator=POSTFIX_DECR
VAR val tmp2_array: kotlin.IntArray
CALL .<get-arr> type=kotlin.IntArray operator=GET_PROPERTY
VAR val tmp3: kotlin.Int
CALL .get type=kotlin.Int operator=POSTFIX_DECR
$this: GET_VAR tmp2_array type=kotlin.IntArray operator=null
index: CONST Int type=kotlin.Int value='0'
CALL .set type=kotlin.Unit operator=POSTFIX_DECR
$this: GET_VAR tmp2_array type=kotlin.IntArray operator=null
index: CONST Int type=kotlin.Int value='0'
value: CALL .dec type=kotlin.Int operator=POSTFIX_DECR
$this: GET_VAR tmp3 type=kotlin.Int operator=null
GET_VAR tmp3 type=kotlin.Int operator=null
+6
View File
@@ -0,0 +1,6 @@
val test1 = 1
val test2 = -1
val test3 = true
val test4 = false
val test5 = "abc"
val test6 = null
+20
View File
@@ -0,0 +1,20 @@
IrFile /literals.kt
IrProperty public val test1: kotlin.Int = 1 getter=null setter=null
IrExpressionBody
CONST Int type=kotlin.Int value='1'
IrProperty public val test2: kotlin.Int = -1 getter=null setter=null
IrExpressionBody
CALL .unaryMinus type=kotlin.Int operator=UMINUS
$this: CONST Int type=kotlin.Int value='1'
IrProperty public val test3: kotlin.Boolean = true getter=null setter=null
IrExpressionBody
CONST Boolean type=kotlin.Boolean value='true'
IrProperty public val test4: kotlin.Boolean = false getter=null setter=null
IrExpressionBody
CONST Boolean type=kotlin.Boolean value='false'
IrProperty public val test5: kotlin.String = "abc" getter=null setter=null
IrExpressionBody
CONST String type=kotlin.String value='abc'
IrProperty public val test6: kotlin.Nothing? = null getter=null setter=null
IrExpressionBody
CONST Null type=kotlin.Nothing? value='null'
+4 -4
View File
@@ -1,7 +1,7 @@
IrFile /references.kt
IrProperty public val ok: kotlin.String = "OK" getter=null setter=null
IrExpressionBody
LITERAL String type=kotlin.String value='OK'
CONST String type=kotlin.String value='OK'
IrProperty public val ok2: kotlin.String = "OK" getter=null setter=null
IrExpressionBody
CALL .<get-ok> type=kotlin.String operator=GET_PROPERTY
@@ -10,7 +10,7 @@ IrFile /references.kt
IrExpressionBody
BLOCK type=<no-type> hasResult=false operator=null
RETURN type=<no-type>
LITERAL String type=kotlin.String value='OK'
CONST String type=kotlin.String value='OK'
IrFunction public fun test1(): kotlin.String
IrExpressionBody
BLOCK type=<no-type> hasResult=false operator=null
@@ -25,7 +25,7 @@ IrFile /references.kt
IrExpressionBody
BLOCK type=<no-type> hasResult=false operator=null
VAR val x: kotlin.String = "OK"
LITERAL String type=kotlin.String value='OK'
CONST String type=kotlin.String value='OK'
RETURN type=<no-type>
GET_VAR x type=kotlin.String operator=null
IrFunction public fun test4(): kotlin.String
@@ -38,7 +38,7 @@ IrFile /references.kt
IrExpressionBody
BLOCK type=<no-type> hasResult=false operator=null
RETURN type=<no-type>
LITERAL String type=kotlin.String value='OK'
CONST String type=kotlin.String value='OK'
IrFunction public fun kotlin.String.test5(): kotlin.String
IrExpressionBody
BLOCK type=<no-type> hasResult=false operator=null
+8
View File
@@ -0,0 +1,8 @@
fun test1(x: Int) = -x
fun test2() = -42
fun test3(x: Int) = +x
fun test4() = +42
fun test5(x: Boolean) = !x
fun test6() = !true
+37
View File
@@ -0,0 +1,37 @@
IrFile /simpleUnaryOperators.kt
IrFunction public fun test1(/*0*/ x: kotlin.Int): kotlin.Int
IrExpressionBody
BLOCK type=<no-type> hasResult=false operator=null
RETURN type=<no-type>
CALL .unaryMinus type=kotlin.Int operator=UMINUS
$this: GET_VAR x type=kotlin.Int operator=null
IrFunction public fun test2(): kotlin.Int
IrExpressionBody
BLOCK type=<no-type> hasResult=false operator=null
RETURN type=<no-type>
CALL .unaryMinus type=kotlin.Int operator=UMINUS
$this: CONST Int type=kotlin.Int value='42'
IrFunction public fun test3(/*0*/ x: kotlin.Int): kotlin.Int
IrExpressionBody
BLOCK type=<no-type> hasResult=false operator=null
RETURN type=<no-type>
CALL .unaryPlus type=kotlin.Int operator=UPLUS
$this: GET_VAR x type=kotlin.Int operator=null
IrFunction public fun test4(): kotlin.Int
IrExpressionBody
BLOCK type=<no-type> hasResult=false operator=null
RETURN type=<no-type>
CALL .unaryPlus type=kotlin.Int operator=UPLUS
$this: CONST Int type=kotlin.Int value='42'
IrFunction public fun test5(/*0*/ x: kotlin.Boolean): kotlin.Boolean
IrExpressionBody
BLOCK type=<no-type> hasResult=false operator=null
RETURN type=<no-type>
CALL .not type=kotlin.Boolean operator=EXCL
$this: GET_VAR x type=kotlin.Boolean operator=null
IrFunction public fun test6(): kotlin.Boolean
IrExpressionBody
BLOCK type=<no-type> hasResult=false operator=null
RETURN type=<no-type>
CALL .not type=kotlin.Boolean operator=EXCL
$this: CONST Boolean type=kotlin.Boolean value='true'
+2 -2
View File
@@ -44,7 +44,7 @@ IrFile /smartCasts.kt
if: TYPE_OP operator=NOT_INSTANCEOF typeOperand=kotlin.String
GET_VAR x type=kotlin.Any operator=null
then: RETURN type=<no-type>
LITERAL String type=kotlin.String value=''
CONST String type=kotlin.String value=''
RETURN type=<no-type>
CALL .overloaded type=kotlin.String operator=null
s: TYPE_OP operator=IMPLICIT_CAST typeOperand=kotlin.String
@@ -56,7 +56,7 @@ IrFile /smartCasts.kt
if: TYPE_OP operator=NOT_INSTANCEOF typeOperand=kotlin.String
GET_VAR x type=kotlin.Any operator=null
then: RETURN type=<no-type>
LITERAL String type=kotlin.String value=''
CONST String type=kotlin.String value=''
RETURN type=<no-type>
TYPE_OP operator=IMPLICIT_CAST typeOperand=kotlin.String
GET_VAR x type=kotlin.Any operator=null
@@ -5,12 +5,12 @@ IrFile /smartCastsWithDestructuring.kt
IrExpressionBody
BLOCK type=<no-type> hasResult=false operator=null
RETURN type=<no-type>
LITERAL Int type=kotlin.Int value='1'
CONST Int type=kotlin.Int value='1'
IrFunction public operator fun I2.component2(): kotlin.String
IrExpressionBody
BLOCK type=<no-type> hasResult=false operator=null
RETURN type=<no-type>
LITERAL String type=kotlin.String value=''
CONST String type=kotlin.String value=''
IrFunction public fun test(/*0*/ x: I1): kotlin.Unit
IrExpressionBody
BLOCK type=<no-type> hasResult=false operator=null
+5 -5
View File
@@ -3,25 +3,25 @@ IrFile /smoke.kt
IrExpressionBody
BLOCK type=<no-type> hasResult=false operator=null
RETURN type=<no-type>
LITERAL String type=kotlin.String value='OK'
CONST String type=kotlin.String value='OK'
IrProperty public val testSimpleVal: kotlin.Int = 1 getter=null setter=null
IrExpressionBody
LITERAL Int type=kotlin.Int value='1'
CONST Int type=kotlin.Int value='1'
IrProperty public val testValWithGetter: kotlin.Int getter=<get-testValWithGetter> setter=null
IrPropertyGetter public fun <get-testValWithGetter>(): kotlin.Int property=testValWithGetter
IrExpressionBody
BLOCK type=<no-type> hasResult=false operator=null
RETURN type=<no-type>
LITERAL Int type=kotlin.Int value='42'
CONST Int type=kotlin.Int value='42'
IrProperty public var testSimpleVar: kotlin.Int getter=null setter=null
IrExpressionBody
LITERAL Int type=kotlin.Int value='2'
CONST Int type=kotlin.Int value='2'
IrProperty public var testVarWithAccessors: kotlin.Int getter=<get-testVarWithAccessors> setter=<set-testVarWithAccessors>
IrPropertyGetter public fun <get-testVarWithAccessors>(): kotlin.Int property=testVarWithAccessors
IrExpressionBody
BLOCK type=<no-type> hasResult=false operator=null
RETURN type=<no-type>
LITERAL Int type=kotlin.Int value='42'
CONST Int type=kotlin.Int value='42'
IrPropertySetter public fun <set-testVarWithAccessors>(/*0*/ v: kotlin.Int): kotlin.Unit property=testVarWithAccessors
IrExpressionBody
BLOCK type=<no-type> hasResult=false operator=null
+3 -3
View File
@@ -12,7 +12,7 @@ IrFile /stringPlus.kt
RETURN type=<no-type>
STRING_CONCATENATION type=kotlin.String
GET_VAR a type=kotlin.String operator=null
LITERAL String type=kotlin.String value='+'
CONST String type=kotlin.String value='+'
GET_VAR b type=kotlin.Int operator=null
IrFunction public fun test3(/*0*/ a: kotlin.String, /*1*/ b: kotlin.Int): kotlin.String
IrExpressionBody
@@ -20,8 +20,8 @@ IrFile /stringPlus.kt
RETURN type=<no-type>
STRING_CONCATENATION type=kotlin.String
GET_VAR a type=kotlin.String operator=null
LITERAL String type=kotlin.String value='+'
CONST String type=kotlin.String value='+'
CALL .plus type=kotlin.Int operator=PLUS
$this: GET_VAR b type=kotlin.Int operator=null
other: LITERAL Int type=kotlin.Int value='1'
other: CONST Int type=kotlin.Int value='1'
GET_VAR a type=kotlin.String operator=null
+1 -1
View File
@@ -3,7 +3,7 @@ IrFile /values.kt
DUMMY A
IrProperty public val a: kotlin.Int = 0 getter=null setter=null
IrExpressionBody
LITERAL Int type=kotlin.Int value='0'
CONST Int type=kotlin.Int value='0'
DUMMY Z
IrFunction public fun test1(): Enum
IrExpressionBody
+31 -31
View File
@@ -10,21 +10,21 @@ IrFile /when.kt
WHEN type=kotlin.String operator=WHEN
if: CALL .EQEQ type=kotlin.Boolean operator=EQEQ
arg0: GET_VAR tmp0_subject type=kotlin.Any? operator=null
arg1: LITERAL Null type=kotlin.Nothing? value='null'
then: LITERAL String type=kotlin.String value='null'
arg1: CONST Null type=kotlin.Nothing? value='null'
then: CONST String type=kotlin.String value='null'
if: CALL .EQEQ type=kotlin.Boolean operator=EQEQ
arg0: GET_VAR tmp0_subject type=kotlin.Any? operator=null
arg1: GET_OBJECT A type=A
then: LITERAL String type=kotlin.String value='A'
then: CONST String type=kotlin.String value='A'
if: TYPE_OP operator=INSTANCEOF typeOperand=kotlin.String
GET_VAR tmp0_subject type=kotlin.Any? operator=null
then: LITERAL String type=kotlin.String value='String'
then: CONST String type=kotlin.String value='String'
if: CALL .contains type=kotlin.Boolean operator=IN
$receiver: CALL .setOf type=kotlin.collections.Set<kotlin.Nothing> operator=null
element: TYPE_OP operator=IMPLICIT_CAST typeOperand=kotlin.Any
GET_VAR tmp0_subject type=kotlin.Any? operator=null
then: LITERAL String type=kotlin.String value='nothingness?'
else: LITERAL String type=kotlin.String value='something'
then: CONST String type=kotlin.String value='nothingness?'
else: CONST String type=kotlin.String value='something'
IrFunction public fun test(/*0*/ x: kotlin.Any?): kotlin.String
IrExpressionBody
BLOCK type=<no-type> hasResult=false operator=null
@@ -32,21 +32,21 @@ IrFile /when.kt
WHEN type=kotlin.String operator=WHEN
if: CALL .EQEQ type=kotlin.Boolean operator=EQEQ
arg0: GET_VAR x type=kotlin.Any? operator=null
arg1: LITERAL Null type=kotlin.Nothing? value='null'
then: LITERAL String type=kotlin.String value='null'
arg1: CONST Null type=kotlin.Nothing? value='null'
then: CONST String type=kotlin.String value='null'
if: CALL .EQEQ type=kotlin.Boolean operator=EQEQ
arg0: GET_VAR x type=kotlin.Any? operator=null
arg1: GET_OBJECT A type=A
then: LITERAL String type=kotlin.String value='A'
then: CONST String type=kotlin.String value='A'
if: TYPE_OP operator=INSTANCEOF typeOperand=kotlin.String
GET_VAR x type=kotlin.Any? operator=null
then: LITERAL String type=kotlin.String value='String'
then: CONST String type=kotlin.String value='String'
if: CALL .contains type=kotlin.Boolean operator=IN
$receiver: CALL .setOf type=kotlin.collections.Set<kotlin.Nothing> operator=null
element: TYPE_OP operator=IMPLICIT_CAST typeOperand=kotlin.Any
GET_VAR x type=kotlin.Any? operator=null
then: LITERAL String type=kotlin.String value='nothingness?'
else: LITERAL String type=kotlin.String value='something'
then: CONST String type=kotlin.String value='nothingness?'
else: CONST String type=kotlin.String value='something'
IrFunction public fun testComma(/*0*/ x: kotlin.Int): kotlin.String
IrExpressionBody
BLOCK type=<no-type> hasResult=false operator=null
@@ -60,41 +60,41 @@ IrFile /when.kt
if: WHEN type=kotlin.Boolean operator=WHEN_COMMA
if: CALL .EQEQ type=kotlin.Boolean operator=EQEQ
arg0: GET_VAR tmp0_subject type=kotlin.Int operator=null
arg1: LITERAL Int type=kotlin.Int value='1'
then: LITERAL Boolean type=kotlin.Boolean value='true'
arg1: CONST Int type=kotlin.Int value='1'
then: CONST Boolean type=kotlin.Boolean value='true'
else: CALL .EQEQ type=kotlin.Boolean operator=EQEQ
arg0: GET_VAR tmp0_subject type=kotlin.Int operator=null
arg1: LITERAL Int type=kotlin.Int value='2'
then: LITERAL Boolean type=kotlin.Boolean value='true'
arg1: CONST Int type=kotlin.Int value='2'
then: CONST Boolean type=kotlin.Boolean value='true'
else: CALL .EQEQ type=kotlin.Boolean operator=EQEQ
arg0: GET_VAR tmp0_subject type=kotlin.Int operator=null
arg1: LITERAL Int type=kotlin.Int value='3'
then: LITERAL Boolean type=kotlin.Boolean value='true'
arg1: CONST Int type=kotlin.Int value='3'
then: CONST Boolean type=kotlin.Boolean value='true'
else: CALL .EQEQ type=kotlin.Boolean operator=EQEQ
arg0: GET_VAR tmp0_subject type=kotlin.Int operator=null
arg1: LITERAL Int type=kotlin.Int value='4'
then: LITERAL String type=kotlin.String value='1234'
arg1: CONST Int type=kotlin.Int value='4'
then: CONST String type=kotlin.String value='1234'
if: WHEN type=kotlin.Boolean operator=WHEN_COMMA
if: WHEN type=kotlin.Boolean operator=WHEN_COMMA
if: CALL .EQEQ type=kotlin.Boolean operator=EQEQ
arg0: GET_VAR tmp0_subject type=kotlin.Int operator=null
arg1: LITERAL Int type=kotlin.Int value='5'
then: LITERAL Boolean type=kotlin.Boolean value='true'
arg1: CONST Int type=kotlin.Int value='5'
then: CONST Boolean type=kotlin.Boolean value='true'
else: CALL .EQEQ type=kotlin.Boolean operator=EQEQ
arg0: GET_VAR tmp0_subject type=kotlin.Int operator=null
arg1: LITERAL Int type=kotlin.Int value='6'
then: LITERAL Boolean type=kotlin.Boolean value='true'
arg1: CONST Int type=kotlin.Int value='6'
then: CONST Boolean type=kotlin.Boolean value='true'
else: CALL .EQEQ type=kotlin.Boolean operator=EQEQ
arg0: GET_VAR tmp0_subject type=kotlin.Int operator=null
arg1: LITERAL Int type=kotlin.Int value='7'
then: LITERAL String type=kotlin.String value='567'
arg1: CONST Int type=kotlin.Int value='7'
then: CONST String type=kotlin.String value='567'
if: WHEN type=kotlin.Boolean operator=WHEN_COMMA
if: CALL .EQEQ type=kotlin.Boolean operator=EQEQ
arg0: GET_VAR tmp0_subject type=kotlin.Int operator=null
arg1: LITERAL Int type=kotlin.Int value='8'
then: LITERAL Boolean type=kotlin.Boolean value='true'
arg1: CONST Int type=kotlin.Int value='8'
then: CONST Boolean type=kotlin.Boolean value='true'
else: CALL .EQEQ type=kotlin.Boolean operator=EQEQ
arg0: GET_VAR tmp0_subject type=kotlin.Int operator=null
arg1: LITERAL Int type=kotlin.Int value='9'
then: LITERAL String type=kotlin.String value='89'
else: LITERAL String type=kotlin.String value='?'
arg1: CONST Int type=kotlin.Int value='9'
then: CONST String type=kotlin.String value='89'
else: CONST String type=kotlin.String value='?'