Skip to content

Commit d0d8ef1

Browse files
authored
Merge pull request #10672 from tamasvajk/kotlin-unary-op
Kotlin: extract unary plus and minus operators
2 parents 6509c19 + ea0a04a commit d0d8ef1

File tree

6 files changed

+235
-4
lines changed

6 files changed

+235
-4
lines changed

java/kotlin-extractor/src/main/kotlin/KotlinFileExtractor.kt

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2101,7 +2101,7 @@ open class KotlinFileExtractor(
21012101
id
21022102
}
21032103
else -> {
2104-
logger.errorElement("Unhandled target name: $targetName", c)
2104+
logger.errorElement("Unhandled binary target name: $targetName", c)
21052105
return
21062106
}
21072107
}
@@ -2137,10 +2137,29 @@ open class KotlinFileExtractor(
21372137
tw.writeExprsKotlinType(id, type.kotlinResult.id)
21382138
unaryopDisp(id)
21392139
}
2140-
isNumericFunction(target, "inv") -> {
2141-
val id = tw.getFreshIdLabel<DbBitnotexpr>()
2140+
isNumericFunction(target, listOf("inv", "unaryMinus", "unaryPlus")) -> {
21422141
val type = useType(c.type)
2143-
tw.writeExprs_bitnotexpr(id, type.javaResult.id, parent, idx)
2142+
val id: Label<out DbExpr> = when (val targetName = target.name.asString()) {
2143+
"inv" -> {
2144+
val id = tw.getFreshIdLabel<DbBitnotexpr>()
2145+
tw.writeExprs_bitnotexpr(id, type.javaResult.id, parent, idx)
2146+
id
2147+
}
2148+
"unaryMinus" -> {
2149+
val id = tw.getFreshIdLabel<DbMinusexpr>()
2150+
tw.writeExprs_minusexpr(id, type.javaResult.id, parent, idx)
2151+
id
2152+
}
2153+
"unaryPlus" -> {
2154+
val id = tw.getFreshIdLabel<DbPlusexpr>()
2155+
tw.writeExprs_plusexpr(id, type.javaResult.id, parent, idx)
2156+
id
2157+
}
2158+
else -> {
2159+
logger.errorElement("Unhandled unary target name: $targetName", c)
2160+
return
2161+
}
2162+
}
21442163
tw.writeExprsKotlinType(id, type.kotlinResult.id)
21452164
unaryopDisp(id)
21462165
}

java/ql/test/kotlin/library-tests/exprs/CONSISTENCY/javaEquivalent.expected

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,14 @@
1111
| file://:0:0:0:0 | Couldn't find a Java equivalent function to kotlin.Byte.toInt in java.lang.Byte |
1212
| file://:0:0:0:0 | Couldn't find a Java equivalent function to kotlin.Byte.toInt in java.lang.Byte |
1313
| file://:0:0:0:0 | Couldn't find a Java equivalent function to kotlin.Int.dec in java.lang.Integer |
14+
| file://:0:0:0:0 | Couldn't find a Java equivalent function to kotlin.Int.dec in java.lang.Integer |
15+
| file://:0:0:0:0 | Couldn't find a Java equivalent function to kotlin.Int.dec in java.lang.Integer |
16+
| file://:0:0:0:0 | Couldn't find a Java equivalent function to kotlin.Int.dec in java.lang.Integer |
17+
| file://:0:0:0:0 | Couldn't find a Java equivalent function to kotlin.Int.dec in java.lang.Integer |
18+
| file://:0:0:0:0 | Couldn't find a Java equivalent function to kotlin.Int.inc in java.lang.Integer |
19+
| file://:0:0:0:0 | Couldn't find a Java equivalent function to kotlin.Int.inc in java.lang.Integer |
20+
| file://:0:0:0:0 | Couldn't find a Java equivalent function to kotlin.Int.inc in java.lang.Integer |
21+
| file://:0:0:0:0 | Couldn't find a Java equivalent function to kotlin.Int.inc in java.lang.Integer |
1422
| file://:0:0:0:0 | Couldn't find a Java equivalent function to kotlin.Int.rangeTo in java.lang.Integer |
1523
| file://:0:0:0:0 | Couldn't find a Java equivalent function to kotlin.Int.rangeTo in java.lang.Integer |
1624
| file://:0:0:0:0 | Couldn't find a Java equivalent function to kotlin.Short.toInt in java.lang.Short |

java/ql/test/kotlin/library-tests/exprs/PrintAst.expected

Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2855,6 +2855,114 @@ exprs.kt:
28552855
# 276| 1: [MethodAccess] getEnumValues(...)
28562856
# 276| -2: [TypeAccess] Color
28572857
# 276| -1: [TypeAccess] ExprsKt
2858+
# 279| 14: [Method] unaryExprs
2859+
# 279| 3: [TypeAccess] Unit
2860+
#-----| 4: (Parameters)
2861+
# 279| 0: [Parameter] i
2862+
# 279| 0: [TypeAccess] int
2863+
# 279| 1: [Parameter] d
2864+
# 279| 0: [TypeAccess] double
2865+
# 279| 5: [BlockStmt] { ... }
2866+
# 280| 0: [ExprStmt] <Expr>;
2867+
# 280| 0: [ImplicitCoercionToUnitExpr] <implicit coercion to unit>
2868+
# 280| 0: [TypeAccess] Unit
2869+
# 280| 1: [MinusExpr] -...
2870+
# 280| 0: [VarAccess] i
2871+
# 281| 1: [ExprStmt] <Expr>;
2872+
# 281| 0: [ImplicitCoercionToUnitExpr] <implicit coercion to unit>
2873+
# 281| 0: [TypeAccess] Unit
2874+
# 281| 1: [PlusExpr] +...
2875+
# 281| 0: [VarAccess] i
2876+
# 282| 2: [ExprStmt] <Expr>;
2877+
# 282| 0: [ImplicitCoercionToUnitExpr] <implicit coercion to unit>
2878+
# 282| 0: [TypeAccess] Unit
2879+
# 282| 1: [MinusExpr] -...
2880+
# 282| 0: [VarAccess] d
2881+
# 283| 3: [ExprStmt] <Expr>;
2882+
# 283| 0: [ImplicitCoercionToUnitExpr] <implicit coercion to unit>
2883+
# 283| 0: [TypeAccess] Unit
2884+
# 283| 1: [PlusExpr] +...
2885+
# 283| 0: [VarAccess] d
2886+
# 284| 4: [LocalVariableDeclStmt] var ...;
2887+
# 284| 1: [LocalVariableDeclExpr] i0
2888+
# 284| 0: [IntegerLiteral] 1
2889+
# 285| 5: [LocalVariableDeclStmt] var ...;
2890+
# 285| 1: [LocalVariableDeclExpr] i1
2891+
# 285| 0: [IntegerLiteral] 1
2892+
# 286| 6: [ExprStmt] <Expr>;
2893+
# 286| 0: [ImplicitCoercionToUnitExpr] <implicit coercion to unit>
2894+
# 286| 0: [TypeAccess] Unit
2895+
# 286| 1: [StmtExpr] <Stmt>
2896+
# 286| 0: [BlockStmt] { ... }
2897+
# 286| 0: [LocalVariableDeclStmt] var ...;
2898+
# 286| 1: [LocalVariableDeclExpr] tmp0
2899+
# 286| 0: [VarAccess] i0
2900+
# 286| 1: [ExprStmt] <Expr>;
2901+
# 286| 0: [AssignExpr] ...=...
2902+
# 286| 0: [VarAccess] i0
2903+
# 286| 1: [MethodAccess] inc(...)
2904+
# 286| -1: [VarAccess] tmp0
2905+
# 286| 2: [ExprStmt] <Expr>;
2906+
# 286| 0: [VarAccess] tmp0
2907+
# 287| 7: [ExprStmt] <Expr>;
2908+
# 287| 0: [ImplicitCoercionToUnitExpr] <implicit coercion to unit>
2909+
# 287| 0: [TypeAccess] Unit
2910+
# 287| 1: [StmtExpr] <Stmt>
2911+
# 287| 0: [BlockStmt] { ... }
2912+
# 287| 0: [ExprStmt] <Expr>;
2913+
# 287| 0: [AssignExpr] ...=...
2914+
# 287| 0: [VarAccess] i0
2915+
# 287| 1: [MethodAccess] inc(...)
2916+
# 287| -1: [VarAccess] i0
2917+
# 287| 1: [ExprStmt] <Expr>;
2918+
# 287| 0: [VarAccess] i0
2919+
# 288| 8: [ExprStmt] <Expr>;
2920+
# 288| 0: [ImplicitCoercionToUnitExpr] <implicit coercion to unit>
2921+
# 288| 0: [TypeAccess] Unit
2922+
# 288| 1: [StmtExpr] <Stmt>
2923+
# 288| 0: [BlockStmt] { ... }
2924+
# 288| 0: [LocalVariableDeclStmt] var ...;
2925+
# 288| 1: [LocalVariableDeclExpr] tmp1
2926+
# 288| 0: [VarAccess] i0
2927+
# 288| 1: [ExprStmt] <Expr>;
2928+
# 288| 0: [AssignExpr] ...=...
2929+
# 288| 0: [VarAccess] i0
2930+
# 288| 1: [MethodAccess] dec(...)
2931+
# 288| -1: [VarAccess] tmp1
2932+
# 288| 2: [ExprStmt] <Expr>;
2933+
# 288| 0: [VarAccess] tmp1
2934+
# 289| 9: [ExprStmt] <Expr>;
2935+
# 289| 0: [ImplicitCoercionToUnitExpr] <implicit coercion to unit>
2936+
# 289| 0: [TypeAccess] Unit
2937+
# 289| 1: [StmtExpr] <Stmt>
2938+
# 289| 0: [BlockStmt] { ... }
2939+
# 289| 0: [ExprStmt] <Expr>;
2940+
# 289| 0: [AssignExpr] ...=...
2941+
# 289| 0: [VarAccess] i0
2942+
# 289| 1: [MethodAccess] dec(...)
2943+
# 289| -1: [VarAccess] i0
2944+
# 289| 1: [ExprStmt] <Expr>;
2945+
# 289| 0: [VarAccess] i0
2946+
# 290| 10: [ExprStmt] <Expr>;
2947+
# 290| 0: [ImplicitCoercionToUnitExpr] <implicit coercion to unit>
2948+
# 290| 0: [TypeAccess] Unit
2949+
# 290| 1: [MethodAccess] inc(...)
2950+
# 290| -1: [VarAccess] i0
2951+
# 291| 11: [ExprStmt] <Expr>;
2952+
# 291| 0: [ImplicitCoercionToUnitExpr] <implicit coercion to unit>
2953+
# 291| 0: [TypeAccess] Unit
2954+
# 291| 1: [MethodAccess] dec(...)
2955+
# 291| -1: [VarAccess] i0
2956+
# 292| 12: [ExprStmt] <Expr>;
2957+
# 292| 0: [ImplicitCoercionToUnitExpr] <implicit coercion to unit>
2958+
# 292| 0: [TypeAccess] Unit
2959+
# 292| 1: [MethodAccess] inc(...)
2960+
# 292| -1: [VarAccess] i1
2961+
# 293| 13: [ExprStmt] <Expr>;
2962+
# 293| 0: [ImplicitCoercionToUnitExpr] <implicit coercion to unit>
2963+
# 293| 0: [TypeAccess] Unit
2964+
# 293| 1: [MethodAccess] dec(...)
2965+
# 293| -1: [VarAccess] i1
28582966
# 142| 2: [Class] C
28592967
# 142| 1: [Constructor] C
28602968
#-----| 4: (Parameters)

java/ql/test/kotlin/library-tests/exprs/exprs.expected

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1738,6 +1738,81 @@
17381738
| exprs.kt:276:5:276:26 | ExprsKt | exprs.kt:274:1:277:1 | callToEnumValues | TypeAccess |
17391739
| exprs.kt:276:5:276:26 | Unit | exprs.kt:274:1:277:1 | callToEnumValues | TypeAccess |
17401740
| exprs.kt:276:5:276:26 | getEnumValues(...) | exprs.kt:274:1:277:1 | callToEnumValues | MethodAccess |
1741+
| exprs.kt:279:1:294:1 | Unit | file://:0:0:0:0 | <none> | TypeAccess |
1742+
| exprs.kt:279:16:279:21 | int | file://:0:0:0:0 | <none> | TypeAccess |
1743+
| exprs.kt:279:24:279:32 | double | file://:0:0:0:0 | <none> | TypeAccess |
1744+
| exprs.kt:280:5:280:6 | -... | exprs.kt:279:1:294:1 | unaryExprs | MinusExpr |
1745+
| exprs.kt:280:5:280:6 | <implicit coercion to unit> | exprs.kt:279:1:294:1 | unaryExprs | ImplicitCoercionToUnitExpr |
1746+
| exprs.kt:280:5:280:6 | Unit | exprs.kt:279:1:294:1 | unaryExprs | TypeAccess |
1747+
| exprs.kt:280:6:280:6 | i | exprs.kt:279:1:294:1 | unaryExprs | VarAccess |
1748+
| exprs.kt:281:5:281:6 | +... | exprs.kt:279:1:294:1 | unaryExprs | PlusExpr |
1749+
| exprs.kt:281:5:281:6 | <implicit coercion to unit> | exprs.kt:279:1:294:1 | unaryExprs | ImplicitCoercionToUnitExpr |
1750+
| exprs.kt:281:5:281:6 | Unit | exprs.kt:279:1:294:1 | unaryExprs | TypeAccess |
1751+
| exprs.kt:281:6:281:6 | i | exprs.kt:279:1:294:1 | unaryExprs | VarAccess |
1752+
| exprs.kt:282:5:282:6 | -... | exprs.kt:279:1:294:1 | unaryExprs | MinusExpr |
1753+
| exprs.kt:282:5:282:6 | <implicit coercion to unit> | exprs.kt:279:1:294:1 | unaryExprs | ImplicitCoercionToUnitExpr |
1754+
| exprs.kt:282:5:282:6 | Unit | exprs.kt:279:1:294:1 | unaryExprs | TypeAccess |
1755+
| exprs.kt:282:6:282:6 | d | exprs.kt:279:1:294:1 | unaryExprs | VarAccess |
1756+
| exprs.kt:283:5:283:6 | +... | exprs.kt:279:1:294:1 | unaryExprs | PlusExpr |
1757+
| exprs.kt:283:5:283:6 | <implicit coercion to unit> | exprs.kt:279:1:294:1 | unaryExprs | ImplicitCoercionToUnitExpr |
1758+
| exprs.kt:283:5:283:6 | Unit | exprs.kt:279:1:294:1 | unaryExprs | TypeAccess |
1759+
| exprs.kt:283:6:283:6 | d | exprs.kt:279:1:294:1 | unaryExprs | VarAccess |
1760+
| exprs.kt:284:5:284:14 | i0 | exprs.kt:279:1:294:1 | unaryExprs | LocalVariableDeclExpr |
1761+
| exprs.kt:284:14:284:14 | 1 | exprs.kt:279:1:294:1 | unaryExprs | IntegerLiteral |
1762+
| exprs.kt:285:5:285:14 | i1 | exprs.kt:279:1:294:1 | unaryExprs | LocalVariableDeclExpr |
1763+
| exprs.kt:285:14:285:14 | 1 | exprs.kt:279:1:294:1 | unaryExprs | IntegerLiteral |
1764+
| exprs.kt:286:5:286:6 | i0 | exprs.kt:279:1:294:1 | unaryExprs | VarAccess |
1765+
| exprs.kt:286:5:286:6 | i0 | exprs.kt:279:1:294:1 | unaryExprs | VarAccess |
1766+
| exprs.kt:286:5:286:8 | ...=... | exprs.kt:279:1:294:1 | unaryExprs | AssignExpr |
1767+
| exprs.kt:286:5:286:8 | <Stmt> | exprs.kt:279:1:294:1 | unaryExprs | StmtExpr |
1768+
| exprs.kt:286:5:286:8 | <implicit coercion to unit> | exprs.kt:279:1:294:1 | unaryExprs | ImplicitCoercionToUnitExpr |
1769+
| exprs.kt:286:5:286:8 | Unit | exprs.kt:279:1:294:1 | unaryExprs | TypeAccess |
1770+
| exprs.kt:286:5:286:8 | inc(...) | exprs.kt:279:1:294:1 | unaryExprs | MethodAccess |
1771+
| exprs.kt:286:5:286:8 | tmp0 | exprs.kt:279:1:294:1 | unaryExprs | LocalVariableDeclExpr |
1772+
| exprs.kt:286:5:286:8 | tmp0 | exprs.kt:279:1:294:1 | unaryExprs | VarAccess |
1773+
| exprs.kt:286:5:286:8 | tmp0 | exprs.kt:279:1:294:1 | unaryExprs | VarAccess |
1774+
| exprs.kt:287:5:287:8 | <Stmt> | exprs.kt:279:1:294:1 | unaryExprs | StmtExpr |
1775+
| exprs.kt:287:5:287:8 | <implicit coercion to unit> | exprs.kt:279:1:294:1 | unaryExprs | ImplicitCoercionToUnitExpr |
1776+
| exprs.kt:287:5:287:8 | Unit | exprs.kt:279:1:294:1 | unaryExprs | TypeAccess |
1777+
| exprs.kt:287:5:287:8 | inc(...) | exprs.kt:279:1:294:1 | unaryExprs | MethodAccess |
1778+
| exprs.kt:287:7:287:8 | ...=... | exprs.kt:279:1:294:1 | unaryExprs | AssignExpr |
1779+
| exprs.kt:287:7:287:8 | i0 | exprs.kt:279:1:294:1 | unaryExprs | VarAccess |
1780+
| exprs.kt:287:7:287:8 | i0 | exprs.kt:279:1:294:1 | unaryExprs | VarAccess |
1781+
| exprs.kt:287:7:287:8 | i0 | exprs.kt:279:1:294:1 | unaryExprs | VarAccess |
1782+
| exprs.kt:288:5:288:6 | i0 | exprs.kt:279:1:294:1 | unaryExprs | VarAccess |
1783+
| exprs.kt:288:5:288:6 | i0 | exprs.kt:279:1:294:1 | unaryExprs | VarAccess |
1784+
| exprs.kt:288:5:288:8 | ...=... | exprs.kt:279:1:294:1 | unaryExprs | AssignExpr |
1785+
| exprs.kt:288:5:288:8 | <Stmt> | exprs.kt:279:1:294:1 | unaryExprs | StmtExpr |
1786+
| exprs.kt:288:5:288:8 | <implicit coercion to unit> | exprs.kt:279:1:294:1 | unaryExprs | ImplicitCoercionToUnitExpr |
1787+
| exprs.kt:288:5:288:8 | Unit | exprs.kt:279:1:294:1 | unaryExprs | TypeAccess |
1788+
| exprs.kt:288:5:288:8 | dec(...) | exprs.kt:279:1:294:1 | unaryExprs | MethodAccess |
1789+
| exprs.kt:288:5:288:8 | tmp1 | exprs.kt:279:1:294:1 | unaryExprs | LocalVariableDeclExpr |
1790+
| exprs.kt:288:5:288:8 | tmp1 | exprs.kt:279:1:294:1 | unaryExprs | VarAccess |
1791+
| exprs.kt:288:5:288:8 | tmp1 | exprs.kt:279:1:294:1 | unaryExprs | VarAccess |
1792+
| exprs.kt:289:5:289:8 | <Stmt> | exprs.kt:279:1:294:1 | unaryExprs | StmtExpr |
1793+
| exprs.kt:289:5:289:8 | <implicit coercion to unit> | exprs.kt:279:1:294:1 | unaryExprs | ImplicitCoercionToUnitExpr |
1794+
| exprs.kt:289:5:289:8 | Unit | exprs.kt:279:1:294:1 | unaryExprs | TypeAccess |
1795+
| exprs.kt:289:5:289:8 | dec(...) | exprs.kt:279:1:294:1 | unaryExprs | MethodAccess |
1796+
| exprs.kt:289:7:289:8 | ...=... | exprs.kt:279:1:294:1 | unaryExprs | AssignExpr |
1797+
| exprs.kt:289:7:289:8 | i0 | exprs.kt:279:1:294:1 | unaryExprs | VarAccess |
1798+
| exprs.kt:289:7:289:8 | i0 | exprs.kt:279:1:294:1 | unaryExprs | VarAccess |
1799+
| exprs.kt:289:7:289:8 | i0 | exprs.kt:279:1:294:1 | unaryExprs | VarAccess |
1800+
| exprs.kt:290:5:290:6 | i0 | exprs.kt:279:1:294:1 | unaryExprs | VarAccess |
1801+
| exprs.kt:290:8:290:12 | <implicit coercion to unit> | exprs.kt:279:1:294:1 | unaryExprs | ImplicitCoercionToUnitExpr |
1802+
| exprs.kt:290:8:290:12 | Unit | exprs.kt:279:1:294:1 | unaryExprs | TypeAccess |
1803+
| exprs.kt:290:8:290:12 | inc(...) | exprs.kt:279:1:294:1 | unaryExprs | MethodAccess |
1804+
| exprs.kt:291:5:291:6 | i0 | exprs.kt:279:1:294:1 | unaryExprs | VarAccess |
1805+
| exprs.kt:291:8:291:12 | <implicit coercion to unit> | exprs.kt:279:1:294:1 | unaryExprs | ImplicitCoercionToUnitExpr |
1806+
| exprs.kt:291:8:291:12 | Unit | exprs.kt:279:1:294:1 | unaryExprs | TypeAccess |
1807+
| exprs.kt:291:8:291:12 | dec(...) | exprs.kt:279:1:294:1 | unaryExprs | MethodAccess |
1808+
| exprs.kt:292:5:292:6 | i1 | exprs.kt:279:1:294:1 | unaryExprs | VarAccess |
1809+
| exprs.kt:292:8:292:12 | <implicit coercion to unit> | exprs.kt:279:1:294:1 | unaryExprs | ImplicitCoercionToUnitExpr |
1810+
| exprs.kt:292:8:292:12 | Unit | exprs.kt:279:1:294:1 | unaryExprs | TypeAccess |
1811+
| exprs.kt:292:8:292:12 | inc(...) | exprs.kt:279:1:294:1 | unaryExprs | MethodAccess |
1812+
| exprs.kt:293:5:293:6 | i1 | exprs.kt:279:1:294:1 | unaryExprs | VarAccess |
1813+
| exprs.kt:293:8:293:12 | <implicit coercion to unit> | exprs.kt:279:1:294:1 | unaryExprs | ImplicitCoercionToUnitExpr |
1814+
| exprs.kt:293:8:293:12 | Unit | exprs.kt:279:1:294:1 | unaryExprs | TypeAccess |
1815+
| exprs.kt:293:8:293:12 | dec(...) | exprs.kt:279:1:294:1 | unaryExprs | MethodAccess |
17411816
| funcExprs.kt:1:1:1:46 | Unit | file://:0:0:0:0 | <none> | TypeAccess |
17421817
| funcExprs.kt:1:26:1:37 | Function0<Integer> | file://:0:0:0:0 | <none> | TypeAccess |
17431818
| funcExprs.kt:1:26:1:37 | Integer | file://:0:0:0:0 | <none> | TypeAccess |

java/ql/test/kotlin/library-tests/exprs/exprs.kt

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -275,3 +275,20 @@ fun callToEnumValues() {
275275
enumValues<Color>()
276276
getEnumValues<Color>()
277277
}
278+
279+
fun unaryExprs(i: Int, d: Double) {
280+
-i
281+
+i
282+
-d
283+
+d
284+
var i0 = 1
285+
val i1 = 1
286+
i0++
287+
++i0
288+
i0--
289+
--i0
290+
i0.inc()
291+
i0.dec()
292+
i1.inc()
293+
i1.dec()
294+
}

java/ql/test/kotlin/library-tests/exprs/unaryOp.expected

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,7 @@
55
| exprs.kt:196:19:196:20 | ...!! | exprs.kt:196:18:196:18 | x |
66
| exprs.kt:205:20:205:21 | ...!! | exprs.kt:205:19:205:19 | s |
77
| exprs.kt:206:20:206:21 | ...!! | exprs.kt:206:19:206:19 | s |
8+
| exprs.kt:280:5:280:6 | -... | exprs.kt:280:6:280:6 | i |
9+
| exprs.kt:281:5:281:6 | +... | exprs.kt:281:6:281:6 | i |
10+
| exprs.kt:282:5:282:6 | -... | exprs.kt:282:6:282:6 | d |
11+
| exprs.kt:283:5:283:6 | +... | exprs.kt:283:6:283:6 | d |

0 commit comments

Comments
 (0)