applying #209492 patch #2
diff --git a/plugins/org.eclipse.dltk.ruby.abstractdebugger/debugger/dbgp/properties.rb b/plugins/org.eclipse.dltk.ruby.abstractdebugger/debugger/dbgp/properties.rb
index d47d959..791c977 100644
--- a/plugins/org.eclipse.dltk.ruby.abstractdebugger/debugger/dbgp/properties.rb
+++ b/plugins/org.eclipse.dltk.ruby.abstractdebugger/debugger/dbgp/properties.rb
@@ -1,111 +1,142 @@
-###############################################################################

-# Copyright (c) 2005, 2007 IBM Corporation and others.

-# All rights reserved. This program and the accompanying materials

-# are made available under the terms of the Eclipse Public License v1.0

-# which accompanies this distribution, and is available at

-# http://www.eclipse.org/legal/epl-v10.html

-#

-

-###############################################################################

-

-

-def has_children(obj)

-    atomic_types = [NilClass, TrueClass, FalseClass, Fixnum, String, Symbol]

-    not atomic_types.include?(obj.class)

-end

-

-def get_string(obj)

-    obj.nil? ? 'nil' : (has_children(obj) ? '' : obj.to_s)

-end

-

-def prepare_object(name, obj)

-    x = { :name         => name,

-          :eval_name    => name,

-          :_type        => obj.class,

-          :is_cosntant  => false,

-          :has_children => has_children(obj),

-          :_value       => get_string(obj),

-          :key          => obj.object_id }

-

-    if x[:has_children]

-        children = obj.instance_variables.collect { |var|

-            real_var = obj.instance_variable_get(var)

-

-            { :name         => var,

-              :eval_name    => sprintf("%s.instance_eval('%s')", name, var),

-              :_type        => real_var.class,

-              :is_constant  => false,

-              :has_children => has_children(real_var),

-              :_value       => get_string(real_var),

-              :key          => real_var.object_id }

-        }

-       

-        x[:num_children] = children.length

-        x[:children_props] = children

-    end

-

-    x

-end

-

-def prepare_array(name, array)

-    x = { :name         => name,

-          :eval_name    => name,

-          :_type         => array.class,

-          :is_cosntant  => false,

-          :has_children => true,

-          :_value       => '[...]',

-          :key          => array.object_id }

-    

-    index = -1

-    children = array.collect { |value|

-        index += 1

-                    

-        { :name         => sprintf('[%d]', index),

-          :eval_name    => sprintf('%s[%d]', name, index),

-          :_type         => value.class,

-          :is_constant  => false,

-          :has_children => has_children(value),

-          :_value       => get_string(value),

-          :key          => value.object_id }            

-    }

-

-    x[:num_children] = children.length

-    x[:children_props] = children       

-    x

-end

-

-def prepare_hash(name, hash)

-    x = { :name         => name,

-          :eval_name    => name,

-          :_type         => hash.class,

-          :is_cosntant  => false,

-          :has_children => true,

-          :_value       => '{...}',

-          :key          => hash.object_id }

-

-    children = hash.collect { |key, value|

-        { :name         => sprintf("[%s]", key.inspect),

-          :eval_name    => sprintf("%s[%s]", name, key.inspect),

-          :_type         => value.class,

-          :is_constant  => false,

-          :has_children => has_children(value),

-          :_value       => get_string(value),

-          :key          => value.object_id }

-    }

-

-    x[:num_children] = children.length

-    x[:children_props] = children

-    x

-end

-

-def make_property(name, obj)

-    type = obj.class

-

-    if type == Hash

-        prepare_hash(name, obj)

-    elsif type == Array

-        prepare_array(name, obj)

-    else

-        prepare_object(name, obj)

-    end

-end

+###############################################################################
+# Copyright (c) 2005, 2007 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+
+###############################################################################
+
+
+def has_children(obj)
+    atomic_types = [NilClass, TrueClass, FalseClass, 
+                    Numeric, Float, Integer, Fixnum, Bignum, 
+                    String]
+    not atomic_types.include?(obj.class)
+end
+
+def get_string(obj)
+    obj.nil? ? 'nil' : (has_children(obj) ? '' : obj.to_s)
+end
+
+def prepare_object(name, obj)
+    x = { :name         => name,
+          :eval_name    => name,
+          :_type        => obj.class,
+          :is_cosntant  => false,
+          :has_children => has_children(obj),
+          :_value       => get_string(obj),
+          :key          => obj.object_id }
+
+    if x[:has_children]
+        children = obj.instance_variables.collect { |var|
+            real_var = obj.instance_variable_get(var)
+
+            { :name         => var,
+              :eval_name    => sprintf("%s.instance_eval('%s')", name, var),
+              :_type        => real_var.class,
+              :is_constant  => false,
+              :has_children => has_children(real_var),
+              :_value       => get_string(real_var),
+              :key          => real_var.object_id }
+        }
+       
+        x[:num_children] = children.length
+        x[:children_props] = children
+    end
+
+    x
+end
+
+def prepare_array(name, array)
+    x = { :name         => name,
+          :eval_name    => name,
+          :_type         => array.class,
+          :is_cosntant  => false,
+          :has_children => true,
+          :_value       => '[...]',
+          :key          => array.object_id }
+    
+    index = -1
+    children = array.collect { |value|
+        index += 1
+                    
+        { :name         => sprintf('[%d]', index),
+          :eval_name    => sprintf('%s[%d]', name, index),
+          :_type         => value.class,
+          :is_constant  => false,
+          :has_children => has_children(value),
+          :_value       => get_string(value),
+          :key          => value.object_id }            
+    }
+
+    x[:num_children] = children.length
+    x[:children_props] = children       
+    x
+end
+
+def prepare_hash(name, hash)
+    x = { :name         => name,
+          :eval_name    => name,
+          :_type         => hash.class,
+          :is_cosntant  => false,
+          :has_children => true,
+          :_value       => '{...}',
+          :key          => hash.object_id }
+
+    children = hash.collect { |key, value|
+        { :name         => sprintf("[%s]", key.inspect),
+          :eval_name    => sprintf("%s[%s]", name, key.inspect),
+          :_type         => value.class,
+          :is_constant  => false,
+          :has_children => has_children(value),
+          :_value       => get_string(value),
+          :key          => value.object_id }
+    }
+
+    x[:num_children] = children.length
+    x[:children_props] = children
+    x
+end
+
+def prepare_match_data(name, obj)
+    x = { :name         => name,
+          :eval_name    => name,
+          :_type         => obj.class,
+          :is_cosntant  => false,
+          :has_children => true,
+          :_value       => '[...]',
+          :key          => obj.object_id }
+    
+    index = -1
+    children = obj.to_a.collect { |value|
+        index += 1
+                    
+        { :name         => sprintf('[%d]', index),
+          :eval_name    => sprintf('%s[%d]', name, index),
+          :_type         => value.class,
+          :is_constant  => false,
+          :has_children => has_children(value),
+          :_value       => get_string(value),
+          :key          => value.object_id }            
+    }
+
+    x[:num_children] = children.length
+    x[:children_props] = children       
+    x    
+end
+
+def make_property(name, obj)
+    type = obj.class
+
+    if type == Hash
+        prepare_hash(name, obj)
+    elsif type == Array
+        prepare_array(name, obj)
+    elsif type == MatchData
+        prepare_match_data(name, obj)
+    else
+        prepare_object(name, obj)
+    end
+end