Ver código fonte

Fixed Optional primitive casts -> String

Now instead uses Objects.toString(...) for them
kindlich 5 anos atrás
pai
commit
94128e728d
Nenhuma chave conhecida encontrada para esta assinatura no banco de dados

+ 67
- 17
JavaBytecodeCompiler/src/main/java/org/openzen/zenscript/javabytecode/compiler/JavaExpressionVisitor.java Ver arquivo

@@ -31,6 +31,8 @@ import java.util.Objects;
31 31
 import java.util.StringJoiner;
32 32
 
33 33
 public class JavaExpressionVisitor implements ExpressionVisitor<Void>, JavaNativeTranslator<Void> {
34
+    private static final JavaMethod OBJECTS_TOSTRING = JavaMethod.getNativeStatic(new JavaClass("java.util", "Objects", JavaClass.Kind.CLASS), "toString", "(Ljava/lang/Object;)Ljava/lang/String;");
35
+    
34 36
 	private static final JavaMethod BOOLEAN_PARSE = JavaMethod.getNativeStatic(JavaClass.BOOLEAN, "parseBoolean", "(Ljava/lang/String;)Z");
35 37
 	private static final JavaMethod BOOLEAN_TO_STRING = JavaMethod.getNativeStatic(JavaClass.BOOLEAN, "toString", "(Z)Ljava/lang/String;");
36 38
 	private static final JavaMethod BYTE_PARSE = JavaMethod.getNativeStatic(JavaClass.BYTE, "parseByte", "(Ljava/lang/String;)B");
@@ -1293,7 +1295,11 @@ public class JavaExpressionVisitor implements ExpressionVisitor<Void>, JavaNativ
1293 1295
 
1294 1296
 		switch (builtin) {
1295 1297
 			case BOOL_TO_STRING:
1296
-				javaWriter.invokeStatic(BOOLEAN_TO_STRING);
1298
+                if(expression.target.type.isOptional()) {
1299
+                    javaWriter.invokeStatic(OBJECTS_TOSTRING);
1300
+                } else {
1301
+                    javaWriter.invokeStatic(BOOLEAN_TO_STRING);
1302
+                }
1297 1303
 				break;
1298 1304
 			case BYTE_TO_SBYTE:
1299 1305
 				javaWriter.i2b();
@@ -1331,9 +1337,13 @@ public class JavaExpressionVisitor implements ExpressionVisitor<Void>, JavaNativ
1331 1337
 				javaWriter.iAnd();
1332 1338
 				break;
1333 1339
 			case BYTE_TO_STRING:
1334
-				javaWriter.constant(0xFF);
1335
-				javaWriter.iAnd();
1336
-				javaWriter.invokeStatic(INTEGER_TO_STRING);
1340
+                if(expression.target.type.isOptional()) {
1341
+                    javaWriter.invokeStatic(OBJECTS_TOSTRING);
1342
+                } else {
1343
+                    javaWriter.constant(0xFF);
1344
+                    javaWriter.iAnd();
1345
+                    javaWriter.invokeStatic(INTEGER_TO_STRING);
1346
+                }
1337 1347
 				break;
1338 1348
 			case SBYTE_TO_BYTE:
1339 1349
 			case SBYTE_TO_SHORT:
@@ -1355,7 +1365,11 @@ public class JavaExpressionVisitor implements ExpressionVisitor<Void>, JavaNativ
1355 1365
 			case SBYTE_TO_CHAR:
1356 1366
 				break;
1357 1367
 			case SBYTE_TO_STRING:
1358
-				javaWriter.invokeStatic(INTEGER_TO_STRING);
1368
+                if(expression.target.type.isOptional()) {
1369
+                    javaWriter.invokeStatic(OBJECTS_TOSTRING);
1370
+                } else {
1371
+                    javaWriter.invokeStatic(INTEGER_TO_STRING);
1372
+                }
1359 1373
 				break;
1360 1374
 			case SHORT_TO_BYTE:
1361 1375
 				break;
@@ -1380,7 +1394,11 @@ public class JavaExpressionVisitor implements ExpressionVisitor<Void>, JavaNativ
1380 1394
 			case SHORT_TO_CHAR:
1381 1395
 				break;
1382 1396
 			case SHORT_TO_STRING:
1383
-				javaWriter.invokeStatic(SHORT_TO_STRING);
1397
+                if(expression.target.type.isOptional()) {
1398
+                    javaWriter.invokeStatic(OBJECTS_TOSTRING);
1399
+                } else {
1400
+                    javaWriter.invokeStatic(SHORT_TO_STRING);
1401
+                }
1384 1402
 				break;
1385 1403
 			case USHORT_TO_BYTE:
1386 1404
 				break;
@@ -1416,10 +1434,14 @@ public class JavaExpressionVisitor implements ExpressionVisitor<Void>, JavaNativ
1416 1434
 				javaWriter.iAnd();
1417 1435
 				break;
1418 1436
 			case USHORT_TO_STRING:
1419
-				javaWriter.constant(0xFFFFL);
1420
-				javaWriter.iAnd();
1421
-				javaWriter.invokeStatic(INTEGER_TO_STRING);
1422
-				break;
1437
+                if(expression.target.type.isOptional()) {
1438
+                    javaWriter.invokeStatic(OBJECTS_TOSTRING);
1439
+                } else {
1440
+                    javaWriter.constant(0xFFFFL);
1441
+                    javaWriter.iAnd();
1442
+                    javaWriter.invokeStatic(INTEGER_TO_STRING);
1443
+                }
1444
+                break;
1423 1445
 			case INT_TO_BYTE:
1424 1446
 			case USIZE_TO_BYTE:
1425 1447
 				break;
@@ -1459,7 +1481,11 @@ public class JavaExpressionVisitor implements ExpressionVisitor<Void>, JavaNativ
1459 1481
 				break;
1460 1482
 			case INT_TO_STRING:
1461 1483
 			case USIZE_TO_STRING:
1462
-				javaWriter.invokeStatic(INTEGER_TO_STRING);
1484
+			    if(expression.target.type.isOptional()) {
1485
+                    javaWriter.invokeStatic(OBJECTS_TOSTRING);
1486
+                } else {
1487
+                    javaWriter.invokeStatic(INTEGER_TO_STRING);
1488
+                }
1463 1489
 				break;
1464 1490
 			case UINT_TO_BYTE:
1465 1491
 				break;
@@ -1497,7 +1523,11 @@ public class JavaExpressionVisitor implements ExpressionVisitor<Void>, JavaNativ
1497 1523
 				javaWriter.i2s();
1498 1524
 				break;
1499 1525
 			case UINT_TO_STRING:
1500
-				javaWriter.invokeStatic(INTEGER_TO_UNSIGNED_STRING);
1526
+                if(expression.target.type.isOptional()) {
1527
+                    javaWriter.invokeStatic(OBJECTS_TOSTRING);
1528
+                } else {
1529
+                    javaWriter.invokeStatic(INTEGER_TO_UNSIGNED_STRING);
1530
+                }
1501 1531
 				break;
1502 1532
 			case LONG_TO_BYTE:
1503 1533
 				javaWriter.l2i();
@@ -1529,7 +1559,11 @@ public class JavaExpressionVisitor implements ExpressionVisitor<Void>, JavaNativ
1529 1559
 				javaWriter.i2s();
1530 1560
 				break;
1531 1561
 			case LONG_TO_STRING:
1532
-				javaWriter.invokeStatic(LONG_TO_STRING);
1562
+                if(expression.target.type.isOptional()) {
1563
+                    javaWriter.invokeStatic(OBJECTS_TOSTRING);
1564
+                } else {
1565
+                    javaWriter.invokeStatic(LONG_TO_STRING);
1566
+                }
1533 1567
 				break;
1534 1568
 			case ULONG_TO_BYTE:
1535 1569
 				javaWriter.l2i();
@@ -1560,7 +1594,11 @@ public class JavaExpressionVisitor implements ExpressionVisitor<Void>, JavaNativ
1560 1594
 				javaWriter.i2s();
1561 1595
 				break;
1562 1596
 			case ULONG_TO_STRING:
1563
-				javaWriter.invokeStatic(LONG_TO_UNSIGNED_STRING);
1597
+                if(expression.target.type.isOptional()) {
1598
+                    javaWriter.invokeStatic(OBJECTS_TOSTRING);
1599
+                } else {
1600
+                    javaWriter.invokeStatic(LONG_TO_UNSIGNED_STRING);
1601
+                }
1564 1602
 				break;
1565 1603
 			case FLOAT_TO_BYTE:
1566 1604
 				javaWriter.f2i();
@@ -1587,7 +1625,11 @@ public class JavaExpressionVisitor implements ExpressionVisitor<Void>, JavaNativ
1587 1625
 				javaWriter.f2d();
1588 1626
 				break;
1589 1627
 			case FLOAT_TO_STRING:
1590
-				javaWriter.invokeStatic(FLOAT_TO_STRING);
1628
+                if(expression.target.type.isOptional()) {
1629
+                    javaWriter.invokeStatic(OBJECTS_TOSTRING);
1630
+                } else {
1631
+                    javaWriter.invokeStatic(FLOAT_TO_STRING);
1632
+                }
1591 1633
 				break;
1592 1634
 			case DOUBLE_TO_BYTE:
1593 1635
 				javaWriter.d2i();
@@ -1614,7 +1656,11 @@ public class JavaExpressionVisitor implements ExpressionVisitor<Void>, JavaNativ
1614 1656
 				javaWriter.d2f();
1615 1657
 				break;
1616 1658
 			case DOUBLE_TO_STRING:
1617
-				javaWriter.invokeStatic(DOUBLE_TO_STRING);
1659
+                if(expression.target.type.isOptional()) {
1660
+                    javaWriter.invokeStatic(OBJECTS_TOSTRING);
1661
+                } else {
1662
+                    javaWriter.invokeStatic(DOUBLE_TO_STRING);
1663
+                }
1618 1664
 				break;
1619 1665
 			case CHAR_TO_BYTE:
1620 1666
 				break;
@@ -1632,7 +1678,11 @@ public class JavaExpressionVisitor implements ExpressionVisitor<Void>, JavaNativ
1632 1678
 				javaWriter.i2l();
1633 1679
 				break;
1634 1680
 			case CHAR_TO_STRING:
1635
-				javaWriter.invokeStatic(CHARACTER_TO_STRING);
1681
+                if(expression.target.type.isOptional()) {
1682
+                    javaWriter.invokeStatic(OBJECTS_TOSTRING);
1683
+                } else {
1684
+                    javaWriter.invokeStatic(CHARACTER_TO_STRING);
1685
+                }
1636 1686
 				break;
1637 1687
 			case ENUM_TO_STRING:
1638 1688
 				javaWriter.invokeVirtual(ENUM_NAME);

Carregando…
Cancelar
Salvar