File Coverage

blib/lib/RPerl/Operation/Statement/OperatorVoid/Named/Exit.pm
Criterion Covered Total %
statement 24 24 100.0
branch n/a
condition n/a
subroutine 8 8 100.0
pod n/a
total 32 32 100.0


line stmt bran cond sub pod time code
1             # [[[ HEADER ]]]
2             package RPerl::Operation::Statement::OperatorVoid::Named::Exit;
3 5     5   33 use strict;
  5         14  
  5         136  
4 5     5   28 use warnings;
  5         14  
  5         117  
5 5     5   26 use RPerl::AfterSubclass;
  5         12  
  5         680  
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 5     5   35 use parent qw(RPerl::Operation::Statement::OperatorVoid::Named);
  5         11  
  5         33  
11 5     5   312 use RPerl::Operation::Statement::OperatorVoid::Named;
  5         12  
  5         148  
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 5     5   26 use constant NAME => my string $TYPED_NAME = 'exit';
  5         13  
  5         295  
20              
21             # DEV NOTE: ARGUMENTS_MIN of 0 can be ignored, no such thing as negative number of args!
22 5     5   30 use constant ARGUMENTS_MIN => my integer $TYPED_ARGUMENTS_MIN = 0;
  5         13  
  5         234  
23 5     5   28 use constant ARGUMENTS_MAX => my integer $TYPED_ARGUMENTS_MAX = 1;
  5         14  
  5         2308  
24              
25             # [[[ OO PROPERTIES ]]]
26             our hashref $properties = {};
27              
28             # [[[ SUBROUTINES & OO METHODS ]]]
29              
30             our string_hashref::method $ast_to_rperl__generate = sub {
31             ( my object $self, my string_hashref $modes, my object $operator_void_named) = @_;
32             my string_hashref $rperl_source_group = { PMC => q{} };
33              
34             # RPerl::diag( 'in OperatorVoid::Named::Exit->ast_to_rperl__generate(), received $self = ' . "\n" . RPerl::Parser::rperl_ast__dump($self) . "\n" );
35             # RPerl::diag( 'in OperatorVoid::Named::Exit->ast_to_rperl__generate(), received $operator_void_named = ' . "\n" . RPerl::Parser::rperl_ast__dump($operator_void_named) . "\n" );
36              
37             if ( ref $operator_void_named eq 'OperatorVoid_119' ) { # OperatorVoid -> OP01_NAMED_VOID_SCOLON
38             $rperl_source_group->{PMC} .= $operator_void_named->{children}->[0]; # name semicolon
39             }
40             elsif ( ref $operator_void_named eq 'OperatorVoid_120' ) { # OperatorVoid -> OP01_NAMED_VOID_LPAREN OPTIONAL-32 ')' ';'
41             $rperl_source_group->{PMC}
42             .= $operator_void_named->{children}->[0]; # name lparen
43             my object $arguments_optional = $operator_void_named->{children}->[1];
44             if ( exists $arguments_optional->{children}->[0] ) {
45             my object $arguments = $arguments_optional->{children}->[0];
46             my integer $argument_count = $arguments->length();
47             if ( $argument_count > ARGUMENTS_MAX() ) {
48             die 'ERROR ECOGEASRP03, CODE GENERATOR, ABSTRACT SYNTAX TO RPERL:' . "\n"
49             . 'Argument count '
50             . $argument_count
51             . ' exceeds maximum argument limit '
52             . ARGUMENTS_MAX()
53             . ' for operator ' . q{'}
54             . NAME() . q{'}
55             . ', dying' . "\n";
56             }
57             my string_hashref $rperl_source_subgroup = $arguments->ast_to_rperl__generate( $modes, $self );
58             RPerl::Generator::source_group_append( $rperl_source_group, $rperl_source_subgroup );
59             }
60             $rperl_source_group->{PMC} .= $operator_void_named->{children}->[2] . $operator_void_named->{children}->[3]; # rparen semicolon
61             }
62             elsif ( ref $operator_void_named eq 'OperatorVoid_121' ) { # OperatorVoid -> OP01_NAMED_VOID ListElements ';'
63             $rperl_source_group->{PMC}
64             .= $operator_void_named->{children}->[0] . q{ }; # name
65             my object $arguments = $operator_void_named->{children}->[1];
66             my integer $argument_count = $arguments->length();
67             if ( $argument_count > ARGUMENTS_MAX() ) {
68             die 'ERROR ECOGEASRP03, CODE GENERATOR, ABSTRACT SYNTAX TO RPERL:' . "\n"
69             . 'Argument count '
70             . $argument_count
71             . ' exceeds maximum argument limit '
72             . ARGUMENTS_MAX()
73             . ' for operator ' . q{'}
74             . NAME() . q{'}
75             . ', dying' . "\n";
76             }
77             my string_hashref $rperl_source_subgroup = $arguments->ast_to_rperl__generate( $modes, $self );
78             RPerl::Generator::source_group_append( $rperl_source_group, $rperl_source_subgroup );
79             $rperl_source_group->{PMC} .= $operator_void_named->{children}->[2]; # semicolon
80             }
81             else {
82             die RPerl::Parser::rperl_rule__replace( 'ERROR ECOGEASRP00, CODE GENERATOR, ABSTRACT SYNTAX TO RPERL: Grammar rule '
83             . ( ref $operator_void_named )
84             . ' found where OperatorVoid_119 or OperatorVoid_121 expected, dying' )
85             . "\n";
86             }
87              
88             $rperl_source_group->{PMC} .= "\n";
89             return $rperl_source_group;
90             };
91              
92             our string_hashref::method $ast_to_cpp__generate__CPPOPS_PERLTYPES = sub {
93             ( my object $self, my string_hashref $modes) = @_;
94             my string_hashref $cpp_source_group = { CPP => q{// <<< RP::O::S::OV::N::E __DUMMY_SOURCE_CODE CPPOPS_PERLTYPES >>>} . "\n" };
95              
96             #...
97             return $cpp_source_group;
98             };
99              
100             our string_hashref::method $ast_to_cpp__generate__CPPOPS_CPPTYPES = sub {
101             ( my object $self, my string_hashref $modes) = @_;
102             my string_hashref $cpp_source_group = { CPP => q{// <<< RP::O::S::OV::N::E __DUMMY_SOURCE_CODE CPPOPS_CPPTYPES >>>} . "\n" };
103              
104             #...
105             return $cpp_source_group;
106             };
107              
108             1; # end of class