File: interp_backtrace_enhancer.p6

package info (click to toggle)
moarvm 2020.12%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 18,652 kB
  • sloc: ansic: 268,178; perl: 8,186; python: 1,316; makefile: 768; sh: 287
file content (26 lines) | stat: -rwxr-xr-x 646 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#!/usr/bin/env perl6

my $interp_c_file = $*PROGRAM-NAME.IO.parent.parent.child('src').child('core').child('interp.c');

my $cur_op = 'before_dispatch';

my %lines_to_op;

for $interp_c_file.lines.kv -> $lineno, $line {
    if $line ~~ / ^ \s* 'OP(' $<opname>=<[a..z A..Z \- \_ 0..9]>+ '):' / {
        $cur_op = $<opname>;
    }

    elsif $line ~~ / ^ \s* 'default:' / {
        $cur_op ~= "_or_after_dispatch";
    }

    %lines_to_op{$lineno} = $cur_op;
}

for lines() -> $_ is copy {
    $_ .= subst(rx/'interp.c:' $<lineno>=<[0..9]>+ /,
            -> $/ { "interp.c:{$<lineno>} ({%lines_to_op{$<lineno>}})" },
            :g);
    .say;
}