This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
ext/re/re.pm: Fix up setting debug option defaults
authorKarl Williamson <khw@cpan.org>
Thu, 5 Mar 2020 03:19:01 +0000 (20:19 -0700)
committerKarl Williamson <khw@cpan.org>
Wed, 11 Mar 2020 15:00:03 +0000 (09:00 -0600)
This was not setting the defaults properly for 'debug', and 'Debug'

ext/re/re.pm

index ae0dfdf..0454c41 100644 (file)
@@ -121,6 +121,7 @@ sub bits {
     my $on = shift;
     my $bits = 0;
     my $turning_all_off = ! @_ && ! $on;
+    my $seen_Debug = 0;
     if ($turning_all_off) {
 
         # Pretend were called with certain parameters, which are best dealt
@@ -134,8 +135,15 @@ sub bits {
     foreach my $idx (0..$#_){
         my $s=$_[$idx];
         if ($s eq 'Debug' or $s eq 'Debugcolor') {
+            if (! $seen_Debug) {
+                $seen_Debug = 1;
+
+                # Reset to nothing, and then add what follows.  $seen_Debug
+                # allows, though unlikely someone would do it, more than one
+                # Debug and flags in the arguments
+                ${^RE_DEBUG_FLAGS} = 0;
+            }
             setcolor() if $s =~/color/i;
-            ${^RE_DEBUG_FLAGS} = 0 unless defined ${^RE_DEBUG_FLAGS};
             for my $idx ($idx+1..$#_) {
                 if ($flags{$_[$idx]}) {
                     if ($on) {
@@ -152,6 +160,10 @@ sub bits {
             _load_unload($on ? 1 : ${^RE_DEBUG_FLAGS});
             last;
         } elsif ($s eq 'debug' or $s eq 'debugcolor') {
+
+            # These default flags should be kept in sync with the same values
+            # in regcomp.h
+            ${^RE_DEBUG_FLAGS} = $flags{'EXECUTE'} | $flags{'DUMP'};
            setcolor() if $s =~/color/i;
            _load_unload($on);
            last;