File Coverage

blib/lib/PPIx/Regexp/Structure/BranchReset.pm
Criterion Covered Total %
statement 25 25 100.0
branch 6 8 75.0
condition 2 3 66.6
subroutine 6 6 100.0
pod n/a
total 39 42 92.8


line stmt bran cond sub pod time code
1             =head1 NAME
2              
3             PPIx::Regexp::Structure::BranchReset - Represent a branch reset group
4              
5             =head1 SYNOPSIS
6              
7             use PPIx::Regexp::Dumper;
8             PPIx::Regexp::Dumper->new( 'qr{(?|(foo)|(bar))}smx' )
9             ->print();
10              
11             =head1 INHERITANCE
12              
13             C is a
14             L.
15              
16             C has no descendants.
17              
18             =head1 DESCRIPTION
19              
20             This class represents a branch reset group. That is, the construction
21             C<(?|(...)|(...)|...)>. This is new with Perl 5.010.
22              
23             =head1 METHODS
24              
25             This class provides no public methods beyond those provided by its
26             superclass.
27              
28             =cut
29              
30             package PPIx::Regexp::Structure::BranchReset;
31              
32 9     9   60 use strict;
  9         20  
  9         297  
33 9     9   47 use warnings;
  9         20  
  9         248  
34              
35 9     9   42 use base qw{ PPIx::Regexp::Structure };
  9         36  
  9         801  
36              
37 9     9   57 use Carp qw{ confess };
  9         26  
  9         466  
38 9     9   56 use PPIx::Regexp::Constant qw{ @CARP_NOT };
  9         59  
  9         2204  
39              
40             our $VERSION = '0.087_01';
41              
42             # Called by the lexer to record the capture number.
43             sub __PPIX_LEXER__record_capture_number {
44 6     6   25 my ( $self, $number ) = @_;
45 6 50       40 defined $number
46             or confess 'Programming error - initial $number is undef';
47 6         17 my $original = $number;
48 6         14 my $hiwater = $number;
49 6         33 foreach my $kid ( $self->children() ) {
50 16 100 66     171 if ( $kid->isa( 'PPIx::Regexp::Token::Operator' )
51             && $kid->content() eq '|' ) {
52 5 50       31 $number > $hiwater and $hiwater = $number;
53 5         14 $number = $original;
54             } else {
55 11         63 $number = $kid->__PPIX_LEXER__record_capture_number( $number );
56             }
57             }
58 6 100       44 return $number > $hiwater ? $number : $hiwater;
59             }
60              
61             1;
62              
63             __END__