diff options
author | ko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2013-08-20 17:41:13 +0000 |
---|---|---|
committer | ko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2013-08-20 17:41:13 +0000 |
commit | 30b1947df2da2192f7fcc812ac88dc1884715322 (patch) | |
tree | f5f2969d24420e851e1b580f6a0696e0c944617c /vm_core.h | |
parent | a8fbb064a7beb29bf34e532ba49c1bdf59cf0f99 (diff) | |
download | ruby-30b1947df2da2192f7fcc812ac88dc1884715322.tar.gz |
* insns.def: fix regexp's once option behavior.
fix [ruby-trunk - Bug #6701]
* insns.def: remove `onceinlinecache' and introduce `once' instruction.
`once' doesn't use `setinlinecache' insn any more.
* vm_core.h: `union iseq_inline_storage_entry' to store once data.
* compile.c: catch up above changes.
* iseq.c: ditto.
* vm.c, vm_insnhelper.c: ditto. fix `m_core_set_postexe()' which
is depend on `onceinlinecache' insn.
* test/ruby/test_regexp.rb: add tests.
* iseq.c: ISEQ_MINOR_VERSION to 1 (should increment major?)
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42637 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'vm_core.h')
-rw-r--r-- | vm_core.h | 16 |
1 files changed, 13 insertions, 3 deletions
@@ -125,15 +125,25 @@ struct iseq_compile_data_ensure_node_stack; typedef struct rb_compile_option_struct rb_compile_option_t; + struct iseq_inline_cache_entry { VALUE ic_vmstat; VALUE ic_class; union { + size_t index; VALUE value; - long index; } ic_value; }; +union iseq_inline_storage_entry { + struct { + struct rb_thread_struct *running_thread; + VALUE value; + VALUE done; + } once; + struct iseq_inline_cache_entry cache; +}; + /* to avoid warning */ struct rb_thread_struct; struct rb_control_frame_struct; @@ -224,8 +234,8 @@ struct rb_iseq_struct { /* sizeof(vars) + 1 */ int local_size; - struct iseq_inline_cache_entry *ic_entries; - int ic_size; + union iseq_inline_storage_entry *is_entries; + int is_size; rb_call_info_t *callinfo_entries; int callinfo_size; |