From 2af92d0ebcbeca6d3d85a27c8193273080a63090 Mon Sep 17 00:00:00 2001 From: Ichito Nagata Date: Mon, 4 Jun 2018 10:52:51 +0900 Subject: Let inspect recursion do the right thing --- mrbgems/mruby-struct/mrblib/struct.rb | 12 +++++------- mrbgems/mruby-struct/test/struct.rb | 7 ++++--- 2 files changed, 9 insertions(+), 10 deletions(-) (limited to 'mrbgems/mruby-struct') diff --git a/mrbgems/mruby-struct/mrblib/struct.rb b/mrbgems/mruby-struct/mrblib/struct.rb index 7cf3dd3ab..86c635df7 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 "#" if recur_list[self.object_id] + recur_list[self.object_id] = true name = self.class.to_s if name[0] == "#" str = "#" end @@ -70,11 +72,7 @@ if Object.const_defined?(:Struct) # 15.2.18.4.10(x) # def inspect - begin - self._inspect - rescue SystemStackError - "#" - end + self._inspect({}) end ## diff --git a/mrbgems/mruby-struct/test/struct.rb b/mrbgems/mruby-struct/test/struct.rb index 982e344e2..2b5751086 100644 --- a/mrbgems/mruby-struct/test/struct.rb +++ b/mrbgems/mruby-struct/test/struct.rb @@ -116,9 +116,10 @@ assert('struct dup') do end assert('struct inspect') do - c = Struct.new(:m1, :m2, :m3, :m4, :m5) - cc = c.new(1,2,3,4,5) - assert_equal "#", cc.inspect + c = Struct.new(:m1, :m2, :m3, :m4, :m5, :recur) + cc = c.new(1,2,3,4,5,nil) + cc.recur = cc + assert_equal "#>", cc.inspect end assert('Struct#length, Struct#size') do -- cgit v1.2.3