rescue SystemStackError that comes from inspecting self-referencing Hashes and Arrays; fix #2461

parent 6137bf9e
...@@ -84,13 +84,20 @@ class Array ...@@ -84,13 +84,20 @@ class Array
self self
end end
def _inspect
return "[]" if self.size == 0
"["+self.map{|x|x.inspect}.join(", ")+"]"
end
## ##
# Private method for Array creation. # Return the contents of this array as a string.
# #
# ISO 15.2.12.5.31 (x) # ISO 15.2.12.5.31 (x)
def inspect def inspect
return "[]" if self.size == 0 begin
"["+self.map{|x|x.inspect}.join(", ")+"]" self._inspect
rescue SystemStackError
"[...]"
end
end end
# ISO 15.2.12.5.32 (x) # ISO 15.2.12.5.32 (x)
alias to_s inspect alias to_s inspect
......
...@@ -192,16 +192,24 @@ class Hash ...@@ -192,16 +192,24 @@ class Hash
h h
end end
## # internal method for Hash inspection
# Return the contents of this hash as a string. def _inspect
#
# ISO 15.2.13.4.30 (x)
def inspect
return "{}" if self.size == 0 return "{}" if self.size == 0
"{"+self.map {|k,v| "{"+self.map {|k,v|
k.inspect + "=>" + v.inspect k._inspect + "=>" + v._inspect
}.join(", ")+"}" }.join(", ")+"}"
end end
##
# Return the contents of this hash as a string.
#
# ISO 15.2.13.4.30 (x)
def inspect
begin
self._inspect
rescue SystemStackError
"{...}"
end
end
# ISO 15.2.13.4.31 (x) # ISO 15.2.13.4.31 (x)
alias to_s inspect alias to_s inspect
......
...@@ -39,6 +39,11 @@ module Kernel ...@@ -39,6 +39,11 @@ module Kernel
!(self =~ y) !(self =~ y)
end end
# internal method for inspect
def _inspect
self.inspect
end
def to_enum(*a) def to_enum(*a)
raise NotImplementedError.new("fiber required for enumerator") raise NotImplementedError.new("fiber required for enumerator")
end end
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment