static void extract_location_info(code_t pc, /*out*/ struct loc_info * li) { struct ev_info *event = event_for_location(pc); li->loc_is_raise = caml_is_instruction(*pc, RAISE) || caml_is_instruction(*pc, RERAISE); if (event == NULL) { li->loc_valid = 0; return; } li->loc_valid = 1; li->loc_filename = event->ev_filename; li->loc_lnum = event->ev_lnum; li->loc_startchr = event->ev_startchr; li->loc_endchr = event->ev_endchr; }
void caml_debuginfo_location(debuginfo dbg, /*out*/ struct caml_loc_info * li) { code_t pc = dbg; struct ev_info *event = event_for_location(pc); li->loc_is_raise = caml_is_instruction(*pc, RAISE) || caml_is_instruction(*pc, RERAISE); if (event == NULL) { li->loc_valid = 0; return; } li->loc_valid = 1; li->loc_is_inlined = 0; li->loc_filename = event->ev_filename; li->loc_lnum = event->ev_lnum; li->loc_startchr = event->ev_startchr; li->loc_endchr = event->ev_endchr; }
static void extract_location_info(value events, code_t pc, /*out*/ struct loc_info * li) { value ev, ev_start; ev = event_for_location(events, pc); li->loc_is_raise = caml_is_instruction(*pc, RAISE); if (ev == Val_false) { li->loc_valid = 0; return; } li->loc_valid = 1; ev_start = Field (Field (ev, EV_LOC), LOC_START); li->loc_filename = String_val (Field (ev_start, POS_FNAME)); li->loc_lnum = Int_val (Field (ev_start, POS_LNUM)); li->loc_startchr = Int_val (Field (ev_start, POS_CNUM)) - Int_val (Field (ev_start, POS_BOL)); li->loc_endchr = Int_val (Field (Field (Field (ev, EV_LOC), LOC_END), POS_CNUM)) - Int_val (Field (ev_start, POS_BOL)); }