File Coverage

blib/lib/RPerl/Operation/Expression/Operator/Named/Reverse.pm
Criterion Covered Total %
statement 34 81 41.9
branch 2 16 12.5
condition n/a
subroutine 9 11 81.8
pod n/a
total 45 108 41.6


line stmt bran cond sub pod time code
1             # [[[ DOCUMENTATION ]]]
2             # http://perldoc.perl.org/functions/reverse.html
3             # SUPPORTED: reverse LIST
4              
5             # [[[ HEADER ]]]
6             package RPerl::Operation::Expression::Operator::Named::Reverse;
7 4     4   25 use strict;
  4         9  
  4         97  
8 4     4   19 use warnings;
  4         8  
  4         82  
9 4     4   20 use RPerl::AfterSubclass;
  4         9  
  4         522  
10             our $VERSION = 0.002_000;
11              
12             # [[[ OO INHERITANCE ]]]
13 4     4   27 use parent qw(RPerl::Operation::Expression::Operator::Named);
  4         10  
  4         20  
14 4     4   227 use RPerl::Operation::Expression::Operator::Named;
  4         12  
  4         127  
15              
16             # [[[ CRITICS ]]]
17             ## no critic qw(ProhibitUselessNoCritic ProhibitMagicNumbers RequireCheckedSyscalls) # USER DEFAULT 1: allow numeric values & print operator
18             ## no critic qw(RequireInterpolationOfMetachars) # USER DEFAULT 2: allow single-quoted control characters & sigils
19              
20             # [[[ CONSTANTS ]]]
21 4     4   23 use constant NAME => my string $TYPED_NAME = 'reverse';
  4         10  
  4         239  
22 4     4   23 use constant ARGUMENTS_MIN => my integer $TYPED_ARGUMENTS_MIN = 1;
  4         8  
  4         196  
23 4     4   20 use constant ARGUMENTS_MAX => my integer $TYPED_ARGUMENTS_MAX = 999;
  4         9  
  4         2497  
