-rwxr-xr-x | scripts/optimize-connect | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/scripts/optimize-connect b/scripts/optimize-connect new file mode 100755 index 0000000..c81ecae --- a/dev/null +++ b/scripts/optimize-connect | |||
@@ -0,0 +1,34 @@ | |||
1 | #!/usr/bin/perl | ||
2 | |||
3 | # Strips unnecessary whitespace from SIGNAL() and SLOT() macros, | ||
4 | # so that this doesn't have to be done at runtime. | ||
5 | # Believe it or not, this actually speeds things up. | ||
6 | # | ||
7 | # Limitation: only 1 set of (...) inside the macro, so it can't handle | ||
8 | # signals and slots that have function pointers as arguments. | ||
9 | |||
10 | for $arg (@ARGV) { | ||
11 | if ( 0 ) { | ||
12 | # opts | ||
13 | } else { | ||
14 | push @files, $arg; | ||
15 | } | ||
16 | } | ||
17 | |||
18 | sub canonWS { | ||
19 | my ($s) = @_; | ||
20 | $s =~ s/(.)\s+(\W)/$1$2/g; | ||
21 | $s =~ s/(\W)\s+(.)/$1$2/g; | ||
22 | return $s; | ||
23 | }; | ||
24 | |||
25 | for $file (@files) { | ||
26 | open F, $file; | ||
27 | $c = join "",<F>; | ||
28 | close F; | ||
29 | $c =~ s/\b((?:SIGNAL|SLOT)\s*\(\s*)((?:[^\n;()]+|\([^()]*\))*)\)/"$1".canonWS($2).")"/egs; | ||
30 | open F, ">t$$"; | ||
31 | print F $c; | ||
32 | close F; | ||
33 | system("diff -u $file t$$"); | ||
34 | } | ||