@@ -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