@@ -715,10 +715,28 @@ protected boolean isNumber(Object receiver,
715
715
}
716
716
}
717
717
718
+ @ CoreMethod (names = "fits_in_byte?" , onSingleton = true , required = 1 )
719
+ public abstract static class FitsInByteNode extends InteropCoreMethodArrayArgumentsNode {
720
+ @ Specialization (limit = "getCacheLimit()" )
721
+ protected boolean fits (Object receiver ,
722
+ @ CachedLibrary ("receiver" ) InteropLibrary receivers ) {
723
+ return receivers .fitsInByte (receiver );
724
+ }
725
+ }
726
+
727
+ @ CoreMethod (names = "fits_in_short?" , onSingleton = true , required = 1 )
728
+ public abstract static class FitsInShortNode extends InteropCoreMethodArrayArgumentsNode {
729
+ @ Specialization (limit = "getCacheLimit()" )
730
+ protected boolean fits (Object receiver ,
731
+ @ CachedLibrary ("receiver" ) InteropLibrary receivers ) {
732
+ return receivers .fitsInShort (receiver );
733
+ }
734
+ }
735
+
718
736
@ CoreMethod (names = "fits_in_int?" , onSingleton = true , required = 1 )
719
737
public abstract static class FitsInIntNode extends InteropCoreMethodArrayArgumentsNode {
720
738
@ Specialization (limit = "getCacheLimit()" )
721
- protected boolean fitsInInt (Object receiver ,
739
+ protected boolean fits (Object receiver ,
722
740
@ CachedLibrary ("receiver" ) InteropLibrary receivers ) {
723
741
return receivers .fitsInInt (receiver );
724
742
}
@@ -727,25 +745,62 @@ protected boolean fitsInInt(Object receiver,
727
745
@ CoreMethod (names = "fits_in_long?" , onSingleton = true , required = 1 )
728
746
public abstract static class FitsInLongNode extends InteropCoreMethodArrayArgumentsNode {
729
747
@ Specialization (limit = "getCacheLimit()" )
730
- protected boolean fitsInLong (Object receiver ,
748
+ protected boolean fits (Object receiver ,
731
749
@ CachedLibrary ("receiver" ) InteropLibrary receivers ) {
732
750
return receivers .fitsInLong (receiver );
733
751
}
734
752
}
735
753
754
+ @ CoreMethod (names = "fits_in_float?" , onSingleton = true , required = 1 )
755
+ public abstract static class FitsInFloatNode extends InteropCoreMethodArrayArgumentsNode {
756
+ @ Specialization (limit = "getCacheLimit()" )
757
+ protected boolean fits (Object receiver ,
758
+ @ CachedLibrary ("receiver" ) InteropLibrary receivers ) {
759
+ return receivers .fitsInFloat (receiver );
760
+ }
761
+ }
762
+
736
763
@ CoreMethod (names = "fits_in_double?" , onSingleton = true , required = 1 )
737
764
public abstract static class FitsInDoubleNode extends InteropCoreMethodArrayArgumentsNode {
738
765
@ Specialization (limit = "getCacheLimit()" )
739
- protected boolean fitsInDouble (Object receiver ,
766
+ protected boolean fits (Object receiver ,
740
767
@ CachedLibrary ("receiver" ) InteropLibrary receivers ) {
741
768
return receivers .fitsInDouble (receiver );
742
769
}
743
770
}
744
771
772
+ @ CoreMethod (names = "as_byte" , onSingleton = true , required = 1 )
773
+ public abstract static class AsByteNode extends InteropCoreMethodArrayArgumentsNode {
774
+ @ Specialization (limit = "getCacheLimit()" )
775
+ protected int as (Object receiver ,
776
+ @ CachedLibrary ("receiver" ) InteropLibrary receivers ,
777
+ @ Cached TranslateInteropExceptionNode translateInteropException ) {
778
+ try {
779
+ return receivers .asByte (receiver );
780
+ } catch (InteropException e ) {
781
+ throw translateInteropException .execute (e );
782
+ }
783
+ }
784
+ }
785
+
786
+ @ CoreMethod (names = "as_short" , onSingleton = true , required = 1 )
787
+ public abstract static class AsShortNode extends InteropCoreMethodArrayArgumentsNode {
788
+ @ Specialization (limit = "getCacheLimit()" )
789
+ protected int as (Object receiver ,
790
+ @ CachedLibrary ("receiver" ) InteropLibrary receivers ,
791
+ @ Cached TranslateInteropExceptionNode translateInteropException ) {
792
+ try {
793
+ return receivers .asShort (receiver );
794
+ } catch (InteropException e ) {
795
+ throw translateInteropException .execute (e );
796
+ }
797
+ }
798
+ }
799
+
745
800
@ CoreMethod (names = "as_int" , onSingleton = true , required = 1 )
746
801
public abstract static class AsIntNode extends InteropCoreMethodArrayArgumentsNode {
747
802
@ Specialization (limit = "getCacheLimit()" )
748
- protected int asInt (Object receiver ,
803
+ protected int as (Object receiver ,
749
804
@ CachedLibrary ("receiver" ) InteropLibrary receivers ,
750
805
@ Cached TranslateInteropExceptionNode translateInteropException ) {
751
806
try {
@@ -759,7 +814,7 @@ protected int asInt(Object receiver,
759
814
@ CoreMethod (names = "as_long" , onSingleton = true , required = 1 )
760
815
public abstract static class AsLongNode extends InteropCoreMethodArrayArgumentsNode {
761
816
@ Specialization (limit = "getCacheLimit()" )
762
- protected long asLong (Object receiver ,
817
+ protected long as (Object receiver ,
763
818
@ CachedLibrary ("receiver" ) InteropLibrary receivers ,
764
819
@ Cached TranslateInteropExceptionNode translateInteropException ) {
765
820
try {
@@ -770,10 +825,24 @@ protected long asLong(Object receiver,
770
825
}
771
826
}
772
827
828
+ @ CoreMethod (names = "as_float" , onSingleton = true , required = 1 )
829
+ public abstract static class AsFloatNode extends InteropCoreMethodArrayArgumentsNode {
830
+ @ Specialization (limit = "getCacheLimit()" )
831
+ protected double as (Object receiver ,
832
+ @ CachedLibrary ("receiver" ) InteropLibrary receivers ,
833
+ @ Cached TranslateInteropExceptionNode translateInteropException ) {
834
+ try {
835
+ return receivers .asFloat (receiver );
836
+ } catch (InteropException e ) {
837
+ throw translateInteropException .execute (e );
838
+ }
839
+ }
840
+ }
841
+
773
842
@ CoreMethod (names = "as_double" , onSingleton = true , required = 1 )
774
843
public abstract static class AsDoubleNode extends InteropCoreMethodArrayArgumentsNode {
775
844
@ Specialization (limit = "getCacheLimit()" )
776
- protected double asDouble (Object receiver ,
845
+ protected double as (Object receiver ,
777
846
@ CachedLibrary ("receiver" ) InteropLibrary receivers ,
778
847
@ Cached TranslateInteropExceptionNode translateInteropException ) {
779
848
try {
@@ -1439,9 +1508,26 @@ private Object javaType(String name) {
1439
1508
// endregion
1440
1509
1441
1510
// region MetaObject
1511
+ @ CoreMethod (names = "meta_object?" , onSingleton = true , required = 1 )
1512
+ public abstract static class IsMetaObjectNode extends InteropCoreMethodArrayArgumentsNode {
1513
+ @ Specialization (limit = "getCacheLimit()" )
1514
+ protected boolean isMetaObject (Object receiver ,
1515
+ @ CachedLibrary ("receiver" ) InteropLibrary interop ) {
1516
+ return interop .isMetaObject (receiver );
1517
+ }
1518
+ }
1519
+
1520
+ @ CoreMethod (names = "has_meta_object?" , onSingleton = true , required = 1 )
1521
+ public abstract static class HasMetaObjectNode extends InteropCoreMethodArrayArgumentsNode {
1522
+ @ Specialization (limit = "getCacheLimit()" )
1523
+ protected boolean hasMetaObject (Object receiver ,
1524
+ @ CachedLibrary ("receiver" ) InteropLibrary interop ) {
1525
+ return interop .hasMetaObject (receiver );
1526
+ }
1527
+ }
1528
+
1442
1529
@ CoreMethod (names = "meta_object" , onSingleton = true , required = 1 )
1443
1530
public abstract static class InteropMetaObjectNode extends InteropCoreMethodArrayArgumentsNode {
1444
-
1445
1531
@ Specialization (limit = "getCacheLimit()" )
1446
1532
protected Object metaObject (Object value ,
1447
1533
@ CachedLibrary ("value" ) InteropLibrary interop ,
@@ -1457,14 +1543,67 @@ protected Object metaObject(Object value,
1457
1543
return coreLibrary ().getLogicalClass (value );
1458
1544
}
1459
1545
}
1546
+ }
1460
1547
1548
+ @ CoreMethod (names = "has_declaring_meta_object?" , onSingleton = true , required = 1 )
1549
+ public abstract static class HasDeclaringMetaObjectNode extends InteropCoreMethodArrayArgumentsNode {
1550
+ @ Specialization (limit = "getCacheLimit()" )
1551
+ protected boolean hasDeclaringMetaObject (Object receiver ,
1552
+ @ CachedLibrary ("receiver" ) InteropLibrary interop ) {
1553
+ return interop .hasDeclaringMetaObject (receiver );
1554
+ }
1555
+ }
1556
+
1557
+ @ CoreMethod (names = "declaring_meta_object" , onSingleton = true , required = 1 )
1558
+ public abstract static class DeclaringMetaObjectNode extends InteropCoreMethodArrayArgumentsNode {
1559
+ @ Specialization (limit = "getCacheLimit()" )
1560
+ protected Object declaringMetaObject (Object value ,
1561
+ @ CachedLibrary ("value" ) InteropLibrary interop ,
1562
+ @ Cached TranslateInteropExceptionNode translateInteropException ) {
1563
+ try {
1564
+ return interop .getDeclaringMetaObject (value );
1565
+ } catch (UnsupportedMessageException e ) {
1566
+ throw translateInteropException .execute (e );
1567
+ }
1568
+ }
1569
+ }
1570
+
1571
+ @ CoreMethod (names = "meta_instance?" , onSingleton = true , required = 2 )
1572
+ public abstract static class IsMetaInstanceNode extends InteropCoreMethodArrayArgumentsNode {
1573
+ @ Specialization (limit = "getCacheLimit()" )
1574
+ protected boolean isMetaInstance (Object metaObject , Object instance ,
1575
+ @ CachedLibrary ("metaObject" ) InteropLibrary interop ,
1576
+ @ Cached TranslateInteropExceptionNode translateInteropException ) {
1577
+ try {
1578
+ return interop .isMetaInstance (metaObject , instance );
1579
+ } catch (UnsupportedMessageException e ) {
1580
+ throw translateInteropException .execute (e );
1581
+ }
1582
+ }
1583
+ }
1584
+
1585
+ @ CoreMethod (names = "meta_simple_name" , onSingleton = true , required = 1 )
1586
+ public abstract static class GetMetaSimpleNameNode extends InteropCoreMethodArrayArgumentsNode {
1587
+ @ Specialization (limit = "getCacheLimit()" )
1588
+ protected Object getMetaSimpleName (Object metaObject ,
1589
+ @ CachedLibrary ("metaObject" ) InteropLibrary interop ,
1590
+ @ CachedLibrary (limit = "1" ) InteropLibrary asStrings ,
1591
+ @ Cached FromJavaStringNode fromJavaStringNode ,
1592
+ @ Cached TranslateInteropExceptionNode translateInteropException ) {
1593
+ try {
1594
+ final Object simpleName = interop .getMetaSimpleName (metaObject );
1595
+ final String string = asStrings .asString (simpleName );
1596
+ return fromJavaStringNode .executeFromJavaString (string );
1597
+ } catch (UnsupportedMessageException e ) {
1598
+ throw translateInteropException .execute (e );
1599
+ }
1600
+ }
1461
1601
}
1462
1602
1463
1603
@ CoreMethod (names = "meta_qualified_name" , onSingleton = true , required = 1 )
1464
1604
public abstract static class GetMetaQualifiedNameNode extends InteropCoreMethodArrayArgumentsNode {
1465
-
1466
1605
@ Specialization (limit = "getCacheLimit()" )
1467
- protected Object metaObject (Object metaObject ,
1606
+ protected Object getMetaQualifiedName (Object metaObject ,
1468
1607
@ CachedLibrary ("metaObject" ) InteropLibrary interop ,
1469
1608
@ CachedLibrary (limit = "1" ) InteropLibrary asStrings ,
1470
1609
@ Cached FromJavaStringNode fromJavaStringNode ,
@@ -1477,22 +1616,45 @@ protected Object metaObject(Object metaObject,
1477
1616
throw translateInteropException .execute (e );
1478
1617
}
1479
1618
}
1480
-
1481
1619
}
1482
1620
// endregion
1483
1621
1484
1622
// region Identity
1485
- @ CoreMethod (names = "identity_hash_code" , onSingleton = true , required = 1 )
1486
- public abstract static class InteropIdentityHashCodeNode extends CoreMethodArrayArgumentsNode {
1623
+ @ CoreMethod (names = "identical?" , onSingleton = true , required = 2 )
1624
+ public abstract static class IsIdenticalNode extends InteropCoreMethodArrayArgumentsNode {
1625
+ @ Specialization (limit = "getCacheLimit()" )
1626
+ protected boolean isIdentical (Object receiver , Object other ,
1627
+ @ CachedLibrary ("receiver" ) InteropLibrary lhsInterop ,
1628
+ @ CachedLibrary ("other" ) InteropLibrary rhsInterop ) {
1629
+ return lhsInterop .isIdentical (receiver , other , rhsInterop );
1630
+ }
1631
+ }
1487
1632
1488
- @ Specialization
1489
- @ TruffleBoundary
1490
- protected int identityHashCode ( Object value ) {
1491
- final int code = System . identityHashCode ( value );
1492
- assert code >= 0 ;
1493
- return code ;
1633
+ @ CoreMethod ( names = "has_identity?" , onSingleton = true , required = 1 )
1634
+ public abstract static class HasIdentityNode extends InteropCoreMethodArrayArgumentsNode {
1635
+ @ Specialization ( limit = "getCacheLimit()" )
1636
+ protected boolean hasIdentity ( Object receiver ,
1637
+ @ CachedLibrary ( "receiver" ) InteropLibrary interop ) {
1638
+ return interop . hasIdentity ( receiver ) ;
1494
1639
}
1640
+ }
1495
1641
1642
+ @ CoreMethod (names = "identity_hash_code" , onSingleton = true , required = 1 )
1643
+ public abstract static class InteropIdentityHashCodeNode extends InteropCoreMethodArrayArgumentsNode {
1644
+ @ Specialization (limit = "getCacheLimit()" )
1645
+ protected int identityHashCode (Object value ,
1646
+ @ CachedLibrary ("value" ) InteropLibrary interop ,
1647
+ @ Cached TranslateInteropExceptionNode translateInteropException ) {
1648
+ if (interop .hasIdentity (value )) {
1649
+ try {
1650
+ return interop .identityHashCode (value );
1651
+ } catch (UnsupportedMessageException e ) {
1652
+ throw translateInteropException .execute (e );
1653
+ }
1654
+ } else {
1655
+ return System .identityHashCode (value );
1656
+ }
1657
+ }
1496
1658
}
1497
1659
// endregion
1498
1660
0 commit comments