Issue #10030 has been updated by Koichi Sasada.


Eric Wong wrote:
> Eric Wong <normalperson / yhbt.net> wrote:
>  > How about using a `iseq_catch_table_size` macro instead:
>  
>  Or static inline function (also for `iseq_catch_table_bytes`).

There are two reasons I'm opposed to:

(1) I think writing "if (...) for (...)" is more clear (easy to understand).
I don't care to adding one line to check exisiting a catch table.

(2) Maybe it is difficult to eliminate the check at eac iteration by detecting loop invariant.

Of course, (2) is very trivial (small impact), but with (1), I like this approach.


----------------------------------------
Feature #10030: [PATCH] reduce rb_iseq_struct to 296 bytes
https://bugs.ruby-lang.org/issues/10030#change-47755

* Author: Eric Wong
* Status: Open
* Priority: Low
* Assignee: Koichi Sasada
* Category: core
* Target version: current: 2.2.0
----------------------------------------
This probably breaks ruby2cext; but I'm not sure if anybody uses that.

May we remove rb_iseq_build_for_ruby2cext?

I will probably have more patches along these lines to reduce iseq-related
allocations.  This is probably the most obvious, aside from ruby2cext
compatibility.

Most iseq do not have a catch_table, so avoid needlessly adding
4-8 bytes to the struct for the common case.

* iseq.h (struct iseq_catch_table): new flexible array struct
         (iseq_catch_table_each): new iterator macro
         (iseq_catch_table_bytes): new size macro
* vm_core.h (struct rb_iseq_struct): use _catch_table member
* compile.c (iseq_set_exception_table): update for struct changes
* iseq.c (iseq_free): ditto
* iseq.c (iseq_memsize): ditto
* iseq.c (rb_iseq_disasm): ditto
* iseq.c (iseq_data_to_ary): ditto
* iseq.c (rb_iseq_build_for_ruby2cext): ditto (untested)
* vm.c (vm_exec): ditto
* vm_core.h (struct rb_iseq_struct): ditto
* vm_insnhelper.c (vm_throw): ditto


---Files--------------------------------
iseq_catch_table_flex.patch (8.94 KB)
iseq_catch_table_flex_v2.patch (8.72 KB)


-- 
https://bugs.ruby-lang.org/