Speed up warn.py about 30x by precompiling all the regular expressions.
diff --git a/tools/warn.py b/tools/warn.py
index b379849..6fea20a 100755
--- a/tools/warn.py
+++ b/tools/warn.py
@@ -460,8 +460,8 @@
def classifywarning(line):
for i in warnpatterns:
- for pat in i['patterns']:
- if re.match(pat, line):
+ for cpat in i['compiledpatterns']:
+ if cpat.match(line):
i['members'].append(line)
return
else:
@@ -470,7 +470,12 @@
# 2 or more concurrent compiles
pass
-
+# precompiling every pattern speeds up parsing by about 30x
+def compilepatterns():
+ for i in warnpatterns:
+ i['compiledpatterns'] = []
+ for pat in i['patterns']:
+ i['compiledpatterns'].append(re.compile(pat))
infile = open(sys.argv[1], 'r')
warnings = []
@@ -481,6 +486,7 @@
linecounter = 0
warningpattern = re.compile('.* warning:.*')
+compilepatterns()
# read the log file and classify all the warnings
lastmatchedline = ''
@@ -515,7 +521,3 @@
dumpseverity(severity.UNKNOWN)
dumpfixed()
-
-
-
-