summaryrefslogtreecommitdiffhomepage
path: root/mrbgems/mruby-struct/mrblib/struct.rb
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2019-07-17 10:35:59 +0900
committerGitHub <[email protected]>2019-07-17 10:35:59 +0900
commit5eef75b678b41249cf4738ef42889090caea2ab0 (patch)
tree774fc0de56002abb3bb2b1c3387ff08f91876d17 /mrbgems/mruby-struct/mrblib/struct.rb
parent9af3b7c6258de327218dd04e69d76ae68caf17b1 (diff)
parentd605b72c1d6fa4564a0a5e88535504b6850463b5 (diff)
downloadmruby-5eef75b678b41249cf4738ef42889090caea2ab0.tar.gz
mruby-5eef75b678b41249cf4738ef42889090caea2ab0.zip
Merge pull request #4034 from i110/i110/inspect-recursion
Let inspect recursion do the right thing
Diffstat (limited to 'mrbgems/mruby-struct/mrblib/struct.rb')
-rw-r--r--mrbgems/mruby-struct/mrblib/struct.rb12
1 files changed, 5 insertions, 7 deletions
diff --git a/mrbgems/mruby-struct/mrblib/struct.rb b/mrbgems/mruby-struct/mrblib/struct.rb
index c5b5354be..7682ac033 100644
--- a/mrbgems/mruby-struct/mrblib/struct.rb
+++ b/mrbgems/mruby-struct/mrblib/struct.rb
@@ -46,7 +46,9 @@ if Object.const_defined?(:Struct)
ary
end
- def _inspect
+ def _inspect(recur_list)
+ return "#<struct #{self.class}:...>" if recur_list[self.object_id]
+ recur_list[self.object_id] = true
name = self.class.to_s
if name[0] == "#"
str = "#<struct "
@@ -55,7 +57,7 @@ if Object.const_defined?(:Struct)
end
buf = []
self.each_pair do |k,v|
- buf.push [k.to_s + "=" + v._inspect]
+ buf.push [k.to_s + "=" + v._inspect(recur_list)]
end
str + buf.join(", ") + ">"
end
@@ -70,11 +72,7 @@ if Object.const_defined?(:Struct)
# 15.2.18.4.10(x)
#
def inspect
- begin
- self._inspect
- rescue SystemStackError
- "#<struct #{self.class.to_s}:...>"
- end
+ self._inspect({})
end
##