Browse Source

Fixed Optional primitive casts -> String

Now instead uses Objects.toString(...) for them
kindlich 5 years ago
parent
commit
94128e728d
No known key found for this signature in database

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

31
 import java.util.StringJoiner;
31
 import java.util.StringJoiner;
32
 
32
 
33
 public class JavaExpressionVisitor implements ExpressionVisitor<Void>, JavaNativeTranslator<Void> {
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
 	private static final JavaMethod BOOLEAN_PARSE = JavaMethod.getNativeStatic(JavaClass.BOOLEAN, "parseBoolean", "(Ljava/lang/String;)Z");
36
 	private static final JavaMethod BOOLEAN_PARSE = JavaMethod.getNativeStatic(JavaClass.BOOLEAN, "parseBoolean", "(Ljava/lang/String;)Z");
35
 	private static final JavaMethod BOOLEAN_TO_STRING = JavaMethod.getNativeStatic(JavaClass.BOOLEAN, "toString", "(Z)Ljava/lang/String;");
37
 	private static final JavaMethod BOOLEAN_TO_STRING = JavaMethod.getNativeStatic(JavaClass.BOOLEAN, "toString", "(Z)Ljava/lang/String;");
36
 	private static final JavaMethod BYTE_PARSE = JavaMethod.getNativeStatic(JavaClass.BYTE, "parseByte", "(Ljava/lang/String;)B");
38
 	private static final JavaMethod BYTE_PARSE = JavaMethod.getNativeStatic(JavaClass.BYTE, "parseByte", "(Ljava/lang/String;)B");
1293
 
1295
 
1294
 		switch (builtin) {
1296
 		switch (builtin) {
1295
 			case BOOL_TO_STRING:
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
 				break;
1303
 				break;
1298
 			case BYTE_TO_SBYTE:
1304
 			case BYTE_TO_SBYTE:
1299
 				javaWriter.i2b();
1305
 				javaWriter.i2b();
1331
 				javaWriter.iAnd();
1337
 				javaWriter.iAnd();
1332
 				break;
1338
 				break;
1333
 			case BYTE_TO_STRING:
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
 				break;
1347
 				break;
1338
 			case SBYTE_TO_BYTE:
1348
 			case SBYTE_TO_BYTE:
1339
 			case SBYTE_TO_SHORT:
1349
 			case SBYTE_TO_SHORT:
1355
 			case SBYTE_TO_CHAR:
1365
 			case SBYTE_TO_CHAR:
1356
 				break;
1366
 				break;
1357
 			case SBYTE_TO_STRING:
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
 				break;
1373
 				break;
1360
 			case SHORT_TO_BYTE:
1374
 			case SHORT_TO_BYTE:
1361
 				break;
1375
 				break;
1380
 			case SHORT_TO_CHAR:
1394
 			case SHORT_TO_CHAR:
1381
 				break;
1395
 				break;
1382
 			case SHORT_TO_STRING:
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
 				break;
1402
 				break;
1385
 			case USHORT_TO_BYTE:
1403
 			case USHORT_TO_BYTE:
1386
 				break;
1404
 				break;
1416
 				javaWriter.iAnd();
1434
 				javaWriter.iAnd();
1417
 				break;
1435
 				break;
1418
 			case USHORT_TO_STRING:
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
 			case INT_TO_BYTE:
1445
 			case INT_TO_BYTE:
1424
 			case USIZE_TO_BYTE:
1446
 			case USIZE_TO_BYTE:
1425
 				break;
1447
 				break;
1459
 				break;
1481
 				break;
1460
 			case INT_TO_STRING:
1482
 			case INT_TO_STRING:
1461
 			case USIZE_TO_STRING:
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
 				break;
1489
 				break;
1464
 			case UINT_TO_BYTE:
1490
 			case UINT_TO_BYTE:
1465
 				break;
1491
 				break;
1497
 				javaWriter.i2s();
1523
 				javaWriter.i2s();
1498
 				break;
1524
 				break;
1499
 			case UINT_TO_STRING:
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
 				break;
1531
 				break;
1502
 			case LONG_TO_BYTE:
1532
 			case LONG_TO_BYTE:
1503
 				javaWriter.l2i();
1533
 				javaWriter.l2i();
1529
 				javaWriter.i2s();
1559
 				javaWriter.i2s();
1530
 				break;
1560
 				break;
1531
 			case LONG_TO_STRING:
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
 				break;
1567
 				break;
1534
 			case ULONG_TO_BYTE:
1568
 			case ULONG_TO_BYTE:
1535
 				javaWriter.l2i();
1569
 				javaWriter.l2i();
1560
 				javaWriter.i2s();
1594
 				javaWriter.i2s();
1561
 				break;
1595
 				break;
1562
 			case ULONG_TO_STRING:
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
 				break;
1602
 				break;
1565
 			case FLOAT_TO_BYTE:
1603
 			case FLOAT_TO_BYTE:
1566
 				javaWriter.f2i();
1604
 				javaWriter.f2i();
1587
 				javaWriter.f2d();
1625
 				javaWriter.f2d();
1588
 				break;
1626
 				break;
1589
 			case FLOAT_TO_STRING:
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
 				break;
1633
 				break;
1592
 			case DOUBLE_TO_BYTE:
1634
 			case DOUBLE_TO_BYTE:
1593
 				javaWriter.d2i();
1635
 				javaWriter.d2i();
1614
 				javaWriter.d2f();
1656
 				javaWriter.d2f();
1615
 				break;
1657
 				break;
1616
 			case DOUBLE_TO_STRING:
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
 				break;
1664
 				break;
1619
 			case CHAR_TO_BYTE:
1665
 			case CHAR_TO_BYTE:
1620
 				break;
1666
 				break;
1632
 				javaWriter.i2l();
1678
 				javaWriter.i2l();
1633
 				break;
1679
 				break;
1634
 			case CHAR_TO_STRING:
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
 				break;
1686
 				break;
1637
 			case ENUM_TO_STRING:
1687
 			case ENUM_TO_STRING:
1638
 				javaWriter.invokeVirtual(ENUM_NAME);
1688
 				javaWriter.invokeVirtual(ENUM_NAME);

Loading…
Cancel
Save