summaryrefslogtreecommitdiffhomepage
path: root/mrblib
diff options
context:
space:
mode:
authorIchito Nagata <[email protected]>2018-06-04 10:52:51 +0900
committerIchito Nagata <[email protected]>2018-06-04 11:25:10 +0900
commit2af92d0ebcbeca6d3d85a27c8193273080a63090 (patch)
tree51213df1520495df867610f6a84e5d47547bc1bb /mrblib
parent395260747add350d55eab002c183e7028605dbc8 (diff)
downloadmruby-2af92d0ebcbeca6d3d85a27c8193273080a63090.tar.gz
mruby-2af92d0ebcbeca6d3d85a27c8193273080a63090.zip
Let inspect recursion do the right thing
Diffstat (limited to 'mrblib')
-rw-r--r--mrblib/array.rb12
-rw-r--r--mrblib/hash.rb12
-rw-r--r--mrblib/kernel.rb2
3 files changed, 11 insertions, 15 deletions
diff --git a/mrblib/array.rb b/mrblib/array.rb
index 334f4e984..bc9a2a492 100644
--- a/mrblib/array.rb
+++ b/mrblib/array.rb
@@ -83,20 +83,18 @@ class Array
self
end
- def _inspect
+ def _inspect(recur_list)
return "[]" if self.size == 0
- "["+self.map{|x|x.inspect}.join(", ")+"]"
+ return "[...]" if recur_list[self.object_id]
+ recur_list[self.object_id] = true
+ "["+self.map{|x|x._inspect(recur_list)}.join(", ")+"]"
end
##
# Return the contents of this array as a string.
#
# ISO 15.2.12.5.31 (x)
def inspect
- begin
- self._inspect
- rescue SystemStackError
- "[...]"
- end
+ self._inspect({})
end
# ISO 15.2.12.5.32 (x)
alias to_s inspect
diff --git a/mrblib/hash.rb b/mrblib/hash.rb
index 7e1db905f..6fcbba173 100644
--- a/mrblib/hash.rb
+++ b/mrblib/hash.rb
@@ -193,10 +193,12 @@ class Hash
end
# internal method for Hash inspection
- def _inspect
+ def _inspect(recur_list)
return "{}" if self.size == 0
+ return "{...}" if recur_list[self.object_id]
+ recur_list[self.object_id] = true
"{"+self.map {|k,v|
- k._inspect + "=>" + v._inspect
+ k._inspect(recur_list) + "=>" + v._inspect(recur_list)
}.join(", ")+"}"
end
##
@@ -204,11 +206,7 @@ class Hash
#
# ISO 15.2.13.4.30 (x)
def inspect
- begin
- self._inspect
- rescue SystemStackError
- "{...}"
- end
+ self._inspect({})
end
# ISO 15.2.13.4.31 (x)
alias to_s inspect
diff --git a/mrblib/kernel.rb b/mrblib/kernel.rb
index 550ae8172..3fb324908 100644
--- a/mrblib/kernel.rb
+++ b/mrblib/kernel.rb
@@ -40,7 +40,7 @@ module Kernel
end
# internal method for inspect
- def _inspect
+ def _inspect(_recur_list)
self.inspect
end