diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2018-07-29 01:32:37 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2018-07-29 01:32:37 +0000 |
commit | c5a5563dbe48497fd00a14de82ec359204b06365 (patch) | |
tree | b97472c577d13f89869164f99026d5798ab0110e | |
parent | 63ae1e3cb5d302e5229143c00152328166d26780 (diff) |
repack structs
Repack rb_thread_struct, rb_execution_context_struct, args_info and
iseq_compile_data to save 1 word per struct.
re_pattern_buffer remains unpacked due to the possible binary
compatibility.
[Fix GH-1907]
Based on the patch
From: Lourens Naudé <[email protected]>
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@64096 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | iseq.h | 2 | ||||
-rw-r--r-- | vm_args.c | 2 | ||||
-rw-r--r-- | vm_core.h | 10 |
3 files changed, 8 insertions, 6 deletions
@@ -93,9 +93,9 @@ struct iseq_compile_data { VALUE ensure_node; VALUE for_iseq; struct iseq_compile_data_ensure_node_stack *ensure_node_stack; - int loopval_popped; /* used by NODE_BREAK */ struct iseq_compile_data_storage *storage_head; struct iseq_compile_data_storage *storage_current; + int loopval_popped; /* used by NODE_BREAK */ int last_line; int label_no; int node_level; @@ -19,10 +19,10 @@ struct args_info { /* basic args info */ VALUE *argv; int argc; - const struct rb_call_info_kw_arg *kw_arg; /* additional args info */ int rest_index; + const struct rb_call_info_kw_arg *kw_arg; VALUE *kw_argv; VALUE rest; }; @@ -807,7 +807,6 @@ typedef struct rb_execution_context_struct { struct rb_vm_tag *tag; struct rb_vm_protect_tag *protect_tag; - int raised_flag; /* interrupt flags */ rb_atomic_t interrupt_flag; @@ -835,6 +834,7 @@ typedef struct rb_execution_context_struct { VALUE errinfo; VALUE passed_block_handler; /* for rb_iterate */ const rb_callable_method_entry_t *passed_bmethod_me; /* for bmethod */ + int raised_flag; enum method_missing_reason method_missing_reason; VALUE private_const_reference; @@ -893,7 +893,6 @@ typedef struct rb_thread_struct { /* async errinfo queue */ VALUE pending_interrupt_queue; VALUE pending_interrupt_mask_stack; - int pending_interrupt_queue_checked; /* interrupt management */ rb_nativethread_lock_t interrupt_lock; @@ -915,10 +914,13 @@ typedef struct rb_thread_struct { rb_jmpbuf_t root_jmpbuf; /* misc */ + VALUE name; + uint32_t running_time_us; /* 12500..800000 */ + + /* bit flags */ unsigned int abort_on_exception: 1; unsigned int report_on_exception: 1; - uint32_t running_time_us; /* 12500..800000 */ - VALUE name; + unsigned int pending_interrupt_queue_checked: 1; } rb_thread_t; typedef enum { |