Skip to content

Commit d67d6d2

Browse files
committed
Expose the value in a ValueWrapper in Chrome Inspector debug.
1 parent 22161c4 commit d67d6d2

File tree

1 file changed

+54
-0
lines changed

1 file changed

+54
-0
lines changed

src/main/java/org/truffleruby/cext/ValueWrapper.java

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,9 @@
1919
import com.oracle.truffle.api.dsl.Cached;
2020
import com.oracle.truffle.api.dsl.Cached.Exclusive;
2121
import com.oracle.truffle.api.interop.InteropLibrary;
22+
import com.oracle.truffle.api.interop.InvalidArrayIndexException;
2223
import com.oracle.truffle.api.interop.TruffleObject;
24+
import com.oracle.truffle.api.interop.UnknownIdentifierException;
2325
import com.oracle.truffle.api.interop.UnsupportedMessageException;
2426
import com.oracle.truffle.api.library.ExportLibrary;
2527
import com.oracle.truffle.api.library.ExportMessage;
@@ -121,4 +123,56 @@ protected static long asPointer(ValueWrapper wrapper,
121123

122124
return handle;
123125
}
126+
127+
@ExportMessage
128+
protected boolean hasMembers() {
129+
return true;
130+
}
131+
132+
@ExportMessage
133+
protected Object getMembers(boolean includeInternal) {
134+
return new String[]{ "value" };
135+
}
136+
137+
@ExportMessage
138+
protected boolean isMemberReadable(String member) {
139+
return "value".equals(member);
140+
}
141+
142+
@ExportMessage
143+
protected static Object readMember(ValueWrapper wrapper, String member,
144+
@Cached @Exclusive BranchProfile errorProfile) throws UnknownIdentifierException {
145+
if ("value".equals(member)) {
146+
return wrapper.object;
147+
} else {
148+
errorProfile.enter();
149+
throw UnknownIdentifierException.create(member);
150+
}
151+
}
152+
153+
@ExportMessage
154+
protected static boolean hasArrayElements(ValueWrapper wrapper) {
155+
return true;
156+
}
157+
158+
@ExportMessage
159+
protected static long getArraySize(ValueWrapper wrapper) {
160+
return 1;
161+
}
162+
163+
@ExportMessage
164+
protected static Object readArrayElement(ValueWrapper wrapper, long index,
165+
@Cached @Exclusive BranchProfile errorProfile) throws InvalidArrayIndexException {
166+
if (index == 0L) {
167+
return wrapper.object;
168+
} else {
169+
errorProfile.enter();
170+
throw InvalidArrayIndexException.create(index);
171+
}
172+
}
173+
174+
@ExportMessage
175+
protected static boolean isArrayElementReadable(ValueWrapper wrapper, long index) {
176+
return index == 0L;
177+
}
124178
}

0 commit comments

Comments
 (0)