14
14
import java .util .ArrayList ;
15
15
import java .util .Collections ;
16
16
import java .util .Deque ;
17
+ import java .util .HashMap ;
17
18
import java .util .List ;
18
19
import java .util .Map ;
19
20
28
29
import com .oracle .truffle .api .source .SourceSection ;
29
30
import org .graalvm .collections .Pair ;
30
31
import org .truffleruby .Layouts ;
31
- import org .truffleruby .RubyContext ;
32
32
import org .truffleruby .RubyLanguage ;
33
33
import org .truffleruby .builtins .CoreMethod ;
34
34
import org .truffleruby .builtins .CoreMethodArrayArgumentsNode ;
@@ -573,17 +573,19 @@ protected Object foreignObject() {
573
573
574
574
}
575
575
576
- @ SuppressWarnings ({ "rawtypes" , "unchecked" })
577
- @ CoreMethod (names = "foreign_object_from_map" , required = 1 , onSingleton = true )
578
- public abstract static class ForeignObjectFromMapNode extends CoreMethodArrayArgumentsNode {
576
+ @ CoreMethod (names = "foreign_object_with_members" , onSingleton = true )
577
+ public abstract static class ForeignObjectWithMembersNode extends CoreMethodArrayArgumentsNode {
579
578
580
579
@ ExportLibrary (InteropLibrary .class )
581
- public static class ForeignObjectFromMap implements TruffleObject {
580
+ public static class ForeignObjectWithMembers implements TruffleObject {
582
581
583
- private final Map map ;
582
+ private final Map < String , Object > map ;
584
583
585
- public ForeignObjectFromMap (Map map ) {
586
- this .map = map ;
584
+ public ForeignObjectWithMembers () {
585
+ map = new HashMap <>();
586
+ map .put ("a" , 1 );
587
+ map .put ("b" , 2 );
588
+ map .put ("c" , 3 );
587
589
}
588
590
589
591
@ ExportMessage
@@ -593,9 +595,8 @@ protected boolean hasMembers() {
593
595
594
596
@ ExportMessage
595
597
@ TruffleBoundary
596
- protected Object getMembers (boolean includeInternal ,
597
- @ CachedLibrary ("this" ) InteropLibrary node ) {
598
- return RubyContext .get (node ).getEnv ().asGuestValue (map .keySet ().toArray ());
598
+ protected Object getMembers (boolean includeInternal ) {
599
+ return new ForeignArrayNode .ForeignArray ("a" , "b" , "c" );
599
600
}
600
601
601
602
@ TruffleBoundary
@@ -622,8 +623,8 @@ protected String toDisplayString(boolean allowSideEffects) {
622
623
623
624
@ TruffleBoundary
624
625
@ Specialization
625
- protected Object foreignObjectFromMap ( Object map ) {
626
- return new ForeignObjectFromMap (( Map ) getContext (). getEnv (). asHostObject ( map ) );
626
+ protected Object foreignObjectWithMembers ( ) {
627
+ return new ForeignObjectWithMembers ( );
627
628
}
628
629
629
630
}
0 commit comments