[#107867] Fwd: [ruby-cvs:91197] 8f59482f5d (master): add some tests for Unicode Version 14.0.0 — Martin J. Dürst <duerst@...>
To everybody taking care of continuous integration:
3 messages
2022/03/13
[#108090] [Ruby master Bug#18666] No rule to make target 'yaml/yaml.h', needed by 'api.o' — duerst <noreply@...>
Issue #18666 has been reported by duerst (Martin D端rst).
7 messages
2022/03/28
[#108117] [Ruby master Feature#18668] Merge `io-nonblock` gems into core — "Eregon (Benoit Daloze)" <noreply@...>
Issue #18668 has been reported by Eregon (Benoit Daloze).
22 messages
2022/03/30
[ruby-core:108100] [Ruby master Feature#18660] Line event flags on instruction in method/block signature
From:
"hurricup (Alexandr Evstigneev)" <noreply@...>
Date:
2022-03-28 14:16:44 UTC
List:
ruby-core #108100
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<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.
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: <mailto:[email protected]?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>