pri2ir: dynamic unary & binary expressions
NB1 Not every dynamic unary or binary expression is translated to dynamic operator expressions literally. For example, assignments and increments can have safe calls in LHS, which require some extra logic. NB2 There are some open design questions left regarding how dynamic expressions should actually be translated.
This commit is contained in:
@@ -0,0 +1,4 @@
|
||||
fun testEqeq(d: dynamic) = d == 3
|
||||
fun testExclEq(d: dynamic) = d != 3
|
||||
fun testEqeqeq(d: dynamic) = d === 3
|
||||
fun testExclEqeq(d: dynamic) = d !== 3
|
||||
@@ -0,0 +1,29 @@
|
||||
FILE fqName:<root> fileName:/dynamicBinaryEqualityOperator.kt
|
||||
FUN name:testEqeq visibility:public modality:FINAL <> (d:dynamic) returnType:kotlin.Boolean flags:
|
||||
VALUE_PARAMETER name:d index:0 type:dynamic flags:
|
||||
BLOCK_BODY
|
||||
RETURN type=kotlin.Nothing from='testEqeq(dynamic): Boolean'
|
||||
DYN_OP operator=EQEQ type=kotlin.Boolean
|
||||
receiver: GET_VAR 'value-parameter d: dynamic' type=dynamic origin=null
|
||||
0: CONST Int type=kotlin.Int value=3
|
||||
FUN name:testExclEq visibility:public modality:FINAL <> (d:dynamic) returnType:kotlin.Boolean flags:
|
||||
VALUE_PARAMETER name:d index:0 type:dynamic flags:
|
||||
BLOCK_BODY
|
||||
RETURN type=kotlin.Nothing from='testExclEq(dynamic): Boolean'
|
||||
DYN_OP operator=EXCLEQ type=kotlin.Boolean
|
||||
receiver: GET_VAR 'value-parameter d: dynamic' type=dynamic origin=null
|
||||
0: CONST Int type=kotlin.Int value=3
|
||||
FUN name:testEqeqeq visibility:public modality:FINAL <> (d:dynamic) returnType:kotlin.Boolean flags:
|
||||
VALUE_PARAMETER name:d index:0 type:dynamic flags:
|
||||
BLOCK_BODY
|
||||
RETURN type=kotlin.Nothing from='testEqeqeq(dynamic): Boolean'
|
||||
DYN_OP operator=EQEQEQ type=kotlin.Boolean
|
||||
receiver: GET_VAR 'value-parameter d: dynamic' type=dynamic origin=null
|
||||
0: CONST Int type=kotlin.Int value=3
|
||||
FUN name:testExclEqeq visibility:public modality:FINAL <> (d:dynamic) returnType:kotlin.Boolean flags:
|
||||
VALUE_PARAMETER name:d index:0 type:dynamic flags:
|
||||
BLOCK_BODY
|
||||
RETURN type=kotlin.Nothing from='testExclEqeq(dynamic): Boolean'
|
||||
DYN_OP operator=EXCLEQEQ type=kotlin.Boolean
|
||||
receiver: GET_VAR 'value-parameter d: dynamic' type=dynamic origin=null
|
||||
0: CONST Int type=kotlin.Int value=3
|
||||
@@ -0,0 +1,2 @@
|
||||
fun testAndAnd(d: dynamic) = d && d
|
||||
fun testOrOr(d: dynamic) = d || d
|
||||
@@ -0,0 +1,15 @@
|
||||
FILE fqName:<root> fileName:/dynamicBinaryLogicalOperator.kt
|
||||
FUN name:testAndAnd visibility:public modality:FINAL <> (d:dynamic) returnType:kotlin.Boolean flags:
|
||||
VALUE_PARAMETER name:d index:0 type:dynamic flags:
|
||||
BLOCK_BODY
|
||||
RETURN type=kotlin.Nothing from='testAndAnd(dynamic): Boolean'
|
||||
DYN_OP operator=ANDAND type=kotlin.Boolean
|
||||
receiver: GET_VAR 'value-parameter d: dynamic' type=dynamic origin=null
|
||||
0: GET_VAR 'value-parameter d: dynamic' type=dynamic origin=null
|
||||
FUN name:testOrOr visibility:public modality:FINAL <> (d:dynamic) returnType:kotlin.Boolean flags:
|
||||
VALUE_PARAMETER name:d index:0 type:dynamic flags:
|
||||
BLOCK_BODY
|
||||
RETURN type=kotlin.Nothing from='testOrOr(dynamic): Boolean'
|
||||
DYN_OP operator=OROR type=kotlin.Boolean
|
||||
receiver: GET_VAR 'value-parameter d: dynamic' type=dynamic origin=null
|
||||
0: GET_VAR 'value-parameter d: dynamic' type=dynamic origin=null
|
||||
@@ -0,0 +1,5 @@
|
||||
fun testBinaryPlus(d: dynamic) = d + 1
|
||||
fun testBinaryMinus(d: dynamic) = d - 1
|
||||
fun testMul(d: dynamic) = d * 2
|
||||
fun testDiv(d: dynamic) = d / 2
|
||||
fun testMod(d: dynamic) = d % 2
|
||||
@@ -0,0 +1,36 @@
|
||||
FILE fqName:<root> fileName:/dynamicBinaryOperator.kt
|
||||
FUN name:testBinaryPlus 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='testBinaryPlus(dynamic): dynamic'
|
||||
DYN_OP operator=BINARY_PLUS type=dynamic
|
||||
receiver: GET_VAR 'value-parameter d: dynamic' type=dynamic origin=null
|
||||
0: CONST Int type=kotlin.Int value=1
|
||||
FUN name:testBinaryMinus 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='testBinaryMinus(dynamic): dynamic'
|
||||
DYN_OP operator=BINARY_MINUS type=dynamic
|
||||
receiver: GET_VAR 'value-parameter d: dynamic' type=dynamic origin=null
|
||||
0: CONST Int type=kotlin.Int value=1
|
||||
FUN name:testMul 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='testMul(dynamic): dynamic'
|
||||
DYN_OP operator=MUL type=dynamic
|
||||
receiver: GET_VAR 'value-parameter d: dynamic' type=dynamic origin=null
|
||||
0: CONST Int type=kotlin.Int value=2
|
||||
FUN name:testDiv 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='testDiv(dynamic): dynamic'
|
||||
DYN_OP operator=DIV type=dynamic
|
||||
receiver: GET_VAR 'value-parameter d: dynamic' type=dynamic origin=null
|
||||
0: CONST Int type=kotlin.Int value=2
|
||||
FUN name:testMod 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='testMod(dynamic): dynamic'
|
||||
DYN_OP operator=MOD type=dynamic
|
||||
receiver: GET_VAR 'value-parameter d: dynamic' type=dynamic origin=null
|
||||
0: CONST Int type=kotlin.Int value=2
|
||||
@@ -0,0 +1,4 @@
|
||||
fun testLess(d: dynamic) = d < 2
|
||||
fun testLessOrEqual(d: dynamic) = d <= 2
|
||||
fun testGreater(d: dynamic) = d > 2
|
||||
fun testGreaterOrEqual(d: dynamic) = d >= 2
|
||||
@@ -0,0 +1,29 @@
|
||||
FILE fqName:<root> fileName:/dynamicBinaryRelationalOperator.kt
|
||||
FUN name:testLess visibility:public modality:FINAL <> (d:dynamic) returnType:kotlin.Boolean flags:
|
||||
VALUE_PARAMETER name:d index:0 type:dynamic flags:
|
||||
BLOCK_BODY
|
||||
RETURN type=kotlin.Nothing from='testLess(dynamic): Boolean'
|
||||
DYN_OP operator=LT type=kotlin.Boolean
|
||||
receiver: GET_VAR 'value-parameter d: dynamic' type=dynamic origin=null
|
||||
0: CONST Int type=kotlin.Int value=2
|
||||
FUN name:testLessOrEqual visibility:public modality:FINAL <> (d:dynamic) returnType:kotlin.Boolean flags:
|
||||
VALUE_PARAMETER name:d index:0 type:dynamic flags:
|
||||
BLOCK_BODY
|
||||
RETURN type=kotlin.Nothing from='testLessOrEqual(dynamic): Boolean'
|
||||
DYN_OP operator=LE type=kotlin.Boolean
|
||||
receiver: GET_VAR 'value-parameter d: dynamic' type=dynamic origin=null
|
||||
0: CONST Int type=kotlin.Int value=2
|
||||
FUN name:testGreater visibility:public modality:FINAL <> (d:dynamic) returnType:kotlin.Boolean flags:
|
||||
VALUE_PARAMETER name:d index:0 type:dynamic flags:
|
||||
BLOCK_BODY
|
||||
RETURN type=kotlin.Nothing from='testGreater(dynamic): Boolean'
|
||||
DYN_OP operator=GT type=kotlin.Boolean
|
||||
receiver: GET_VAR 'value-parameter d: dynamic' type=dynamic origin=null
|
||||
0: CONST Int type=kotlin.Int value=2
|
||||
FUN name:testGreaterOrEqual visibility:public modality:FINAL <> (d:dynamic) returnType:kotlin.Boolean flags:
|
||||
VALUE_PARAMETER name:d index:0 type:dynamic flags:
|
||||
BLOCK_BODY
|
||||
RETURN type=kotlin.Nothing from='testGreaterOrEqual(dynamic): Boolean'
|
||||
DYN_OP operator=GE type=kotlin.Boolean
|
||||
receiver: GET_VAR 'value-parameter d: dynamic' type=dynamic origin=null
|
||||
0: CONST Int type=kotlin.Int value=2
|
||||
@@ -0,0 +1,3 @@
|
||||
fun testUnaryMinus(d: dynamic) = -d
|
||||
fun testUnaryPlus(d: dynamic) = +d
|
||||
fun testExcl(d: dynamic) = !d
|
||||
@@ -0,0 +1,19 @@
|
||||
FILE fqName:<root> fileName:/dynamicUnaryOperator.kt
|
||||
FUN name:testUnaryMinus 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='testUnaryMinus(dynamic): dynamic'
|
||||
DYN_OP operator=UNARY_MINUS type=dynamic
|
||||
receiver: GET_VAR 'value-parameter d: dynamic' type=dynamic origin=null
|
||||
FUN name:testUnaryPlus 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='testUnaryPlus(dynamic): dynamic'
|
||||
DYN_OP operator=UNARY_PLUS type=dynamic
|
||||
receiver: GET_VAR 'value-parameter d: dynamic' type=dynamic origin=null
|
||||
FUN name:testExcl 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='testExcl(dynamic): dynamic'
|
||||
DYN_OP operator=EXCL type=dynamic
|
||||
receiver: GET_VAR 'value-parameter d: dynamic' type=dynamic origin=null
|
||||
Reference in New Issue
Block a user