[JS BE] Drop JS scripting support

JS scripting uses the old IR to JS transformer.
 The new IR to JS transformer can not be used for
 JS scripting out of the box. Patching the new transformer for
 JS scripting is potentially dangerous and requires a lot of effort.
 Dropping JS scripting and the old IR to JS transformer allows to
 refactor and simplify JS BE codebase.
This commit is contained in:
Alexander Korepanov
2022-11-03 14:26:11 +01:00
committed by Space Team
parent d75bbc49e7
commit d5e9e87538
41 changed files with 14 additions and 1860 deletions
@@ -1 +0,0 @@
/* ERROR: unsupported element type: IrScriptImpl */
@@ -1,10 +0,0 @@
fun test() {
val x = intArrayOf(1, 2, 3)
x[1] = 0
}
fun foo() = 1
fun test2() {
intArrayOf(1, 2, 3)[foo()] = 1
}
@@ -1,33 +0,0 @@
FILE fqName:<root> fileName:/arrayAssignment.kts
SCRIPT
FUN name:test visibility:public modality:FINAL <> ($this:<root>.ArrayAssignment) returnType:kotlin.Unit
$this: VALUE_PARAMETER name:<this> type:<root>.ArrayAssignment
BLOCK_BODY
VAR name:x type:kotlin.IntArray [val]
CALL 'public final fun intArrayOf (vararg elements: kotlin.Int): kotlin.IntArray declared in kotlin' type=kotlin.IntArray origin=null
elements: VARARG type=kotlin.IntArray varargElementType=kotlin.Int
CONST Int type=kotlin.Int value=1
CONST Int type=kotlin.Int value=2
CONST Int type=kotlin.Int value=3
CALL 'public final fun set (index: kotlin.Int, value: kotlin.Int): kotlin.Unit [operator] declared in kotlin.IntArray' type=kotlin.Unit origin=EQ
$this: GET_VAR 'val x: kotlin.IntArray [val] declared in <root>.ArrayAssignment.test' type=kotlin.IntArray origin=null
index: CONST Int type=kotlin.Int value=1
value: CONST Int type=kotlin.Int value=0
FUN name:foo visibility:public modality:FINAL <> ($this:<root>.ArrayAssignment) returnType:kotlin.Int
$this: VALUE_PARAMETER name:<this> type:<root>.ArrayAssignment
BLOCK_BODY
RETURN type=kotlin.Nothing from='public final fun foo (): kotlin.Int declared in <root>.ArrayAssignment'
CONST Int type=kotlin.Int value=1
FUN name:test2 visibility:public modality:FINAL <> ($this:<root>.ArrayAssignment) returnType:kotlin.Unit
$this: VALUE_PARAMETER name:<this> type:<root>.ArrayAssignment
BLOCK_BODY
CALL 'public final fun set (index: kotlin.Int, value: kotlin.Int): kotlin.Unit [operator] declared in kotlin.IntArray' type=kotlin.Unit origin=EQ
$this: CALL 'public final fun intArrayOf (vararg elements: kotlin.Int): kotlin.IntArray declared in kotlin' type=kotlin.IntArray origin=null
elements: VARARG type=kotlin.IntArray varargElementType=kotlin.Int
CONST Int type=kotlin.Int value=1
CONST Int type=kotlin.Int value=2
CONST Int type=kotlin.Int value=3
index: CALL 'public final fun foo (): kotlin.Int declared in <root>.ArrayAssignment' type=kotlin.Int origin=null
$this: GET_VAR '<this>: <root>.ArrayAssignment declared in <root>.ArrayAssignment.test2' type=<root>.ArrayAssignment origin=null
value: CONST Int type=kotlin.Int value=1
VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.ArrayAssignment
-1
View File
@@ -1 +0,0 @@
/* ERROR: unsupported element type: IrScriptImpl */
-13
View File
@@ -1,13 +0,0 @@
fun <T> test1(i: Int, j: T) {}
fun test2(i: Int = 0, j: String = "") {}
fun test3(vararg args: String) {}
fun String.textExt1(i: Int, j: String) {}
class Host {
fun String.testMembetExt1(i: Int, j: String) {}
fun <T> String.testMembetExt2(i: Int, j: T) {}
}
-60
View File
@@ -1,60 +0,0 @@
FILE fqName:<root> fileName:/fun.kts
SCRIPT
FUN name:test1 visibility:public modality:FINAL <T> ($this:<root>.Fun, i:kotlin.Int, j:T of <root>.Fun.test1) returnType:kotlin.Unit
TYPE_PARAMETER name:T index:0 variance: superTypes:[kotlin.Any?] reified:false
$this: VALUE_PARAMETER name:<this> type:<root>.Fun
VALUE_PARAMETER name:i index:0 type:kotlin.Int
VALUE_PARAMETER name:j index:1 type:T of <root>.Fun.test1
BLOCK_BODY
FUN name:test2 visibility:public modality:FINAL <> ($this:<root>.Fun, i:kotlin.Int, j:kotlin.String) returnType:kotlin.Unit
$this: VALUE_PARAMETER name:<this> type:<root>.Fun
VALUE_PARAMETER name:i index:0 type:kotlin.Int
EXPRESSION_BODY
CONST Int type=kotlin.Int value=0
VALUE_PARAMETER name:j index:1 type:kotlin.String
EXPRESSION_BODY
CONST String type=kotlin.String value=""
BLOCK_BODY
FUN name:test3 visibility:public modality:FINAL <> ($this:<root>.Fun, args:kotlin.Array<out kotlin.String>) returnType:kotlin.Unit
$this: VALUE_PARAMETER name:<this> type:<root>.Fun
VALUE_PARAMETER name:args index:0 type:kotlin.Array<out kotlin.String> varargElementType:kotlin.String [vararg]
BLOCK_BODY
FUN name:textExt1 visibility:public modality:FINAL <> ($this:<root>.Fun, $receiver:kotlin.String, i:kotlin.Int, j:kotlin.String) returnType:kotlin.Unit
$this: VALUE_PARAMETER name:<this> type:<root>.Fun
$receiver: VALUE_PARAMETER name:<this> type:kotlin.String
VALUE_PARAMETER name:i index:0 type:kotlin.Int
VALUE_PARAMETER name:j index:1 type:kotlin.String
BLOCK_BODY
CLASS CLASS name:Host modality:FINAL visibility:public superTypes:[kotlin.Any]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.Fun.Host
CONSTRUCTOR visibility:public <> () returnType:<root>.Fun.Host [primary]
BLOCK_BODY
DELEGATING_CONSTRUCTOR_CALL 'public constructor <init> () [primary] declared in kotlin.Any'
INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:Host modality:FINAL visibility:public superTypes:[kotlin.Any]'
FUN name:testMembetExt1 visibility:public modality:FINAL <> ($this:<root>.Fun.Host, $receiver:kotlin.String, i:kotlin.Int, j:kotlin.String) returnType:kotlin.Unit
$this: VALUE_PARAMETER name:<this> type:<root>.Fun.Host
$receiver: VALUE_PARAMETER name:<this> type:kotlin.String
VALUE_PARAMETER name:i index:0 type:kotlin.Int
VALUE_PARAMETER name:j index:1 type:kotlin.String
BLOCK_BODY
FUN name:testMembetExt2 visibility:public modality:FINAL <T> ($this:<root>.Fun.Host, $receiver:kotlin.String, i:kotlin.Int, j:T of <root>.Fun.Host.testMembetExt2) returnType:kotlin.Unit
TYPE_PARAMETER name:T index:0 variance: superTypes:[kotlin.Any?] reified:false
$this: VALUE_PARAMETER name:<this> type:<root>.Fun.Host
$receiver: VALUE_PARAMETER name:<this> type:kotlin.String
VALUE_PARAMETER name:i index:0 type:kotlin.Int
VALUE_PARAMETER name:j index:1 type:T of <root>.Fun.Host.testMembetExt2
BLOCK_BODY
FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator]
overridden:
public open fun equals (other: kotlin.Any?): kotlin.Boolean [operator] declared in kotlin.Any
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
VALUE_PARAMETER name:other index:0 type:kotlin.Any?
FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override]
overridden:
public open fun hashCode (): kotlin.Int declared in kotlin.Any
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String [fake_override]
overridden:
public open fun toString (): kotlin.String declared in kotlin.Any
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.Fun
@@ -1 +0,0 @@
/* ERROR: unsupported element type: IrScriptImpl */
-21
View File
@@ -1,21 +0,0 @@
class Ref(var value: Int)
interface IHost {
fun String.extLength() = length
}
fun test1(x: String?) = x?.length
fun test2(x: String?) = x?.hashCode()
fun test3(x: String?, y: Any?) = x?.equals(y)
fun test4(x: Ref?) {
x?.value = 0
}
fun IHost.test5(s: String?) = s?.extLength()
fun Int.foo() = 239
fun box() {
42?.foo()
}
-183
View File
@@ -1,183 +0,0 @@
FILE fqName:<root> fileName:/safeCalls.kts
SCRIPT
CLASS CLASS name:Ref modality:FINAL visibility:public superTypes:[kotlin.Any]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.SafeCalls.Ref
CONSTRUCTOR visibility:public <> (value:kotlin.Int) returnType:<root>.SafeCalls.Ref [primary]
VALUE_PARAMETER name:value index:0 type:kotlin.Int
BLOCK_BODY
DELEGATING_CONSTRUCTOR_CALL 'public constructor <init> () [primary] declared in kotlin.Any'
INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:Ref modality:FINAL visibility:public superTypes:[kotlin.Any]'
PROPERTY name:value visibility:public modality:FINAL [var]
FIELD PROPERTY_BACKING_FIELD name:value type:kotlin.Int visibility:private
EXPRESSION_BODY
GET_VAR 'value: kotlin.Int declared in <root>.SafeCalls.Ref.<init>' type=kotlin.Int origin=INITIALIZE_PROPERTY_FROM_PARAMETER
FUN DEFAULT_PROPERTY_ACCESSOR name:<get-value> visibility:public modality:FINAL <> ($this:<root>.SafeCalls.Ref) returnType:kotlin.Int
correspondingProperty: PROPERTY name:value visibility:public modality:FINAL [var]
$this: VALUE_PARAMETER name:<this> type:<root>.SafeCalls.Ref
BLOCK_BODY
RETURN type=kotlin.Nothing from='public final fun <get-value> (): kotlin.Int declared in <root>.SafeCalls.Ref'
GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:value type:kotlin.Int visibility:private' type=kotlin.Int origin=null
receiver: GET_VAR '<this>: <root>.SafeCalls.Ref declared in <root>.SafeCalls.Ref.<get-value>' type=<root>.SafeCalls.Ref origin=null
FUN DEFAULT_PROPERTY_ACCESSOR name:<set-value> visibility:public modality:FINAL <> ($this:<root>.SafeCalls.Ref, <set-?>:kotlin.Int) returnType:kotlin.Unit
correspondingProperty: PROPERTY name:value visibility:public modality:FINAL [var]
$this: VALUE_PARAMETER name:<this> type:<root>.SafeCalls.Ref
VALUE_PARAMETER name:<set-?> index:0 type:kotlin.Int
BLOCK_BODY
SET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:value type:kotlin.Int visibility:private' type=kotlin.Unit origin=null
receiver: GET_VAR '<this>: <root>.SafeCalls.Ref declared in <root>.SafeCalls.Ref.<set-value>' type=<root>.SafeCalls.Ref origin=null
value: GET_VAR '<set-?>: kotlin.Int declared in <root>.SafeCalls.Ref.<set-value>' type=kotlin.Int origin=null
FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator]
overridden:
public open fun equals (other: kotlin.Any?): kotlin.Boolean [operator] declared in kotlin.Any
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
VALUE_PARAMETER name:other index:0 type:kotlin.Any?
FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override]
overridden:
public open fun hashCode (): kotlin.Int declared in kotlin.Any
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String [fake_override]
overridden:
public open fun toString (): kotlin.String declared in kotlin.Any
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
CLASS INTERFACE name:IHost modality:ABSTRACT visibility:public superTypes:[kotlin.Any]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.SafeCalls.IHost
FUN name:extLength visibility:public modality:OPEN <> ($this:<root>.SafeCalls.IHost, $receiver:kotlin.String) returnType:kotlin.Int
$this: VALUE_PARAMETER name:<this> type:<root>.SafeCalls.IHost
$receiver: VALUE_PARAMETER name:<this> type:kotlin.String
BLOCK_BODY
RETURN type=kotlin.Nothing from='public open fun extLength (): kotlin.Int declared in <root>.SafeCalls.IHost'
CALL 'public open fun <get-length> (): kotlin.Int declared in kotlin.String' type=kotlin.Int origin=GET_PROPERTY
$this: GET_VAR '<this>: kotlin.String declared in <root>.SafeCalls.IHost.extLength' type=kotlin.String origin=null
FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator]
overridden:
public open fun equals (other: kotlin.Any?): kotlin.Boolean [operator] declared in kotlin.Any
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
VALUE_PARAMETER name:other index:0 type:kotlin.Any?
FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override]
overridden:
public open fun hashCode (): kotlin.Int declared in kotlin.Any
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String [fake_override]
overridden:
public open fun toString (): kotlin.String declared in kotlin.Any
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
FUN name:test1 visibility:public modality:FINAL <> ($this:<root>.SafeCalls, x:kotlin.String?) returnType:kotlin.Int?
$this: VALUE_PARAMETER name:<this> type:<root>.SafeCalls
VALUE_PARAMETER name:x index:0 type:kotlin.String?
BLOCK_BODY
RETURN type=kotlin.Nothing from='public final fun test1 (x: kotlin.String?): kotlin.Int? declared in <root>.SafeCalls'
BLOCK type=kotlin.Int? origin=SAFE_CALL
VAR IR_TEMPORARY_VARIABLE name:tmp_0 type:kotlin.String? [val]
GET_VAR 'x: kotlin.String? declared in <root>.SafeCalls.test1' type=kotlin.String? origin=null
WHEN type=kotlin.Int? origin=null
BRANCH
if: CALL 'public final fun EQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EQEQ
arg0: GET_VAR 'val tmp_0: kotlin.String? [val] declared in <root>.SafeCalls.test1' type=kotlin.String? origin=null
arg1: CONST Null type=kotlin.Nothing? value=null
then: CONST Null type=kotlin.Nothing? value=null
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
then: CALL 'public open fun <get-length> (): kotlin.Int declared in kotlin.String' type=kotlin.Int origin=GET_PROPERTY
$this: GET_VAR 'val tmp_0: kotlin.String? [val] declared in <root>.SafeCalls.test1' type=kotlin.String? origin=null
FUN name:test2 visibility:public modality:FINAL <> ($this:<root>.SafeCalls, x:kotlin.String?) returnType:kotlin.Int?
$this: VALUE_PARAMETER name:<this> type:<root>.SafeCalls
VALUE_PARAMETER name:x index:0 type:kotlin.String?
BLOCK_BODY
RETURN type=kotlin.Nothing from='public final fun test2 (x: kotlin.String?): kotlin.Int? declared in <root>.SafeCalls'
BLOCK type=kotlin.Int? origin=SAFE_CALL
VAR IR_TEMPORARY_VARIABLE name:tmp_1 type:kotlin.String? [val]
GET_VAR 'x: kotlin.String? declared in <root>.SafeCalls.test2' type=kotlin.String? origin=null
WHEN type=kotlin.Int? origin=null
BRANCH
if: CALL 'public final fun EQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EQEQ
arg0: GET_VAR 'val tmp_1: kotlin.String? [val] declared in <root>.SafeCalls.test2' type=kotlin.String? origin=null
arg1: CONST Null type=kotlin.Nothing? value=null
then: CONST Null type=kotlin.Nothing? value=null
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
then: CALL 'public open fun hashCode (): kotlin.Int [fake_override] declared in kotlin.String' type=kotlin.Int origin=null
$this: GET_VAR 'val tmp_1: kotlin.String? [val] declared in <root>.SafeCalls.test2' type=kotlin.String? origin=null
FUN name:test3 visibility:public modality:FINAL <> ($this:<root>.SafeCalls, x:kotlin.String?, y:kotlin.Any?) returnType:kotlin.Boolean?
$this: VALUE_PARAMETER name:<this> type:<root>.SafeCalls
VALUE_PARAMETER name:x index:0 type:kotlin.String?
VALUE_PARAMETER name:y index:1 type:kotlin.Any?
BLOCK_BODY
RETURN type=kotlin.Nothing from='public final fun test3 (x: kotlin.String?, y: kotlin.Any?): kotlin.Boolean? declared in <root>.SafeCalls'
BLOCK type=kotlin.Boolean? origin=SAFE_CALL
VAR IR_TEMPORARY_VARIABLE name:tmp_2 type:kotlin.String? [val]
GET_VAR 'x: kotlin.String? declared in <root>.SafeCalls.test3' type=kotlin.String? origin=null
WHEN type=kotlin.Boolean? origin=null
BRANCH
if: CALL 'public final fun EQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EQEQ
arg0: GET_VAR 'val tmp_2: kotlin.String? [val] declared in <root>.SafeCalls.test3' type=kotlin.String? origin=null
arg1: CONST Null type=kotlin.Nothing? value=null
then: CONST Null type=kotlin.Nothing? value=null
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
then: CALL 'public open fun equals (other: kotlin.Any?): kotlin.Boolean [operator] declared in kotlin.String' type=kotlin.Boolean origin=null
$this: GET_VAR 'val tmp_2: kotlin.String? [val] declared in <root>.SafeCalls.test3' type=kotlin.String? origin=null
other: GET_VAR 'y: kotlin.Any? declared in <root>.SafeCalls.test3' type=kotlin.Any? origin=null
FUN name:test4 visibility:public modality:FINAL <> ($this:<root>.SafeCalls, x:<root>.SafeCalls.Ref?) returnType:kotlin.Unit
$this: VALUE_PARAMETER name:<this> type:<root>.SafeCalls
VALUE_PARAMETER name:x index:0 type:<root>.SafeCalls.Ref?
BLOCK_BODY
BLOCK type=kotlin.Unit origin=SAFE_CALL
VAR IR_TEMPORARY_VARIABLE name:tmp_3 type:<root>.SafeCalls.Ref? [val]
GET_VAR 'x: <root>.SafeCalls.Ref? declared in <root>.SafeCalls.test4' type=<root>.SafeCalls.Ref? origin=null
WHEN type=kotlin.Unit origin=null
BRANCH
if: CALL 'public final fun EQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EQEQ
arg0: GET_VAR 'val tmp_3: <root>.SafeCalls.Ref? [val] declared in <root>.SafeCalls.test4' type=<root>.SafeCalls.Ref? origin=null
arg1: CONST Null type=kotlin.Nothing? value=null
then: TYPE_OP type=kotlin.Unit origin=IMPLICIT_COERCION_TO_UNIT typeOperand=kotlin.Unit
CONST Null type=kotlin.Nothing? value=null
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
then: CALL 'public final fun <set-value> (<set-?>: kotlin.Int): kotlin.Unit declared in <root>.SafeCalls.Ref' type=kotlin.Unit origin=EQ
$this: GET_VAR 'val tmp_3: <root>.SafeCalls.Ref? [val] declared in <root>.SafeCalls.test4' type=<root>.SafeCalls.Ref? origin=null
<set-?>: CONST Int type=kotlin.Int value=0
FUN name:test5 visibility:public modality:FINAL <> ($this:<root>.SafeCalls, $receiver:<root>.SafeCalls.IHost, s:kotlin.String?) returnType:kotlin.Int?
$this: VALUE_PARAMETER name:<this> type:<root>.SafeCalls
$receiver: VALUE_PARAMETER name:<this> type:<root>.SafeCalls.IHost
VALUE_PARAMETER name:s index:0 type:kotlin.String?
BLOCK_BODY
RETURN type=kotlin.Nothing from='public final fun test5 (s: kotlin.String?): kotlin.Int? declared in <root>.SafeCalls'
BLOCK type=kotlin.Int? origin=SAFE_CALL
VAR IR_TEMPORARY_VARIABLE name:tmp_4 type:kotlin.String? [val]
GET_VAR 's: kotlin.String? declared in <root>.SafeCalls.test5' type=kotlin.String? origin=null
WHEN type=kotlin.Int? origin=null
BRANCH
if: CALL 'public final fun EQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EQEQ
arg0: GET_VAR 'val tmp_4: kotlin.String? [val] declared in <root>.SafeCalls.test5' type=kotlin.String? origin=null
arg1: CONST Null type=kotlin.Nothing? value=null
then: CONST Null type=kotlin.Nothing? value=null
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
then: CALL 'public open fun extLength (): kotlin.Int declared in <root>.SafeCalls.IHost' type=kotlin.Int origin=null
$this: GET_VAR '<this>: <root>.SafeCalls.IHost declared in <root>.SafeCalls.test5' type=<root>.SafeCalls.IHost origin=null
$receiver: GET_VAR 'val tmp_4: kotlin.String? [val] declared in <root>.SafeCalls.test5' type=kotlin.String? origin=null
FUN name:foo visibility:public modality:FINAL <> ($this:<root>.SafeCalls, $receiver:kotlin.Int) returnType:kotlin.Int
$this: VALUE_PARAMETER name:<this> type:<root>.SafeCalls
$receiver: VALUE_PARAMETER name:<this> type:kotlin.Int
BLOCK_BODY
RETURN type=kotlin.Nothing from='public final fun foo (): kotlin.Int declared in <root>.SafeCalls'
CONST Int type=kotlin.Int value=239
FUN name:box visibility:public modality:FINAL <> ($this:<root>.SafeCalls) returnType:kotlin.Unit
$this: VALUE_PARAMETER name:<this> type:<root>.SafeCalls
BLOCK_BODY
TYPE_OP type=kotlin.Unit origin=IMPLICIT_COERCION_TO_UNIT typeOperand=kotlin.Unit
BLOCK type=kotlin.Int? origin=SAFE_CALL
VAR IR_TEMPORARY_VARIABLE name:tmp_5 type:kotlin.Int [val]
CONST Int type=kotlin.Int value=42
WHEN type=kotlin.Int? origin=null
BRANCH
if: CALL 'public final fun EQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EQEQ
arg0: GET_VAR 'val tmp_5: kotlin.Int [val] declared in <root>.SafeCalls.box' type=kotlin.Int origin=null
arg1: CONST Null type=kotlin.Nothing? value=null
then: CONST Null type=kotlin.Nothing? value=null
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
then: CALL 'public final fun foo (): kotlin.Int declared in <root>.SafeCalls' type=kotlin.Int origin=null
$this: GET_VAR '<this>: <root>.SafeCalls declared in <root>.SafeCalls.box' type=<root>.SafeCalls origin=null
$receiver: GET_VAR 'val tmp_5: kotlin.Int [val] declared in <root>.SafeCalls.box' type=kotlin.Int origin=null
VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.SafeCalls