our
$VERSION
= 0.006_000;
our
hashref
$properties
= {};
sub
ast_to_rperl__generate {
{
my
string_hashref::method
$RETURN_TYPE
};
(
my
object
$self
,
my
string_hashref
$modes
) =
@ARG
;
my
string_hashref
$rperl_source_group
= {};
my
object
$critic_optional
=
$self
->{children}->[0];
my
string
$use_rperl_optional
=
$self
->{children}->[1];
my
string
$package_keyword
=
$self
->{children}->[2];
my
object
$package_name
=
$self
->{children}->[3]->{children}->[0];
my
string
$package_semicolon
=
$self
->{children}->[4];
my
string
$use_strict
=
$self
->{children}->[5]->{children}->[0];
my
string
$use_warnings
=
$self
->{children}->[5]->{children}->[1];
my
string
$use_rperl_after_optional
=
$self
->{children}->[5]->{children}->[2];
my
string
$our_keyword
=
$self
->{children}->[5]->{children}->[3];
my
string
$version_number
=
$self
->{children}->[5]->{children}->[4];
if
((
substr
$package_name
, 0, 1) eq
'_'
) {
die
'ERROR ECOGEASRP184a, CODE GENERATOR, ABSTRACT SYNTAX TO RPERL:'
.
"\n"
.
'package or class name '
.
q{'}
.
$package_name
.
q{'}
.
' must not start with an underscore, forbidden by C++ specification as a reserved identifier, dying'
.
"\n"
;
}
elsif
(
$package_name
=~ m/__/gxms) {
die
'ERROR ECOGEASRP184c, CODE GENERATOR, ABSTRACT SYNTAX TO RPERL:'
.
"\n"
.
'package or class name '
.
q{'}
.
$package_name
.
q{'}
.
' must not include a double-underscore, forbidden by C++ specification as a reserved identifier, dying'
.
"\n"
;
}
$modes
->{_symbol_table}->{_namespace} =
$package_name
.
'::'
;
$rperl_source_group
->{PMC} =
q{}
;
if
( (
exists
$critic_optional
->{children}->[0] ) and (
defined
$critic_optional
->{children}->[0] ) ) {
my
string_hashref
$rperl_source_subgroup
=
$critic_optional
->{children}->[0]->ast_to_rperl__generate(
$modes
);
RPerl::Generator::source_group_append(
$rperl_source_group
,
$rperl_source_subgroup
);
}
if
(
$modes
->{label} eq
'ON'
) {
$rperl_source_group
->{PMC} .=
'# [[[ HEADER ]]]'
.
"\n"
;
}
if
( (
exists
$use_rperl_optional
->{children}->[0] ) and (
defined
$use_rperl_optional
->{children}->[0] ) ) {
$rperl_source_group
->{PMC} .=
$use_rperl_optional
->{children}->[0]->{attr} .
"\n"
;
}
$rperl_source_group
->{PMC} .=
$package_keyword
.
' '
.
$package_name
.
$package_semicolon
.
"\n"
;
$rperl_source_group
->{PMC} .=
$use_strict
.
"\n"
;
$rperl_source_group
->{PMC} .=
$use_warnings
.
"\n"
;
if
( (
exists
$use_rperl_after_optional
->{children}->[0] ) and (
defined
$use_rperl_after_optional
->{children}->[0] ) ) {
chomp
$use_rperl_after_optional
->{children}->[0]->{attr};
$rperl_source_group
->{PMC} .=
$use_rperl_after_optional
->{children}->[0]->{attr} .
"\n"
;
}
$rperl_source_group
->{PMC} .=
$our_keyword
.
' $VERSION = '
.
$version_number
.
q{;}
.
"\n"
;
my
string
$package_name_underscores
=
$package_name
;
$package_name_underscores
=~ s/::/__/gxms;
$rperl_source_group
->{_package_name} =
$package_name
;
$rperl_source_group
->{_package_name_underscores} =
$package_name_underscores
;
return
$rperl_source_group
;
}
sub
ast_to_cpp__generate__CPPOPS_PERLTYPES {
{
my
string_hashref::method
$RETURN_TYPE
};
(
my
object
$self
,
my
string_hashref
$modes
) =
@ARG
;
my
string_hashref
$cpp_source_group
= {
CPP
=>
q{// <<< RP::CU::M::H __DUMMY_SOURCE_CODE CPPOPS_PERLTYPES >>>}
.
"\n"
};
return
$cpp_source_group
;
}
sub
ast_to_cpp__generate_begin__CPPOPS_CPPTYPES {
{
my
string_hashref::method
$RETURN_TYPE
};
(
my
object
$self
,
my
string_hashref
$modes
) =
@ARG
;
my
string_hashref
$cpp_source_group
= {};
my
object
$package_name
=
$self
->{children}->[3]->{children}->[0];
my
string
$version_number
=
$self
->{children}->[5]->{children}->[4];
if
((
substr
$package_name
, 0, 1) eq
'_'
) {
die
'ERROR ECOGEASCP184a, CODE GENERATOR, ABSTRACT SYNTAX TO C++:'
.
"\n"
.
'package or class name '
.
q{'}
.
$package_name
.
q{'}
.
' must not start with an underscore, forbidden by C++ specification as a reserved identifier, dying'
.
"\n"
;
}
elsif
(
$package_name
=~ m/__/gxms) {
die
'ERROR ECOGEASCP184c, CODE GENERATOR, ABSTRACT SYNTAX TO C++:'
.
"\n"
.
'package or class name '
.
q{'}
.
$package_name
.
q{'}
.
' must not include a double-underscore, forbidden by C++ specification as a reserved identifier, dying'
.
"\n"
;
}
$modes
->{_symbol_table}->{_namespace} =
$package_name
.
'::'
;
$cpp_source_group
->{H} =
q{}
;
$cpp_source_group
->{CPP} =
q{}
;
if
(
$modes
->{label} eq
'ON'
) {
$cpp_source_group
->{H} .=
'// [[[ HEADER ]]]'
.
"\n"
;
$cpp_source_group
->{CPP} .=
'// [[[ HEADER ]]]'
.
"\n"
;
}
if
((
$modes
->{subcompile} ne
'OFF'
) and (
$modes
->{subcompile} ne
'DYNAMIC'
)) {
$cpp_source_group
->{CPP} .=
'#include <rperlstandalone.h>'
.
"\n"
;
}
$cpp_source_group
->{H} .=
'using std::cout; using std::cerr; using std::endl;'
.
"\n\n"
;
$cpp_source_group
->{CPP} .=
'using std::cout; using std::cerr; using std::endl;'
.
"\n\n"
;
my
string
$package_name_underscores
=
$package_name
;
$package_name_underscores
=~ s/::/__/gxms;
$cpp_source_group
->{H} .=
'#ifndef __CPP__INCLUDED__'
.
$package_name_underscores
.
'_h'
.
"\n"
;
$cpp_source_group
->{H} .=
'#define __CPP__INCLUDED__'
.
$package_name_underscores
.
'_h '
.
$version_number
.
"\n\n"
;
$cpp_source_group
->{CPP} .=
'#ifndef __CPP__INCLUDED__'
.
$package_name_underscores
.
'_cpp'
.
"\n"
;
$cpp_source_group
->{CPP} .=
'#define __CPP__INCLUDED__'
.
$package_name_underscores
.
'_cpp '
.
$version_number
.
"\n\n"
;
$cpp_source_group
->{_package_name} =
$package_name
;
$cpp_source_group
->{_package_name_underscores} =
$package_name_underscores
;
if
((not
exists
$cpp_source_group
->{_package_names}) or (not
defined
$cpp_source_group
->{_package_names})) {
$cpp_source_group
->{_package_names} =
q{}
;
}
$cpp_source_group
->{_package_names} .=
$package_name
.
"\n"
;
if
((not
exists
$cpp_source_group
->{_package_names_underscores}) or (not
defined
$cpp_source_group
->{_package_names_underscores})) {
$cpp_source_group
->{_package_names_underscores} =
q{}
;
}
$cpp_source_group
->{_package_names_underscores} .=
$package_name_underscores
.
"\n"
;
return
$cpp_source_group
;
}
sub
ast_to_cpp__generate_end__CPPOPS_CPPTYPES {
{
my
string_hashref::method
$RETURN_TYPE
};
(
my
object
$self
,
my
string_hashref
$modes
) =
@ARG
;
my
string_hashref
$cpp_source_group
= {};
$cpp_source_group
->{H} =
'#endif'
.
"\n"
;
$cpp_source_group
->{CPP} =
'#endif'
.
"\n"
;
return
$cpp_source_group
;
}
1;