File Coverage

blib/lib/RPerl/DataType/TypeInner.pm
Criterion Covered Total %
statement 43 52 82.6
branch 4 8 50.0
condition n/a
subroutine 7 8 87.5
pod n/a
total 54 68 79.4


line stmt bran cond sub pod time code
1             # [[[ HEADER ]]]
2             package RPerl::DataType::TypeInner;
3 3     3   19 use strict;
  3         6  
  3         73  
4 3     3   14 use warnings;
  3         5  
  3         62  
5 3     3   14 use RPerl::AfterSubclass;
  3         6  
  3         409  
6             our $VERSION = 0.003_000;
7              
8             # [[[ OO INHERITANCE ]]]
9 3     3   19 use parent qw(RPerl::GrammarRule);
  3         7  
  3         17  
10 3     3   138 use RPerl::GrammarRule;
  3         7  
  3         1371  
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 57     57   135 { my string_hashref::method $RETURN_TYPE };
  57         108  
23 57         150 ( my object $self, my string_hashref $modes) = @ARG;
24 57         240 my string_hashref $rperl_source_group = { PMC => q{} };
25              
26             # RPerl::diag( 'in TypeInner->ast_to_rperl__generate(), received $self = ' . "\n" . RPerl::Parser::rperl_ast__dump($self) . "\n" );
27              
28 57         144 my string $self_class = ref $self;
29 57 50       173 if ( $self_class eq 'TypeInner_237' ) { # TypeInner -> MY Type '$TYPED_' OpStringOrWord OP19_VARIABLE_ASSIGN
30 57         156 my string $my = $self->{children}->[0];
31 57         182 my string $type = $self->{children}->[1]->{children}->[0];
32 57         141 my string $TYPED = $self->{children}->[2];
33 57         145 my string $name = $self->{children}->[3]->{children}->[0];
34              
35             # RPerl::diag( 'in TypeInner->ast_to_rperl__generate(), have $name = ' . "\n" . RPerl::Parser::rperl_ast__dump($name) . "\n" );
36            
37 57         359 $name =~ s/^(\w+)\s*$/$1/gxms; # strip trailing whitespace, caused by grammar matching operator names with trailing spaces
38 57 50       273 if ($name !~ /^[a-z]/) {
39 0         0 die 'ERROR ECOGEASRP25, CODE GENERATOR, ABSTRACT SYNTAX TO RPERL: invalid redundant name ' . q{'}
40             . $name . q{'}
41             . ' does not start with a lowercase letter a-z, dying' . "\n";
42             }
43 57         150 my string $equal = $self->{children}->[4];
44              
45 57         241 $rperl_source_group->{PMC} .= $my . q{ } . $type . q{ } . $TYPED . $name . q{ } . $equal . q{ };
46             }
47             else {
48 0         0 die RPerl::Parser::rperl_rule__replace(
49             'ERROR ECOGEASRP00, CODE GENERATOR, ABSTRACT SYNTAX TO RPERL: Grammar rule '
50             . $self_class
51             . ' found where TypeInner_237 expected, dying'
52             ) . "\n";
53             }
54 57         254 return $rperl_source_group;
55             }
56              
57             sub ast_to_cpp__generate__CPPOPS_PERLTYPES {
58 0     0   0 { my string_hashref::method $RETURN_TYPE };
  0         0  
59 0         0 ( my object $self, my string_hashref $modes) = @ARG;
60 0         0 my string_hashref $cpp_source_group
61             = { CPP => q{// <<< RP::DT::TI __DUMMY_SOURCE_CODE CPPOPS_PERLTYPES >>>}
62             . "\n" };
63              
64             #...
65 0         0 return $cpp_source_group;
66             }
67              
68             sub ast_to_cpp__generate__CPPOPS_CPPTYPES {
69 1     1   2 { my string_hashref::method $RETURN_TYPE };
  1         4  
70 1         6 ( my object $self, my string_hashref $modes) = @ARG;
71 1         3 my string_hashref $cpp_source_group = {};
72              
73             # RPerl::diag( 'in TypeInner->ast_to_cpp__generate__CPPOPS_CPPTYPES(), received $self = ' . "\n" . RPerl::Parser::rperl_ast__dump($self) . "\n" );
74              
75 1         3 my string $self_class = ref $self;
76 1 50       3 if ( $self_class eq 'TypeInner_237' ) { # TypeInner -> MY Type '$TYPED_' WORD OP19_VARIABLE_ASSIGN
77 1         14 my string $type = $self->{children}->[1]->{children}->[0];
78 1         4 my string $name = $self->{children}->[3]->{children}->[0];
79 1         9 $name =~ s/^(\w+)\s*$/$1/gxms; # strip trailing whitespace, caused by grammar matching operator names with trailing spaces
80 1 50       6 if ($name !~ /^[a-z]/) {
81 0         0 die 'ERROR ECOGEASCP25, CODE GENERATOR, ABSTRACT SYNTAX TO C++: invalid redundant name ' . q{'}
82             . $name . q{'}
83             . ' does not start with a lowercase letter a-z, dying' . "\n";
84             }
85              
86 1         20 $type = RPerl::Generator::type_convert_perl_to_cpp($type, 1); # $pointerify_classes = 1
87 1         6 $cpp_source_group->{CPP} = $type;
88             }
89             else {
90 0         0 die RPerl::Parser::rperl_rule__replace(
91             'ERROR ECOGEASCP00, CODE GENERATOR, ABSTRACT SYNTAX TO C++: Grammar rule '
92             . $self_class
93             . ' found where TypeInner_237 expected, dying'
94             ) . "\n";
95             }
96 1         4 return $cpp_source_group;
97             }
98              
99             1; # end of class