@@ -2235,6 +2235,9 @@ open class KotlinFileExtractor(
2235
2235
result
2236
2236
}
2237
2237
2238
+ private fun isFunction (target : IrFunction , pkgName : String , classNameLogged : String , classNamePredicate : (String ) -> Boolean , vararg fNames : String , isNullable : Boolean? = false) =
2239
+ fNames.any { isFunction(target, pkgName, classNameLogged, classNamePredicate, it, isNullable) }
2240
+
2238
2241
private fun isFunction (target : IrFunction , pkgName : String , classNameLogged : String , classNamePredicate : (String ) -> Boolean , fName : String , isNullable : Boolean? = false): Boolean {
2239
2242
val verbose = false
2240
2243
fun verboseln (s : String ) { if (verbose) println (s) }
@@ -2291,7 +2294,7 @@ open class KotlinFileExtractor(
2291
2294
isFunction(target, " kotlin" , " Double" , fName)
2292
2295
}
2293
2296
2294
- private fun isNumericFunction (target : IrFunction , fNames : List < String > ) = fNames.any { isNumericFunction(target, it) }
2297
+ private fun isNumericFunction (target : IrFunction , vararg fNames : String ) = fNames.any { isNumericFunction(target, it) }
2295
2298
2296
2299
private fun isArrayType (typeName : String ) =
2297
2300
when (typeName) {
@@ -2428,10 +2431,18 @@ open class KotlinFileExtractor(
2428
2431
binopReceiver(id, c.dispatchReceiver, " Dispatch receiver" )
2429
2432
}
2430
2433
2434
+ fun binopExt (id : Label <out DbExpr >) {
2435
+ binopReceiver(id, c.extensionReceiver, " Extension receiver" )
2436
+ }
2437
+
2431
2438
fun unaryopDisp (id : Label <out DbExpr >) {
2432
2439
unaryopReceiver(id, c.dispatchReceiver, " Dispatch receiver" )
2433
2440
}
2434
2441
2442
+ fun unaryopExt (id : Label <out DbExpr >) {
2443
+ unaryopReceiver(id, c.extensionReceiver, " Extension receiver" )
2444
+ }
2445
+
2435
2446
val dr = c.dispatchReceiver
2436
2447
when {
2437
2448
isFunction(target, " kotlin" , " String" , " plus" , false ) -> {
@@ -2446,7 +2457,7 @@ open class KotlinFileExtractor(
2446
2457
extractRawMethodAccess(stringPlusFn, c, c.type, callable, parent, idx, enclosingStmt, listOf (c.extensionReceiver, c.getValueArgument(0 )), null , null )
2447
2458
}
2448
2459
}
2449
- isNumericFunction(target, listOf ( " plus" , " minus" , " times" , " div" , " rem" , " and" , " or" , " xor" , " shl" , " shr" , " ushr" ) ) -> {
2460
+ isNumericFunction(target, " plus" , " minus" , " times" , " div" , " rem" , " and" , " or" , " xor" , " shl" , " shr" , " ushr" ) -> {
2450
2461
val type = useType(c.type)
2451
2462
val id: Label <out DbExpr > = when (val targetName = target.name.asString()) {
2452
2463
" plus" -> {
@@ -2510,7 +2521,10 @@ open class KotlinFileExtractor(
2510
2521
}
2511
2522
}
2512
2523
tw.writeExprsKotlinType(id, type.kotlinResult.id)
2513
- binopDisp(id)
2524
+ if (isFunction(target, " kotlin" , " Byte or Short" , { it == " Byte" || it == " Short" }, " and" , " or" , " xor" ))
2525
+ binopExt(id)
2526
+ else
2527
+ binopDisp(id)
2514
2528
}
2515
2529
// != gets desugared into not and ==. Here we resugar it.
2516
2530
c.origin == IrStatementOrigin .EXCLEQ && isFunction(target, " kotlin" , " Boolean" , " not" ) && c.valueArgumentsCount == 0 && dr != null && dr is IrCall && isBuiltinCallInternal(dr, " EQEQ" ) -> {
@@ -2541,7 +2555,7 @@ open class KotlinFileExtractor(
2541
2555
tw.writeExprsKotlinType(id, type.kotlinResult.id)
2542
2556
unaryopDisp(id)
2543
2557
}
2544
- isNumericFunction(target, listOf ( " inv" , " unaryMinus" , " unaryPlus" ) ) -> {
2558
+ isNumericFunction(target, " inv" , " unaryMinus" , " unaryPlus" ) -> {
2545
2559
val type = useType(c.type)
2546
2560
val id: Label <out DbExpr > = when (val targetName = target.name.asString()) {
2547
2561
" inv" -> {
@@ -2566,7 +2580,7 @@ open class KotlinFileExtractor(
2566
2580
}
2567
2581
tw.writeExprsKotlinType(id, type.kotlinResult.id)
2568
2582
if (isFunction(target, " kotlin" , " Byte or Short" , { it == " Byte" || it == " Short" }, " inv" ))
2569
- unaryopReceiver (id, c.extensionReceiver, " Extension receiver " )
2583
+ unaryopExt (id)
2570
2584
else
2571
2585
unaryopDisp(id)
2572
2586
}
0 commit comments