diff --git a/compiler/testData/ir/irJsText/dynamic/implicitCastFromDynamic.kt b/compiler/testData/ir/irJsText/dynamic/implicitCastFromDynamic.kt new file mode 100644 index 00000000000..7fbe04ab6cf --- /dev/null +++ b/compiler/testData/ir/irJsText/dynamic/implicitCastFromDynamic.kt @@ -0,0 +1,11 @@ +val d: dynamic = 1 + +val p: Int = d + +fun test1(d: dynamic): Int = d + +fun test2(d: dynamic): Any = d + +fun test3(d: dynamic): Any? = d + +fun test4(d: dynamic): String = d.member(1, 2, 3) diff --git a/compiler/testData/ir/irJsText/dynamic/implicitCastFromDynamic.txt b/compiler/testData/ir/irJsText/dynamic/implicitCastFromDynamic.txt new file mode 100644 index 00000000000..e960d9ab169 --- /dev/null +++ b/compiler/testData/ir/irJsText/dynamic/implicitCastFromDynamic.txt @@ -0,0 +1,48 @@ +FILE fqName: fileName:/implicitCastFromDynamic.kt + PROPERTY name:d visibility:public modality:FINAL [val] + FIELD PROPERTY_BACKING_FIELD name:d type:dynamic visibility:public [final,static] + EXPRESSION_BODY + CONST Int type=kotlin.Int value=1 + FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:FINAL <> () returnType:dynamic + correspondingProperty: PROPERTY name:d visibility:public modality:FINAL [val] + BLOCK_BODY + RETURN type=kotlin.Nothing from='public final fun (): dynamic declared in ' + GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:d type:dynamic visibility:public [final,static] ' type=dynamic origin=null + PROPERTY name:p visibility:public modality:FINAL [val] + FIELD PROPERTY_BACKING_FIELD name:p type:kotlin.Int visibility:public [final,static] + EXPRESSION_BODY + TYPE_OP type=kotlin.Int origin=IMPLICIT_CAST typeOperand=kotlin.Int + CALL 'public final fun (): dynamic declared in ' type=dynamic origin=GET_PROPERTY + FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:FINAL <> () returnType:kotlin.Int + correspondingProperty: PROPERTY name:p visibility:public modality:FINAL [val] + BLOCK_BODY + RETURN type=kotlin.Nothing from='public final fun (): kotlin.Int declared in ' + GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:p type:kotlin.Int visibility:public [final,static] ' type=kotlin.Int origin=null + FUN name:test1 visibility:public modality:FINAL <> (d:dynamic) returnType:kotlin.Int + VALUE_PARAMETER name:d index:0 type:dynamic + BLOCK_BODY + RETURN type=kotlin.Nothing from='public final fun test1 (d: dynamic): kotlin.Int declared in ' + TYPE_OP type=kotlin.Int origin=IMPLICIT_CAST typeOperand=kotlin.Int + GET_VAR 'd: dynamic declared in .test1' type=dynamic origin=null + FUN name:test2 visibility:public modality:FINAL <> (d:dynamic) returnType:kotlin.Any + VALUE_PARAMETER name:d index:0 type:dynamic + BLOCK_BODY + RETURN type=kotlin.Nothing from='public final fun test2 (d: dynamic): kotlin.Any declared in ' + TYPE_OP type=kotlin.Any origin=IMPLICIT_CAST typeOperand=kotlin.Any + GET_VAR 'd: dynamic declared in .test2' type=dynamic origin=null + FUN name:test3 visibility:public modality:FINAL <> (d:dynamic) returnType:kotlin.Any? + VALUE_PARAMETER name:d index:0 type:dynamic + BLOCK_BODY + RETURN type=kotlin.Nothing from='public final fun test3 (d: dynamic): kotlin.Any? declared in ' + GET_VAR 'd: dynamic declared in .test3' type=dynamic origin=null + FUN name:test4 visibility:public modality:FINAL <> (d:dynamic) returnType:kotlin.String + VALUE_PARAMETER name:d index:0 type:dynamic + BLOCK_BODY + RETURN type=kotlin.Nothing from='public final fun test4 (d: dynamic): kotlin.String declared in ' + TYPE_OP type=kotlin.String origin=IMPLICIT_CAST typeOperand=kotlin.String + DYN_OP operator=INVOKE type=dynamic + receiver: DYN_MEMBER memberName='member' type=dynamic + GET_VAR 'd: dynamic declared in .test4' type=dynamic origin=null + 0: CONST Int type=kotlin.Int value=1 + 1: CONST Int type=kotlin.Int value=2 + 2: CONST Int type=kotlin.Int value=3 diff --git a/compiler/testData/ir/irJsText/dynamic/implicitCastToDynamic.kt b/compiler/testData/ir/irJsText/dynamic/implicitCastToDynamic.kt new file mode 100644 index 00000000000..3667ad016a1 --- /dev/null +++ b/compiler/testData/ir/irJsText/dynamic/implicitCastToDynamic.kt @@ -0,0 +1,32 @@ +val d1: dynamic = 1 + +val p: Int = 1 + +var d2: dynamic = p + +fun withDynamic(d: dynamic) = d + +fun test1(s: String) { + withDynamic(s) +} + +fun test2(a: Any) { + val d: dynamic = a +} + +fun test3(a: Any?) { + val d: dynamic = a +} + +fun test4(a: Any, s: String, na: Any?) { + var d: dynamic = p + d = a + d = na + d = s +} + +fun test5(a: Any, s: String, na: Any?) { + d2 = a + d2 = na + d2 = s +} diff --git a/compiler/testData/ir/irJsText/dynamic/implicitCastToDynamic.txt b/compiler/testData/ir/irJsText/dynamic/implicitCastToDynamic.txt new file mode 100644 index 00000000000..9ed64e65593 --- /dev/null +++ b/compiler/testData/ir/irJsText/dynamic/implicitCastToDynamic.txt @@ -0,0 +1,78 @@ +FILE fqName: fileName:/implicitCastToDynamic.kt + PROPERTY name:d1 visibility:public modality:FINAL [val] + FIELD PROPERTY_BACKING_FIELD name:d1 type:dynamic visibility:public [final,static] + EXPRESSION_BODY + CONST Int type=kotlin.Int value=1 + FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:FINAL <> () returnType:dynamic + correspondingProperty: PROPERTY name:d1 visibility:public modality:FINAL [val] + BLOCK_BODY + RETURN type=kotlin.Nothing from='public final fun (): dynamic declared in ' + GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:d1 type:dynamic visibility:public [final,static] ' type=dynamic origin=null + PROPERTY name:p visibility:public modality:FINAL [val] + FIELD PROPERTY_BACKING_FIELD name:p type:kotlin.Int visibility:public [final,static] + EXPRESSION_BODY + CONST Int type=kotlin.Int value=1 + FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:FINAL <> () returnType:kotlin.Int + correspondingProperty: PROPERTY name:p visibility:public modality:FINAL [val] + BLOCK_BODY + RETURN type=kotlin.Nothing from='public final fun (): kotlin.Int declared in ' + GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:p type:kotlin.Int visibility:public [final,static] ' type=kotlin.Int origin=null + PROPERTY name:d2 visibility:public modality:FINAL [var] + FIELD PROPERTY_BACKING_FIELD name:d2 type:dynamic visibility:public [static] + EXPRESSION_BODY + CALL 'public final fun (): kotlin.Int declared in ' type=kotlin.Int origin=GET_PROPERTY + FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:FINAL <> () returnType:dynamic + correspondingProperty: PROPERTY name:d2 visibility:public modality:FINAL [var] + BLOCK_BODY + RETURN type=kotlin.Nothing from='public final fun (): dynamic declared in ' + GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:d2 type:dynamic visibility:public [static] ' type=dynamic origin=null + FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:FINAL <> (:dynamic) returnType:kotlin.Unit + correspondingProperty: PROPERTY name:d2 visibility:public modality:FINAL [var] + VALUE_PARAMETER name: index:0 type:dynamic + BLOCK_BODY + SET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:d2 type:dynamic visibility:public [static] ' type=kotlin.Unit origin=null + value: GET_VAR ': dynamic declared in .' type=dynamic origin=null + FUN name:withDynamic visibility:public modality:FINAL <> (d:dynamic) returnType:dynamic + VALUE_PARAMETER name:d index:0 type:dynamic + BLOCK_BODY + RETURN type=kotlin.Nothing from='public final fun withDynamic (d: dynamic): dynamic declared in ' + GET_VAR 'd: dynamic declared in .withDynamic' type=dynamic origin=null + FUN name:test1 visibility:public modality:FINAL <> (s:kotlin.String) returnType:kotlin.Unit + VALUE_PARAMETER name:s index:0 type:kotlin.String + BLOCK_BODY + CALL 'public final fun withDynamic (d: dynamic): dynamic declared in ' type=dynamic origin=null + d: GET_VAR 's: kotlin.String declared in .test1' type=kotlin.String origin=null + FUN name:test2 visibility:public modality:FINAL <> (a:kotlin.Any) returnType:kotlin.Unit + VALUE_PARAMETER name:a index:0 type:kotlin.Any + BLOCK_BODY + VAR name:d type:dynamic [val] + GET_VAR 'a: kotlin.Any declared in .test2' type=kotlin.Any origin=null + FUN name:test3 visibility:public modality:FINAL <> (a:kotlin.Any?) returnType:kotlin.Unit + VALUE_PARAMETER name:a index:0 type:kotlin.Any? + BLOCK_BODY + VAR name:d type:dynamic [val] + GET_VAR 'a: kotlin.Any? declared in .test3' type=kotlin.Any? origin=null + FUN name:test4 visibility:public modality:FINAL <> (a:kotlin.Any, s:kotlin.String, na:kotlin.Any?) returnType:kotlin.Unit + VALUE_PARAMETER name:a index:0 type:kotlin.Any + VALUE_PARAMETER name:s index:1 type:kotlin.String + VALUE_PARAMETER name:na index:2 type:kotlin.Any? + BLOCK_BODY + VAR name:d type:dynamic [var] + CALL 'public final fun (): kotlin.Int declared in ' type=kotlin.Int origin=GET_PROPERTY + SET_VAR 'var d: dynamic [var] declared in .test4' type=kotlin.Unit origin=EQ + GET_VAR 'a: kotlin.Any declared in .test4' type=kotlin.Any origin=null + SET_VAR 'var d: dynamic [var] declared in .test4' type=kotlin.Unit origin=EQ + GET_VAR 'na: kotlin.Any? declared in .test4' type=kotlin.Any? origin=null + SET_VAR 'var d: dynamic [var] declared in .test4' type=kotlin.Unit origin=EQ + GET_VAR 's: kotlin.String declared in .test4' type=kotlin.String origin=null + FUN name:test5 visibility:public modality:FINAL <> (a:kotlin.Any, s:kotlin.String, na:kotlin.Any?) returnType:kotlin.Unit + VALUE_PARAMETER name:a index:0 type:kotlin.Any + VALUE_PARAMETER name:s index:1 type:kotlin.String + VALUE_PARAMETER name:na index:2 type:kotlin.Any? + BLOCK_BODY + CALL 'public final fun (: dynamic): kotlin.Unit declared in ' type=kotlin.Unit origin=EQ + : GET_VAR 'a: kotlin.Any declared in .test5' type=kotlin.Any origin=null + CALL 'public final fun (: dynamic): kotlin.Unit declared in ' type=kotlin.Unit origin=EQ + : GET_VAR 'na: kotlin.Any? declared in .test5' type=kotlin.Any? origin=null + CALL 'public final fun (: dynamic): kotlin.Unit declared in ' type=kotlin.Unit origin=EQ + : GET_VAR 's: kotlin.String declared in .test5' type=kotlin.String origin=null diff --git a/compiler/tests/org/jetbrains/kotlin/ir/IrJsTextTestCaseGenerated.java b/compiler/tests/org/jetbrains/kotlin/ir/IrJsTextTestCaseGenerated.java index 0c8aba31743..0351b031819 100644 --- a/compiler/tests/org/jetbrains/kotlin/ir/IrJsTextTestCaseGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/ir/IrJsTextTestCaseGenerated.java @@ -136,6 +136,16 @@ public class IrJsTextTestCaseGenerated extends AbstractIrJsTextTestCase { runTest("compiler/testData/ir/irJsText/dynamic/dynamicWithImplicitCast.kt"); } + @TestMetadata("implicitCastFromDynamic.kt") + public void testImplicitCastFromDynamic() throws Exception { + runTest("compiler/testData/ir/irJsText/dynamic/implicitCastFromDynamic.kt"); + } + + @TestMetadata("implicitCastToDynamic.kt") + public void testImplicitCastToDynamic() throws Exception { + runTest("compiler/testData/ir/irJsText/dynamic/implicitCastToDynamic.kt"); + } + @TestMetadata("invokeOperator.kt") public void testInvokeOperator() throws Exception { runTest("compiler/testData/ir/irJsText/dynamic/invokeOperator.kt");