@@ -1410,8 +1410,7 @@ private void handleKnownDexTypes(Body b, final Jimple jimple) {
1410
1410
l .setType (t );
1411
1411
}
1412
1412
1413
- }
1414
- if (rop instanceof BinopExpr ) {
1413
+ } else if (rop instanceof BinopExpr ) {
1415
1414
boolean isDouble = u .hasTag (DoubleOpTag .NAME );
1416
1415
boolean isFloat = u .hasTag (FloatOpTag .NAME );
1417
1416
boolean isInt = u .hasTag (IntOpTag .NAME );
@@ -1459,6 +1458,30 @@ private void handleKnownDexTypes(Body b, final Jimple jimple) {
1459
1458
}
1460
1459
}
1461
1460
}
1461
+ } else if (rop instanceof CastExpr ) {
1462
+ CastExpr ce = (CastExpr ) rop ;
1463
+ Value op = ce .getOp ();
1464
+ if (op instanceof Constant ) {
1465
+ boolean isDouble = u .hasTag (DoubleOpTag .NAME );
1466
+ boolean isFloat = u .hasTag (FloatOpTag .NAME );
1467
+ if (isFloat ) {
1468
+ if (op instanceof IntConstant ) {
1469
+ int vVal = ((IntConstant ) op ).value ;
1470
+ ce .setOp (FloatConstant .v (Float .intBitsToFloat (vVal )));
1471
+ } else if (op instanceof LongConstant ) {
1472
+ long vVal = ((LongConstant ) op ).value ;
1473
+ ce .setOp (FloatConstant .v (Float .intBitsToFloat ((int ) vVal )));
1474
+ }
1475
+ } else if (isDouble ) {
1476
+ if (op instanceof LongConstant ) {
1477
+ long vVal = ((LongConstant ) op ).value ;
1478
+ ce .setOp (DoubleConstant .v (Double .longBitsToDouble (vVal )));
1479
+ } else if (op instanceof IntConstant ) {
1480
+ int vVal = ((IntConstant ) op ).value ;
1481
+ ce .setOp (DoubleConstant .v (Double .longBitsToDouble (vVal )));
1482
+ }
1483
+ }
1484
+ }
1462
1485
}
1463
1486
1464
1487
}
@@ -1487,23 +1510,6 @@ private void handleKnownDexTypes(Body b, final Jimple jimple) {
1487
1510
AssignStmt assign = (AssignStmt ) u1 ;
1488
1511
Type tl = assign .getLeftOp ().getType ();
1489
1512
Value rop = assign .getRightOp ();
1490
- if (rop instanceof CastExpr ) {
1491
- CastExpr ce = (CastExpr ) rop ;
1492
- if (ce .getCastType () instanceof DoubleType ) {
1493
- if (ce .getOp () instanceof LongConstant ) {
1494
- LongConstant lc = (LongConstant ) ce .getOp ();
1495
- long vVal = lc .value ;
1496
- assign .setRightOp (DoubleConstant .v (Double .longBitsToDouble (vVal )));
1497
- }
1498
- }
1499
- if (ce .getCastType () instanceof FloatType ) {
1500
- if (ce .getOp () instanceof IntConstant ) {
1501
- IntConstant ic = (IntConstant ) ce .getOp ();
1502
- int vVal = ic .value ;
1503
- assign .setRightOp (FloatConstant .v (Float .intBitsToFloat (vVal )));
1504
- }
1505
- }
1506
- }
1507
1513
if (rop instanceof Constant ) {
1508
1514
Constant c = (Constant ) assign .getRightOp ();
1509
1515
if (tl instanceof DoubleType && c instanceof LongConstant ) {
0 commit comments