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

parent 6137bf9e
......@@ -84,13 +84,20 @@ class Array
self
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)
def inspect
return "[]" if self.size == 0
"["+self.map{|x|x.inspect}.join(", ")+"]"
begin
self._inspect
rescue SystemStackError
"[...]"
end
end
# ISO 15.2.12.5.32 (x)
alias to_s inspect
......
......@@ -192,15 +192,23 @@ class Hash
h
end
# internal method for Hash inspection
def _inspect
return "{}" if self.size == 0
"{"+self.map {|k,v|
k._inspect + "=>" + v._inspect
}.join(", ")+"}"
end
##
# Return the contents of this hash as a string.
#
# ISO 15.2.13.4.30 (x)
def inspect
return "{}" if self.size == 0
"{"+self.map {|k,v|
k.inspect + "=>" + v.inspect
}.join(", ")+"}"
begin
self._inspect
rescue SystemStackError
"{...}"
end
end
# ISO 15.2.13.4.31 (x)
alias to_s inspect
......
......@@ -39,6 +39,11 @@ module Kernel
!(self =~ y)
end
# internal method for inspect
def _inspect
self.inspect
end
def to_enum(*a)
raise NotImplementedError.new("fiber required for enumerator")
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