File Coverage

blib/lib/RPerl/Operation/Expression/SubExpression/HashDereference.pm
Criterion Covered Total %
statement 50 56 89.2
branch 6 8 75.0
condition 1 3 33.3
subroutine 7 8 87.5
pod n/a
total 64 75 85.3


line stmt bran cond sub pod time code
1             # [[[ HEADER ]]]
2             package RPerl::Operation::Expression::SubExpression::HashDereference;
3 3     3   17 use strict;
  3         7  
  3         70  
4 3     3   12 use warnings;
  3         7  
  3         60  
5 3     3   15 use RPerl::AfterSubclass;
  3         7  
  3         438  
6             our $VERSION = 0.001_100;
7              
8             # [[[ OO INHERITANCE ]]]
9 3     3   18 use parent qw(RPerl::Operation::Expression::SubExpression);
  3         7  
  3         14  
10 3     3   173 use RPerl::Operation::Expression::SubExpression;
  3         7  
  3         1170  
11              
12             # [[[ CRITICS ]]]
13             ## no critic qw(ProhibitUselessNoCritic ProhibitMagicNumbers RequireCheckedSyscalls) # USER DEFAULT 1: allow numeric values & print operator
14             ## no critic qw(RequireInterpolationOfMetachars) # USER DEFAULT 2: allow single-quoted control characters & sigils
15              
16             # [[[ OO PROPERTIES ]]]
17             our hashref $properties = {};
18              
19             # [[[ SUBROUTINES & OO METHODS ]]]
20              
21             sub ast_to_rperl__generate {
22 27     27   87 { my string_hashref::method $RETURN_TYPE };
  27         79  
23 27         104 ( my object $self, my string_hashref $modes) = @ARG;
24 27         116 my string_hashref $rperl_source_group = { PMC => q{} };
25 27         97 my object $rperl_source_subgroup;
26              
27             # RPerl::diag( 'in HashDereference->ast_to_rperl__generate(), received $self = ' . "\n" . RPerl::Parser::rperl_ast__dump($self) . "\n" );
28              
29 27         113 my string $self_class = ref $self;
30              
31             # unwrap HashDereference_229 and HashDereference_230 from SubExpression_156 and HashEntry_219
32 27 50 33     181 if ( ( $self_class eq 'SubExpression_156' ) # SubExpression -> HashDereference
33             or ( $self_class eq 'HashEntry_219' ) ) # HashEntry -> HashDereference
34             {
35 27         122 $self = $self->{children}->[0];
36             }
37              
38 27         108 $self_class = ref $self;
39 27 100       179 if ( $self_class eq 'HashDereference_229' ) { # HashDereference -> '%{' Variable '}'
    50          
40 11         58 my string $percent_left_brace = $self->{children}->[0];
41 11         26 my object $variable = $self->{children}->[1];
42 11         29 my string $right_brace = $self->{children}->[2];
43              
44 11         41 $rperl_source_group->{PMC} .= $percent_left_brace . q{ };
45 11         233 $rperl_source_subgroup = $variable->ast_to_rperl__generate($modes);
46 11         228 RPerl::Generator::source_group_append( $rperl_source_group,
47             $rperl_source_subgroup );
48 11         38 $rperl_source_group->{PMC} .= q{ } . $right_brace;
49             }
50             elsif ( $self_class eq 'HashDereference_230' ) { # HashDereference -> '%{' OPTIONAL-51 HashReference '}'
51 16         94 my string $percent_left_brace = $self->{children}->[0];
52 16         44 my object $type_inner_optional = $self->{children}->[1];
53 16         63 my object $hash_reference = $self->{children}->[2];
54 16         86 my string $right_brace = $self->{children}->[3];
55              
56 16         72 $rperl_source_group->{PMC} .= $percent_left_brace . q{ };
57 16 100       108 if ( exists $type_inner_optional->{children}->[0] ) {
58 2         55 $rperl_source_subgroup = $type_inner_optional->{children}->[0]
59             ->ast_to_rperl__generate($modes);
60 2         46 RPerl::Generator::source_group_append( $rperl_source_group,
61             $rperl_source_subgroup );
62 2         8 $rperl_source_group->{PMC} .= q{ };
63             }
64             $rperl_source_subgroup
65 16         435 = $hash_reference->ast_to_rperl__generate($modes);
66 16         388 RPerl::Generator::source_group_append( $rperl_source_group,
67             $rperl_source_subgroup );
68 16         95 $rperl_source_group->{PMC} .= q{ } . $right_brace;
69             }
70             else {
71 0         0 die RPerl::Parser::rperl_rule__replace(
72             'ERROR ECOGEASRP00, CODE GENERATOR, ABSTRACT SYNTAX TO RPERL: Grammar rule '
73             . $self_class
74             . ' found where HashDereference_229 or HashDereference_230 expected, dying'
75             ) . "\n";
76             }
77 27         215 return $rperl_source_group;
78             }
79              
80             sub ast_to_cpp__generate__CPPOPS_PERLTYPES {
81 0     0   0 { my string_hashref::method $RETURN_TYPE };
  0         0  
82 0         0 ( my object $self, my string_hashref $modes) = @ARG;
83 0         0 my string_hashref $cpp_source_group
84             = { CPP =>
85             q{// <<< RP::O::E::SE::HD __DUMMY_SOURCE_CODE CPPOPS_PERLTYPES >>>}
86             . "\n" };
87              
88             #...
89 0         0 return $cpp_source_group;
90             }
91              
92             sub ast_to_cpp__generate__CPPOPS_CPPTYPES {
93 1     1   2 { my string_hashref::method $RETURN_TYPE };
  1         2  
94 1         3 ( my object $self, my string_hashref $modes) = @ARG;
95 1         4 my string_hashref $cpp_source_group
96             = { CPP =>
97             q{// <<< RP::O::E::SE::HD __DUMMY_SOURCE_CODE CPPOPS_CPPTYPES >>>}
98             . "\n" };
99              
100             #...
101 1         4 return $cpp_source_group;
102             }
103              
104             1; # end of class