Skip to content

Commit b4c3420

Browse files
committed
trap BasicObject#singleton_method_added
`BasicObject#singleton_method_added` is correct method. Now there is no way to track `singleton_method_added`, so users need to call `super' in `singleton_method_added`.
1 parent ca00821 commit b4c3420

2 files changed

Lines changed: 31 additions & 2 deletions

File tree

lib/debug/session.rb

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1641,6 +1641,7 @@ def resolve_path file
16411641

16421642
def method_added tp
16431643
b = tp.binding
1644+
16441645
if var_name = b.local_variables.first
16451646
mid = b.local_variable_get(var_name)
16461647
resolved = true
@@ -1673,6 +1674,10 @@ def method_added tp
16731674
class ::Module
16741675
undef method_added
16751676
def method_added mid; end
1677+
end
1678+
1679+
class ::BasicObject
1680+
undef singleton_method_added
16761681
def singleton_method_added mid; end
16771682
end
16781683

@@ -1698,8 +1703,8 @@ def self.deactivate_method_added_trackers
16981703
end
16991704

17001705
METHOD_ADDED_TRACKERS = Hash.new
1701-
create_method_added_tracker Module, :method_added, :instance_method
1702-
create_method_added_tracker Module, :singleton_method_added, :instance_method
1706+
create_method_added_tracker Module, :method_added, :instance_method
1707+
create_method_added_tracker BasicObject, :singleton_method_added, :instance_method
17031708

17041709
def width
17051710
@ui.width

test/console/break_test.rb

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -551,6 +551,30 @@ def test_break_after_user_defined_method_added
551551
type 'c'
552552
end
553553
end
554+
555+
def program_singleton_method_added
556+
<<~RUBY
557+
1| class C
558+
2| def self.singleton_method_added mid
559+
3| super # Required. This is curent limitation for user-defined singleton_method_added method
560+
4| end
561+
5| def self.foo
562+
6| end
563+
5| end
564+
6| C.foo
565+
RUBY
566+
end
567+
568+
def test_break_after_user_defined_singleton_method_added
569+
debug_code program_singleton_method_added do
570+
type 'b C.foo'
571+
type 'c'
572+
assert_line_num 5
573+
type 'c'
574+
end
575+
end
576+
577+
554578
end
555579

556580
#

0 commit comments

Comments
 (0)