From: "hurricup (Alexandr Evstigneev)" Date: 2022-03-28T14:16:44+00:00 Subject: [ruby-core:108100] [Ruby master Feature#18660] Line event flags on instruction in method/block signature Issue #18660 has been updated by hurricup (Alexandr Evstigneev). ko1 (Koichi Sasada) wrote in #note-2: > I understand the request, but current specification is because of the current implementation (I don't have good idea to implement it without performance penalty). And one more question. If I want my debugger to be able to stop on the signature code, would it be enough to find `insn_info`s for the signature instructions and set `RUBY_EVENT_LINE` for them? Or do I need to do something else? ---------------------------------------- Feature #18660: Line event flags on instruction in method/block signature https://bugs.ruby-lang.org/issues/18660#change-97064 * Author: hurricup (Alexandr Evstigneev) * Status: Closed * Priority: Normal ---------------------------------------- Ruby in question is 3.0.3. Not sure what behavior is on different versions, but presume the same. It's unclear why operations in signatures are not marked with `Li`, despite they may be a valid and meaningful code. Consider example: ``` class A def foo(some = BasicObject.new) yield end end A.new.foo {|a = BasicObject.new| 1 + a} ``` And here is the disasm of method iseq: ``` local table (size: 1, argc: 0 [opts: 1, rest: -1, post: 0, block: -1, kw: -1@-1, kwrest: -1]) [ 1] some@0 0000 opt_getinlinecache 9, ( 2) 0003 putobject true 0005 getconstant :BasicObject 0007 opt_setinlinecache 0009 opt_send_without_block 0011 setlocal_WC_0 some@0 0013 invokeblock ( 3)[LiCa] 0015 leave ( 4)[Re] ``` Here is the block iseq: ``` local table (size: 1, argc: 0 [opts: 1, rest: -1, post: 0, block: -1, kw: -1@-1, kwrest: -1]) [ 1] a@0 0000 opt_getinlinecache 9, ( 7) 0003 putobject true 0005 getconstant :BasicObject 0007 opt_setinlinecache 0009 opt_send_without_block 0011 setlocal_WC_0 a@0 0013 nop [Bc] 0014 putobject_INT2FIX_1_ [Li] 0015 getlocal_WC_0 a@0 0017 opt_plus 0019 nop 0020 leave ( 7)[Br] ``` And this is a bit confusing. 1. I would expect `Ca`/`Bc` events to be fired on the first instruction, not in the middle of `iseq` 2. I would expect `Li` to exist on pc=0 for the both method and block -- https://bugs.ruby-lang.org/ Unsubscribe: