From 8d157bc80614be1b222ca2158d211399c40d151c Mon Sep 17 00:00:00 2001 From: Aaron Patterson Date: Mon, 27 Jun 2022 16:30:32 -0700 Subject: [PATCH] Move function to `static inline` so we don't have leaked globals This function shouldn't leak and is only needed during instruction assembly --- iseq.c | 20 -------------------- iseq.h | 1 - tool/ruby_vm/views/_insn_type_chars.erb | 16 ++++++++++++++++ 3 files changed, 16 insertions(+), 21 deletions(-) diff --git a/iseq.c b/iseq.c index 0ac67f62bc..cd20297bad 100644 --- a/iseq.c +++ b/iseq.c @@ -2943,26 +2943,6 @@ iseq_type_id(enum iseq_type type) rb_bug("unsupported iseq type: %d", (int)type); } -union iseq_inline_storage_entry * -ISEQ_IS_ENTRY_START(const struct rb_iseq_constant_body *body, char op_type) -{ - unsigned int relative_ic_offset = 0; - - switch(op_type) { - case TS_IC: - relative_ic_offset += body->ise_size; - case TS_ISE: - relative_ic_offset += body->ivc_size; - case TS_IVC: - case TS_ICVARC: - break; - default: - rb_bug("Wrong op type"); - } - - return &body->is_entries[relative_ic_offset]; -} - static VALUE iseq_data_to_ary(const rb_iseq_t *iseq) { diff --git a/iseq.h b/iseq.h index afec0bae20..46a8b1b010 100644 --- a/iseq.h +++ b/iseq.h @@ -169,7 +169,6 @@ void rb_iseq_init_trace(rb_iseq_t *iseq); int rb_iseq_add_local_tracepoint_recursively(const rb_iseq_t *iseq, rb_event_flag_t turnon_events, VALUE tpval, unsigned int target_line, bool target_bmethod); int rb_iseq_remove_local_tracepoint_recursively(const rb_iseq_t *iseq, VALUE tpval); const rb_iseq_t *rb_iseq_load_iseq(VALUE fname); -union iseq_inline_storage_entry *ISEQ_IS_ENTRY_START(const struct rb_iseq_constant_body *body, char op_type); #if VM_INSN_INFO_TABLE_IMPL == 2 unsigned int *rb_iseq_insns_info_decode_positions(const struct rb_iseq_constant_body *body); diff --git a/tool/ruby_vm/views/_insn_type_chars.erb b/tool/ruby_vm/views/_insn_type_chars.erb index 4e1f63e660..a9c112d369 100644 --- a/tool/ruby_vm/views/_insn_type_chars.erb +++ b/tool/ruby_vm/views/_insn_type_chars.erb @@ -11,3 +11,19 @@ enum ruby_insn_type_chars { <%= t %> = '<%= c %>', % end }; + +static inline union iseq_inline_storage_entry * ISEQ_IS_ENTRY_START(const struct rb_iseq_constant_body *body, char op_type) { + unsigned int relative_ic_offset = 0; + switch(op_type) { + case TS_IC: + relative_ic_offset += body->ise_size; + case TS_ISE: + relative_ic_offset += body->ivc_size; + case TS_IVC: + case TS_ICVARC: + break; + default: + rb_bug("Wrong op type"); + } + return &body->is_entries[relative_ic_offset]; +}