File Coverage

blib/lib/RPerl/Operation/Statement/OperatorVoid/Named/Exit.pm
Criterion Covered Total %
statement 48 61 78.6
branch 8 12 66.6
condition n/a
subroutine 9 11 81.8
pod n/a
total 65 84 77.3


line stmt bran cond sub pod time code
1             # [[[ HEADER ]]]
2             package RPerl::Operation::Statement::OperatorVoid::Named::Exit;
3 4     4   23 use strict;
  4         8  
  4         99  
4 4     4   18 use warnings;
  4         7  
  4         81  
5 4     4   18 use RPerl::AfterSubclass;
  4         8  
  4         564  
6             our $VERSION = 0.002_010;
7              
8             # [[[ OO INHERITANCE ]]]
9             # NEED FIX: is not a Grammar Rule so should not inherit from OperatorVoid, need create Grammar Production class
10 4     4   25 use parent qw(RPerl::Operation::Statement::OperatorVoid::Named);
  4         8  
  4         23  
11 4     4   225 use RPerl::Operation::Statement::OperatorVoid::Named;
  4         12  
  4         109  
12              
13             # [[[ CRITICS ]]]
14             ## no critic qw(ProhibitUselessNoCritic ProhibitMagicNumbers RequireCheckedSyscalls) # USER DEFAULT 1: allow numeric values & print operator
15             ## no critic qw(RequireInterpolationOfMetachars) # USER DEFAULT 2: allow single-quoted control characters & sigils
16             ## no critic qw(ProhibitConstantPragma ProhibitMagicNumbers) # USER DEFAULT 3: allow constants
17              
18             # [[[ CONSTANTS ]]]
19 4     4   19 use constant NAME => my string $TYPED_NAME = 'exit';
  4         8  
  4         217  
20              
21             # DEV NOTE: ARGUMENTS_MIN of 0 can be ignored, no such thing as negative number of args!
22 4     4   25 use constant ARGUMENTS_MIN => my integer $TYPED_ARGUMENTS_MIN = 0;
  4         9  
  4         178  
23 4     4   20 use constant ARGUMENTS_MAX => my integer $TYPED_ARGUMENTS_MAX = 1;
  4         8  
  4         1877  
