summaryrefslogtreecommitdiff
path: root/proc.c
diff options
context:
space:
mode:
authorNobuyoshi Nakada <[email protected]>2025-01-09 20:21:41 +0900
committerNobuyoshi Nakada <[email protected]>2025-01-09 20:21:41 +0900
commit073c4e1cc712064e626914fa4a5a8061f903a637 (patch)
tree48145ef8858d0b0df83861c20e0d6e5dce5e087c /proc.c
parentdfe6b7c02efa3bc2f5426eb64107ac0ac45a66a4 (diff)
[Feature #6012] Extend `source_location` for end position and columns
Notes
Notes: Merged: https://github.com/ruby/ruby/pull/12539
Diffstat (limited to 'proc.c')
-rw-r--r--proc.c16
1 files changed, 11 insertions, 5 deletions
diff --git a/proc.c b/proc.c
index 68f1bfc35c..0608f584c8 100644
--- a/proc.c
+++ b/proc.c
@@ -1364,14 +1364,20 @@ proc_eq(VALUE self, VALUE other)
static VALUE
iseq_location(const rb_iseq_t *iseq)
{
- VALUE loc[2];
+ VALUE loc[5];
+ int i = 0;
if (!iseq) return Qnil;
rb_iseq_check(iseq);
- loc[0] = rb_iseq_path(iseq);
- loc[1] = RB_INT2NUM(ISEQ_BODY(iseq)->location.first_lineno);
-
- return rb_ary_new4(2, loc);
+ loc[i++] = rb_iseq_path(iseq);
+ const rb_code_location_t *cl = &ISEQ_BODY(iseq)->location.code_location;
+ loc[i++] = RB_INT2NUM(cl->beg_pos.lineno);
+ loc[i++] = RB_INT2NUM(cl->beg_pos.column);
+ loc[i++] = RB_INT2NUM(cl->end_pos.lineno);
+ loc[i++] = RB_INT2NUM(cl->end_pos.column);
+ RUBY_ASSERT_ALWAYS(i == numberof(loc));
+
+ return rb_ary_new_from_values(i, loc);
}
VALUE