diff --git a/compile.c b/compile.c index a7308c66b1b..2ff207928a5 100644 --- a/compile.c +++ b/compile.c @@ -12680,7 +12680,7 @@ typedef uint32_t ibf_offset_t; #define IBF_MAJOR_VERSION ISEQ_MAJOR_VERSION #ifdef RUBY_DEVEL -#define IBF_DEVEL_VERSION 7 +#define IBF_DEVEL_VERSION 8 #define IBF_MINOR_VERSION (ISEQ_MINOR_VERSION * 10000 + IBF_DEVEL_VERSION) #else #define IBF_MINOR_VERSION ISEQ_MINOR_VERSION @@ -13774,7 +13774,6 @@ ibf_dump_iseq_each(struct ibf_dump *dump, const rb_iseq_t *iseq) const struct rb_iseq_constant_body *body = ISEQ_BODY(iseq); const VALUE location_pathobj_index = ibf_dump_object(dump, body->location.pathobj); /* TODO: freeze */ - const VALUE location_base_label_index = ibf_dump_object(dump, body->location.base_label); const VALUE location_label_index = ibf_dump_object(dump, body->location.label); #if IBF_ISEQ_ENABLE_LOCAL_BUFFER @@ -13856,7 +13855,6 @@ ibf_dump_iseq_each(struct ibf_dump *dump, const rb_iseq_t *iseq) ibf_dump_write_small_value(dump, IBF_BODY_OFFSET(param_opt_table_offset)); ibf_dump_write_small_value(dump, param_keyword_offset); ibf_dump_write_small_value(dump, location_pathobj_index); - ibf_dump_write_small_value(dump, location_base_label_index); ibf_dump_write_small_value(dump, location_label_index); ibf_dump_write_small_value(dump, body->location.first_lineno); ibf_dump_write_small_value(dump, body->location.node_id); @@ -13972,7 +13970,6 @@ ibf_load_iseq_each(struct ibf_load *load, rb_iseq_t *iseq, ibf_offset_t offset) const ibf_offset_t param_opt_table_offset = (ibf_offset_t)IBF_BODY_OFFSET(ibf_load_small_value(load, &reading_pos)); const ibf_offset_t param_keyword_offset = (ibf_offset_t)ibf_load_small_value(load, &reading_pos); const VALUE location_pathobj_index = ibf_load_small_value(load, &reading_pos); - const VALUE location_base_label_index = ibf_load_small_value(load, &reading_pos); const VALUE location_label_index = ibf_load_small_value(load, &reading_pos); const int location_first_lineno = (int)ibf_load_small_value(load, &reading_pos); const int location_node_id = (int)ibf_load_small_value(load, &reading_pos); @@ -14137,7 +14134,6 @@ ibf_load_iseq_each(struct ibf_load *load, rb_iseq_t *iseq, ibf_offset_t offset) load->current_buffer = &load->global_buffer; #endif - RB_OBJ_WRITE(iseq, &load_body->location.base_label, ibf_load_location_str(load, location_base_label_index)); RB_OBJ_WRITE(iseq, &load_body->location.label, ibf_load_location_str(load, location_label_index)); #if IBF_ISEQ_ENABLE_LOCAL_BUFFER diff --git a/iseq.c b/iseq.c index 4cffe90f4d5..d88ade75866 100644 --- a/iseq.c +++ b/iseq.c @@ -415,7 +415,6 @@ rb_iseq_mark_and_move(rb_iseq_t *iseq, bool reference_updating) struct rb_iseq_variable *v = ISEQ_VARIABLE(iseq); if (v) rb_gc_mark_and_move(&v->script_lines); rb_gc_mark_and_move(&body->location.label); - rb_gc_mark_and_move(&body->location.base_label); rb_gc_mark_and_move(&body->location.pathobj); if (body->local_iseq) rb_gc_mark_and_move_ptr(&body->local_iseq); if (body->parent_iseq) rb_gc_mark_and_move_ptr(&body->parent_iseq); @@ -711,7 +710,6 @@ iseq_location_setup(rb_iseq_t *iseq, VALUE name, VALUE path, VALUE realpath, int rb_iseq_pathobj_set(iseq, path, realpath); RB_OBJ_WRITE(iseq, &loc->label, name); - RB_OBJ_WRITE(iseq, &loc->base_label, name); loc->first_lineno = first_lineno; if (ISEQ_BODY(iseq)->local_iseq == iseq && rb_streql_lit(name, "initialize")) { @@ -803,9 +801,6 @@ prepare_iseq_build(rb_iseq_t *iseq, name = rb_fstring(name); iseq_location_setup(iseq, name, path, realpath, first_lineno, code_location, node_id); - if (iseq != body->local_iseq) { - RB_OBJ_WRITE(iseq, &body->location.base_label, ISEQ_BODY(body->local_iseq)->location.label); - } ISEQ_ORIGINAL_ISEQ_CLEAR(iseq); if (body->variable) { body->variable->flip_count = 0; @@ -1619,7 +1614,15 @@ rb_iseq_label(const rb_iseq_t *iseq) VALUE rb_iseq_base_label(const rb_iseq_t *iseq) { - return ISEQ_BODY(iseq)->location.base_label; + const struct rb_iseq_constant_body *body = ISEQ_BODY(iseq); + const rb_iseq_t *local_iseq = body->local_iseq; + + if (local_iseq == NULL || local_iseq == iseq) { + return body->location.label; + } + else { + return ISEQ_BODY(rb_iseq_check(local_iseq))->location.label; + } } VALUE @@ -1634,7 +1637,7 @@ rb_iseq_method_name(const rb_iseq_t *iseq) struct rb_iseq_constant_body *const body = ISEQ_BODY(ISEQ_BODY(iseq)->local_iseq); if (body->type == ISEQ_TYPE_METHOD) { - return body->location.base_label; + return body->location.label; } else { return Qnil; diff --git a/vm_backtrace.c b/vm_backtrace.c index f13d4273179..19bcd7dc72a 100644 --- a/vm_backtrace.c +++ b/vm_backtrace.c @@ -374,7 +374,7 @@ location_base_label(rb_backtrace_location_t *loc) return rb_id2str(loc->cme->def->original_id); } - return ISEQ_BODY(loc->iseq)->location.base_label; + return rb_iseq_base_label(loc->iseq); } /* diff --git a/vm_core.h b/vm_core.h index 2c416859573..fc64d278c65 100644 --- a/vm_core.h +++ b/vm_core.h @@ -338,7 +338,6 @@ struct rb_execution_context_struct; typedef struct rb_iseq_location_struct { VALUE pathobj; /* String (path) or Array [path, realpath]. Frozen. */ - VALUE base_label; /* String */ VALUE label; /* String */ int first_lineno; int node_id; diff --git a/vm_insnhelper.c b/vm_insnhelper.c index bc8b327e35b..3a0b7324046 100644 --- a/vm_insnhelper.c +++ b/vm_insnhelper.c @@ -3160,7 +3160,7 @@ warn_unused_block(const rb_callable_method_entry_t *cme, const rb_iseq_t *iseq, } else if (RTEST(ruby_verbose) || strict_unused_block) { VALUE m_loc = rb_method_entry_location((const rb_method_entry_t *)cme); - VALUE name = rb_gen_method_name(cme->defined_class, ISEQ_BODY(iseq)->location.base_label); + VALUE name = rb_gen_method_name(cme->defined_class, rb_iseq_base_label(iseq)); if (!NIL_P(m_loc)) { rb_warn("the block passed to '%"PRIsVALUE"' defined at %"PRIsVALUE":%"PRIsVALUE" may be ignored", diff --git a/zjit/src/cruby_bindings.inc.rs b/zjit/src/cruby_bindings.inc.rs index 9e2946ea403..0821ed934d5 100644 --- a/zjit/src/cruby_bindings.inc.rs +++ b/zjit/src/cruby_bindings.inc.rs @@ -619,7 +619,6 @@ pub struct iseq_inline_storage_entry { #[repr(C)] pub struct rb_iseq_location_struct { pub pathobj: VALUE, - pub base_label: VALUE, pub label: VALUE, pub first_lineno: ::std::os::raw::c_int, pub node_id: ::std::os::raw::c_int, @@ -2099,7 +2098,7 @@ pub struct zjit_jit_frame { pub stack: __IncompleteArrayField, } pub const ISEQ_BODY_OFFSET_PARAM: zjit_struct_offsets = 16; -pub const ISEQ_BODY_OFFSET_OUTER_VARIABLES: zjit_struct_offsets = 248; +pub const ISEQ_BODY_OFFSET_OUTER_VARIABLES: zjit_struct_offsets = 240; pub const RUBY_OFFSET_THREAD_RACTOR: zjit_struct_offsets = 24; pub type zjit_struct_offsets = u32; #[repr(C)]