psi2ir: simple dynamic member calls
This commit is contained in:
@@ -0,0 +1,7 @@
|
||||
fun test1(d: dynamic) = d.member(1, 2, 3)
|
||||
|
||||
fun test2(d: dynamic) = d?.member(1, 2, 3)
|
||||
|
||||
// Named arguments in dynamic calls are ignored by JS back-end.
|
||||
// If this becomes a compilation error, simply remove this particular test case.
|
||||
fun test3(d: dynamic) = d.member(a = 1, b = 2, c = 3)
|
||||
@@ -0,0 +1,42 @@
|
||||
FILE fqName:<root> fileName:/dynamicCall.kt
|
||||
FUN name:test1 visibility:public modality:FINAL <> (d:dynamic) returnType:dynamic flags:
|
||||
VALUE_PARAMETER name:d index:0 type:dynamic flags:
|
||||
BLOCK_BODY
|
||||
RETURN type=kotlin.Nothing from='test1(dynamic): dynamic'
|
||||
DYN_OP operator=INVOKE type=dynamic
|
||||
receiver: DYN_MEMBER memberName='member' type=dynamic
|
||||
GET_VAR 'value-parameter d: dynamic' 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
|
||||
FUN name:test2 visibility:public modality:FINAL <> (d:dynamic) returnType:dynamic flags:
|
||||
VALUE_PARAMETER name:d index:0 type:dynamic flags:
|
||||
BLOCK_BODY
|
||||
RETURN type=kotlin.Nothing from='test2(dynamic): dynamic'
|
||||
BLOCK type=dynamic origin=SAFE_CALL
|
||||
VAR IR_TEMPORARY_VARIABLE name:tmp0_safe_receiver type:dynamic flags:val
|
||||
GET_VAR 'value-parameter d: dynamic' type=dynamic origin=null
|
||||
WHEN type=dynamic origin=null
|
||||
BRANCH
|
||||
if: CALL 'EQEQ(Any?, Any?): Boolean' type=kotlin.Boolean origin=EQEQ
|
||||
arg0: GET_VAR 'tmp0_safe_receiver: dynamic' type=dynamic 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: DYN_OP operator=INVOKE type=dynamic
|
||||
receiver: DYN_MEMBER memberName='member' type=dynamic
|
||||
GET_VAR 'tmp0_safe_receiver: dynamic' 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
|
||||
FUN name:test3 visibility:public modality:FINAL <> (d:dynamic) returnType:dynamic flags:
|
||||
VALUE_PARAMETER name:d index:0 type:dynamic flags:
|
||||
BLOCK_BODY
|
||||
RETURN type=kotlin.Nothing from='test3(dynamic): dynamic'
|
||||
DYN_OP operator=INVOKE type=dynamic
|
||||
receiver: DYN_MEMBER memberName='member' type=dynamic
|
||||
GET_VAR 'value-parameter d: dynamic' 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
|
||||
+6
-6
@@ -1,9 +1,9 @@
|
||||
fun invoke() {}
|
||||
|
||||
fun test1(a: dynamic) = a(1)
|
||||
fun test1a(a: dynamic) = a.invoke(1)
|
||||
fun test2(a: dynamic, b: dynamic) = a(b)
|
||||
fun test2a(a: dynamic, b: dynamic) = a.invoke(b)
|
||||
fun test2b(a: dynamic, b: dynamic) = a(b)(b)
|
||||
fun test2c(a: dynamic, b: dynamic) = a(b).invoke(b)
|
||||
fun test3(a: dynamic) = invoke()
|
||||
fun test2(a: dynamic) = a.invoke(1)
|
||||
fun test3(a: dynamic, b: dynamic) = a(b)
|
||||
fun test4(a: dynamic, b: dynamic) = a.invoke(b)
|
||||
fun test5(a: dynamic, b: dynamic) = a(b)(b)
|
||||
fun test6(a: dynamic, b: dynamic) = a(b).invoke(b)
|
||||
fun test7(a: dynamic) = invoke()
|
||||
+37
-34
@@ -5,54 +5,57 @@ FILE fqName:<root> fileName:/invokeOperator.kt
|
||||
VALUE_PARAMETER name:a index:0 type:dynamic flags:
|
||||
BLOCK_BODY
|
||||
RETURN type=kotlin.Nothing from='test1(dynamic): dynamic'
|
||||
CALL 'invoke(dynamic): dynamic' type=dynamic origin=INVOKE
|
||||
$this: GET_VAR 'value-parameter a: dynamic' type=dynamic origin=VARIABLE_AS_FUNCTION
|
||||
p0: CONST Int type=kotlin.Int value=1
|
||||
FUN name:test1a visibility:public modality:FINAL <> (a:dynamic) returnType:dynamic flags:
|
||||
DYN_OP operator=INVOKE type=dynamic
|
||||
receiver: GET_VAR 'value-parameter a: dynamic' type=dynamic origin=VARIABLE_AS_FUNCTION
|
||||
0: CONST Int type=kotlin.Int value=1
|
||||
FUN name:test2 visibility:public modality:FINAL <> (a:dynamic) returnType:dynamic flags:
|
||||
VALUE_PARAMETER name:a index:0 type:dynamic flags:
|
||||
BLOCK_BODY
|
||||
RETURN type=kotlin.Nothing from='test1a(dynamic): dynamic'
|
||||
CALL 'invoke(dynamic): dynamic' type=dynamic origin=null
|
||||
$this: GET_VAR 'value-parameter a: dynamic' type=dynamic origin=null
|
||||
p0: CONST Int type=kotlin.Int value=1
|
||||
FUN name:test2 visibility:public modality:FINAL <> (a:dynamic, b:dynamic) returnType:dynamic flags:
|
||||
RETURN type=kotlin.Nothing from='test2(dynamic): dynamic'
|
||||
DYN_OP operator=INVOKE type=dynamic
|
||||
receiver: DYN_MEMBER memberName='invoke' type=dynamic
|
||||
GET_VAR 'value-parameter a: dynamic' type=dynamic origin=null
|
||||
0: CONST Int type=kotlin.Int value=1
|
||||
FUN name:test3 visibility:public modality:FINAL <> (a:dynamic, b:dynamic) returnType:dynamic flags:
|
||||
VALUE_PARAMETER name:a index:0 type:dynamic flags:
|
||||
VALUE_PARAMETER name:b index:1 type:dynamic flags:
|
||||
BLOCK_BODY
|
||||
RETURN type=kotlin.Nothing from='test2(dynamic, dynamic): dynamic'
|
||||
CALL 'invoke(dynamic): dynamic' type=dynamic origin=INVOKE
|
||||
$this: GET_VAR 'value-parameter a: dynamic' type=dynamic origin=VARIABLE_AS_FUNCTION
|
||||
p0: GET_VAR 'value-parameter b: dynamic' type=dynamic origin=null
|
||||
FUN name:test2a visibility:public modality:FINAL <> (a:dynamic, b:dynamic) returnType:dynamic flags:
|
||||
RETURN type=kotlin.Nothing from='test3(dynamic, dynamic): dynamic'
|
||||
DYN_OP operator=INVOKE type=dynamic
|
||||
receiver: GET_VAR 'value-parameter a: dynamic' type=dynamic origin=VARIABLE_AS_FUNCTION
|
||||
0: GET_VAR 'value-parameter b: dynamic' type=dynamic origin=null
|
||||
FUN name:test4 visibility:public modality:FINAL <> (a:dynamic, b:dynamic) returnType:dynamic flags:
|
||||
VALUE_PARAMETER name:a index:0 type:dynamic flags:
|
||||
VALUE_PARAMETER name:b index:1 type:dynamic flags:
|
||||
BLOCK_BODY
|
||||
RETURN type=kotlin.Nothing from='test2a(dynamic, dynamic): dynamic'
|
||||
CALL 'invoke(dynamic): dynamic' type=dynamic origin=null
|
||||
$this: GET_VAR 'value-parameter a: dynamic' type=dynamic origin=null
|
||||
p0: GET_VAR 'value-parameter b: dynamic' type=dynamic origin=null
|
||||
FUN name:test2b visibility:public modality:FINAL <> (a:dynamic, b:dynamic) returnType:dynamic flags:
|
||||
RETURN type=kotlin.Nothing from='test4(dynamic, dynamic): dynamic'
|
||||
DYN_OP operator=INVOKE type=dynamic
|
||||
receiver: DYN_MEMBER memberName='invoke' type=dynamic
|
||||
GET_VAR 'value-parameter a: dynamic' type=dynamic origin=null
|
||||
0: GET_VAR 'value-parameter b: dynamic' type=dynamic origin=null
|
||||
FUN name:test5 visibility:public modality:FINAL <> (a:dynamic, b:dynamic) returnType:dynamic flags:
|
||||
VALUE_PARAMETER name:a index:0 type:dynamic flags:
|
||||
VALUE_PARAMETER name:b index:1 type:dynamic flags:
|
||||
BLOCK_BODY
|
||||
RETURN type=kotlin.Nothing from='test2b(dynamic, dynamic): dynamic'
|
||||
CALL 'invoke(dynamic): dynamic' type=dynamic origin=INVOKE
|
||||
$this: CALL 'invoke(dynamic): dynamic' type=dynamic origin=INVOKE
|
||||
$this: GET_VAR 'value-parameter a: dynamic' type=dynamic origin=VARIABLE_AS_FUNCTION
|
||||
p0: GET_VAR 'value-parameter b: dynamic' type=dynamic origin=null
|
||||
p0: GET_VAR 'value-parameter b: dynamic' type=dynamic origin=null
|
||||
FUN name:test2c visibility:public modality:FINAL <> (a:dynamic, b:dynamic) returnType:dynamic flags:
|
||||
RETURN type=kotlin.Nothing from='test5(dynamic, dynamic): dynamic'
|
||||
DYN_OP operator=INVOKE type=dynamic
|
||||
receiver: DYN_OP operator=INVOKE type=dynamic
|
||||
receiver: GET_VAR 'value-parameter a: dynamic' type=dynamic origin=VARIABLE_AS_FUNCTION
|
||||
0: GET_VAR 'value-parameter b: dynamic' type=dynamic origin=null
|
||||
0: GET_VAR 'value-parameter b: dynamic' type=dynamic origin=null
|
||||
FUN name:test6 visibility:public modality:FINAL <> (a:dynamic, b:dynamic) returnType:dynamic flags:
|
||||
VALUE_PARAMETER name:a index:0 type:dynamic flags:
|
||||
VALUE_PARAMETER name:b index:1 type:dynamic flags:
|
||||
BLOCK_BODY
|
||||
RETURN type=kotlin.Nothing from='test2c(dynamic, dynamic): dynamic'
|
||||
CALL 'invoke(dynamic): dynamic' type=dynamic origin=null
|
||||
$this: CALL 'invoke(dynamic): dynamic' type=dynamic origin=INVOKE
|
||||
$this: GET_VAR 'value-parameter a: dynamic' type=dynamic origin=VARIABLE_AS_FUNCTION
|
||||
p0: GET_VAR 'value-parameter b: dynamic' type=dynamic origin=null
|
||||
p0: GET_VAR 'value-parameter b: dynamic' type=dynamic origin=null
|
||||
FUN name:test3 visibility:public modality:FINAL <> (a:dynamic) returnType:kotlin.Unit flags:
|
||||
RETURN type=kotlin.Nothing from='test6(dynamic, dynamic): dynamic'
|
||||
DYN_OP operator=INVOKE type=dynamic
|
||||
receiver: DYN_MEMBER memberName='invoke' type=dynamic
|
||||
DYN_OP operator=INVOKE type=dynamic
|
||||
receiver: GET_VAR 'value-parameter a: dynamic' type=dynamic origin=VARIABLE_AS_FUNCTION
|
||||
0: GET_VAR 'value-parameter b: dynamic' type=dynamic origin=null
|
||||
0: GET_VAR 'value-parameter b: dynamic' type=dynamic origin=null
|
||||
FUN name:test7 visibility:public modality:FINAL <> (a:dynamic) returnType:kotlin.Unit flags:
|
||||
VALUE_PARAMETER name:a index:0 type:dynamic flags:
|
||||
BLOCK_BODY
|
||||
RETURN type=kotlin.Nothing from='test3(dynamic): Unit'
|
||||
RETURN type=kotlin.Nothing from='test7(dynamic): Unit'
|
||||
CALL 'invoke(): Unit' type=kotlin.Unit origin=null
|
||||
|
||||
Reference in New Issue
Block a user