Issue #10030 has been updated by Eric Wong.

File iseq_catch_table_flex_v3.patch added

Changes from v2:
- iseq_catch_table_size removed, use if (...) for (;...;)

I used a short local variable in some places to keep the "if (...) for (...)"
sequences from wrapping on long lines.


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

* 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)
iseq_catch_table_flex_v3.patch (9.05 KB)


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