ir.tree: fix .originalKotlinType for transformed IR types

This commit is contained in:
Svyatoslav Scherbina
2018-07-02 18:48:09 +03:00
parent 4fd6dcd063
commit 226f16b44e
19 changed files with 184 additions and 164 deletions
@@ -22,7 +22,13 @@ fun IrType.withHasQuestionMark(hasQuestionMark: Boolean): IrType =
if (this.hasQuestionMark == hasQuestionMark)
this
else
IrSimpleTypeImpl(originalKotlinType, classifier, hasQuestionMark, arguments, annotations)
IrSimpleTypeImpl(
makeKotlinType(classifier, arguments, hasQuestionMark),
classifier,
hasQuestionMark,
arguments,
annotations
)
else -> this
}
@@ -35,7 +41,7 @@ val IrType.classifierOrNull: IrClassifierSymbol?
fun IrType.makeNotNull() =
if (this is IrSimpleType && this.hasQuestionMark)
IrSimpleTypeImpl(
originalKotlinType,
makeKotlinType(classifier, arguments, false),
classifier,
false,
arguments,
@@ -48,7 +54,7 @@ fun IrType.makeNotNull() =
fun IrType.makeNullable() =
if (this is IrSimpleType && !this.hasQuestionMark)
IrSimpleTypeImpl(
originalKotlinType,
makeKotlinType(classifier, arguments, true),
classifier,
true,
arguments,
@@ -64,22 +70,26 @@ fun IrType.toKotlinType(): KotlinType {
}
return when (this) {
is IrSimpleType -> {
val classifier = classifier.descriptor
val arguments = arguments.mapIndexed { index, it ->
when (it) {
is IrTypeProjection -> TypeProjectionImpl(it.variance, it.type.toKotlinType())
is IrStarProjection -> StarProjectionImpl((classifier as ClassDescriptor).declaredTypeParameters[index])
else -> error(it)
}
}
classifier.defaultType.replace(newArguments = arguments).makeNullableAsSpecified(hasQuestionMark)
}
is IrSimpleType -> makeKotlinType(classifier, arguments, hasQuestionMark)
else -> TODO(toString())
}
}
private fun makeKotlinType(
classifier: IrClassifierSymbol,
arguments: List<IrTypeArgument>,
hasQuestionMark: Boolean
): SimpleType {
val kotlinTypeArguments = arguments.mapIndexed { index, it ->
when (it) {
is IrTypeProjection -> TypeProjectionImpl(it.variance, it.type.toKotlinType())
is IrStarProjection -> StarProjectionImpl((classifier.descriptor as ClassDescriptor).declaredTypeParameters[index])
else -> error(it)
}
}
return classifier.descriptor.defaultType.replace(newArguments = kotlinTypeArguments).makeNullableAsSpecified(hasQuestionMark)
}
fun ClassifierDescriptor.toIrType(hasQuestionMark: Boolean = false): IrType {
val symbol = getSymbol()
return IrSimpleTypeImpl(defaultType, symbol, hasQuestionMark, listOf(), listOf())
@@ -624,7 +624,7 @@ FILE fqName:<root> fileName:/dataClassWithArrayMembers.kt
BRANCH
if: CALL 'EQEQ(Any?, Any?): Boolean' type=kotlin.Boolean origin=EQEQ
arg0: GET_VAR 'tmp1: Array<Any>?' type=kotlin.Array<kotlin.Any>? origin=null
arg1: CONST Null type=kotlin.Nothing value=null
arg1: CONST Null type=kotlin.Nothing? value=null
then: CONST Int type=kotlin.Int value=0
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
+3 -3
View File
@@ -246,7 +246,7 @@ FILE fqName:<root> fileName:/dataClasses.kt
BRANCH
if: CALL 'EQEQ(Any?, Any?): Boolean' type=kotlin.Boolean origin=EQEQ
arg0: GET_VAR 'tmp1: Any?' type=kotlin.Any? origin=null
arg1: CONST Null type=kotlin.Nothing value=null
arg1: CONST Null type=kotlin.Nothing? value=null
then: CONST Int type=kotlin.Int value=0
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
@@ -441,7 +441,7 @@ FILE fqName:<root> fileName:/dataClasses.kt
BRANCH
if: CALL 'EQEQ(Any?, Any?): Boolean' type=kotlin.Boolean origin=EQEQ
arg0: GET_VAR 'tmp1: Double?' type=kotlin.Double? origin=null
arg1: CONST Null type=kotlin.Nothing value=null
arg1: CONST Null type=kotlin.Nothing? value=null
then: CONST Int type=kotlin.Int value=0
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
@@ -468,7 +468,7 @@ FILE fqName:<root> fileName:/dataClasses.kt
BRANCH
if: CALL 'EQEQ(Any?, Any?): Boolean' type=kotlin.Boolean origin=EQEQ
arg0: GET_VAR 'tmp2: Float?' type=kotlin.Float? origin=null
arg1: CONST Null type=kotlin.Nothing value=null
arg1: CONST Null type=kotlin.Nothing? value=null
then: CONST Int type=kotlin.Int value=0
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
+1 -1
View File
@@ -63,7 +63,7 @@ FILE fqName:<root> fileName:/dataClassesGeneric.kt
BRANCH
if: CALL 'EQEQ(Any?, Any?): Boolean' type=kotlin.Boolean origin=EQEQ
arg0: GET_VAR 'tmp1: T' type=T origin=null
arg1: CONST Null type=kotlin.Nothing value=null
arg1: CONST Null type=kotlin.Nothing? value=null
then: CONST Int type=kotlin.Int value=0
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
@@ -92,7 +92,7 @@ FILE fqName:<root> fileName:/dataClassMembers.kt
BRANCH
if: CALL 'EQEQ(Any?, Any?): Boolean' type=kotlin.Boolean origin=EQEQ
arg0: GET_VAR 'tmp1: T' type=T origin=null
arg1: CONST Null type=kotlin.Nothing value=null
arg1: CONST Null type=kotlin.Nothing? value=null
then: CONST Int type=kotlin.Int value=0
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
+11 -11
View File
@@ -3,14 +3,14 @@ FILE fqName:<root> fileName:/bangbang.kt
VALUE_PARAMETER name:a index:0 type:kotlin.Any? flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='test1(Any?): Any'
BLOCK type=kotlin.Any? origin=EXCLEXCL
BLOCK type=kotlin.Any origin=EXCLEXCL
VAR IR_TEMPORARY_VARIABLE name:tmp0_notnull type:kotlin.Any? flags:val
GET_VAR 'value-parameter a: Any?' type=kotlin.Any? origin=null
WHEN type=kotlin.Any? origin=null
WHEN type=kotlin.Any origin=null
BRANCH
if: CALL 'EQEQ(Any?, Any?): Boolean' type=kotlin.Boolean origin=EQEQ
arg0: GET_VAR 'tmp0_notnull: Any?' type=kotlin.Any? origin=null
arg1: CONST Null type=kotlin.Nothing value=null
arg1: CONST Null type=kotlin.Nothing? value=null
then: CALL 'THROW_NPE(): Nothing' type=kotlin.Nothing origin=EXCLEXCL
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
@@ -20,16 +20,16 @@ FILE fqName:<root> fileName:/bangbang.kt
BLOCK_BODY
RETURN type=kotlin.Nothing from='test2(Any?): Int'
BLOCK type=kotlin.Int origin=EXCLEXCL
VAR IR_TEMPORARY_VARIABLE name:tmp1_notnull type:kotlin.Int flags:val
BLOCK type=kotlin.Int origin=SAFE_CALL
VAR IR_TEMPORARY_VARIABLE name:tmp1_notnull type:kotlin.Int? flags:val
BLOCK type=kotlin.Int? origin=SAFE_CALL
VAR IR_TEMPORARY_VARIABLE name:tmp0_safe_receiver type:kotlin.Any? flags:val
GET_VAR 'value-parameter a: Any?' type=kotlin.Any? origin=null
WHEN type=kotlin.Int origin=null
WHEN type=kotlin.Int? origin=null
BRANCH
if: CALL 'EQEQ(Any?, Any?): Boolean' type=kotlin.Boolean origin=EQEQ
arg0: GET_VAR 'tmp0_safe_receiver: Any?' type=kotlin.Any? origin=null
arg1: CONST Null type=kotlin.Nothing value=null
then: CONST Null type=kotlin.Nothing value=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 'hashCode(): Int' type=kotlin.Int origin=null
@@ -37,10 +37,10 @@ FILE fqName:<root> fileName:/bangbang.kt
WHEN type=kotlin.Int origin=null
BRANCH
if: CALL 'EQEQ(Any?, Any?): Boolean' type=kotlin.Boolean origin=EQEQ
arg0: GET_VAR 'tmp1_notnull: Int' type=kotlin.Int origin=null
arg1: CONST Null type=kotlin.Nothing value=null
arg0: GET_VAR 'tmp1_notnull: Int?' type=kotlin.Int? origin=null
arg1: CONST Null type=kotlin.Nothing? value=null
then: CALL 'THROW_NPE(): Nothing' type=kotlin.Nothing origin=EXCLEXCL
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
then: GET_VAR 'tmp1_notnull: Int' type=kotlin.Int origin=null
then: GET_VAR 'tmp1_notnull: Int?' type=kotlin.Int? origin=null
@@ -13,7 +13,7 @@ FILE fqName:<root> fileName:/breakContinueInLoopHeader.kt
BRANCH
if: CALL 'EQEQ(Any?, Any?): Boolean' type=kotlin.Boolean origin=EQEQ
arg0: GET_VAR 'tmp0_elvis_lhs: Boolean?' type=kotlin.Boolean? origin=null
arg1: CONST Null type=kotlin.Nothing value=null
arg1: CONST Null type=kotlin.Nothing? value=null
then: BREAK label=null loop.label=L
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
@@ -32,7 +32,7 @@ FILE fqName:<root> fileName:/breakContinueInLoopHeader.kt
BRANCH
if: CALL 'EQEQ(Any?, Any?): Boolean' type=kotlin.Boolean origin=EQEQ
arg0: GET_VAR 'tmp0_elvis_lhs: Boolean?' type=kotlin.Boolean? origin=null
arg1: CONST Null type=kotlin.Nothing value=null
arg1: CONST Null type=kotlin.Nothing? value=null
then: CONTINUE label=null loop.label=L
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
@@ -53,7 +53,7 @@ FILE fqName:<root> fileName:/breakContinueInLoopHeader.kt
BRANCH
if: CALL 'EQEQ(Any?, Any?): Boolean' type=kotlin.Boolean origin=EQEQ
arg0: GET_VAR 'tmp0_elvis_lhs: List<String>?' type=kotlin.collections.List<kotlin.String>? origin=null
arg1: CONST Null type=kotlin.Nothing value=null
arg1: CONST Null type=kotlin.Nothing? value=null
then: CONTINUE label=null loop.label=L
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
@@ -81,7 +81,7 @@ FILE fqName:<root> fileName:/breakContinueInLoopHeader.kt
BRANCH
if: CALL 'EQEQ(Any?, Any?): Boolean' type=kotlin.Boolean origin=EQEQ
arg0: GET_VAR 'tmp0_elvis_lhs: List<String>?' type=kotlin.collections.List<kotlin.String>? origin=null
arg1: CONST Null type=kotlin.Nothing value=null
arg1: CONST Null type=kotlin.Nothing? value=null
then: BREAK label=null loop.label=L
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
+20 -20
View File
@@ -32,21 +32,21 @@ FILE fqName:<root> fileName:/chainOfSafeCalls.kt
VALUE_PARAMETER name:nc index:0 type:C? flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='test(C?): C?'
BLOCK type=C origin=SAFE_CALL
VAR IR_TEMPORARY_VARIABLE name:tmp3_safe_receiver type:C flags:val
BLOCK type=C origin=SAFE_CALL
BLOCK type=C? origin=SAFE_CALL
VAR IR_TEMPORARY_VARIABLE name:tmp3_safe_receiver type:C? flags:val
BLOCK type=C? origin=SAFE_CALL
VAR IR_TEMPORARY_VARIABLE name:tmp2_safe_receiver type:C? flags:val
BLOCK type=C? origin=SAFE_CALL
VAR IR_TEMPORARY_VARIABLE name:tmp1_safe_receiver type:C flags:val
BLOCK type=C origin=SAFE_CALL
VAR IR_TEMPORARY_VARIABLE name:tmp1_safe_receiver type:C? flags:val
BLOCK type=C? origin=SAFE_CALL
VAR IR_TEMPORARY_VARIABLE name:tmp0_safe_receiver type:C? flags:val
GET_VAR 'value-parameter nc: C?' type=C? origin=null
WHEN type=C origin=null
WHEN type=C? origin=null
BRANCH
if: CALL 'EQEQ(Any?, Any?): Boolean' type=kotlin.Boolean origin=EQEQ
arg0: GET_VAR 'tmp0_safe_receiver: C?' type=C? origin=null
arg1: CONST Null type=kotlin.Nothing value=null
then: CONST Null type=kotlin.Nothing value=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 'foo(): C' type=C origin=null
@@ -54,31 +54,31 @@ FILE fqName:<root> fileName:/chainOfSafeCalls.kt
WHEN type=C? origin=null
BRANCH
if: CALL 'EQEQ(Any?, Any?): Boolean' type=kotlin.Boolean origin=EQEQ
arg0: GET_VAR 'tmp1_safe_receiver: C' type=C origin=null
arg1: CONST Null type=kotlin.Nothing value=null
then: CONST Null type=kotlin.Nothing value=null
arg0: GET_VAR 'tmp1_safe_receiver: C?' type=C? origin=null
arg1: CONST Null type=kotlin.Nothing? value=null
then: CONST Null type=kotlin.Nothing? value=null
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
then: CALL 'bar(): C?' type=C? origin=null
$this: GET_VAR 'tmp1_safe_receiver: C' type=C origin=null
WHEN type=C origin=null
$this: GET_VAR 'tmp1_safe_receiver: C?' type=C? origin=null
WHEN type=C? origin=null
BRANCH
if: CALL 'EQEQ(Any?, Any?): Boolean' type=kotlin.Boolean origin=EQEQ
arg0: GET_VAR 'tmp2_safe_receiver: C?' type=C? origin=null
arg1: CONST Null type=kotlin.Nothing value=null
then: CONST Null type=kotlin.Nothing value=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 'foo(): C' type=C origin=null
$this: GET_VAR 'tmp2_safe_receiver: C?' type=C? origin=null
WHEN type=C origin=null
WHEN type=C? origin=null
BRANCH
if: CALL 'EQEQ(Any?, Any?): Boolean' type=kotlin.Boolean origin=EQEQ
arg0: GET_VAR 'tmp3_safe_receiver: C' type=C origin=null
arg1: CONST Null type=kotlin.Nothing value=null
then: CONST Null type=kotlin.Nothing value=null
arg0: GET_VAR 'tmp3_safe_receiver: C?' type=C? origin=null
arg1: CONST Null type=kotlin.Nothing? value=null
then: CONST Null type=kotlin.Nothing? value=null
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
then: CALL 'foo(): C' type=C origin=null
$this: GET_VAR 'tmp3_safe_receiver: C' type=C origin=null
$this: GET_VAR 'tmp3_safe_receiver: C?' type=C? origin=null
+32 -28
View File
@@ -25,32 +25,36 @@ FILE fqName:<root> fileName:/coercionToUnit.kt
element: CONST String type=kotlin.String value=
FUN name:test3 visibility:public modality:FINAL <> () returnType:kotlin.Unit flags:
BLOCK_BODY
BLOCK type=kotlin.Unit origin=SAFE_CALL
VAR IR_TEMPORARY_VARIABLE name:tmp0_safe_receiver type:java.io.PrintStream? flags:val
GET_FIELD 'out: PrintStream!' type=java.io.PrintStream? origin=GET_PROPERTY
WHEN type=kotlin.Unit origin=null
BRANCH
if: CALL 'EQEQ(Any?, Any?): Boolean' type=kotlin.Boolean origin=EQEQ
arg0: GET_VAR 'tmp0_safe_receiver: PrintStream?' type=java.io.PrintStream? 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 'println(String!): Unit' type=kotlin.Unit origin=null
$this: GET_VAR 'tmp0_safe_receiver: PrintStream?' type=java.io.PrintStream? origin=null
x: CONST String type=kotlin.String value=Hello,
BLOCK type=kotlin.Unit origin=SAFE_CALL
VAR IR_TEMPORARY_VARIABLE name:tmp1_safe_receiver type:java.io.PrintStream? flags:val
GET_FIELD 'out: PrintStream!' type=java.io.PrintStream? origin=GET_PROPERTY
WHEN type=kotlin.Unit origin=null
BRANCH
if: CALL 'EQEQ(Any?, Any?): Boolean' type=kotlin.Boolean origin=EQEQ
arg0: GET_VAR 'tmp1_safe_receiver: PrintStream?' type=java.io.PrintStream? 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 'println(String!): Unit' type=kotlin.Unit origin=null
$this: GET_VAR 'tmp1_safe_receiver: PrintStream?' type=java.io.PrintStream? origin=null
x: CONST String type=kotlin.String value=world!
TYPE_OP type=kotlin.Unit origin=IMPLICIT_COERCION_TO_UNIT typeOperand=kotlin.Unit
typeOperand: CLASS IR_EXTERNAL_DECLARATION_STUB OBJECT name:Unit modality:FINAL visibility:public flags: superTypes:[kotlin.Any]
BLOCK type=kotlin.Unit? origin=SAFE_CALL
VAR IR_TEMPORARY_VARIABLE name:tmp0_safe_receiver type:java.io.PrintStream? flags:val
GET_FIELD 'out: PrintStream!' type=java.io.PrintStream? origin=GET_PROPERTY
WHEN type=kotlin.Unit? origin=null
BRANCH
if: CALL 'EQEQ(Any?, Any?): Boolean' type=kotlin.Boolean origin=EQEQ
arg0: GET_VAR 'tmp0_safe_receiver: PrintStream?' type=java.io.PrintStream? 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 'println(String!): Unit' type=kotlin.Unit origin=null
$this: GET_VAR 'tmp0_safe_receiver: PrintStream?' type=java.io.PrintStream? origin=null
x: CONST String type=kotlin.String value=Hello,
TYPE_OP type=kotlin.Unit origin=IMPLICIT_COERCION_TO_UNIT typeOperand=kotlin.Unit
typeOperand: CLASS IR_EXTERNAL_DECLARATION_STUB OBJECT name:Unit modality:FINAL visibility:public flags: superTypes:[kotlin.Any]
BLOCK type=kotlin.Unit? origin=SAFE_CALL
VAR IR_TEMPORARY_VARIABLE name:tmp1_safe_receiver type:java.io.PrintStream? flags:val
GET_FIELD 'out: PrintStream!' type=java.io.PrintStream? origin=GET_PROPERTY
WHEN type=kotlin.Unit? origin=null
BRANCH
if: CALL 'EQEQ(Any?, Any?): Boolean' type=kotlin.Boolean origin=EQEQ
arg0: GET_VAR 'tmp1_safe_receiver: PrintStream?' type=java.io.PrintStream? 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 'println(String!): Unit' type=kotlin.Unit origin=null
$this: GET_VAR 'tmp1_safe_receiver: PrintStream?' type=java.io.PrintStream? origin=null
x: CONST String type=kotlin.String value=world!
+4 -4
View File
@@ -9,15 +9,15 @@ FILE fqName:<root> fileName:/dotQualified.kt
VALUE_PARAMETER name:s index:0 type:kotlin.String? flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='lengthN(String?): Int?'
BLOCK type=kotlin.Int origin=SAFE_CALL
BLOCK type=kotlin.Int? origin=SAFE_CALL
VAR IR_TEMPORARY_VARIABLE name:tmp0_safe_receiver type:kotlin.String? flags:val
GET_VAR 'value-parameter s: String?' type=kotlin.String? origin=null
WHEN type=kotlin.Int origin=null
WHEN type=kotlin.Int? origin=null
BRANCH
if: CALL 'EQEQ(Any?, Any?): Boolean' type=kotlin.Boolean origin=EQEQ
arg0: GET_VAR 'tmp0_safe_receiver: String?' type=kotlin.String? origin=null
arg1: CONST Null type=kotlin.Nothing value=null
then: CONST Null type=kotlin.Nothing value=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 '<get-length>(): Int' type=kotlin.Int origin=GET_PROPERTY
+5 -5
View File
@@ -24,7 +24,7 @@ FILE fqName:<root> fileName:/elvis.kt
BRANCH
if: CALL 'EQEQ(Any?, Any?): Boolean' type=kotlin.Boolean origin=EQEQ
arg0: GET_VAR 'tmp0_elvis_lhs: Any?' type=kotlin.Any? origin=null
arg1: CONST Null type=kotlin.Nothing value=null
arg1: CONST Null type=kotlin.Nothing? value=null
then: GET_VAR 'value-parameter b: Any' type=kotlin.Any origin=null
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
@@ -41,7 +41,7 @@ FILE fqName:<root> fileName:/elvis.kt
BRANCH
if: CALL 'EQEQ(Any?, Any?): Boolean' type=kotlin.Boolean origin=EQEQ
arg0: GET_VAR 'tmp0_elvis_lhs: String?' type=kotlin.String? origin=null
arg1: CONST Null type=kotlin.Nothing value=null
arg1: CONST Null type=kotlin.Nothing? value=null
then: GET_VAR 'value-parameter b: Any' type=kotlin.Any origin=null
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
@@ -72,7 +72,7 @@ FILE fqName:<root> fileName:/elvis.kt
BRANCH
if: CALL 'EQEQ(Any?, Any?): Boolean' type=kotlin.Boolean origin=EQEQ
arg0: GET_VAR 'tmp0_elvis_lhs: Any?' type=kotlin.Any? origin=null
arg1: CONST Null type=kotlin.Nothing value=null
arg1: CONST Null type=kotlin.Nothing? value=null
then: TYPE_OP type=kotlin.String origin=IMPLICIT_CAST typeOperand=kotlin.String
typeOperand: CLASS IR_EXTERNAL_DECLARATION_STUB CLASS name:String modality:FINAL visibility:public flags: superTypes:[kotlin.Comparable<kotlin.String>; kotlin.CharSequence; java.io.Serializable]
GET_VAR 'value-parameter b: Any?' type=kotlin.Any? origin=null
@@ -92,7 +92,7 @@ FILE fqName:<root> fileName:/elvis.kt
BRANCH
if: CALL 'EQEQ(Any?, Any?): Boolean' type=kotlin.Boolean origin=EQEQ
arg0: GET_VAR 'tmp0_elvis_lhs: Any?' type=kotlin.Any? origin=null
arg1: CONST Null type=kotlin.Nothing value=null
arg1: CONST Null type=kotlin.Nothing? value=null
then: GET_VAR 'value-parameter x: Any' type=kotlin.Any origin=null
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
@@ -108,7 +108,7 @@ FILE fqName:<root> fileName:/elvis.kt
BRANCH
if: CALL 'EQEQ(Any?, Any?): Boolean' type=kotlin.Boolean origin=EQEQ
arg0: GET_VAR 'tmp0_elvis_lhs: Any?' type=kotlin.Any? origin=null
arg1: CONST Null type=kotlin.Nothing value=null
arg1: CONST Null type=kotlin.Nothing? value=null
then: GET_VAR 'value-parameter x: Any' type=kotlin.Any origin=null
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
@@ -4,15 +4,15 @@ FILE fqName:<root> fileName:/extFunSafeInvoke.kt
VALUE_PARAMETER name:fn index:1 type:kotlin.Any.(kotlin.Int, kotlin.String) -> kotlin.Unit flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='test(Any?, Any.(Int, String) -> Unit): Unit?'
BLOCK type=kotlin.Unit origin=SAFE_CALL
BLOCK type=kotlin.Unit? origin=SAFE_CALL
VAR IR_TEMPORARY_VARIABLE name:tmp0_safe_receiver type:kotlin.Any? flags:val
GET_VAR 'value-parameter receiver: Any?' type=kotlin.Any? origin=null
WHEN type=kotlin.Unit origin=null
WHEN type=kotlin.Unit? origin=null
BRANCH
if: CALL 'EQEQ(Any?, Any?): Boolean' type=kotlin.Boolean origin=EQEQ
arg0: GET_VAR 'tmp0_safe_receiver: Any?' type=kotlin.Any? origin=null
arg1: CONST Null type=kotlin.Nothing value=null
then: CONST Null type=kotlin.Nothing value=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 'invoke(Any, Int, String): Unit' type=kotlin.Unit origin=INVOKE
@@ -10,14 +10,14 @@ FILE fqName:<root> fileName:/eqeqRhsConditionPossiblyAffectingLhs.kt
if: TYPE_OP type=kotlin.Boolean origin=NOT_INSTANCEOF typeOperand=kotlin.Double
typeOperand: CLASS IR_EXTERNAL_DECLARATION_STUB CLASS name:Double modality:FINAL visibility:public flags: superTypes:[kotlin.Number; kotlin.Comparable<kotlin.Double>; java.io.Serializable]
GET_VAR 'value-parameter x: Any' type=kotlin.Any origin=null
then: BLOCK type=kotlin.Nothing? origin=EXCLEXCL
then: BLOCK type=kotlin.Nothing origin=EXCLEXCL
VAR IR_TEMPORARY_VARIABLE name:tmp0_notnull type:kotlin.Nothing? flags:val
CONST Null type=kotlin.Nothing? value=null
WHEN type=kotlin.Nothing? origin=null
WHEN type=kotlin.Nothing origin=null
BRANCH
if: CALL 'EQEQ(Any?, Any?): Boolean' type=kotlin.Boolean origin=EQEQ
arg0: GET_VAR 'tmp0_notnull: Nothing?' type=kotlin.Nothing? origin=null
arg1: CONST Null type=kotlin.Nothing value=null
arg1: CONST Null type=kotlin.Nothing? value=null
then: CALL 'THROW_NPE(): Nothing' type=kotlin.Nothing origin=EXCLEXCL
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
@@ -10,15 +10,15 @@ FILE fqName:<root> fileName:/nullableAnyAsIntToDouble.kt
typeOperand: CLASS IR_EXTERNAL_DECLARATION_STUB CLASS name:Int modality:FINAL visibility:public flags: superTypes:[kotlin.Number; kotlin.Comparable<kotlin.Int>; java.io.Serializable]
GET_VAR 'value-parameter x: Any?' type=kotlin.Any? origin=null
then: CALL 'less(Double, Double): Boolean' type=kotlin.Boolean origin=LT
arg0: BLOCK type=kotlin.Double origin=SAFE_CALL
arg0: BLOCK type=kotlin.Double? origin=SAFE_CALL
VAR IR_TEMPORARY_VARIABLE name:tmp0_safe_receiver type:kotlin.Any? flags:val
GET_VAR 'value-parameter x: Any?' type=kotlin.Any? origin=null
WHEN type=kotlin.Double origin=null
WHEN type=kotlin.Double? origin=null
BRANCH
if: CALL 'EQEQ(Any?, Any?): Boolean' type=kotlin.Boolean origin=EQEQ
arg0: GET_VAR 'tmp0_safe_receiver: Any?' type=kotlin.Any? origin=null
arg1: CONST Null type=kotlin.Nothing value=null
then: CONST Null type=kotlin.Nothing value=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 'toDouble(): Double' type=kotlin.Double origin=null
@@ -19,15 +19,15 @@ FILE fqName:<root> fileName:/nullableFloatingPointEqeq.kt
GET_VAR 'value-parameter y: Any?' type=kotlin.Any? origin=null
then: CALL 'ieee754equals(Double?, Double?): Boolean' type=kotlin.Boolean origin=EQEQ
arg0: GET_VAR 'value-parameter x: Double?' type=kotlin.Double? origin=null
arg1: BLOCK type=kotlin.Double origin=SAFE_CALL
arg1: BLOCK type=kotlin.Double? origin=SAFE_CALL
VAR IR_TEMPORARY_VARIABLE name:tmp0_safe_receiver type:kotlin.Any? flags:val
GET_VAR 'value-parameter y: Any?' type=kotlin.Any? origin=null
WHEN type=kotlin.Double origin=null
WHEN type=kotlin.Double? origin=null
BRANCH
if: CALL 'EQEQ(Any?, Any?): Boolean' type=kotlin.Boolean origin=EQEQ
arg0: GET_VAR 'tmp0_safe_receiver: Any?' type=kotlin.Any? origin=null
arg1: CONST Null type=kotlin.Nothing value=null
then: CONST Null type=kotlin.Nothing value=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 'toDouble(): Double' type=kotlin.Double origin=null
@@ -49,15 +49,15 @@ FILE fqName:<root> fileName:/nullableFloatingPointEqeq.kt
GET_VAR 'value-parameter y: Any?' type=kotlin.Any? origin=null
then: CALL 'ieee754equals(Double?, Double?): Boolean' type=kotlin.Boolean origin=EQEQ
arg0: GET_VAR 'value-parameter x: Double?' type=kotlin.Double? origin=null
arg1: BLOCK type=kotlin.Double origin=SAFE_CALL
arg1: BLOCK type=kotlin.Double? origin=SAFE_CALL
VAR IR_TEMPORARY_VARIABLE name:tmp0_safe_receiver type:kotlin.Any? flags:val
GET_VAR 'value-parameter y: Any?' type=kotlin.Any? origin=null
WHEN type=kotlin.Double origin=null
WHEN type=kotlin.Double? origin=null
BRANCH
if: CALL 'EQEQ(Any?, Any?): Boolean' type=kotlin.Boolean origin=EQEQ
arg0: GET_VAR 'tmp0_safe_receiver: Any?' type=kotlin.Any? origin=null
arg1: CONST Null type=kotlin.Nothing value=null
then: CONST Null type=kotlin.Nothing value=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 'toDouble(): Double' type=kotlin.Double origin=null
@@ -86,15 +86,15 @@ FILE fqName:<root> fileName:/nullableFloatingPointEqeq.kt
if: CONST Boolean type=kotlin.Boolean value=true
then: CONST Boolean type=kotlin.Boolean value=false
then: CALL 'ieee754equals(Double?, Double?): Boolean' type=kotlin.Boolean origin=EQEQ
arg0: BLOCK type=kotlin.Double origin=SAFE_CALL
arg0: BLOCK type=kotlin.Double? origin=SAFE_CALL
VAR IR_TEMPORARY_VARIABLE name:tmp0_safe_receiver type:kotlin.Any? flags:val
GET_VAR 'value-parameter x: Any?' type=kotlin.Any? origin=null
WHEN type=kotlin.Double origin=null
WHEN type=kotlin.Double? origin=null
BRANCH
if: CALL 'EQEQ(Any?, Any?): Boolean' type=kotlin.Boolean origin=EQEQ
arg0: GET_VAR 'tmp0_safe_receiver: Any?' type=kotlin.Any? origin=null
arg1: CONST Null type=kotlin.Nothing value=null
then: CONST Null type=kotlin.Nothing value=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 'toDouble(): Double' type=kotlin.Double origin=null
+4 -2
View File
@@ -48,8 +48,10 @@ FILE fqName:<root> fileName:/safeAssignment.kt
BRANCH
if: CALL 'EQEQ(Any?, Any?): Boolean' type=kotlin.Boolean origin=EQEQ
arg0: GET_VAR 'tmp0_safe_receiver: C?' type=C? origin=null
arg1: CONST Null type=kotlin.Nothing value=null
then: CONST Null type=kotlin.Nothing value=null
arg1: CONST Null type=kotlin.Nothing? value=null
then: TYPE_OP type=kotlin.Unit origin=IMPLICIT_COERCION_TO_UNIT typeOperand=kotlin.Unit
typeOperand: CLASS IR_EXTERNAL_DECLARATION_STUB OBJECT name:Unit modality:FINAL visibility:public flags: superTypes:[kotlin.Any]
CONST Null type=kotlin.Nothing? value=null
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
then: CALL '<set-x>(Int): Unit' type=kotlin.Unit origin=EQ
@@ -34,15 +34,15 @@ FILE fqName:test fileName:/safeCallWithIncrementDecrement.kt
$receiver: VALUE_PARAMETER name:<this> type:kotlin.Int? flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='inc() on Int?: Int?'
BLOCK type=kotlin.Int origin=SAFE_CALL
BLOCK type=kotlin.Int? origin=SAFE_CALL
VAR IR_TEMPORARY_VARIABLE name:tmp0_safe_receiver type:kotlin.Int? flags:val
GET_VAR 'this@inc: Int?' type=kotlin.Int? origin=null
WHEN type=kotlin.Int origin=null
WHEN type=kotlin.Int? origin=null
BRANCH
if: CALL 'EQEQ(Any?, Any?): Boolean' type=kotlin.Boolean origin=EQEQ
arg0: GET_VAR 'tmp0_safe_receiver: Int?' type=kotlin.Int? origin=null
arg1: CONST Null type=kotlin.Nothing value=null
then: CONST Null type=kotlin.Nothing value=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 'inc(): Int' type=kotlin.Int origin=null
@@ -68,8 +68,10 @@ FILE fqName:test fileName:/safeCallWithIncrementDecrement.kt
BRANCH
if: CALL 'EQEQ(Any?, Any?): Boolean' type=kotlin.Boolean origin=EQEQ
arg0: GET_VAR 'tmp0_safe_receiver: C?' type=test.C? origin=null
arg1: CONST Null type=kotlin.Nothing value=null
then: CONST Null type=kotlin.Nothing value=null
arg1: CONST Null type=kotlin.Nothing? value=null
then: TYPE_OP type=kotlin.Unit origin=IMPLICIT_COERCION_TO_UNIT typeOperand=kotlin.Unit
typeOperand: CLASS IR_EXTERNAL_DECLARATION_STUB OBJECT name:Unit modality:FINAL visibility:public flags: superTypes:[kotlin.Any]
CONST Null type=kotlin.Nothing? value=null
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
then: TYPE_OP type=kotlin.Unit origin=IMPLICIT_COERCION_TO_UNIT typeOperand=kotlin.Unit
@@ -92,16 +94,16 @@ FILE fqName:test fileName:/safeCallWithIncrementDecrement.kt
TYPE_OP type=kotlin.Unit origin=IMPLICIT_COERCION_TO_UNIT typeOperand=kotlin.Unit
typeOperand: CLASS IR_EXTERNAL_DECLARATION_STUB OBJECT name:Unit modality:FINAL visibility:public flags: superTypes:[kotlin.Any]
BLOCK type=kotlin.Int origin=POSTFIX_INCR
VAR IR_TEMPORARY_VARIABLE name:tmp1_array type:kotlin.Int flags:val
BLOCK type=kotlin.Int origin=SAFE_CALL
VAR IR_TEMPORARY_VARIABLE name:tmp1_array type:kotlin.Int? flags:val
BLOCK type=kotlin.Int? origin=SAFE_CALL
VAR IR_TEMPORARY_VARIABLE name:tmp0_safe_receiver type:test.C? flags:val
GET_VAR 'value-parameter nc: C?' type=test.C? origin=null
WHEN type=kotlin.Int origin=null
WHEN type=kotlin.Int? origin=null
BRANCH
if: CALL 'EQEQ(Any?, Any?): Boolean' type=kotlin.Boolean origin=EQEQ
arg0: GET_VAR 'tmp0_safe_receiver: C?' type=test.C? origin=null
arg1: CONST Null type=kotlin.Nothing value=null
then: CONST Null type=kotlin.Nothing value=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 '<get-p>() on C?: Int' type=kotlin.Int origin=GET_PROPERTY
@@ -110,10 +112,10 @@ FILE fqName:test fileName:/safeCallWithIncrementDecrement.kt
CONST Int type=kotlin.Int value=0
VAR IR_TEMPORARY_VARIABLE name:tmp3 type:kotlin.Int flags:val
CALL 'get(Int) on Int?: Int' type=kotlin.Int origin=POSTFIX_INCR
$receiver: GET_VAR 'tmp1_array: Int' type=kotlin.Int origin=null
$receiver: GET_VAR 'tmp1_array: Int?' type=kotlin.Int? origin=null
index: GET_VAR 'tmp2_index0: Int' type=kotlin.Int origin=null
CALL 'set(Int, Int) on Int?: Unit' type=kotlin.Unit origin=POSTFIX_INCR
$receiver: GET_VAR 'tmp1_array: Int' type=kotlin.Int origin=null
$receiver: GET_VAR 'tmp1_array: Int?' type=kotlin.Int? origin=null
index: GET_VAR 'tmp2_index0: Int' type=kotlin.Int origin=null
value: CALL 'inc(): Int' type=kotlin.Int origin=POSTFIX_INCR
$this: GET_VAR 'tmp3: Int' type=kotlin.Int origin=null
+24 -22
View File
@@ -64,15 +64,15 @@ FILE fqName:<root> fileName:/safeCalls.kt
VALUE_PARAMETER name:x index:0 type:kotlin.String? flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='test1(String?): Int?'
BLOCK type=kotlin.Int origin=SAFE_CALL
BLOCK type=kotlin.Int? origin=SAFE_CALL
VAR IR_TEMPORARY_VARIABLE name:tmp0_safe_receiver type:kotlin.String? flags:val
GET_VAR 'value-parameter x: String?' type=kotlin.String? origin=null
WHEN type=kotlin.Int origin=null
WHEN type=kotlin.Int? origin=null
BRANCH
if: CALL 'EQEQ(Any?, Any?): Boolean' type=kotlin.Boolean origin=EQEQ
arg0: GET_VAR 'tmp0_safe_receiver: String?' type=kotlin.String? origin=null
arg1: CONST Null type=kotlin.Nothing value=null
then: CONST Null type=kotlin.Nothing value=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 '<get-length>(): Int' type=kotlin.Int origin=GET_PROPERTY
@@ -81,15 +81,15 @@ FILE fqName:<root> fileName:/safeCalls.kt
VALUE_PARAMETER name:x index:0 type:kotlin.String? flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='test2(String?): Int?'
BLOCK type=kotlin.Int origin=SAFE_CALL
BLOCK type=kotlin.Int? origin=SAFE_CALL
VAR IR_TEMPORARY_VARIABLE name:tmp0_safe_receiver type:kotlin.String? flags:val
GET_VAR 'value-parameter x: String?' type=kotlin.String? origin=null
WHEN type=kotlin.Int origin=null
WHEN type=kotlin.Int? origin=null
BRANCH
if: CALL 'EQEQ(Any?, Any?): Boolean' type=kotlin.Boolean origin=EQEQ
arg0: GET_VAR 'tmp0_safe_receiver: String?' type=kotlin.String? origin=null
arg1: CONST Null type=kotlin.Nothing value=null
then: CONST Null type=kotlin.Nothing value=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 'hashCode(): Int' type=kotlin.Int origin=null
@@ -99,15 +99,15 @@ FILE fqName:<root> fileName:/safeCalls.kt
VALUE_PARAMETER name:y index:1 type:kotlin.Any? flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='test3(String?, Any?): Boolean?'
BLOCK type=kotlin.Boolean origin=SAFE_CALL
BLOCK type=kotlin.Boolean? origin=SAFE_CALL
VAR IR_TEMPORARY_VARIABLE name:tmp0_safe_receiver type:kotlin.String? flags:val
GET_VAR 'value-parameter x: String?' type=kotlin.String? origin=null
WHEN type=kotlin.Boolean origin=null
WHEN type=kotlin.Boolean? origin=null
BRANCH
if: CALL 'EQEQ(Any?, Any?): Boolean' type=kotlin.Boolean origin=EQEQ
arg0: GET_VAR 'tmp0_safe_receiver: String?' type=kotlin.String? origin=null
arg1: CONST Null type=kotlin.Nothing value=null
then: CONST Null type=kotlin.Nothing value=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 'equals(Any?): Boolean' type=kotlin.Boolean origin=null
@@ -123,8 +123,10 @@ FILE fqName:<root> fileName:/safeCalls.kt
BRANCH
if: CALL 'EQEQ(Any?, Any?): Boolean' type=kotlin.Boolean origin=EQEQ
arg0: GET_VAR 'tmp0_safe_receiver: Ref?' type=Ref? origin=null
arg1: CONST Null type=kotlin.Nothing value=null
then: CONST Null type=kotlin.Nothing value=null
arg1: CONST Null type=kotlin.Nothing? value=null
then: TYPE_OP type=kotlin.Unit origin=IMPLICIT_COERCION_TO_UNIT typeOperand=kotlin.Unit
typeOperand: CLASS IR_EXTERNAL_DECLARATION_STUB OBJECT name:Unit modality:FINAL visibility:public flags: superTypes:[kotlin.Any]
CONST Null type=kotlin.Nothing? value=null
BRANCH
if: CONST Boolean type=kotlin.Boolean value=true
then: CALL '<set-value>(Int): Unit' type=kotlin.Unit origin=EQ
@@ -135,15 +137,15 @@ FILE fqName:<root> fileName:/safeCalls.kt
VALUE_PARAMETER name:s index:0 type:kotlin.String? flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='test5(String?) on IHost: Int?'
BLOCK type=kotlin.Int origin=SAFE_CALL
BLOCK type=kotlin.Int? origin=SAFE_CALL
VAR IR_TEMPORARY_VARIABLE name:tmp0_safe_receiver type:kotlin.String? flags:val
GET_VAR 'value-parameter s: String?' type=kotlin.String? origin=null
WHEN type=kotlin.Int origin=null
WHEN type=kotlin.Int? origin=null
BRANCH
if: CALL 'EQEQ(Any?, Any?): Boolean' type=kotlin.Boolean origin=EQEQ
arg0: GET_VAR 'tmp0_safe_receiver: String?' type=kotlin.String? origin=null
arg1: CONST Null type=kotlin.Nothing value=null
then: CONST Null type=kotlin.Nothing value=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 'extLength() on String: Int' type=kotlin.Int origin=null
@@ -158,15 +160,15 @@ FILE fqName:<root> fileName:/safeCalls.kt
BLOCK_BODY
TYPE_OP type=kotlin.Unit origin=IMPLICIT_COERCION_TO_UNIT typeOperand=kotlin.Unit
typeOperand: CLASS IR_EXTERNAL_DECLARATION_STUB OBJECT name:Unit modality:FINAL visibility:public flags: superTypes:[kotlin.Any]
BLOCK type=kotlin.Int origin=SAFE_CALL
BLOCK type=kotlin.Int? origin=SAFE_CALL
VAR IR_TEMPORARY_VARIABLE name:tmp0_safe_receiver type:kotlin.Int flags:val
CONST Int type=kotlin.Int value=42
WHEN type=kotlin.Int origin=null
WHEN type=kotlin.Int? origin=null
BRANCH
if: CALL 'EQEQ(Any?, Any?): Boolean' type=kotlin.Boolean origin=EQEQ
arg0: GET_VAR 'tmp0_safe_receiver: Int' type=kotlin.Int origin=null
arg1: CONST Null type=kotlin.Nothing value=null
then: CONST Null type=kotlin.Nothing value=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 'foo() on Int: Int' type=kotlin.Int origin=null
@@ -32,29 +32,29 @@ FILE fqName:<root> fileName:/variableAsFunctionCall.kt
VALUE_PARAMETER name:ns index:0 type:kotlin.String? flags:
BLOCK_BODY
RETURN type=kotlin.Nothing from='test4(String?): String?'
BLOCK type=kotlin.String origin=SAFE_CALL
VAR IR_TEMPORARY_VARIABLE name:tmp1_safe_receiver type:() -> kotlin.String flags:val
BLOCK type=() -> kotlin.String origin=SAFE_CALL
BLOCK type=kotlin.String? origin=SAFE_CALL
VAR IR_TEMPORARY_VARIABLE name:tmp1_safe_receiver type:(() -> kotlin.String)? flags:val
BLOCK type=(() -> kotlin.String)? origin=SAFE_CALL
VAR IR_TEMPORARY_VARIABLE name:tmp0_safe_receiver type:kotlin.String? flags:val
GET_VAR 'value-parameter ns: String?' type=kotlin.String? origin=null
WHEN type=() -> kotlin.String origin=null
WHEN type=(() -> kotlin.String)? origin=null
BRANCH
if: CALL 'EQEQ(Any?, Any?): Boolean' type=kotlin.Boolean origin=EQEQ
arg0: GET_VAR 'tmp0_safe_receiver: String?' type=kotlin.String? origin=null
arg1: CONST Null type=kotlin.Nothing value=null
then: CONST Null type=kotlin.Nothing value=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 'k() on String: () -> String' type=() -> kotlin.String origin=null
$receiver: GET_VAR 'tmp0_safe_receiver: String?' type=kotlin.String? origin=null
WHEN type=kotlin.String origin=null
WHEN type=kotlin.String? origin=null
BRANCH
if: CALL 'EQEQ(Any?, Any?): Boolean' type=kotlin.Boolean origin=EQEQ
arg0: GET_VAR 'tmp1_safe_receiver: () -> String' type=() -> kotlin.String origin=null
arg1: CONST Null type=kotlin.Nothing value=null
then: CONST Null type=kotlin.Nothing value=null
arg0: GET_VAR 'tmp1_safe_receiver: (() -> String)?' 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 'invoke(): String' type=kotlin.String origin=null
$this: GET_VAR 'tmp1_safe_receiver: () -> String' type=() -> kotlin.String origin=null
$this: GET_VAR 'tmp1_safe_receiver: (() -> String)?' type=(() -> kotlin.String)? origin=null