24              
25             # [[[ OO PROPERTIES ]]]
26             our hashref $properties = {};
27              
28             # [[[ SUBROUTINES & OO METHODS ]]]
29              
30             sub ast_to_rperl__generate {
31 1     1   8 { my string_hashref::method $RETURN_TYPE };
  1         4  
32 1         4 ( my object $self, my object $operator_named, my string_hashref $modes)
33             = @ARG;
34 1         7 my string_hashref $rperl_source_group = { PMC => q{} };
35              
36             # RPerl::diag( 'in Operator::Named::Reverse->ast_to_rperl__generate(), received $self = ' . "\n" . RPerl::Parser::rperl_ast__dump($self) . "\n" );
37             # RPerl::diag( 'in Operator::Named::Reverse->ast_to_rperl__generate(), received $operator_named = ' . "\n" . RPerl::Parser::rperl_ast__dump($operator_named) . "\n" );
38              
39 1         4 my string $operator_named_class = ref $operator_named;
40 1 50       12 if ( $operator_named_class eq 'Operation_90' ) { # Operation -> OP01_NAMED_SCOLON
    50          
    0          
    0          
41             die RPerl::Parser::rperl_rule__replace(
42             'ERROR ECOGEASRP17, CODE GENERATOR, ABSTRACT SYNTAX TO RPERL: Named operator '
43 0         0 . $operator_named->{children}->[0]
44             . ' requires one or more arguments, dying' )
45             . "\n";
46             }
47             elsif ( $operator_named_class eq 'Operator_94' ) { # Operator -> OP01_NAMED SubExpression
48 1         7 $rperl_source_group->{PMC} .= $operator_named->{children}->[0] . q{ };
49             my string_hashref $rperl_source_subgroup
50 1         27 = $operator_named->{children}->[1]
51             ->ast_to_rperl__generate( $modes, $self );
52 1         26 RPerl::Generator::source_group_append( $rperl_source_group,
53             $rperl_source_subgroup );
54             }
55             elsif ( $operator_named_class eq 'Operator_95' ) { # Operator -> LPAREN OP01_NAMED ListElement OP21_LIST_COMMA ListElements ')'
56 0         0 my string $left_paren = $operator_named->{children}->[0];
57 0         0 my string $operator_name = $operator_named->{children}->[1];
58 0         0 my object $argument0 = $operator_named->{children}->[2];
59 0         0 my string $list_comma = $operator_named->{children}->[3];
60 0         0 my object $arguments = $operator_named->{children}->[4];
61 0         0 my string $right_paren = $operator_named->{children}->[5];
62              
63 0         0 my integer $argument_count = $arguments->length() + 1;
64 0 0       0 if ( $argument_count < ARGUMENTS_MIN() ) {
65 0         0 die
66             'ERROR ECOGEASRP02, CODE GENERATOR, ABSTRACT SYNTAX TO RPERL:'
67             . "\n"
68             . 'Argument count '
69             . $argument_count
70             . ' falls below minimum argument limit '
71             . ARGUMENTS_MIN()
72             . ' for operation ' . q{'}
73             . NAME() . q{'}
74             . ', dying' . "\n";
75             }
76 0 0       0 if ( $argument_count > ARGUMENTS_MAX() ) {
77 0         0 die
78             'ERROR ECOGEASRP03, CODE GENERATOR, ABSTRACT SYNTAX TO RPERL:'
79             . "\n"
80             . 'Argument count '
81             . $argument_count
82             . ' exceeds maximum argument limit '
83             . ARGUMENTS_MAX()
84             . ' for operation ' . q{'}
85             . NAME() . q{'}
86             . ', dying' . "\n";
87             }
88              
89 0         0 $rperl_source_group->{PMC} .= $left_paren . q{ } . $operator_name . q{ };
90 0         0 my string_hashref $rperl_source_subgroup = $argument0->ast_to_rperl__generate( $modes, $self );
91 0         0 RPerl::Generator::source_group_append( $rperl_source_group, $rperl_source_subgroup );
92 0         0 $rperl_source_group->{PMC} .= $list_comma . q{ };
93 0         0 $rperl_source_subgroup = $arguments->ast_to_rperl__generate( $modes, $self );
94 0         0 RPerl::Generator::source_group_append( $rperl_source_group, $rperl_source_subgroup );
95 0         0 $rperl_source_group->{PMC} .= q{ } . $right_paren;
96             }
97             elsif ( $operator_named_class eq 'OperatorVoid_134' ) { # OperatorVoid -> OP01_NAMED ListElement OP21_LIST_COMMA ListElements ';'
98 0         0 my string $operator_name = $operator_named->{children}->[0];
99 0         0 my object $argument0 = $operator_named->{children}->[1];
100 0         0 my string $list_comma = $operator_named->{children}->[2];
101 0         0 my object $arguments = $operator_named->{children}->[3];
102 0         0 my string $semicolon = $operator_named->{children}->[4];
103              
104 0         0 my integer $argument_count = $arguments->length() + 1;
105 0 0       0 if ( $argument_count < ARGUMENTS_MIN() ) {
106 0         0 die
107             'ERROR ECOGEASRP02, CODE GENERATOR, ABSTRACT SYNTAX TO RPERL:'
108             . "\n"
109             . 'Argument count '
110             . $argument_count
111             . ' falls below minimum argument limit '
112             . ARGUMENTS_MIN()
113             . ' for operation ' . q{'}
114             . NAME() . q{'}
115             . ', dying' . "\n";
116             }
117 0 0       0 if ( $argument_count > ARGUMENTS_MAX() ) {
118 0         0 die
119             'ERROR ECOGEASRP03, CODE GENERATOR, ABSTRACT SYNTAX TO RPERL:'
120             . "\n"
121             . 'Argument count '
122             . $argument_count
123             . ' exceeds maximum argument limit '
124             . ARGUMENTS_MAX()
125             . ' for operation ' . q{'}
126             . NAME() . q{'}
127             . ', dying' . "\n";
128             }
129              
130 0         0 $rperl_source_group->{PMC} .= $operator_name . q{ };
131 0         0 my string_hashref $rperl_source_subgroup = $argument0->ast_to_rperl__generate( $modes, $self );
132 0         0 RPerl::Generator::source_group_append( $rperl_source_group, $rperl_source_subgroup );
133 0         0 $rperl_source_group->{PMC} .= $list_comma . q{ };
134 0         0 $rperl_source_subgroup = $arguments->ast_to_rperl__generate( $modes, $self );
135 0         0 RPerl::Generator::source_group_append( $rperl_source_group, $rperl_source_subgroup );
136 0         0 $rperl_source_group->{PMC} .= $semicolon . "\n";
137             }
138             else {
139 0         0 die RPerl::Parser::rperl_rule__replace(
140             'ERROR ECOGEASRP00, CODE GENERATOR, ABSTRACT SYNTAX TO RPERL: Grammar rule '
141             . ($operator_named_class)
142             . ' found where Operation_90, Operator_94, Operator_95, or OperatorVoid_134 expected, dying'
143             ) . "\n";
144             }
145 1         4 return $rperl_source_group;
146             }
147              
148             sub ast_to_cpp__generate__CPPOPS_PERLTYPES {
149 0     0     { my string_hashref::method $RETURN_TYPE };
  0            
150 0           ( my object $self, my string_hashref $modes) = @ARG;
151 0           my string_hashref $cpp_source_group
152             = { CPP =>
153             q{// <<< RP::O::E::O::N::Re __DUMMY_SOURCE_CODE CPPOPS_PERLTYPES >>>}
154             . "\n" };
155              
156             #...
157 0           return $cpp_source_group;
158             }
159              
160             sub ast_to_cpp__generate__CPPOPS_CPPTYPES {
161 0     0     { my string_hashref::method $RETURN_TYPE };
  0            
162 0           ( my object $self, my string_hashref $modes) = @ARG;
163 0           my string_hashref $cpp_source_group
164             = { CPP =>
165             q{// <<< RP::O::E::O::N::Re __DUMMY_SOURCE_CODE CPPOPS_CPPTYPES >>>}
166             . "\n" };
167              
168             #...
169 0           return $cpp_source_group;
170             }
171              
172             1; # end of class