[前][次][番号順一覧][スレッド一覧]

ruby-changes:59278

From: Richard <ko1@a...>
Date: Tue, 17 Dec 2019 00:01:55 +0900 (JST)
Subject: [ruby-changes:59278] 6a75a46053 (master): Make prettyprint’s cycle detection aware of Delegator instances

https://git.ruby-lang.org/ruby.git/commit/?id=6a75a46053

From 6a75a460536a32fb62184dc5d8d66ddd737a9bad Mon Sep 17 00:00:00 2001
From: Richard Viney <richard.viney@g...>
Date: Sun, 22 Jan 2017 14:50:08 +1300
Subject: =?UTF-8?q?Make=20prettyprint=E2=80=99s=20cycle=20detection=20awar?=
 =?UTF-8?q?e=20of=20Delegator=20instances?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Fixes [Bug #13144]

Co-Authored-By: Nobuyoshi Nakada <nobu@r...>

diff --git a/lib/pp.rb b/lib/pp.rb
index 2cfc2c4..81a9a16 100644
--- a/lib/pp.rb
+++ b/lib/pp.rb
@@ -149,6 +149,10 @@ class PP < PrettyPrint https://github.com/ruby/ruby/blob/trunk/lib/pp.rb#L149
     # Object#pretty_print_cycle is used when +obj+ is already
     # printed, a.k.a the object reference chain has a cycle.
     def pp(obj)
+      # If obj is a Delegator then use the object being delegated to for cycle
+      # detection
+      obj = obj.__getobj__ if defined?(::Delegator) and obj.is_a?(::Delegator)
+
       if check_inspect_key(obj)
         group {obj.pretty_print_cycle self}
         return
diff --git a/test/test_pp.rb b/test/test_pp.rb
index 4736bff..3262417 100644
--- a/test/test_pp.rb
+++ b/test/test_pp.rb
@@ -184,6 +184,18 @@ class PPDelegateTest < Test::Unit::TestCase https://github.com/ruby/ruby/blob/trunk/test/test_pp.rb#L184
   def test_delegate
     assert_equal("[]\n", A.new([]).pretty_inspect, "[ruby-core:25804]")
   end
+
+  def test_delegate_cycle
+    a = HasPrettyPrint.new nil
+
+    a.instance_eval {@a = a}
+    cycle_pretty_inspect = a.pretty_inspect
+
+    a.instance_eval {@a = SimpleDelegator.new(a)}
+    delegator_cycle_pretty_inspect = a.pretty_inspect
+
+    assert_equal(cycle_pretty_inspect, delegator_cycle_pretty_inspect)
+  end
 end
 
 class PPFileStatTest < Test::Unit::TestCase
-- 
cgit v0.10.2


--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]