You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@spamassassin.apache.org by jm...@apache.org on 2006/11/14 19:26:24 UTC

svn commit: r474909 - /spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/Check.pm

Author: jm
Date: Tue Nov 14 10:26:23 2006
New Revision: 474909

URL: http://svn.apache.org/viewvc?view=rev&rev=474909
Log:
optimise out tflags-multiple support code in header rules when it's not necessary

Modified:
    spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/Check.pm

Modified: spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/Check.pm
URL: http://svn.apache.org/viewvc/spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/Check.pm?view=diff&rev=474909&r1=474908&r2=474909
==============================================================================
--- spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/Check.pm (original)
+++ spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/Check.pm Tue Nov 14 10:26:23 2006
@@ -388,6 +388,8 @@
     return;
   }
 
+  my $conf = $pms->{conf};
+  my $tflags = $conf->{tflags};
   my $use_rule_subs = $self->{main}->{use_rule_subs};
 
   my $evalstr = $self->start_rules_plugin_code("header");
@@ -397,7 +399,7 @@
   my %ordered = ();
   my %testcode = ();
 
-  while (my($rulename, $rule) = each %{$pms->{conf}{head_tests}->{$priority}}) {
+  while (my($rulename, $rule) = each %{$conf->{head_tests}->{$priority}}) {
     my $def = '';
     my ($hdrname, $testtype, $pat) =
         $rule =~ /^\s*(\S+)\s*(\=|\!)\~\s*(\S.*?\S)\s*$/;
@@ -454,13 +456,23 @@
       else {
         my $testcode = $testcode{$rulename};
 
+        my $posline = '';
+        my $ifwhile = 'if';
+        my $hitdone = '';
+        if (($tflags->{$rulename}||'') =~ /\bmultiple\b/)
+        {
+          $posline = 'pos $hval = 0;';
+          $ifwhile = 'while';
+          $hitdone = 'last';
+        }
+
         $evalstr .= '
           if ($scoresptr->{q#'.$rulename.'#}) {
-            pos $hval = 0;
+            '.$posline.'
             '.$self->hash_line_for_rule($pms, $rulename).'
-            while ($hval '.$testcode.') {
+            '.$ifwhile.' ($hval '.$testcode.') {
               $self->got_hit(q#'.$rulename.'#, "", ruletype => "header");
-              '.$self->hit_rule_plugin_code($pms, $rulename, "header", "last").'
+              '.$self->hit_rule_plugin_code($pms, $rulename, "header", $hitdone).'
             }
             '.$self->ran_rule_plugin_code($pms, $rulename, "header").'
           }
@@ -550,7 +562,7 @@
   while (my($rulename, $pat) = each %{$pms->{conf}{body_tests}->{$priority}}) {
     my $sub;
     if (($pms->{conf}->{tflags}->{$rulename}||'') =~ /\bmultiple\b/)
-      {
+    {
       # support multiple matches
       $loopid++;
       $sub = '
@@ -813,7 +825,7 @@
   while (my($rulename, $pat) = each %{$pms->{conf}{rawbody_tests}->{$priority}}) {
     my $sub;
     if (($pms->{conf}->{tflags}->{$rulename}||'') =~ /\bmultiple\b/)
-      {
+    {
       # support multiple matches
       $loopid++;
       $sub = '