24              
25             # [[[ OO PROPERTIES ]]]
26             our hashref $properties = {};
27              
28             # [[[ SUBROUTINES & OO METHODS ]]]
29              
30             sub ast_to_rperl__generate {
31 22     22   52 { my string_hashref::method $RETURN_TYPE };
  22         61  
32 22         63 ( my object $self, my string_hashref $modes, my object $operator_void_named) = @ARG;
33 22         74 my string_hashref $rperl_source_group = { PMC => q{} };
34              
35             # RPerl::diag( 'in OperatorVoid::Named::Exit->ast_to_rperl__generate(), received $self = ' . "\n" . RPerl::Parser::rperl_ast__dump($self) . "\n" );
36             # RPerl::diag( 'in OperatorVoid::Named::Exit->ast_to_rperl__generate(), received $operator_void_named = ' . "\n" . RPerl::Parser::rperl_ast__dump($operator_void_named) . "\n" );
37              
38 22 100       189 if ( ref $operator_void_named eq 'OperatorVoid_131' ) { # OperatorVoid -> OP01_NAMED_VOID_SCOLON
    100          
    50          
39 1         6 $rperl_source_group->{PMC} .= $operator_void_named->{children}->[0]; # name semicolon
40             }
41             elsif ( ref $operator_void_named eq 'OperatorVoid_132' ) { # OperatorVoid -> OP01_NAMED_VOID_LPAREN OPTIONAL-32 ')' ';'
42             $rperl_source_group->{PMC}
43 2         16 .= $operator_void_named->{children}->[0]; # name lparen
44 2         8 my object $arguments_optional = $operator_void_named->{children}->[1];
45 2 50       12 if ( exists $arguments_optional->{children}->[0] ) {
46 2         8 my object $arguments = $arguments_optional->{children}->[0];
47 2         55 my integer $argument_count = $arguments->length();
48 2 50       14 if ( $argument_count > ARGUMENTS_MAX() ) {
49 0         0 die 'ERROR ECOGEASRP03, CODE GENERATOR, ABSTRACT SYNTAX TO RPERL:' . "\n"
50             . 'Argument count '
51             . $argument_count
52             . ' exceeds maximum argument limit '
53             . ARGUMENTS_MAX()
54             . ' for operator ' . q{'}
55             . NAME() . q{'}
56             . ', dying' . "\n";
57             }
58 2         48 my string_hashref $rperl_source_subgroup = $arguments->ast_to_rperl__generate( $modes, $self );
59 2         44 RPerl::Generator::source_group_append( $rperl_source_group, $rperl_source_subgroup );
60             }
61 2         9 $rperl_source_group->{PMC} .= $operator_void_named->{children}->[2] . $operator_void_named->{children}->[3]; # rparen semicolon
62             }
63             elsif ( ref $operator_void_named eq 'OperatorVoid_133' ) { # OperatorVoid -> OP01_NAMED_VOID ListElements ';'
64             $rperl_source_group->{PMC}
65 19         100 .= $operator_void_named->{children}->[0] . q{ }; # name
66 19         60 my object $arguments = $operator_void_named->{children}->[1];
67 19         460 my integer $argument_count = $arguments->length();
68 19 50       95 if ( $argument_count > ARGUMENTS_MAX() ) {
69 0         0 die 'ERROR ECOGEASRP03, CODE GENERATOR, ABSTRACT SYNTAX TO RPERL:' . "\n"
70             . 'Argument count '
71             . $argument_count
72             . ' exceeds maximum argument limit '
73             . ARGUMENTS_MAX()
74             . ' for operator ' . q{'}
75             . NAME() . q{'}
76             . ', dying' . "\n";
77             }
78 19         446 my string_hashref $rperl_source_subgroup = $arguments->ast_to_rperl__generate( $modes, $self );
79 19         398 RPerl::Generator::source_group_append( $rperl_source_group, $rperl_source_subgroup );
80 19         72 $rperl_source_group->{PMC} .= $operator_void_named->{children}->[2]; # semicolon
81             }
82             else {
83 0         0 die RPerl::Parser::rperl_rule__replace( 'ERROR ECOGEASRP00, CODE GENERATOR, ABSTRACT SYNTAX TO RPERL: Grammar rule '
84             . ( ref $operator_void_named )
85             . ' found where OperatorVoid_131, OperatorVoid_132 or OperatorVoid_133 expected, dying' )
86             . "\n";
87             }
88              
89 22         69 $rperl_source_group->{PMC} .= "\n";
90 22         79 return $rperl_source_group;
91             }
92              
93             sub ast_to_cpp__generate__CPPOPS_PERLTYPES {
94 0     0     { my string_hashref::method $RETURN_TYPE };
  0            
95 0           ( my object $self, my string_hashref $modes) = @ARG;
96 0           my string_hashref $cpp_source_group = { CPP => q{// <<< RP::O::S::OV::N::E __DUMMY_SOURCE_CODE CPPOPS_PERLTYPES >>>} . "\n" };
97              
98             #...
99 0           return $cpp_source_group;
100             }
101              
102             sub ast_to_cpp__generate__CPPOPS_CPPTYPES {
103 0     0     { my string_hashref::method $RETURN_TYPE };
  0            
104 0           ( my object $self, my string_hashref $modes) = @ARG;
105 0           my string_hashref $cpp_source_group = { CPP => q{// <<< RP::O::S::OV::N::E __DUMMY_SOURCE_CODE CPPOPS_CPPTYPES >>>} . "\n" };
106              
107             #...
108 0           return $cpp_source_group;
109             }
110              
111             1; # end of class