Issue #10030 has been updated by Eric Wong.


 ko1 / atdot.net wrote:
 > From what size on which architecture?
 
 x86-64
 
 > On the code:
 > 
 > (1) _catch_table should be catch_table
 
 OK, I will change it back.  I renamed it so it'd be easier for the
 compiler to detect places where I need to change code.
 
 > (2) I don't like iseq_catch_table_each() macro.
 > I like to write like
 > ```
 >   if (iseq->_catch_table) for (i=0; i<iseq->_catch_table->size; i++) {..}
 > ```
 
 OK, I didn't want to increase line length or change indentation of
 existing code.
 
 How about using a iseq_catch_table_size macro instead:
 ```
 #define iseq_catch_table_size(iseq) \
     (iseq->catch_table ? iseq->catch_table->size : 0)
 
     for (i = 0; i < iseq_catch_table_size(iseq); i++) {
 	...
     }
 ```

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

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


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