summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--compile.c2
-rw-r--r--iseq.c13
-rw-r--r--iseq.h1
-rw-r--r--vm_args.c6
-rw-r--r--vm_core.h2
5 files changed, 21 insertions, 3 deletions
diff --git a/compile.c b/compile.c
index aee96724a1..e46035a7e0 100644
--- a/compile.c
+++ b/compile.c
@@ -10490,7 +10490,7 @@ ibf_load_location_str(const struct ibf_load *load, VALUE str_index)
static void
ibf_load_iseq_each(struct ibf_load *load, rb_iseq_t *iseq, ibf_offset_t offset)
{
- struct rb_iseq_constant_body *load_body = iseq->body = ZALLOC(struct rb_iseq_constant_body);
+ struct rb_iseq_constant_body *load_body = iseq->body = rb_iseq_constant_body_alloc();
ibf_offset_t reading_pos = offset;
diff --git a/iseq.c b/iseq.c
index 7fbb906525..4298130b65 100644
--- a/iseq.c
+++ b/iseq.c
@@ -427,11 +427,22 @@ rb_iseq_memsize(const rb_iseq_t *iseq)
return size;
}
+static unsigned long fresh_iseq_unique_id = 0; /* -- Remove In 3.0 -- */
+
+struct rb_iseq_constant_body *
+rb_iseq_constant_body_alloc(void)
+{
+ struct rb_iseq_constant_body *iseq_body;
+ iseq_body = ZALLOC(struct rb_iseq_constant_body);
+ iseq_body->iseq_unique_id = fresh_iseq_unique_id++; /* -- Remove In 3.0 -- */
+ return iseq_body;
+}
+
static rb_iseq_t *
iseq_alloc(void)
{
rb_iseq_t *iseq = iseq_imemo_alloc();
- iseq->body = ZALLOC(struct rb_iseq_constant_body);
+ iseq->body = rb_iseq_constant_body_alloc();
return iseq;
}
diff --git a/iseq.h b/iseq.h
index 3701c320be..25c62a384f 100644
--- a/iseq.h
+++ b/iseq.h
@@ -186,6 +186,7 @@ void rb_iseq_trace_set(const rb_iseq_t *iseq, rb_event_flag_t turnon_events);
void rb_iseq_trace_set_all(rb_event_flag_t turnon_events);
void rb_iseq_insns_info_encode_positions(const rb_iseq_t *iseq);
+struct rb_iseq_constant_body *rb_iseq_constant_body_alloc(void);
VALUE rb_iseqw_new(const rb_iseq_t *iseq);
const rb_iseq_t *rb_iseqw_to_iseq(VALUE iseqw);
diff --git a/vm_args.c b/vm_args.c
index 97b1d4ac60..c6c111865e 100644
--- a/vm_args.c
+++ b/vm_args.c
@@ -593,8 +593,12 @@ VALUE rb_iseq_location(const rb_iseq_t *iseq);
*/
static st_table *caller_to_callees = 0;
-static VALUE rb_warn_check(const rb_execution_context_t * const ec, const void *const callee)
+static VALUE rb_warn_check(const rb_execution_context_t * const ec, const rb_iseq_t *const iseq)
{
+ if (!iseq) return 0;
+
+ const void *const callee = (void *)(iseq->body->iseq_unique_id * 2);
+
const rb_control_frame_t * const cfp = rb_vm_get_ruby_level_next_cfp(ec, ec->cfp);
if (!cfp) return 0;
diff --git a/vm_core.h b/vm_core.h
index f7ec156cc5..4b1b9e43d0 100644
--- a/vm_core.h
+++ b/vm_core.h
@@ -447,6 +447,8 @@ struct rb_iseq_constant_body {
long unsigned total_calls; /* number of total calls with `mjit_exec()` */
struct rb_mjit_unit *jit_unit;
#endif
+
+ unsigned long iseq_unique_id; /* -- Remove In 3.0 -- */
};
/* T_IMEMO/iseq */