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