Skip to content

Commit 8738a6a

Browse files
committed
Do not depend on host interop for Truffle::Debug.foreign_object_with_members
* So it can also run on native.
1 parent 1b97857 commit 8738a6a

File tree

2 files changed

+15
-14
lines changed

2 files changed

+15
-14
lines changed

spec/truffle/interop/foreign_inspect_to_s_spec.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@
136136

137137
describe "object with members" do
138138
it "gives a similar representation to Ruby" do
139-
foreign = Truffle::Debug.foreign_object_from_map(Truffle::Interop.to_java_map({a: 1, b: 2, c: 3}))
139+
foreign = Truffle::Debug.foreign_object_with_members
140140
foreign.inspect.should =~ /\A#<Polyglot::ForeignObject:0x\h+ a=1, b=2, c=3>\z/
141141
foreign.to_s.should == "#<Polyglot::ForeignObject [foreign object with members]>"
142142
end

src/main/java/org/truffleruby/debug/TruffleDebugNodes.java

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import java.util.ArrayList;
1515
import java.util.Collections;
1616
import java.util.Deque;
17+
import java.util.HashMap;
1718
import java.util.List;
1819
import java.util.Map;
1920

@@ -28,7 +29,6 @@
2829
import com.oracle.truffle.api.source.SourceSection;
2930
import org.graalvm.collections.Pair;
3031
import org.truffleruby.Layouts;
31-
import org.truffleruby.RubyContext;
3232
import org.truffleruby.RubyLanguage;
3333
import org.truffleruby.builtins.CoreMethod;
3434
import org.truffleruby.builtins.CoreMethodArrayArgumentsNode;
@@ -573,17 +573,19 @@ protected Object foreignObject() {
573573

574574
}
575575

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 {
579578

580579
@ExportLibrary(InteropLibrary.class)
581-
public static class ForeignObjectFromMap implements TruffleObject {
580+
public static class ForeignObjectWithMembers implements TruffleObject {
582581

583-
private final Map map;
582+
private final Map<String, Object> map;
584583

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);
587589
}
588590

589591
@ExportMessage
@@ -593,9 +595,8 @@ protected boolean hasMembers() {
593595

594596
@ExportMessage
595597
@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");
599600
}
600601

601602
@TruffleBoundary
@@ -622,8 +623,8 @@ protected String toDisplayString(boolean allowSideEffects) {
622623

623624
@TruffleBoundary
624625
@Specialization
625-
protected Object foreignObjectFromMap(Object map) {
626-
return new ForeignObjectFromMap((Map) getContext().getEnv().asHostObject(map));
626+
protected Object foreignObjectWithMembers() {
627+
return new ForeignObjectWithMembers();
627628
}
628629

629630
}

0 commit comments

Comments
 (0)