our
$VERSION
= 0.008_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
= {
PMC
=>
q{}
};
my
string_hashref
$rperl_source_subgroup
;
my
string
$self_class
=
ref
$self
;
if
(
$self_class
eq
'Loop_185'
) {
$self
=
$self
->{children}->[0];
$self_class
=
ref
$self
;
}
if
(
$self_class
eq
'LoopFor_188'
) {
my
string
$for
=
$self
->{children}->[0];
my
string
$my
=
$self
->{children}->[1];
my
string
$type_integer
=
$self
->{children}->[2];
my
string
$variable_symbol
=
$self
->{children}->[3];
my
string
$left_paren
=
$self
->{children}->[4];
my
object
$subexpression0
=
$self
->{children}->[5];
my
string
$list_range
=
$self
->{children}->[6];
my
object
$subexpression1
=
$self
->{children}->[7];
my
string
$right_paren
=
$self
->{children}->[8];
my
object
$codeblock
=
$self
->{children}->[9];
if
((
exists
$modes
->{_symbol_table}->{
$modes
->{_symbol_table}->{_namespace} }->{
$modes
->{_symbol_table}->{_subroutine} }->{
$variable_symbol
} )
and (
$modes
->{_symbol_table}->{
$modes
->{_symbol_table}->{_namespace} }->{
$modes
->{_symbol_table}->{_subroutine} }->{
$variable_symbol
}->{isa} ne
'RPerl::Operation::Expression::SubExpression::Variable::LoopIterator'
)
)
{
die
'ERROR ECOGEASRP012, CODE GENERATOR, ABSTRACT SYNTAX TO RPERL: variable '
.
q{'}
.
$variable_symbol
.
q{'}
.
' already declared in this scope, namespace '
.
q{'}
.
$modes
->{_symbol_table}->{_namespace} .
q{'}
.
', subroutine/method '
.
q{'}
.
$modes
->{_symbol_table}->{_subroutine} .
q{()'}
.
', dying'
.
"\n"
;
}
$modes
->{_symbol_table}->{
$modes
->{_symbol_table}->{_namespace} }->{
$modes
->{_symbol_table}->{_subroutine} }->{
$variable_symbol
}
= {
isa
=>
'RPerl::Operation::Expression::SubExpression::Variable::LoopIterator'
,
type
=>
$type_integer
};
$rperl_source_group
->{PMC} .=
$for
.
q{ }
.
$my
.
q{ }
.
$type_integer
.
q{ }
.
$variable_symbol
.
q{ }
.
$left_paren
.
q{ }
;
$rperl_source_subgroup
=
$subexpression0
->ast_to_rperl__generate(
$modes
);
RPerl::Generator::source_group_append(
$rperl_source_group
,
$rperl_source_subgroup
);
$rperl_source_group
->{PMC} .=
q{ }
.
$list_range
.
q{ }
;
$rperl_source_subgroup
=
$subexpression1
->ast_to_rperl__generate(
$modes
);
RPerl::Generator::source_group_append(
$rperl_source_group
,
$rperl_source_subgroup
);
$rperl_source_group
->{PMC} .=
q{ }
.
$right_paren
.
q{ }
;
$rperl_source_subgroup
=
$codeblock
->ast_to_rperl__generate(
$modes
);
RPerl::Generator::source_group_append(
$rperl_source_group
,
$rperl_source_subgroup
);
}
elsif
(
$self_class
eq
'LoopFor_189'
) {
my
string
$for
=
$self
->{children}->[0];
my
string
$left_paren_my
=
$self
->{children}->[1];
my
string
$type_integer
=
$self
->{children}->[2];
my
string
$variable_symbol0
=
$self
->{children}->[3];
my
string
$assign
=
$self
->{children}->[4];
my
object
$opnamed_or_subexp_scolon0
=
$self
->{children}->[5];
my
string
$variable_symbol1
=
$self
->{children}->[6];
my
string
$compare
=
$self
->{children}->[7];
my
object
$opnamed_or_subexp_scolon1
=
$self
->{children}->[8];
my
object
$subexpression_or_varmod
=
$self
->{children}->[9];
my
string
$right_paren
=
$self
->{children}->[10];
my
object
$codeblock
=
$self
->{children}->[11];
if
(
$variable_symbol0
ne
$variable_symbol1
) {
die
'ERROR ECOGEASRP006, CODE GENERATOR, ABSTRACT SYNTAX TO RPERL, VARIABLE-CHECKING MISMATCH: C-style for() loop header, initial-condition variable '
.
q{'}
.
$variable_symbol0
.
q{'}
.
' is different than exit-condition variable '
.
q{'}
.
$variable_symbol1
.
q{'}
.
', dying'
.
"\n"
;
}
if
((
exists
$modes
->{_symbol_table}->{
$modes
->{_symbol_table}->{_namespace} }->{
$modes
->{_symbol_table}->{_subroutine} }->{
$variable_symbol0
} )
and (
$modes
->{_symbol_table}->{
$modes
->{_symbol_table}->{_namespace} }->{
$modes
->{_symbol_table}->{_subroutine} }->{
$variable_symbol0
}->{isa} ne
'RPerl::Operation::Expression::SubExpression::Variable::LoopIterator'
)
)
{
die
'ERROR ECOGEASRP012, CODE GENERATOR, ABSTRACT SYNTAX TO RPERL: variable '
.
q{'}
.
$variable_symbol0
.
q{'}
.
' already declared in this scope, namespace '
.
q{'}
.
$modes
->{_symbol_table}->{_namespace} .
q{'}
.
', subroutine/method '
.
q{'}
.
$modes
->{_symbol_table}->{_subroutine} .
q{()'}
.
', dying'
.
"\n"
;
}
$modes
->{_symbol_table}->{
$modes
->{_symbol_table}->{_namespace} }->{
$modes
->{_symbol_table}->{_subroutine} }->{
$variable_symbol0
}
= {
isa
=>
'RPerl::Operation::Expression::SubExpression::Variable::LoopIterator'
,
type
=>
$type_integer
};
$rperl_source_group
->{PMC} .=
$for
.
q{ }
.
$left_paren_my
.
q{ }
.
$type_integer
.
q{ }
.
$variable_symbol0
.
q{ }
.
$assign
.
q{ }
;
my
string
$opnamed_or_subexp_scolon0_type
=
ref
$opnamed_or_subexp_scolon0
;
if
( (
$opnamed_or_subexp_scolon0_type
eq
'OpNamedScolonOrSubExp_257'
)
or (
$opnamed_or_subexp_scolon0_type
eq
'OpNamedScolonOrSubExp_258'
) )
{
$rperl_source_group
->{PMC} .=
$opnamed_or_subexp_scolon0
->{children}->[0];
}
elsif
(
$opnamed_or_subexp_scolon0_type
eq
'OpNamedScolonOrSubExp_259'
) {
$rperl_source_subgroup
=
$opnamed_or_subexp_scolon0
->{children}->[0]->ast_to_rperl__generate(
$modes
);
RPerl::Generator::source_group_append(
$rperl_source_group
,
$rperl_source_subgroup
);
$rperl_source_group
->{PMC} .=
$opnamed_or_subexp_scolon0
->{children}->[1];
}
else
{
die
RPerl::Parser::rperl_rule__replace(
'ERROR ECOGEASRP000, CODE GENERATOR, ABSTRACT SYNTAX TO RPERL: Grammar rule '
.
$opnamed_or_subexp_scolon0_type
.
' found where OpNamedScolonOrSubExp_257, OpNamedScolonOrSubExp_258, or OpNamedScolonOrSubExp_259 expected, dying'
)
.
"\n"
;
}
$rperl_source_group
->{PMC} .=
q{ }
.
$variable_symbol1
.
q{ }
.
$compare
.
q{ }
;
my
string
$opnamed_or_subexp_scolon1_type
=
ref
$opnamed_or_subexp_scolon1
;
if
( (
$opnamed_or_subexp_scolon1_type
eq
'OpNamedScolonOrSubExp_257'
)
or (
$opnamed_or_subexp_scolon1_type
eq
'OpNamedScolonOrSubExp_258'
) )
{
$rperl_source_group
->{PMC} .=
$opnamed_or_subexp_scolon1
->{children}->[0];
}
elsif
(
$opnamed_or_subexp_scolon1_type
eq
'OpNamedScolonOrSubExp_259'
) {
$rperl_source_subgroup
=
$opnamed_or_subexp_scolon1
->{children}->[0]->ast_to_rperl__generate(
$modes
);
RPerl::Generator::source_group_append(
$rperl_source_group
,
$rperl_source_subgroup
);
$rperl_source_group
->{PMC} .=
$opnamed_or_subexp_scolon1
->{children}->[1];
}
else
{
die
RPerl::Parser::rperl_rule__replace(
'ERROR ECOGEASRP000, CODE GENERATOR, ABSTRACT SYNTAX TO RPERL: Grammar rule '
.
$opnamed_or_subexp_scolon1_type
.
' found where OpNamedScolonOrSubExp_257, OpNamedScolonOrSubExp_258, or OpNamedScolonOrSubExp_259 expected, dying'
)
.
"\n"
;
}
$rperl_source_group
->{PMC} .=
q{ }
;
$rperl_source_subgroup
=
$subexpression_or_varmod
->ast_to_rperl__generate(
$modes
);
RPerl::Generator::source_group_append(
$rperl_source_group
,
$rperl_source_subgroup
);
$rperl_source_group
->{PMC} .=
q{ }
.
$right_paren
.
q{ }
;
$rperl_source_subgroup
=
$codeblock
->ast_to_rperl__generate(
$modes
);
RPerl::Generator::source_group_append(
$rperl_source_group
,
$rperl_source_subgroup
);
}
else
{
die
RPerl::Parser::rperl_rule__replace(
'ERROR ECOGEASRP000, CODE GENERATOR, ABSTRACT SYNTAX TO RPERL: Grammar rule '
.
$self_class
.
' found where Loop_185, LoopFor_188, or LoopFor_189 expected, dying'
)
.
"\n"
;
}
return
$rperl_source_group
;
}
sub
ast_to_cpp__generate__CPPOPS_PERLTYPES {
{
my
string_hashref::method
$RETURN_TYPE
};
(
my
object
$self
,
my
string
$loop_label
,
my
string_hashref
$modes
) =
@ARG
;
my
string_hashref
$cpp_source_group
= {
CPP
=>
q{// <<< RP::O::S::L::F __DUMMY_SOURCE_CODE CPPOPS_PERLTYPES >>>}
.
"\n"
};
return
$cpp_source_group
;
}
sub
ast_to_cpp__generate__CPPOPS_CPPTYPES {
{
my
string_hashref::method
$RETURN_TYPE
};
(
my
object
$self
,
my
string
$loop_label
,
my
string_hashref
$modes
) =
@ARG
;
my
string_hashref
$cpp_source_group
= {
CPP
=>
q{}
};
my
string_hashref
$cpp_source_subgroup
;
my
string
$self_class
=
ref
$self
;
if
((not
exists
$modes
->{_inside_parallel_loop}) and (not
defined
$modes
->{_inside_parallel_loop})) {
$modes
->{_inside_parallel_loop} = 0;
}
if
((not
exists
$modes
->{_current_parallel_loop}) and (not
defined
$modes
->{_current_parallel_loop})) {
$modes
->{_current_parallel_loop} = [];
}
if
((
defined
$loop_label
) and (
$loop_label
=~ m/PARALLEL/gmxs)) {
if
(
$modes
->{_inside_parallel_loop}) {
die
'ERROR Exxxxx, COMPILER, PARALLELIZATION: Can not declare nested PARALLEL loops, dying'
;
}
$modes
->{_inside_parallel_loop} = 1;
push
@{
$modes
->{_current_parallel_loop}}, 1;
}
else
{
push
@{
$modes
->{_current_parallel_loop}}, 0;
}
if
(
$self_class
eq
'Loop_185'
) {
$self
=
$self
->{children}->[0];
$self_class
=
ref
$self
;
}
if
(
$self_class
eq
'LoopFor_188'
) {
my
string
$for
=
$self
->{children}->[0];
my
string
$type_integer
=
$self
->{children}->[2];
my
string
$variable_symbol
=
$self
->{children}->[3];
my
string
$left_paren
=
$self
->{children}->[4];
my
object
$subexpression0
=
$self
->{children}->[5];
my
object
$subexpression1
=
$self
->{children}->[7];
my
string
$right_paren
=
$self
->{children}->[8];
my
object
$codeblock
=
$self
->{children}->[9];
substr
$variable_symbol
, 0, 1,
q{}
;
if
((
exists
$modes
->{_symbol_table}->{
$modes
->{_symbol_table}->{_namespace} }->{
$modes
->{_symbol_table}->{_subroutine} }->{
$variable_symbol
} )
and (
$modes
->{_symbol_table}->{
$modes
->{_symbol_table}->{_namespace} }->{
$modes
->{_symbol_table}->{_subroutine} }->{
$variable_symbol
}->{isa} ne
'RPerl::Operation::Expression::SubExpression::Variable::LoopIterator'
)
)
{
die
'ERROR ECOGEASCP012, CODE GENERATOR, ABSTRACT SYNTAX TO C++: variable '
.
q{'}
.
$variable_symbol
.
q{'}
.
' already declared in this scope, namespace '
.
q{'}
.
$modes
->{_symbol_table}->{_namespace} .
q{'}
.
', subroutine/method '
.
q{'}
.
$modes
->{_symbol_table}->{_subroutine} .
q{()'}
.
', dying'
.
"\n"
;
}
$modes
->{_symbol_table}->{
$modes
->{_symbol_table}->{_namespace} }->{
$modes
->{_symbol_table}->{_subroutine} }->{
$variable_symbol
}
= {
isa
=>
'RPerl::Operation::Expression::SubExpression::Variable::LoopIterator'
,
type
=>
$type_integer
};
if
( ( not
exists
$modes
->{_loop_iterators} ) or ( not
defined
$modes
->{_loop_iterators} ) ) {
$modes
->{_loop_iterators} = {
$variable_symbol
=>
$type_integer
};
}
else
{
if
( (
exists
$modes
->{_loop_iterators}->{
$variable_symbol
} ) and (
$modes
->{_loop_iterators}->{
$variable_symbol
} ne
$type_integer
) ) {
die
'ERROR ECOGEASCP040, CODE GENERATOR, ABSTRACT SYNTAX TO C++: Compile-time optimization, loop iterator '
.
$variable_symbol
.
' declared as non-integer type '
.
$modes
->{_loop_iterators}->{
$variable_symbol
}
.
', dying'
.
"\n"
;
}
$modes
->{_loop_iterators}->{
$variable_symbol
} =
$type_integer
;
}
if
(
$modes
->{_current_parallel_loop}->[-1]) {
if
(
$modes
->{parallel} eq
'OPENMP'
) {
$cpp_source_group
->{CPP} .=
'#pragma scop'
.
"\n"
;
}
}
$cpp_source_group
->{CPP} .=
$for
.
q{ }
.
$left_paren
.
q{ }
.
$variable_symbol
.
q{ = }
;
$cpp_source_subgroup
=
$subexpression0
->ast_to_cpp__generate__CPPOPS_CPPTYPES(
$modes
);
RPerl::Generator::source_group_append(
$cpp_source_group
,
$cpp_source_subgroup
);
my
string
$subexpression1_address
=
"$subexpression1"
;
my
object
$subexpression1_modified
= RPerl::Generator::arrayref_convert_index_max_to_size(
$subexpression1
);
if
(
$subexpression1_address
ne
"$subexpression1_modified"
) {
$cpp_source_group
->{CPP} .=
q{; }
.
$variable_symbol
.
' < '
;
$cpp_source_subgroup
=
$subexpression1_modified
->ast_to_cpp__generate__CPPOPS_CPPTYPES(
$modes
);
RPerl::Generator::source_group_append(
$cpp_source_group
,
$cpp_source_subgroup
);
}
else
{
$cpp_source_group
->{CPP} .=
q{; }
.
$variable_symbol
.
' <= '
;
$cpp_source_subgroup
=
$subexpression1
->ast_to_cpp__generate__CPPOPS_CPPTYPES(
$modes
);
RPerl::Generator::source_group_append(
$cpp_source_group
,
$cpp_source_subgroup
);
}
$cpp_source_group
->{CPP} .=
q{; }
.
$variable_symbol
.
'++ '
.
$right_paren
.
q{ }
;
$cpp_source_subgroup
=
$codeblock
->ast_to_cpp__generate__CPPOPS_CPPTYPES(
$loop_label
,
$modes
);
RPerl::Generator::source_group_append(
$cpp_source_group
,
$cpp_source_subgroup
);
if
(
$modes
->{_current_parallel_loop}->[-1]) {
if
(
$modes
->{parallel} eq
'OPENMP'
) {
$cpp_source_group
->{CPP} .=
'#pragma endscop'
.
"\n"
;
}
$modes
->{_inside_parallel_loop} = 0;
}
pop
@{
$modes
->{_current_parallel_loop}};
}
elsif
(
$self_class
eq
'LoopFor_189'
) {
my
string
$for
=
$self
->{children}->[0];
my
string
$type_integer
=
$self
->{children}->[2];
my
string
$variable_symbol0
=
$self
->{children}->[3];
my
string
$assign
=
$self
->{children}->[4];
my
object
$opnamed_or_subexp_scolon0
=
$self
->{children}->[5];
my
string
$variable_symbol1
=
$self
->{children}->[6];
my
string
$compare
=
$self
->{children}->[7];
my
object
$opnamed_or_subexp_scolon1
=
$self
->{children}->[8];
my
object
$subexpression_or_varmod
=
$self
->{children}->[9];
my
string
$right_paren
=
$self
->{children}->[10];
my
object
$codeblock
=
$self
->{children}->[11];
if
(
$variable_symbol0
ne
$variable_symbol1
) {
die
'ERROR ECOGEASCP006, CODE GENERATOR, ABSTRACT SYNTAX TO C++, VARIABLE-CHECKING MISMATCH: C-style for() loop header, initial-condition variable '
.
q{'}
.
$variable_symbol0
.
q{'}
.
' is different than exit-condition variable '
.
q{'}
.
$variable_symbol1
.
q{'}
.
' , dying'
.
"\n"
;
}
substr
$variable_symbol0
, 0, 1,
q{}
;
substr
$variable_symbol1
, 0, 1,
q{}
;
if
((
exists
$modes
->{_symbol_table}->{
$modes
->{_symbol_table}->{_namespace} }->{
$modes
->{_symbol_table}->{_subroutine} }->{
$variable_symbol0
} )
and (
$modes
->{_symbol_table}->{
$modes
->{_symbol_table}->{_namespace} }->{
$modes
->{_symbol_table}->{_subroutine} }->{
$variable_symbol0
}->{isa} ne
'RPerl::Operation::Expression::SubExpression::Variable::LoopIterator'
)
)
{
die
'ERROR ECOGEASCP012, CODE GENERATOR, ABSTRACT SYNTAX TO C++: variable '
.
q{'}
.
$variable_symbol0
.
q{'}
.
' already declared in this scope, namespace '
.
q{'}
.
$modes
->{_symbol_table}->{_namespace} .
q{'}
.
', subroutine/method '
.
q{'}
.
$modes
->{_symbol_table}->{_subroutine} .
q{()'}
.
', dying'
.
"\n"
;
}
$modes
->{_symbol_table}->{
$modes
->{_symbol_table}->{_namespace} }->{
$modes
->{_symbol_table}->{_subroutine} }->{
$variable_symbol0
}
= {
isa
=>
'RPerl::Operation::Expression::SubExpression::Variable::LoopIterator'
,
type
=>
$type_integer
};
if
( ( not
exists
$modes
->{_loop_iterators} ) or ( not
defined
$modes
->{_loop_iterators} ) ) {
$modes
->{_loop_iterators} = {
$variable_symbol0
=>
$type_integer
};
}
else
{
if
( (
exists
$modes
->{_loop_iterators}->{
$variable_symbol0
} ) and (
$modes
->{_loop_iterators}->{
$variable_symbol0
} ne
$type_integer
) ) {
die
'ERROR ECOGEASCP0xa, CODE GENERATOR, ABSTRACT SYNTAX TO C++: Compile-time optimization, loop iterator '
.
$variable_symbol0
.
' declared as non-integer type '
.
$modes
->{_loop_iterators}->{
$variable_symbol0
}
.
', dying'
.
"\n"
;
}
$modes
->{_loop_iterators}->{
$variable_symbol0
} =
$type_integer
;
}
if
(
$modes
->{_current_parallel_loop}->[-1]) {
if
(
$modes
->{parallel} eq
'OPENMP'
) {
$cpp_source_group
->{CPP} .=
'#pragma scop'
.
"\n"
;
}
}
$cpp_source_group
->{CPP} .=
$for
.
q{ ( }
.
$variable_symbol0
.
q{ }
.
$assign
.
q{ }
;
my
string
$opnamed_or_subexp_scolon0_type
=
ref
$opnamed_or_subexp_scolon0
;
if
( (
$opnamed_or_subexp_scolon0_type
eq
'OpNamedScolonOrSubExp_257'
)
or (
$opnamed_or_subexp_scolon0_type
eq
'OpNamedScolonOrSubExp_258'
) )
{
$cpp_source_group
->{CPP} .=
$opnamed_or_subexp_scolon0
->{children}->[0];
}
elsif
(
$opnamed_or_subexp_scolon0_type
eq
'OpNamedScolonOrSubExp_259'
) {
$cpp_source_subgroup
=
$opnamed_or_subexp_scolon0
->{children}->[0]->ast_to_cpp__generate__CPPOPS_CPPTYPES(
$modes
);
RPerl::Generator::source_group_append(
$cpp_source_group
,
$cpp_source_subgroup
);
$cpp_source_group
->{CPP} .=
$opnamed_or_subexp_scolon0
->{children}->[1];
}
else
{
die
RPerl::Parser::rperl_rule__replace(
'ERROR ECOGEASRP000, CODE GENERATOR, ABSTRACT SYNTAX TO RPERL: Grammar rule '
.
$opnamed_or_subexp_scolon0_type
.
' found where OpNamedScolonOrSubExp_257, OpNamedScolonOrSubExp_258, or OpNamedScolonOrSubExp_259 expected, dying'
)
.
"\n"
;
}
$cpp_source_group
->{CPP} .=
q{ }
.
$variable_symbol1
.
q{ }
.
$compare
.
q{ }
;
my
string
$opnamed_or_subexp_scolon1_type
=
ref
$opnamed_or_subexp_scolon1
;
if
( (
$opnamed_or_subexp_scolon1_type
eq
'OpNamedScolonOrSubExp_257'
)
or (
$opnamed_or_subexp_scolon1_type
eq
'OpNamedScolonOrSubExp_258'
) )
{
$cpp_source_group
->{CPP} .=
$opnamed_or_subexp_scolon1
->{children}->[0];
}
elsif
(
$opnamed_or_subexp_scolon1_type
eq
'OpNamedScolonOrSubExp_259'
) {
$cpp_source_subgroup
=
$opnamed_or_subexp_scolon1
->{children}->[0]->ast_to_cpp__generate__CPPOPS_CPPTYPES(
$modes
);
RPerl::Generator::source_group_append(
$cpp_source_group
,
$cpp_source_subgroup
);
$cpp_source_group
->{CPP} .=
$opnamed_or_subexp_scolon1
->{children}->[1];
}
else
{
die
RPerl::Parser::rperl_rule__replace(
'ERROR ECOGEASRP000, CODE GENERATOR, ABSTRACT SYNTAX TO RPERL: Grammar rule '
.
$opnamed_or_subexp_scolon1_type
.
' found where OpNamedScolonOrSubExp_257, OpNamedScolonOrSubExp_258, or OpNamedScolonOrSubExp_259 expected, dying'
)
.
"\n"
;
}
$cpp_source_group
->{CPP} .=
q{ }
;
$cpp_source_subgroup
=
$subexpression_or_varmod
->ast_to_cpp__generate__CPPOPS_CPPTYPES(
$modes
);
RPerl::Generator::source_group_append(
$cpp_source_group
,
$cpp_source_subgroup
);
$cpp_source_group
->{CPP} .=
q{ }
.
$right_paren
.
q{ }
;
$cpp_source_subgroup
=
$codeblock
->ast_to_cpp__generate__CPPOPS_CPPTYPES(
$loop_label
,
$modes
);
RPerl::Generator::source_group_append(
$cpp_source_group
,
$cpp_source_subgroup
);
if
(
$modes
->{_current_parallel_loop}->[-1]) {
if
(
$modes
->{parallel} eq
'OPENMP'
) {
$cpp_source_group
->{CPP} .=
'#pragma endscop'
.
"\n"
;
}
$modes
->{_inside_parallel_loop} = 0;
}
pop
@{
$modes
->{_current_parallel_loop}};
}
else
{
die
RPerl::Parser::rperl_rule__replace(
'ERROR ECOGEASCP000, CODE GENERATOR, ABSTRACT SYNTAX TO C++: Grammar rule '
.
$self_class
.
' found where Loop_185, LoopFor_188, or LoopFor_189 expected, dying'
)
.
"\n"
;
}
return
$cpp_source_group
;
}
1;