diff --git a/ChangeLog b/ChangeLog index 57e4b407cb..8ced755d6f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +Fri Dec 7 15:44:40 2007 Tanaka Akira + + * lib/pp.rb: use Hash for recursion check as inspect. + Fri Dec 7 15:04:01 2007 Nobuyoshi Nakada * array.c (flatten): some performance improvements, based on a patch diff --git a/lib/pp.rb b/lib/pp.rb index 0202c52073..74f690e9f8 100644 --- a/lib/pp.rb +++ b/lib/pp.rb @@ -111,13 +111,13 @@ class PP < PrettyPrint end if Thread.current[:__recursive_key__][:inspect] == nil - Thread.current[:__recursive_key__][:inspect] = [] + Thread.current[:__recursive_key__][:inspect] = {} end save = Thread.current[:__recursive_key__][:inspect] begin - Thread.current[:__recursive_key__][:inspect] = [] + Thread.current[:__recursive_key__][:inspect] = {} yield ensure Thread.current[:__recursive_key__][:inspect] = save @@ -130,10 +130,10 @@ class PP < PrettyPrint Thread.current[:__recursive_key__][:inspect].include?(id) end def push_inspect_key(id) - Thread.current[:__recursive_key__][:inspect] << id + Thread.current[:__recursive_key__][:inspect][id] = true end - def pop_inspect_key - Thread.current[:__recursive_key__][:inspect].pop + def pop_inspect_key(id) + Thread.current[:__recursive_key__][:inspect].delete id end # Adds +obj+ to the pretty printing buffer @@ -153,7 +153,7 @@ class PP < PrettyPrint push_inspect_key(id) group {obj.pretty_print self} ensure - pop_inspect_key unless PP.sharing_detection + pop_inspect_key(id) unless PP.sharing_detection end end