Issue #10030 has been updated by Eric Wong.


 ko1 / atdot.net wrote:
 > Thank you.
 > I will modify style after your commit.
 
 OK, r46811 (I also made trivial commit r46813 to shrink catch entry)
 
 What should we do about rb_iseq_build_for_ruby2cext?  I think it is
 broken, now (as is anything else which might depend on iseq internals).

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

* 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/