diff options
| -rw-r--r-- | mrbgems/mruby-struct/mrblib/struct.rb | 12 | ||||
| -rw-r--r-- | mrbgems/mruby-struct/test/struct.rb | 7 | ||||
| -rw-r--r-- | mrblib/array.rb | 12 | ||||
| -rw-r--r-- | mrblib/hash.rb | 12 | ||||
| -rw-r--r-- | mrblib/kernel.rb | 2 | ||||
| -rw-r--r-- | test/t/array.rb | 3 | ||||
| -rw-r--r-- | test/t/hash.rb | 2 |
7 files changed, 24 insertions, 26 deletions
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 "#<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 ## 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 "#<struct m1=1, m2=2, m3=3, m4=4, m5=5>", 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 "#<struct m1=1, m2=2, m3=3, m4=4, m5=5, recur=#<struct #{cc.class}:...>>", cc.inspect end assert('Struct#length, Struct#size') do 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 diff --git a/test/t/array.rb b/test/t/array.rb index ecec39363..3ed3d54ec 100644 --- a/test/t/array.rb +++ b/test/t/array.rb @@ -318,11 +318,12 @@ end assert('Array#to_s', '15.2.12.5.31 / 15.2.12.5.32') do a = [2, 3, 4, 5] + a[4] = a r1 = a.to_s r2 = a.inspect assert_equal(r2, r1) - assert_equal("[2, 3, 4, 5]", r1) + assert_equal("[2, 3, 4, 5, [...]]", r1) end assert('Array#==', '15.2.12.5.33') do diff --git a/test/t/hash.rb b/test/t/hash.rb index 5403a5901..63029be42 100644 --- a/test/t/hash.rb +++ b/test/t/hash.rb @@ -351,11 +351,13 @@ end assert('Hash#inspect') do h = { "c" => 300, "a" => 100, "d" => 400, "c" => 300 } + h["recur"] = h ret = h.to_s assert_include ret, '"c"=>300' assert_include ret, '"a"=>100' assert_include ret, '"d"=>400' + assert_include ret, '"recur"=>{...}' end assert('Hash#rehash') do |
