Skip to content

Commit ac5fc97

Browse files
committed
Only Class::Name#foo can become pending bp
Now method breakpoints accepts `expr.name` and `expr#name`. And with any `expr` can become a pending method bp. However, general `expr` in other context does not make sense, so only `ClassName` style expressions can become pending bps. They can be activated when the `ClassName#foo` is defined.
1 parent 296daa6 commit ac5fc97

File tree

1 file changed

+28
-4
lines changed

1 file changed

+28
-4
lines changed

lib/debug/thread_client.rb

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -737,6 +737,23 @@ def class_method_map(classes)
737737

738738
## cmd: breakpoint
739739

740+
# TODO: support non-ASCII Constant name
741+
def constant_name? name
742+
case name
743+
when /\A::\b/
744+
constant_name? $~.post_match
745+
when /\A[A-Z]\w*/
746+
post = $~.post_match
747+
if post.empty?
748+
true
749+
else
750+
constant_name? post
751+
end
752+
else
753+
false
754+
end
755+
end
756+
740757
def make_breakpoint args
741758
case args.first
742759
when :method
@@ -745,11 +762,18 @@ def make_breakpoint args
745762
begin
746763
bp.enable
747764
rescue NameError => e
748-
puts "Unknown name `#{e.name}` for `#{e.receiver}`"
749-
# TODO: Ractor support
750-
Session.activate_method_added_trackers
765+
if constant_name? klass_name
766+
puts "Unknown constant name: \"#{e.name}\""
767+
# TODO: Ractor support
768+
Session.activate_method_added_trackers
769+
else
770+
# only Class name is allowed
771+
puts "Not a constant name: \"#{klass_name}\""
772+
bp = nil
773+
end
751774
rescue Exception => e
752-
puts e.message
775+
puts e.inspect
776+
bp = nil
753777
end
754778

755779
bp

0 commit comments

Comments
 (0)