Skip to content

Commit d4351a7

Browse files
committed
Logical value for Ruby Range
1 parent d29a1e7 commit d4351a7

File tree

1 file changed

+24
-0
lines changed
  • visualvm/heapviewer.truffle/src/org/graalvm/visualvm/heapviewer/truffle/lang/ruby

1 file changed

+24
-0
lines changed

visualvm/heapviewer.truffle/src/org/graalvm/visualvm/heapviewer/truffle/lang/ruby/RubyNodes.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,21 @@ static String getLogicalValue(RubyObject object, String type, Heap heap) {
190190
FieldValue imagField = object.getFieldValue("@imag"); // NOI18N
191191
String imag = imagField != null ? imagField.getValue() : null;
192192
if (real != null && imag != null) logicalValue = "(" + real + (imag.startsWith("-") ? imag : "+" + imag) + "i)"; // NOI18N
193+
} else if ("Range".equals(type)) { // NOI18N
194+
FieldValue beginField = object.getFieldValue("begin (hidden)"); // NOI18N
195+
FieldValue endField = object.getFieldValue("end (hidden)"); // NOI18N
196+
FieldValue excludedField = object.getFieldValue("excludedEnd (hidden)"); // NOI18N
197+
if (beginField != null && endField != null && excludedField != null) {
198+
Instance beginInstance = beginField instanceof ObjectFieldValue ? ((ObjectFieldValue)beginField).getInstance() : null;
199+
String begin = beginInstance != null ? logicalValue(beginInstance, heap) : beginField.getValue();
200+
201+
Instance endInstance = endField instanceof ObjectFieldValue ? ((ObjectFieldValue)endField).getInstance() : null;
202+
String end = endInstance != null ? logicalValue(endInstance, heap) : endField.getValue();
203+
204+
boolean excluded = "1".equals(excludedField.getValue()); // NOI18N
205+
206+
logicalValue = "(" + begin + (excluded ? "..." : "..") + end + ")"; // NOI18N
207+
}
193208
}
194209

195210
if (logicalValue != null && logicalValue.length() > MAX_LOGVALUE_LENGTH)
@@ -198,6 +213,15 @@ static String getLogicalValue(RubyObject object, String type, Heap heap) {
198213
return logicalValue;
199214
}
200215

216+
private static String logicalValue(Instance instance, Heap heap) {
217+
if (RubyObject.isRubyObject(instance)) {
218+
RubyObject object = new RubyObject(instance);
219+
return getLogicalValue(object, object.getType(heap), heap);
220+
} else {
221+
return DetailsUtils.getInstanceString(instance, heap);
222+
}
223+
}
224+
201225

202226
// TODO: uncomment once types caching is available for RubyHeapFragment
203227
// private static String computeName(TruffleObjectNode.InstanceBased<RubyDynamicObject> node, Heap heap) {

0 commit comments

Comments
 (0)