Actions
Feature #18660
closedLine event flags on instruction in method/block signature
Feature #18660:
Line event flags on instruction in method/block signature
Status:
Closed
Assignee:
-
Target version:
-
Description
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<Opt=0>
0000 opt_getinlinecache 9, <is:0> ( 2)
0003 putobject true
0005 getconstant :BasicObject
0007 opt_setinlinecache <is:0>
0009 opt_send_without_block <calldata!mid:new, argc:0, ARGS_SIMPLE>
0011 setlocal_WC_0 some@0
0013 invokeblock <calldata!argc:0, ARGS_SIMPLE>( 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<Opt=0>
0000 opt_getinlinecache 9, <is:0> ( 7)
0003 putobject true
0005 getconstant :BasicObject
0007 opt_setinlinecache <is:0>
0009 opt_send_without_block <calldata!mid:new, argc:0, ARGS_SIMPLE>
0011 setlocal_WC_0 a@0
0013 nop [Bc]
0014 putobject_INT2FIX_1_ [Li]
0015 getlocal_WC_0 a@0
0017 opt_plus <calldata!mid:+, argc:1, ARGS_SIMPLE>
0019 nop
0020 leave ( 7)[Br]
And this is a bit confusing.
- I would expect
Ca/Bcevents to be fired on the first instruction, not in the middle ofiseq - I would expect
Lito exist on pc=0 for the both method and block
Actions