From 3238fa6a54927c1af81dbd2c512f5e6ead8dcfc2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A1n=20Tomko?= Date: Mon, 1 Aug 2016 10:54:47 -0700 Subject: [PATCH] useless-if-before-free: skip non-matching lines early * build-aux/useless-if-before-free: First match each line with the simple/quick /\bif\b/ and reject if there is no match. This often saves the cost of the much more involved regular expression. For libvirt, this decreases the cost from 1.44s to 1.02s. --- ChangeLog | 8 ++++++++ build-aux/useless-if-before-free | 5 ++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 28327f2..8e8ba77 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,13 @@ 2016-07-26 Ján Tomko + useless-if-before-free: skip non-matching lines early + * build-aux/useless-if-before-free: First match each line with the + simple/quick /\bif\b/ and reject if there is no match. This often + saves the cost of the much more involved regular expression. + For libvirt, this decreases the cost from 1.44s to 1.02s. + +2016-07-26 Ján Tomko + maint.mk: speed up sc_po_check sc_po_check would skip files based on their names, or on the existence of files with derived names. Rewrite it to use perl diff --git a/build-aux/useless-if-before-free b/build-aux/useless-if-before-free index 1899b1f..d7a8c0d 100755 --- a/build-aux/useless-if-before-free +++ b/build-aux/useless-if-before-free @@ -4,7 +4,7 @@ eval '(exit $?0)' && eval 'exec perl -wST "$0" "$@"' # Detect instances of "if (p) free (p);". # Likewise "if (p != 0)", "if (0 != p)", or with NULL; and with braces. -my $VERSION = '2016-01-12 23:13'; # UTC +my $VERSION = '2016-08-01 17:47'; # UTC # The definition above must lie within the first 8 lines in order # for the Emacs time-stamp write hook (at end) to update it. # If you change this file with Emacs, please let the write hook @@ -129,6 +129,9 @@ sub is_NULL ($) $err = EXIT_ERROR, next; while (defined (my $line = )) { + # Skip non-matching lines early to save time + $line =~ /\bif\b/ + or next; while ($line =~ /\b(if\s*\(\s*([^)]+?)(?:\s*!=\s*([^)]+?))?\s*\) # 1 2 3 -- 2.8.0-rc2