diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2021-07-08 07:10:11 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2021-07-08 07:24:12 +0900 |
| commit | f16ea05a178a0ffd38a054d28a01c1780d63d03a (patch) | |
| tree | ec1ef57c79004a555a81631600e561ad792c89ea /src/dump.c | |
| parent | fb1d4ff6826098c5d44be1cd8500dd4cf97ed57c (diff) | |
| download | mruby-f16ea05a178a0ffd38a054d28a01c1780d63d03a.tar.gz mruby-f16ea05a178a0ffd38a054d28a01c1780d63d03a.zip | |
debug.c: new debug line information format `mrb_debug_line_packed_map`.
It uses BER number compression of delta of instruction positions and line
numbers. BER compression is a variable length number representation.
* `mrb_debug_line_ary`: array of line numbers represented in `uint16_t`.
`[lineno, lineno, ...]`
* `mrb_debug_line_flat_map`: array of `mrb_irep_debug_info_line`, which
is `struct {uint32_t pos; uint16_t lineno}`, for each line.
* `mrb_debug_line_packed_map` [new]: sequence of BER compressed 2
numbers, `pos_delta, lineno_delta`. Deltas are differences from
previous values (starting `0`). `line_entry_counts` represents total
length of a packed map string for this type.
Diffstat (limited to 'src/dump.c')
| -rw-r--r-- | src/dump.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/src/dump.c b/src/dump.c index 0b4200795..628c3dbc4 100644 --- a/src/dump.c +++ b/src/dump.c @@ -413,6 +413,10 @@ get_debug_record_size(mrb_state *mrb, const mrb_irep *irep) ret += (sizeof(uint32_t) + sizeof(uint16_t)) * (size_t)(file->line_entry_count); break; + case mrb_debug_line_packed_map: + ret += (size_t)(file->line_entry_count); + break; + default: mrb_assert(0); break; } } @@ -507,6 +511,11 @@ write_debug_record_1(mrb_state *mrb, const mrb_irep *irep, uint8_t *bin, mrb_sym } } break; + case mrb_debug_line_packed_map: { + memcpy(cur, file->lines.packed_map, file->line_entry_count); + cur += file->line_entry_count; + } break; + default: mrb_assert(0); break; } } |
