perl 5.0 alpha 2
[perl.git] / fixpp
1 #!/usr/bin/perl
2
3 @lines = <>;
4 for (@lines) {
5     $line++;
6
7     if (/^PP\(pp_(\w+)/) { $newname = $1; $fixed = 1; $mark = 0; next; }
8     if (/^}/) { $fixed{$newname} = $fixed; $mark{$newname} = $mark; $newname=''}
9
10     next unless $fixed;
11
12     if (/^#ifdef NOTDEF/) { $fixed = 0; }
13     if (/MSP;/) { $mark = 1; }
14
15     if (/\bMEXTEND/ && $mark == 0) { warn "Inconsistent mark line $line\n"; }
16     if (/\bMXPUSH/ && $mark == 0) { warn "Inconsistent mark line $line\n"; }
17     if (/\bMRETURN/ && $mark == 0) { warn "Inconsistent mark line $line\n"; }
18
19     if (/\bEXTEND/ && $mark == 1) { warn "Inconsistent mark line $line\n"; }
20     if (/\bXPUSH/ && $mark == 1) { warn "Inconsistent mark line $line\n"; }
21     if (/\bRETURN/ && $mark == 1) { warn "Inconsistent mark line $line\n"; }
22
23 }
24
25 for (@lines) {
26     if (m#^     0, /\* pp_(\w+)#) {
27         $_ = "  pp_$1,\n" if $fixed{$1};
28     }
29     elsif (m#^  [01], /\* (\w+)[^,]#) {
30         s/\d/$mark{$1} + 0/e;
31     }
32     last if /^PP/;
33 }
34
35 print @lines;