/*
ANSI C code generated by SmallEiffel The GNU Eiffel Compiler
Release -0.76 (Saturday 11th november 2000)
Copyright (C), 1994-2000 - LORIA - UHP - CRIN - INRIA - FRANCE
Dominique COLNET and Suzanne COLLIN - colnet@loria.fr
http://SmallEiffel.loria.fr
*/
#ifdef __cplusplus
}
#endif
#include "compile_to_c.h"
#ifdef __cplusplus
extern "C" {
#endif


T6 r301can_hide(T301* C,T0* a1,T0* a2){
T6 R=0;
/*[IF*/
if(((/*RF2*/(C)->_result_type/*20*/))!=((void*)(X99result_type(a1)))){
/*[IF*/
if((((/*RF2*/(C)->_result_type/*20*/))==((void*)(NULL)))||((X99result_type(a1))==((void*)(NULL)))){
{T104 se_tmp0;
r82add_position((*(se_tmp0=X99start_position(a1),&se_tmp0)));
}
{T104 se_tmp0;
r301error((*(se_tmp0=r301start_position(C),&se_tmp0)),((T0*)ms99_1393094289));
}
}
/*FI]*/
}
/*FI]*/
/*[IF*/
if((/*(IRF4.1arguments*/NULL/*)*/)!=((void*)(X99arguments(a1)))){
/*[IF*/
{/*AT*/{T104 se_tmp0;
r82add_position((*(se_tmp0=X99start_position(a1),&se_tmp0)));
}
{T104 se_tmp0;
r301error((*(se_tmp0=r301start_position(C),&se_tmp0)),((T0*)ms99_1854646737));
}
}
/*FI]*/
}
/*FI]*/
/*[IF*/
if((/*(IRF4.9nb_errors*/(/*RF2*/((T82*)(oBC19eh))->_error_counter/*0*/)/*)*/)==(0)){
/*[IF*/
if(((/*RF2*/(C)->_result_type/*20*/))!=((void*)(NULL))){
/*[IF*/
if(!(X62is_a_in((/*RF2*/(C)->_result_type/*20*/),X99result_type(a1),a2))){
/*[IRF3.6append*/{T0* b1=((T0*)ms99_895448585);
r7append((T7*)(oBC82explanation),b1);
}/*]*/
/*[IRF3.6append*/{T0* b1=X62run_time_mark((/*RF2*/(((T60*)a2))->_current_type/*0*/));
r7append((T7*)(oBC82explanation),b1);
}/*]*/
/*[IRF3.6append*/{T0* b1=((T0*)ms20_46);
r7append((T7*)(oBC82explanation),b1);
}/*]*/
r82print_as_error((T82*)(oBC19eh));
}
/*FI]*/
}
/*FI]*/
}
/*FI]*/
/*[IF*/
if((/*(IRF4.9nb_errors*/(/*RF2*/((T82*)(oBC19eh))->_error_counter/*0*/)/*)*/)==(0)){
/*[IF*/
/*AF*//*AE*/
/*FI]*/
}
/*FI]*/
R=(/*(IRF4.9nb_errors*/(/*RF2*/((T82*)(oBC19eh))->_error_counter/*0*/)/*)*/)==(0);
/*[IF*/
if(R){
r301merge_header_comments(C,a1);
}
/*FI]*/
return R;
}


void r301merge_header_comments(T301* C,T0* a1){
/*[IF*/
if((/*RF2*/((T59*)(oBC19small_eiffel))->_short_flag/*5*/)){
/*[IF*/
if(((/*RF2*/(C)->_header_comment/*12*/))==((void*)(NULL))){
(/*SFN*/C->_header_comment)=/*SSWARF2*//*X99header_comment*/(/*RF2*/(((T293*)a1))->_header_comment/*12*/);
}
 else if((/*SSWARF2*//*X99header_comment*/(/*RF2*/(((T293*)a1))->_header_comment/*12*/))==((void*)(NULL))){
X99set_header_comment(a1,(/*RF2*/(C)->_header_comment/*12*/));
}
/*FI]*/
}
/*FI]*/
}


void r301add_into(T301* C,T0* a1){
T0* _key=NULL;
T0* _fn=NULL;
T2 _i=0;
{T104 se_tmp0;
(/*SFN*/C->_base_class)=(/*RF2*/((*(se_tmp0=X117start_position(r118item((T118*)((/*RF2*/(C)->_names/*8*/)),1)),&se_tmp0)))._base_class/*0*/);
}
_i=1;
while (!((_i)>(r118count((T118*)((/*RF2*/(C)->_names/*8*/))))))
{
_fn=r118item((T118*)((/*RF2*/(C)->_names/*8*/)),_i);
_key=X117to_key(_fn);
/*[IF*/
if(r172has(((T172*)a1),_key)){
_fn=/*SSFRF4*//*X99first_name*//*(IRF4.6first_name*/(/*RF2*/(((T118*)((/*RF2*/((T293*)(r172at(((T172*)a1),_key)))->_names/*8*/))))->_first/*0*/)/*)*/;
{T104 se_tmp0;
r82add_position((*(se_tmp0=X117start_position(_fn),&se_tmp0)));
}
{T104 se_tmp0;
r82add_position((*(se_tmp0=X117start_position(r118item((T118*)((/*RF2*/(C)->_names/*8*/)),_i)),&se_tmp0)));
}
/*[IRF3.6append*/{T0* b1=((T0*)ms99_1087076085);
r7append((T7*)(oBC82explanation),b1);
}/*]*/
/*[IRF3.6append*/{T0* b1=X117to_string(_fn);
r7append((T7*)(oBC82explanation),b1);
}/*]*/
/*[IRF3.6append*/{T0* b1=((T0*)ms20_46);
r7append((T7*)(oBC82explanation),b1);
}/*]*/
r82print_as_error((T82*)(oBC19eh));
}
else{
r172add(((T172*)a1),(T0*)C,_key);
}
/*FI]*/
_i=(_i)+(1);
}
}


T0* r301try_to_undefine(T301* C,T0* a1,T0* a2){
T0* R=NULL;
T0* _fn2=NULL;
{T104 se_tmp0;
r82add_position((*(se_tmp0=X117start_position(a1),&se_tmp0)));
}
_fn2=r118feature_name((T118*)((/*RF2*/(C)->_names/*8*/)),X117to_key(a1));
/*[IF*/
if((_fn2)!=((void*)(NULL))){
X117undefine_in(_fn2,a2);
}
/*FI]*/
/*[IRF3.2cancel*//*[IRF3.3clear*/((((T7*)((T7*)(oBC82explanation))))->_count)=(0);
/*]*/
/*[IRF3.3clear*/((((T105*)((T105*)(oBC82positions))))->_upper)=(-(1));
/*]*/
/*]*/
R=r301try_to_undefine_aux(C,a1,a2);
/*[IF*/
if((R)!=((void*)(NULL))){
X381set_clients(R,(/*RF2*/(C)->_clients/*16*/));
r301merge_header_comments(C,R);
}
else{
r61fatal_undefine(((T61*)a2),a1);
}
/*FI]*/
return R;
}


void r301make(T301* C,T0* a1,T0* a2,T0* a3){
T2 _i=0;
/*[IRF3.3make_e_feature*/((((T301*)(C)))->_names)=(a1);
/*]*/
(/*SFN*/C->_result_type)=a2;
(/*SFN*/C->_first_value)=a3;
_i=r118count((T118*)((/*RF2*/(C)->_names/*8*/)));
/*[IF*/
if((_i)>(1)){
_i=(_i)-(1);
{T302*n=((T302*)se_malloc(sizeof(*n))/*16*/);
*n=M302;
r302make(n,_i);
(/*SFN*/C->_remainder)=((T0*)n);
}
while (!((_i)==(0)))
{
_i=(_i)-(1);
/*[IRF3.5put*/((/*RF2*/((T302*)((/*RF2*/(C)->_remainder/*28*/)))->_storage/*4*/))[_i]=(r262twin(((T262*)a3)));
/*]*/
}
}
/*FI]*/
}


T0* r301value(T301* C,T2 a1){
T0* R=NULL;
/*[IF*/
if((a1)==(1)){
R=(/*RF2*/(C)->_first_value/*24*/);
}
else{
R=/*(IRF4.6item*/((/*RF2*/((T302*)((/*RF2*/(C)->_remainder/*28*/)))->_storage/*4*/))[(a1)-(2)]/*)*/;
}
/*FI]*/
return R;
}


void r301check_obsolete(T301* C,T104 a1){
/*[IF*/
/*AF*//*AE*/
/*FI]*/
}


T0* r301to_run_feature(T301* C,T0* a1,T0* a2){
T0* R=NULL;
T0* _rc=NULL;
_rc=X62run_class(a1);
R=r60at(((T60*)_rc),a2);
if(NULL!=(R)){
switch(((T0*)R)->id){
case 437:
break;
default:
R=NULL;
}
}/*[IF*/
if((R)==((void*)(NULL))){
{T437*n=((T437*)se_malloc(sizeof(*n))/*40*/);
*n=M437;
r437make(n,a1,a2,(T0*)C);
R=((T0*)n);
}
}
/*FI]*/
return R;
}


T6 r301is_not_mergeable_with(T301* C,T0* a1){
T6 R=0;
/*[IF*/
if(((/*RF2*/(C)->_result_type/*20*/))==((void*)(NULL))){
R=(X99result_type(a1))!=((void*)(NULL));
}
else{
R=(X99result_type(a1))==((void*)(NULL));
}
/*FI]*/
/*[IF*/
if(R){
/*[IRF3.6append*/{T0* b1=((T0*)ms99_1393094289);
r7append((T7*)(oBC82explanation),b1);
}/*]*/
}
else{
/*[IF*/
{/*AT*/R=(X99arguments(a1))!=((void*)(NULL));
}
/*FI]*/
/*[IF*/
if(R){
/*[IRF3.6append*/{T0* b1=((T0*)ms99_1854646737);
r7append((T7*)(oBC82explanation),b1);
}/*]*/
}
 else {/*AT*/}
/*FI]*/
}
/*FI]*/
r301merge_header_comments(C,a1);
return R;
}


T104 r301start_position(T301* C){
T104 R={NULL,0};
{T104 se_tmp0;
R=(*(se_tmp0=X117start_position(/*(IRF4.6first_name*/(/*RF2*/(((T118*)((/*RF2*/(C)->_names/*8*/))))->_first/*0*/)/*)*/),&se_tmp0));
}
return R;
}


void r224run_feature_match(T224* C,T0* a1){
r224run_feature_has_result(C);
X245match_with((/*RF2*/(C)->_arguments/*8*/),(/*RF2*/(C)->_run_feature/*16*/),a1);
}


T0* r224runnable_expression(T0* a1,T0* a2){
T0* R=NULL;
R=X126to_runnable(a1,a2);
/*[IF*/
if((R)==((void*)(NULL))){
{T104 se_tmp0;
r82add_position((*(se_tmp0=X126start_position(a1),&se_tmp0)));
}
r224fatal_error(((T0*)ms168_1263631766));
}
/*FI]*/
return R;
}


T6 r224call_proc_call_stupid_switch(T224* C,T0* a1){
T6 R=0;
/*[IF*/
if(((/*RF2*/(C)->_arguments/*8*/))==((void*)(NULL))){
R=1;
}
else{
R=/*SSFRF4*//*X245stupid_switch*/r245stupid_switch((T245*)((/*RF2*/(C)->_arguments/*8*/)),a1);
}
/*FI]*/
/*[IF*/
if(R){
/*[IF*/
if(X126is_current((/*RF2*/(C)->_target/*4*/))){
/*[IF*/
if(r59same_base_feature((/*RF2*/(C)->_run_feature/*16*/),a1)){
R=(X96stupid_switch((/*RF2*/(C)->_run_feature/*16*/),a1))!=((void*)(NULL));
}
else{
R=0;
}
/*FI]*/
}
else{
R=X126stupid_switch((/*RF2*/(C)->_target/*4*/),a1);
}
/*FI]*/
}
/*FI]*/
return R;
}


T6 r224is_static(T224* C){
T6 R=0;
/*[IF*/
if(X62is_boolean(X126result_type((/*RF2*/(C)->_target/*4*/)))){
/*[IF*/
if((X126is_static((/*RF2*/(C)->_target/*4*/)))&&(X126is_static(r224arg1(C)))){
R=1;
(/*SFN*/C->_static_value_mem)=(X126static_value((/*RF2*/(C)->_target/*4*/)))+(X126static_value(r224arg1(C)));
/*[IF*/
if(((/*RF2*/(C)->_static_value_mem/*20*/))==(2)){
(/*SFN*/C->_static_value_mem)=1;
}
/*FI]*/
}
/*FI]*/
}
/*FI]*/
return R;
}


T0* r224operator(void){
T0* R=NULL;
R=((T0*)ms21_669);
return R;
}


void r224with(T224* C,T0* a1,T0* a2,T0* a3,T0* a4,T0* a5){
(/*SFN*/C->_target)=a1;
(/*SFN*/C->_feature_name)=a2;
(/*SFN*/C->_arguments)=a3;
(/*SFN*/C->_run_feature)=a4;
r224run_feature_match(C,a5);
}


void r224run_feature_has_result(T224* C){
/*[IF*/
if((X96result_type((/*RF2*/(C)->_run_feature/*16*/)))==((void*)(NULL))){
{T104 se_tmp0;
r82add_position((*(se_tmp0=X96start_position((/*RF2*/(C)->_run_feature/*16*/)),&se_tmp0)));
}
{T104 se_tmp0;
r82add_position((/*RF2*/((T235*)((/*RF2*/(C)->_feature_name/*12*/)))->_start_position/*4*/));
}
r224fatal_error(((T0*)ms222_793028699));
}
/*FI]*/
}


T6 r224stupid_switch(T224* C,T0* a1){
T6 R=0;
R=r224call_proc_call_stupid_switch(C,a1);
/*[IF*/
if(R){
R=!(X62is_native_array(r224result_type(C)));
}
/*FI]*/
return R;
}


void r224make(T224* C,T0* a1,T104 a2,T0* a3){
(/*SFN*/C->_target)=a1;
{T235*n=((T235*)se_malloc(sizeof(*n))/*20*/);
*n=M235;
r235make(n,r224operator(),a2);
(/*SFN*/C->_feature_name)=((T0*)n);
}
{T245*n=((T245*)se_malloc(sizeof(*n))/*16*/);
*n=M245;
/*[IRF3.3make_1*/((((T245*)(n)))->_first_one)=(a3);
/*]*/
(/*SFN*/C->_arguments)=((T0*)n);
}
}


void r224fatal_error(T0* a1){
/*[IRF3.6append*/{T0* b1=a1;
r7append((T7*)(oBC82explanation),b1);
}/*]*/
r82print_as_fatal_error((T82*)(oBC19eh));
}


void r224to_integer_error(T224* C){
/*[IRF3.6append*/{T0* b1=((T0*)ms20_752996481);
r7append((T7*)(oBC82explanation),b1);
}/*]*/
{T104 se_tmp0;
r82add_position(/*(IRF4.6start_position*/(/*RF2*/(((T235*)((/*RF2*/(C)->_feature_name/*12*/))))->_start_position/*4*/)/*)*/);
}
r82print_as_error((T82*)(oBC19eh));
}


T0* r224arg1(T224* C){
T0* R=NULL;
R=/*SSFRF4*//*X245first*//*(IRF4.3first*/(/*RF2*/((T245*)((/*RF2*/(C)->_arguments/*8*/)))->_first_one/*4*/)/*)*/;
return R;
}


void r224assertion_check(T224* C,T3 a1){
/*[IF*/
if((a1)==(((T3)'R'))){
{T104 se_tmp0;
X96vape_check_from((/*RF2*/(C)->_run_feature/*16*/),/*(IRF4.6start_position*/(/*RF2*/(((T235*)((/*RF2*/(C)->_feature_name/*12*/))))->_start_position/*4*/)/*)*/);
}
}
/*FI]*/
X126assertion_check((/*RF2*/(C)->_target/*4*/),a1);
X126assertion_check(r224arg1(C),a1);
}


T0* r224result_type(T224* C){
T0* R=NULL;
T0* _tla=NULL;
R=X96result_type((/*RF2*/(C)->_run_feature/*16*/));
/*[IF*/
if(X62is_like_current(R)){
R=/*SSWARF2*//*X96current_type*/(/*RF2*/((T154*)((/*RF2*/(C)->_run_feature/*16*/)))->_current_type/*8*/);
}
else{
_tla=R;
if(NULL!=(_tla)){
switch(((T0*)_tla)->id){
case 355:
break;
default:
_tla=NULL;
}
}/*[IF*/
if((_tla)!=((void*)(NULL))){
R=X62run_type(X126result_type(r224arg1(C)));
}
/*FI]*/
}
/*FI]*/
return R;
}


void r224afd_check(T224* C){
T0* _running=NULL;
T0* _rc=NULL;
/*[IF*/
if(((/*RF2*/(C)->_run_feature/*16*/))!=((void*)(NULL))){
_rc=X62run_class(X126result_type((/*RF2*/(C)->_target/*4*/)));
_running=(/*RF2*/(((T60*)_rc))->_running/*21*/);
/*[IF*/
if((_running)==((void*)(NULL))){
}
 else if((r63count(((T63*)_running)))>(1)){
r432update((/*RF2*/(C)->_target/*4*/),(/*RF2*/(C)->_run_feature/*16*/));
}
/*FI]*/
}
/*FI]*/
X126afd_check((/*RF2*/(C)->_target/*4*/));
/*[IF*/
{/*AT*//*SSPRF3*//*X245afd_check*/r245afd_check((T245*)((/*RF2*/(C)->_arguments/*8*/)));
}
/*FI]*/
}


T6 r224use_current(T224* C){
T6 R=0;
/*[IF*/
{/*AT*/R=/*SSFRF4*//*X245use_current*/r245use_current((T245*)((/*RF2*/(C)->_arguments/*8*/)));
}
/*FI]*/
/*[IF*/
if(R){
}
 else if(X126is_current((/*RF2*/(C)->_target/*4*/))){
R=X96use_current((/*RF2*/(C)->_run_feature/*16*/));
}
else{
R=X126use_current((/*RF2*/(C)->_target/*4*/));
}
/*FI]*/
return R;
}


void r224c_declare_for_old(T224* C){
X126c_declare_for_old((/*RF2*/(C)->_target/*4*/));
/*[IF*/
{/*AT*//*SSPRF3*//*X245c_declare_for_old*/r245c_declare_for_old((T245*)((/*RF2*/(C)->_arguments/*8*/)));
}
/*FI]*/
}


void r224compile_to_c_old(T224* C){
X126compile_to_c_old((/*RF2*/(C)->_target/*4*/));
/*[IF*/
{/*AT*//*SSPRF3*//*X245compile_to_c_old*/r245compile_to_c_old((T245*)((/*RF2*/(C)->_arguments/*8*/)));
}
/*FI]*/
}


T0* r224runnable_args(T0* a1,T0* a2){
T0* R=NULL;
R=X245to_runnable(a1,a2);
/*[IF*/
if((R)==((void*)(NULL))){
{T104 se_tmp0;
r82add_position((*(se_tmp0=X245start_position(a1),&se_tmp0)));
}
r224fatal_error(((T0*)ms20_462691396));
}
/*FI]*/
return R;
}


void r224mapping_c_target(T224* C,T0* a1){
T0* _actual_type=NULL;
T6 _flag=0;
_flag=r83call_invariant_start(a1);
_actual_type=X62run_type(r224result_type(C));
/*[IF*/
if(X62is_reference(_actual_type)){
/*[IF*/
if(X62is_reference(a1)){
X62mapping_cast(a1);
/*[IRF3.5put_character*//*[IRF3.6put_character*/{T58* C1=((T58*)((/*RF2*/((T83*)(oBC19cpp))->_current_out/*63*/)));
T3 b1=((T3)'\50');
putc(b1,((FILE*)((/*RF2*/(C1)->_output_stream/*4*/))));
}/*]*/
/*]*/
/*[IRF3.4compile_to_c*//*[IRF3.6call_proc_call_c2c*/{T224* C1=C;
r83put_cpc((T83*)(oBC19cpp),(T0*)C1);
}/*]*/
/*]*/
/*[IRF3.5put_character*//*[IRF3.6put_character*/{T58* C1=((T58*)((/*RF2*/((T83*)(oBC19cpp))->_current_out/*63*/)));
T3 b1=((T3)'\51');
putc(b1,((FILE*)((/*RF2*/(C1)->_output_stream/*4*/))));
}/*]*/
/*]*/
}
else{
/*[IRF3.4compile_to_c*//*[IRF3.6call_proc_call_c2c*/{T224* C1=C;
r83put_cpc((T83*)(oBC19cpp),(T0*)C1);
}/*]*/
/*]*/
}
/*FI]*/
}
else{
/*[IF*/
if(X62is_reference(a1)){
/*[IRF3.4compile_to_c*//*[IRF3.6call_proc_call_c2c*/{T224* C1=C;
r83put_cpc((T83*)(oBC19cpp),(T0*)C1);
}/*]*/
/*]*/
}
else{
/*[IF*/
if(X62need_c_struct(a1)){
/*[IRF3.5put_character*//*[IRF3.6put_character*/{T58* C1=((T58*)((/*RF2*/((T83*)(oBC19cpp))->_current_out/*63*/)));
T3 b1=((T3)'\46');
putc(b1,((FILE*)((/*RF2*/(C1)->_output_stream/*4*/))));
}/*]*/
/*]*/
/*[IRF3.5put_character*//*[IRF3.6put_character*/{T58* C1=((T58*)((/*RF2*/((T83*)(oBC19cpp))->_current_out/*63*/)));
T3 b1=((T3)'\50');
putc(b1,((FILE*)((/*RF2*/(C1)->_output_stream/*4*/))));
}/*]*/
/*]*/
/*[IRF3.4compile_to_c*//*[IRF3.6call_proc_call_c2c*/{T224* C1=C;
r83put_cpc((T83*)(oBC19cpp),(T0*)C1);
}/*]*/
/*]*/
/*[IRF3.5put_character*//*[IRF3.6put_character*/{T58* C1=((T58*)((/*RF2*/((T83*)(oBC19cpp))->_current_out/*63*/)));
T3 b1=((T3)'\51');
putc(b1,((FILE*)((/*RF2*/(C1)->_output_stream/*4*/))));
}/*]*/
/*]*/
}
else{
/*[IRF3.4compile_to_c*//*[IRF3.6call_proc_call_c2c*/{T224* C1=C;
r83put_cpc((T83*)(oBC19cpp),(T0*)C1);
}/*]*/
/*]*/
}
/*FI]*/
}
/*FI]*/
}
/*FI]*/
/*[IF*/
if(_flag){
/*[IRF3.2call_invariant_end*//*[IRF3.6put_character*/{T58* C1=(T58*)(oBC83out_c);
T3 b1=((T3)'\51');
putc(b1,((FILE*)((/*RF2*/(C1)->_output_stream/*4*/))));
}/*]*/
/*]*/
}
/*FI]*/
}


T0* r224run_feature_for(T224* C,T0* a1,T0* a2){
T0* R=NULL;
T0* _bc=NULL;
T0* _rt=NULL;
T0* _rc=NULL;
_rt=X126result_type(a1);
/*[IF*/
if((_rt)!=((void*)(NULL))){
_rc=X62run_class(_rt);
/*[IF*/
if((_rc)!=((void*)(NULL))){
_bc=(/*RF2*/(((T60*)_rc))->_base_class/*8*/);
R=r61run_feature_for(((T61*)_bc),_rc,a1,(/*RF2*/(C)->_feature_name/*12*/),a2);
}
/*FI]*/
}
/*FI]*/
/*[IF*/
if((R)==((void*)(NULL))){
{T104 se_tmp0;
r82add_position((/*RF2*/((T235*)((/*RF2*/(C)->_feature_name/*12*/)))->_start_position/*4*/));
}
/*[IRF3.6append*/{T0* b1=((T0*)ms168_608361995);
r7append((T7*)(oBC82explanation),b1);
}/*]*/
r82print_as_fatal_error((T82*)(oBC19eh));
}
/*FI]*/
return R;
}


T2 r224to_integer_or_error(T224* C){
T2 R=0;
r224to_integer_error(C);
return R;
}


T0* r224add_comment(T224* C,T0* a1){
T0* R=NULL;
/*[IF*/
if(((a1)==((void*)(NULL)))||((/*(IRF4.6count*/r52count(((T52*)((/*RF2*/(((T164*)a1))->_list/*8*/))))/*)*/)==(0))){
R=((T0*)(C));
}
else{
{T323*n=((T323*)se_malloc(sizeof(*n))/*12*/);
*n=M323;
r323make(n,(T0*)C,a1);
R=((T0*)n);
}
}
/*FI]*/
return R;
}


T0* r224to_runnable(T224* C,T0* a1){
T0* R=NULL;
T0* _target_type=NULL;
T0* _argument_type=NULL;
T0* _rf=NULL;
T0* _a=NULL;
T0* _t=NULL;
_t=r224runnable_expression((/*RF2*/(C)->_target/*4*/),a1);
_a=r224runnable_args((/*RF2*/(C)->_arguments/*8*/),a1);
_target_type=X126result_type(_t);
_argument_type=X126result_type(r224arg1(C));
/*[IF*/
if(X62is_real(_argument_type)){
/*[IF*/
if(X62is_integer(_target_type)){
_t=r440implicit_cast((T440*)(oBC19conversion_handler),_t,_argument_type);
}
/*FI]*/
}
 else if(X62is_double(_argument_type)){
/*[IF*/
if((X62is_integer(_target_type))||(X62is_real(_target_type))){
_t=r440implicit_cast((T440*)(oBC19conversion_handler),_t,_argument_type);
}
/*FI]*/
}
/*FI]*/
_rf=r224run_feature_for(C,_t,a1);
/*[IF*/
if(((/*RF2*/(C)->_run_feature/*16*/))==((void*)(NULL))){
(/*SFN*/C->_target)=_t;
(/*SFN*/C->_arguments)=_a;
(/*SFN*/C->_run_feature)=_rf;
r224run_feature_match(C,a1);
R=((T0*)(C));
}
 else if(((_t)==((void*)((/*RF2*/(C)->_target/*4*/))))&&((_a)==((void*)((/*RF2*/(C)->_arguments/*8*/))))){
R=((T0*)(C));
}
else{
{T224*n=((T224*)se_malloc(sizeof(*n))/*24*/);
*n=M224;
r224with(n,_t,(/*RF2*/(C)->_feature_name/*12*/),_a,_rf,a1);
R=((T0*)n);
}
}
/*FI]*/
return R;
}


void r224collect_c_tmp(T224* C){
/*[IF*/
if(((/*RF2*/(C)->_run_feature/*16*/))!=((void*)(NULL))){
X96collect_c_tmp((/*RF2*/(C)->_run_feature/*16*/));
}
/*FI]*/
X126collect_c_tmp((/*RF2*/(C)->_target/*4*/));
/*[IF*/
if(((/*RF2*/(C)->_arguments/*8*/))!=((void*)(NULL))){
/*SSPRF3*//*X245collect_c_tmp*/r245collect_c_tmp((T245*)((/*RF2*/(C)->_arguments/*8*/)));
}
/*FI]*/
}


void r224finalize(T224* C){
T0* _rf=NULL;
T0* _rc=NULL;
_rf=(/*RF2*/(C)->_run_feature/*16*/);
_rc=/*SSWARF2*//*X96run_class*/(/*RF2*/(((T154*)_rf))->_run_class/*12*/);
(/*SFN*/C->_run_feature)=r60dynamic((T60*)(/*(IRF4.6first*/((/*RF2*/((T63*)((/*RF2*/(((T60*)_rc))->_running/*21*/)))->_storage/*4*/))[0]/*)*/),_rf);
}


T0* r224static_result_base_class(T224* C){
T0* R=NULL;
T0* _cn=NULL;
T0* _rt=NULL;
T0* _e_feature=NULL;
T0* _bc=NULL;
_bc=X126static_result_base_class((/*RF2*/(C)->_target/*4*/));
/*[IF*/
if((_bc)!=((void*)(NULL))){
_e_feature=r61e_feature(((T61*)_bc),(/*RF2*/(C)->_feature_name/*12*/));
/*[IF*/
if((_e_feature)!=((void*)(NULL))){
_rt=X99result_type(_e_feature);
/*[IF*/
if((_rt)!=((void*)(NULL))){
_cn=X62static_base_class_name(_rt);
/*[IF*/
if((_cn)!=((void*)(NULL))){
R=r77base_class(((T77*)_cn));
}
/*FI]*/
}
/*FI]*/
}
/*FI]*/
}
/*FI]*/
return R;
}


void r356gc_store_in(T0* a1){
r7append(((T7*)a1),((T0*)ms62_89821));
r2append_in(10,a1);
}


void r356c_type_for_external_in(T0* a1){
/*[IF*/
{/*AT*/r7append(((T7*)a1),((T0*)ms20_18150));
r7extend(((T7*)a1),((T3)'\52'));
}
/*FI]*/
}


T0* r356generic_list(T356* C){
T0* R=NULL;
r356fatal_error_generic_list(C);
return R;
}
T0*oBC62body=NULL;


T0* r356written_mark(void){
T0* R=NULL;
R=((T0*)ms21_2104);
return R;
}


T6 r356has_creation(T356* C,T0* a1){
T6 R=0;
{T104 se_tmp0;
r82add_position((*(se_tmp0=X117start_position(a1),&se_tmp0)));
}
{T104 se_tmp0;
r356error(/*(IRF4.6start_position*/(/*RF2*/(((T77*)((/*RF2*/(C)->_base_class_name/*12*/))))->_start_position/*0*/)/*)*/,((T0*)ms356_555435463));
}
return R;
}


T0* r356run_time_mark(void){
T0* R=NULL;
R=((T0*)ms21_2104);
return R;
}


void r356gc_store_chunk_in(T0* a1){
r7append(((T7*)a1),((T0*)ms62_1403828457));
r2append_in(10,a1);
}


void r356error(T104 a1,T0* a2){
r82add_position(a1);
/*[IRF3.6append*/{T0* b1=a2;
r7append((T7*)(oBC82explanation),b1);
}/*]*/
r82print_as_error((T82*)(oBC19eh));
}


void r356standard_gc_define2(T356* C){
T6 _gc_check_id=0;
T2 _rcid=0;
T0* _rc=NULL;
_rc=r356run_class(C);
_rcid=(/*RF2*/(((T60*)_rc))->_id/*16*/);
r7copy((T7*)(oBC62header),((T0*)ms20_18150));
r7extend((T7*)(oBC62header),((T3)'\40'));
r7append((T7*)(oBC62header),((T0*)ms20_9980517));
r2append_in(_rcid,oBC62header);
r7append((T7*)(oBC62header),((T0*)ms62_5161461));
r7copy((T7*)(oBC62body),((T0*)ms62_614));
r2append_in(_rcid,oBC62body);
r7append((T7*)(oBC62body),((T0*)ms62_976559263));
r2append_in(_rcid,oBC62body);
r7append((T7*)(oBC62body),((T0*)ms62_1815688614));
r356gc_store_in(oBC62body);
r7append((T7*)(oBC62body),((T0*)ms62_84678371));
r444memory_dispose(oBC62body,((T0*)ms62_604),r356run_class(C));
r7append((T7*)(oBC62body),((T0*)ms62_503314970));
r356gc_free_in(oBC62body);
r7append((T7*)(oBC62body),((T0*)ms20_305));
r356gc_free_in(oBC62body);
r7append((T7*)(oBC62body),((T0*)ms62_2045816469));
r444memory_dispose(oBC62body,((T0*)ms62_605),r356run_class(C));
r7append((T7*)(oBC62body),((T0*)ms62_720252832));
r356gc_free_in(oBC62body);
r7append((T7*)(oBC62body),((T0*)ms20_305));
r356gc_free_in(oBC62body);
r7append((T7*)(oBC62body),((T0*)ms62_2124916149));
r83put_c_function((T83*)(oBC19cpp),oBC62header,oBC62body);
r7copy((T7*)(oBC62header),((T0*)ms20_18150));
r7extend((T7*)(oBC62header),((T3)'\40'));
r356gc_mark_in(oBC62header);
r7append((T7*)(oBC62header),((T0*)ms62_284));
r2append_in(_rcid,oBC62header);
r7append((T7*)(oBC62header),((T0*)ms62_1646));
/*[IRF3.3clear*/((((T7*)((T7*)(oBC62body))))->_count)=(0);
/*]*/
_gc_check_id=(r60is_tagged(((T60*)_rc)))&&(r57no_check((T57*)(oBC19run_control)));
/*[IF*/
if(_gc_check_id){
r7append((T7*)(oBC62body),((T0*)ms62_1985327250));
r2append_in(_rcid,oBC62body);
r7append((T7*)(oBC62body),((T0*)ms62_6773));
}
/*FI]*/
r60gc_mark_fixed_size(((T60*)_rc),0,oBC62body);
/*[IF*/
if(_gc_check_id){
r7append((T7*)(oBC62body),((T0*)ms62_175));
}
/*FI]*/
r83put_c_function((T83*)(oBC19cpp),oBC62header,oBC62body);
r7copy((T7*)(oBC62header),((T0*)ms20_18150));
r7extend((T7*)(oBC62header),((T3)'\40'));
r356gc_align_mark_in(oBC62header);
r7append((T7*)(oBC62header),((T0*)ms62_129037214));
r2append_in(_rcid,oBC62header);
r7append((T7*)(oBC62header),((T0*)ms62_1651));
/*[IRF3.3clear*/((((T7*)((T7*)(oBC62body))))->_count)=(0);
/*]*/
r60gc_align_mark_fixed_size(((T60*)_rc),oBC62body);
r83put_c_function((T83*)(oBC19cpp),oBC62header,oBC62body);
r7copy((T7*)(oBC62header),((T0*)ms62_407207));
r2append_in(_rcid,oBC62header);
r7copy((T7*)(oBC62body),((T0*)ms62_2051940780));
r2append_in(_rcid,oBC62body);
r7append((T7*)(oBC62body),((T0*)ms62_1665297219));
r2append_in(_rcid,oBC62body);
r7append((T7*)(oBC62body),((T0*)ms62_1831440704));
r2append_in(_rcid,oBC62body);
r7append((T7*)(oBC62body),((T0*)ms62_160930));
r83put_extern5((T83*)(oBC19cpp),oBC62header,oBC62body);
/*[IRF3.3clear*/((((T7*)((T7*)(oBC62header))))->_count)=(0);
/*]*/
r7extend((T7*)(oBC62header),((T3)'T'));
r2append_in(_rcid,oBC62header);
r7extend((T7*)(oBC62header),((T3)'\52'));
r7append((T7*)(oBC62header),((T0*)ms20_3374));
r2append_in(_rcid,oBC62header);
r7append((T7*)(oBC62header),((T0*)ms20_215791));
r7copy((T7*)(oBC62body),((T0*)ms20_614));
r2append_in(_rcid,oBC62body);
r7append((T7*)(oBC62body),((T0*)ms62_8305));
/*[IF*/
if((/*RF2*/((T444*)(oBC19gc_handler))->_info_flag/*1*/)){
r356gc_info_nb_in(oBC62body);
r7append((T7*)(oBC62body),((T0*)ms62_6755));
}
/*FI]*/
r7append((T7*)(oBC62body),((T0*)ms62_3175));
r356gc_store_left_in(oBC62body);
r7append((T7*)(oBC62body),((T0*)ms62_46525));
r356gc_store_left_in(oBC62body);
r7append((T7*)(oBC62body),((T0*)ms62_176986));
r356gc_store_in(oBC62body);
r7append((T7*)(oBC62body),((T0*)ms62_411775958));
r356gc_free_in(oBC62body);
r7append((T7*)(oBC62body),((T0*)ms62_479982486));
r356gc_free_in(oBC62body);
r7append((T7*)(oBC62body),((T0*)ms20_305));
r356gc_free_in(oBC62body);
r7append((T7*)(oBC62body),((T0*)ms62_1748680500));
r356gc_store_left_in(oBC62body);
r7append((T7*)(oBC62body),((T0*)ms62_236525));
r356gc_store_left_in(oBC62body);
r7append((T7*)(oBC62body),((T0*)ms62_9130));
r356gc_store_chunk_in(oBC62body);
r7append((T7*)(oBC62body),((T0*)ms62_1648235130));
r356gc_store_in(oBC62body);
r7append((T7*)(oBC62body),((T0*)ms62_1800342110));
r7append((T7*)(oBC62body),((T0*)ms62_938298091));
r356gc_store_chunk_in(oBC62body);
r7append((T7*)(oBC62body),((T0*)ms62_842464717));
r356gc_initialize_chunk(_rcid,oBC62body);
r7append((T7*)(oBC62body),((T0*)ms62_1704089558));
r356gc_store_chunk_in(oBC62body);
r7append((T7*)(oBC62body),((T0*)ms62_672427151));
r356gc_store_chunk_in(oBC62body);
r7append((T7*)(oBC62body),((T0*)ms62_1562678200));
r356gc_store_chunk_in(oBC62body);
r7append((T7*)(oBC62body),((T0*)ms62_8260));
r356gc_initialize_chunk(_rcid,oBC62body);
r7append((T7*)(oBC62body),((T0*)ms62_1519036636));
r356gc_free_in(oBC62body);
r7append((T7*)(oBC62body),((T0*)ms62_41861));
r356gc_free_in(oBC62body);
r7append((T7*)(oBC62body),((T0*)ms20_305));
r356gc_free_in(oBC62body);
r7append((T7*)(oBC62body),((T0*)ms62_69947558));
r356gc_store_chunk_in(oBC62body);
r7append((T7*)(oBC62body),((T0*)ms62_54875475));
r356gc_initialize_chunk(_rcid,oBC62body);
r7append((T7*)(oBC62body),((T0*)ms62_433411101));
/*[IF*/
if(r356need_c_struct(C)){
r7append((T7*)(oBC62body),((T0*)ms62_1196941282));
r2append_in(_rcid,oBC62body);
r7append((T7*)(oBC62body),((T0*)ms20_305));
}
/*FI]*/
r7append((T7*)(oBC62body),((T0*)ms62_54686284));
r2append_in(_rcid,oBC62body);
r7append((T7*)(oBC62body),((T0*)ms62_171955));
r83put_c_function((T83*)(oBC19cpp),oBC62header,oBC62body);
}


void r356standard_gc_define1(T356* C){
T2 _rcid=0;
T0* _rc=NULL;
_rc=r356run_class(C);
_rcid=(/*RF2*/(((T60*)_rc))->_id/*16*/);
r7copy((T7*)(oBC62header),((T0*)ms20_11381817));
r7append((T7*)(oBC62header),((T0*)ms20_2248337));
r7extend((T7*)(oBC62header),((T3)'B'));
r2append_in(_rcid,oBC62header);
r7extend((T7*)(oBC62header),((T3)'\40'));
r7append((T7*)(oBC62header),((T0*)ms20_614));
r2append_in(_rcid,oBC62header);
r7append((T7*)(oBC62header),((T0*)ms20_305));
r7append((T7*)(oBC62header),((T0*)ms20_2248337));
r7extend((T7*)(oBC62header),((T3)'B'));
r2append_in(_rcid,oBC62header);
r7append((T7*)(oBC62header),((T0*)ms62_699));
r2append_in(_rcid,oBC62header);
r7append((T7*)(oBC62header),((T0*)ms62_1527651872));
r2append_in(_rcid,oBC62header);
r7append((T7*)(oBC62header),((T0*)ms62_1126647264));
/*[IRF3.5put_string*/r58put_string(((T58*)((/*RF2*/((T83*)(oBC19cpp))->_current_out/*63*/))),oBC62header);
/*]*/
r7copy((T7*)(oBC62header),((T0*)ms20_614));
r2append_in(_rcid,oBC62header);
r7extend((T7*)(oBC62header),((T3)'\52'));
r356gc_store_in(oBC62header);
r83put_extern5((T83*)(oBC19cpp),oBC62header,((T0*)ms20_12331));
r7copy((T7*)(oBC62header),((T0*)ms20_3291));
r7extend((T7*)(oBC62header),((T3)'\40'));
r356gc_store_left_in(oBC62header);
r83put_extern2((T83*)(oBC19cpp),oBC62header,((T3)'0'));
r7copy((T7*)(oBC62header),((T0*)ms62_81437));
r356gc_store_chunk_in(oBC62header);
r83put_extern5((T83*)(oBC19cpp),oBC62header,((T0*)ms20_12331));
r7copy((T7*)(oBC62header),((T0*)ms20_614));
r2append_in(_rcid,oBC62header);
r7extend((T7*)(oBC62header),((T3)'\52'));
r356gc_free_in(oBC62header);
r83put_extern5((T83*)(oBC19cpp),oBC62header,((T0*)ms20_12331));
/*[IF*/
if((/*RF2*/((T444*)(oBC19gc_handler))->_info_flag/*1*/)){
r7copy((T7*)(oBC62header),((T0*)ms20_3291));
r7extend((T7*)(oBC62header),((T3)'\40'));
r356gc_info_nb_in(oBC62header);
r83put_extern2((T83*)(oBC19cpp),oBC62header,((T3)'0'));
}
/*FI]*/
}


T6 r356is_native_array(T356* C){
T6 R=0;
T0* _tna=NULL;
_tna=NULL;
R=(_tna)!=((void*)(NULL));
return R;
}


void r356gc_mark_in(T0* a1){
r7append(((T7*)a1),((T0*)ms20_1994852));
r2append_in(10,a1);
}


T2 r356c_sizeof_pointer(void){
T2 R=0;
T8 _p=NULL;
R=sizeof(T8);
return R;
}


void r356standard_gc_info_in(T0* a1){
r7append(((T7*)a1),((T0*)ms62_1419822228a));
r7append(((T7*)a1),r356run_time_mark());
r7append(((T7*)a1),((T0*)ms20_17723839));
r356gc_info_nb_in(a1);
r7append(((T7*)a1),((T0*)ms20_1330));
r7append(((T7*)a1),((T0*)ms62_1419822228));
r356gc_store_left_in(a1);
r7append(((T7*)a1),((T0*)ms20_17723839));
r356gc_store_left_in(a1);
r7append(((T7*)a1),((T0*)ms20_1330));
}


void r356standard_c_typedef(T356* C){
T2 _mem_id=0;
_mem_id=10;
/*[IRF3.3clear*/((((T7*)((T7*)(oBC62tmp_string))))->_count)=(0);
/*]*/
/*[IF*/
if(r356need_c_struct(C)){
r7append((T7*)(oBC62tmp_string),((T0*)ms20_11381817));
r7append((T7*)(oBC62tmp_string),((T0*)ms20_2248337));
r7extend((T7*)(oBC62tmp_string),((T3)'S'));
r2append_in(_mem_id,oBC62tmp_string);
r7extend((T7*)(oBC62tmp_string),((T3)'\40'));
r7extend((T7*)(oBC62tmp_string),((T3)'T'));
r2append_in(_mem_id,oBC62tmp_string);
r7append((T7*)(oBC62tmp_string),((T0*)ms20_305));
}
/*AF*/ else {/*AT*/r7append((T7*)(oBC62tmp_string),((T0*)ms20_11381817));
r7append((T7*)(oBC62tmp_string),((T0*)ms20_18150));
r7extend((T7*)(oBC62tmp_string),((T3)'\52'));
r7extend((T7*)(oBC62tmp_string),((T3)'T'));
r2append_in(_mem_id,oBC62tmp_string);
r7append((T7*)(oBC62tmp_string),((T0*)ms20_305));
}
/*FI]*/
/*[IRF3.5put_string*/r58put_string(((T58*)((/*RF2*/((T83*)(oBC19cpp))->_current_out/*63*/))),oBC62tmp_string);
/*]*/
}
T0*oBC62tmp_string=NULL;


void r356fatal_error_generic_list(T356* C){
r82add_type((T0*)C,((T0*)ms62_1313445026));
r82print_as_fatal_error((T82*)(oBC19eh));
}


void r356make(T356* C,T104 a1){
{T77*n=((T77*)se_malloc(sizeof(*n))/*12*/);
*n=M77;
r77make(n,((T0*)ms21_2104),a1);
(/*SFN*/C->_base_class_name)=((T0*)n);
}
}


T0* r356base_class(T356* C){
T0* R=NULL;
T0* _bcn=NULL;
/*[IF*/
if(((/*RF2*/(C)->_base_class_memory/*4*/))!=((void*)(NULL))){
R=(/*RF2*/(C)->_base_class_memory/*4*/);
}
else{
_bcn=(/*RF2*/(C)->_base_class_name/*12*/);
/*[IF*/
if((_bcn)!=((void*)(NULL))){
(/*SFN*/C->_base_class_memory)=r77base_class(((T77*)_bcn));
R=(/*RF2*/(C)->_base_class_memory/*4*/);
}
else{
/*[IRF3.6append*/{T0* b1=((T0*)ms62_432936020);
r7append((T7*)(oBC82explanation),b1);
}/*]*/
r82add_type((T0*)C,((T0*)ms20_46));
r82print_as_fatal_error((T82*)(oBC19eh));
}
/*FI]*/
}
/*FI]*/
return R;
}


void r356standard_c_print_function(T356* C){
/*[IF*/
if(r57no_check((T57*)(oBC19run_control))){
r60c_print_function((T60*)(r356run_class(C)));
}
/*FI]*/
}
int fBC356check_type=0;


void r356check_type(T356* C){
if(fBC356check_type==0){fBC356check_type=1;{
T0* _rc=NULL;
T0* _bc=NULL;
_bc=r356base_class(C);
/*[IF*/
if((/*(IRF4.9nb_errors*/(/*RF2*/((T82*)(oBC19eh))->_error_counter/*0*/)/*)*/)==(0)){
_rc=r356run_class(C);
}
/*FI]*/
/*[IF*/
if((/*(IRF4.9nb_errors*/(/*RF2*/((T82*)(oBC19eh))->_error_counter/*0*/)/*)*/)==(0)){
/*[IF*/
if((/*RF2*/(((T61*)_bc))->_is_expanded/*17*/)){
{T104 se_tmp0;
r356error(/*(IRF4.6start_position*/(/*RF2*/(((T77*)((/*RF2*/(C)->_base_class_name/*12*/))))->_start_position/*0*/)/*)*/,((T0*)ms356_964142543));
}
}
/*FI]*/
}
/*FI]*/
}}}


T6 r356need_c_struct(T356* C){
T6 R=0;
/*[IF*/
if(r60is_tagged((T60*)(r356run_class(C)))){
R=1;
}
else{
R=(r60writable_attributes((T60*)(r356run_class(C))))!=((void*)(NULL));
}
/*FI]*/
return R;
}


void r356c_type_for_target_in(T0* a1){
r7extend(((T7*)a1),((T3)'T'));
r2append_in(10,a1);
r7extend(((T7*)a1),((T3)'\52'));
}


void r356gc_free_in(T0* a1){
r7append(((T7*)a1),((T0*)ms62_1994331));
r2append_in(10,a1);
}


T6 r356is_a_in(T356* C,T0* a1,T0* a2){
T6 R=0;
T0* _ct=NULL;
T0* _t2=NULL;
T0* _t1=NULL;
/*[IF*/
if((r356written_mark())==((void*)(X62written_mark(a1)))){
R=1;
}
else{
_ct=(/*RF2*/(((T60*)a2))->_current_type/*0*/);
_t1=r356to_runnable(C,_ct);
_t2=X62to_runnable(a1,_ct);
/*[IF*/
if((X62run_time_mark(_t1))==((void*)(X62run_time_mark(_t2)))){
R=1;
}
else{
R=X62is_a(_t1,_t2);
}
/*FI]*/
}
/*FI]*/
return R;
}


void r356demangling_in(T0* a1){
/*[IF*/
{/*AT*/r7extend(((T7*)a1),((T3)'R'));
}
/*FI]*/
r7extend(((T7*)a1),((T3)'\40'));
r7append(((T7*)a1),r356run_time_mark());
}


void r356gc_align_mark_in(T0* a1){
r7append(((T7*)a1),((T0*)ms62_1085305030));
r2append_in(10,a1);
}


void r356standard_c_struct(T356* C){
T0* _t=NULL;
T0* _a=NULL;
T2 _mem_id=0;
T2 _i=0;
T0* _wa=NULL;
_mem_id=10;
_wa=r60writable_attributes((T60*)(r356run_class(C)));
r7copy((T7*)(oBC62tmp_string),((T0*)ms20_2248337));
r7extend((T7*)(oBC62tmp_string),((T3)'S'));
r2append_in(_mem_id,oBC62tmp_string);
r7extend((T7*)(oBC62tmp_string),((T3)'\173'));
/*[IF*/
{/*AT*//*[IF*/
if(r60is_tagged((T60*)(r356run_class(C)))){
r7append((T7*)(oBC62tmp_string),((T0*)ms62_1710309));
}
/*FI]*/
}
/*FI]*/
/*[IF*/
if((_wa)!=((void*)(NULL))){
_i=(/*RF2*/(((T445*)_wa))->_upper/*12*/);
while (!((_i)==(0)))
{
_a=r445item(((T445*)_wa),_i);
_t=X62run_type((/*RF2*/(((T152*)_a))->_result_type/*32*/));
X62c_type_for_result_in(_t,oBC62tmp_string);
r7extend((T7*)(oBC62tmp_string),((T3)'\40'));
r7extend((T7*)(oBC62tmp_string),((T3)'\137'));
r7append((T7*)(oBC62tmp_string),X117to_string((/*RF2*/(((T152*)_a))->_name/*16*/)));
r7extend((T7*)(oBC62tmp_string),((T3)'\73'));
_i=(_i)-(1);
}
}
/*FI]*/
r7extend((T7*)(oBC62tmp_string),((T3)'\175'));
r7append((T7*)(oBC62tmp_string),((T0*)ms20_305));
/*[IRF3.5put_string*/r58put_string(((T58*)((/*RF2*/((T83*)(oBC19cpp))->_current_out/*63*/))),oBC62tmp_string);
/*]*/
/*[IF*/
/*AF*//*AE*/
/*FI]*/
}


void r356gc_initialize_chunk(T2 a1,T0* a2){
r7extend(((T7*)a2),((T3)'\52'));
r356gc_store_chunk_in(a2);
r7append(((T7*)a2),((T0*)ms20_377));
r2append_in(a1,a2);
r7append(((T7*)a2),((T0*)ms20_305));
r356gc_store_in(a2);
r7append(((T7*)a2),((T0*)ms62_44739));
r2append_in(a1,a2);
r7append(((T7*)a2),((T0*)ms62_32605));
r356gc_store_chunk_in(a2);
r7append(((T7*)a2),((T0*)ms62_212314278));
r356gc_store_left_in(a2);
r7append(((T7*)a2),((T0*)ms20_377));
r2append_in(a1,a2);
r7append(((T7*)a2),((T0*)ms62_365929075));
r356gc_store_in(a2);
r7append(((T7*)a2),((T0*)ms62_169510));
}


void r356id_extra_information(T0* a1){
r58put_string(((T58*)a1),((T0*)ms62_1360462097));
/*[IF*/
{/*AT*/r58put_string(((T58*)a1),((T0*)ms62_18257));
}
/*FI]*/
}


T6 r356is_a(T356* C,T0* a1){
T6 R=0;
/*[IF*/
if(X62is_any(a1)){
R=1;
}
 else if(X62is_none(a1)){
}
else{
R=r61is_subclass_of((T61*)(r356base_class(C)),X62base_class(a1));
}
/*FI]*/
/*[IF*/
if(!(R)){
r82add_type((T0*)C,((T0*)ms20_1308256781));
r82add_type(a1,((T0*)ms20_46));
}
/*FI]*/
return R;
}


T0* r356to_runnable(T356* C,T0* a1){
T0* R=NULL;
R=((T0*)(C));
r356check_type(C);
return R;
}


void r356standard_c_object_model(T356* C){
T0* _rc=NULL;
T2 _mem_id=0;
_rc=r356run_class(C);
_mem_id=(/*RF2*/(((T60*)_rc))->_id/*16*/);
/*[IRF3.3clear*/((((T7*)((T7*)(oBC62tmp_string))))->_count)=(0);
/*]*/
r7extend((T7*)(oBC62tmp_string),((T3)'T'));
r2append_in(_mem_id,oBC62tmp_string);
r7extend((T7*)(oBC62tmp_string),((T3)'\40'));
r7extend((T7*)(oBC62tmp_string),((T3)'M'));
r2append_in(_mem_id,oBC62tmp_string);
r83put_extern7((T83*)(oBC19cpp),oBC62tmp_string);
/*[IRF3.3swap_on_c*/((((T83*)((T83*)(oBC19cpp))))->_current_out)=(oBC83out_c);
/*]*/
/*[IRF3.3clear*/((((T7*)((T7*)(oBC62tmp_string))))->_count)=(0);
/*]*/
r60c_object_model_in(((T60*)_rc),oBC62tmp_string);
r7append((T7*)(oBC62tmp_string),((T0*)ms20_305));
/*[IRF3.5put_string*/r58put_string(((T58*)((/*RF2*/((T83*)(oBC19cpp))->_current_out/*63*/))),oBC62tmp_string);
/*]*/
r83swap_on_h((T83*)(oBC19cpp));
}


T0* r356run_class(T356* C){
T0* R=NULL;
/*[IF*/
if(((/*RF2*/(C)->_run_class_memory/*8*/))!=((void*)(NULL))){
R=(/*RF2*/(C)->_run_class_memory/*8*/);
}
 else {/*AT*/(/*SFN*/C->_run_class_memory)=r59run_class(/*(IRF4.4run_type*/((T0*)(C))/*)*/);
R=(/*RF2*/(C)->_run_class_memory/*8*/);
}
/*FI]*/
return R;
}


void r356gc_store_left_in(T0* a1){
r7append(((T7*)a1),((T0*)ms62_280766651));
r2append_in(10,a1);
}


void r356c_header_pass4(T356* C){
/*[IF*/
if(r356need_c_struct(C)){
r356standard_c_struct(C);
}
/*FI]*/
r356standard_c_object_model(C);
r356standard_c_print_function(C);
}


void r356standard_just_before_gc_mark_in(T0* a1){
r356gc_free_in(a1);
r7extend(((T7*)a1),((T3)'\75'));
r7append(((T7*)a1),((T0*)ms20_12331));
r7append(((T7*)a1),((T0*)ms20_305));
}


void r356gc_info_nb_in(T0* a1){
r7append(((T7*)a1),((T0*)ms62_249330648));
r2append_in(10,a1);
}


void r356gc_call_new_in(T0* a1){
r7append(((T7*)a1),((T0*)ms20_3374));
r2append_in(10,a1);
r7extend(((T7*)a1),((T3)'\50'));
r7extend(((T7*)a1),((T3)'\51'));
}
T0*oBC62header=NULL;


void r171check_name_clash(T171* C,T0* a1){
T2 _i=0;
_i=/*(IRF4.6count*/r272count(((T272*)((/*RF2*/(C)->_flat_list/*8*/))))/*)*/;
while (!((_i)==(0)))
{
/*[IRF3.6name_clash*/{T271* C1=(T271*)(/*(IRF4.6name*/r272item(((T272*)((/*RF2*/(C)->_flat_list/*8*/))),_i)/*)*/);
T0* b1=a1;
r271name_clash_for(C1,b1,((T0*)ms271_529996976));
}/*]*/
_i=(_i)-(1);
}
}


T2 r171rank_of(T171* C,T0* a1){
T2 R=0;
R=/*(IRF4.6count*/r272count(((T272*)((/*RF2*/(C)->_flat_list/*8*/))))/*)*/;
while (!(((R)==(0))||((a1)==((void*)((/*RF2*/((T271*)(/*(IRF4.6name*/r272item(((T272*)((/*RF2*/(C)->_flat_list/*8*/))),R)/*)*/))->_to_string/*12*/))))))
{
R=(R)-(1);
}
return R;
}


void r171error(T104 a1,T0* a2){
r82add_position(a1);
/*[IRF3.6append*/{T0* b1=a2;
r7append((T7*)(oBC82explanation),b1);
}/*]*/
r82print_as_error((T82*)(oBC19eh));
}


T6 r171is_runnable(T171* C,T0* a1){
T6 R=0;
T0* _t=NULL;
T0* _n=NULL;
T2 _i=0;
R=1;
_i=/*(IRF4.6count*/r272count(((T272*)((/*RF2*/(C)->_flat_list/*8*/))))/*)*/;
while (!((!(R))||((_i)==(0))))
{
_t=r171type(C,_i);
/*[IF*/
if(X62is_run_type(_t)){
/*[IF*/
if((X62run_type(_t))!=((void*)(_t))){
R=0;
}
/*FI]*/
}
else{
R=0;
}
/*FI]*/
_i=(_i)-(1);
}
/*[IF*/
if(R){
_i=/*(IRF4.6count*/r272count(((T272*)((/*RF2*/(C)->_flat_list/*8*/))))/*)*/;
while (!((_i)==(0)))
{
_n=r272item((T272*)((/*RF2*/(C)->_flat_list/*8*/)),_i);
/*[IF*/
if((r271to_runnable(((T271*)_n),a1))==((void*)(NULL))){
{T104 se_tmp0;
r171error((/*RF2*/(((T271*)_n))->_start_position/*4*/),((T0*)ms122_2009288523));
}
_i=0;
}
else{
_i=(_i)-(1);
}
/*FI]*/
}
r171check_name_clash(C,a1);
}
/*FI]*/
return R;
}


T0* r171type(T171* C,T2 a1){
T0* R=NULL;
R=(/*RF2*/((T271*)(/*(IRF4.6name*/r272item(((T272*)((/*RF2*/(C)->_flat_list/*8*/))),a1)/*)*/))->_result_type/*16*/);
return R;
}


void r171fatal_error(T0* a1){
/*[IRF3.6append*/{T0* b1=a1;
r7append((T7*)(oBC82explanation),b1);
}/*]*/
r82print_as_fatal_error((T82*)(oBC19eh));
}


void r171c_declare(T171* C){
T0* _n=NULL;
T2 _i=0;
_i=/*(IRF4.6count*/r272count(((T272*)((/*RF2*/(C)->_flat_list/*8*/))))/*)*/;
while (!((_i)==(0)))
{
_n=/*(IRF4.6name*/r272item(((T272*)((/*RF2*/(C)->_flat_list/*8*/))),_i)/*)*/;
r271c_declare(((T271*)_n));
/*[IF*/
if(r57no_check((T57*)(oBC19run_control))){
r271c_frame_descriptor(((T271*)_n),r171type(C,_i));
}
/*FI]*/
_i=(_i)-(1);
}
}


void r171inline_one_pc(T171* C){
T2 _i=0;
_i=/*(IRF4.6count*/r272count(((T272*)((/*RF2*/(C)->_flat_list/*8*/))))/*)*/;
while (!((_i)==(0)))
{
r83inline_level_incr((T83*)(oBC19cpp));
r271c_declare((T271*)(/*(IRF4.6name*/r272item(((T272*)((/*RF2*/(C)->_flat_list/*8*/))),_i)/*)*/));
r83inline_level_decr((T83*)(oBC19cpp));
_i=(_i)-(1);
}
}


void r171add_last(T171* C,T0* a1){
T0* _n2=NULL;
T2 _i=0;
_i=(/*RF2*/((T272*)((/*RF2*/(C)->_flat_list/*8*/)))->_lower/*16*/);
while (!((r272item((T272*)((/*RF2*/(C)->_flat_list/*8*/)),_i))==((void*)(NULL))))
{
_n2=r272item((T272*)((/*RF2*/(C)->_flat_list/*8*/)),_i);
/*[IF*/
if(((/*RF2*/(((T271*)_n2))->_to_string/*12*/))==((void*)((/*RF2*/(((T271*)a1))->_to_string/*12*/)))){
{T104 se_tmp0;
r82add_position((/*RF2*/(((T271*)a1))->_start_position/*4*/));
}
{T104 se_tmp0;
r82add_position((/*RF2*/(((T271*)_n2))->_start_position/*4*/));
}
r171fatal_error(((T0*)ms122_1318898854));
}
/*FI]*/
_i=(_i)+(1);
}
/*[IRF3.6put*/{T272* C1=(T272*)((/*RF2*/(C)->_flat_list/*8*/));
T0* b1=a1;
T2 b2=_i;
((/*RF2*/(C1)->_storage/*4*/))[(b2)-((/*RF2*/(C1)->_lower/*16*/))]=(b1);
}/*]*/
/*[IRF3.3set_rank*/((((T271*)(((T271*)a1))))->_rank)=(_i);
/*]*/
}


void r171dynamic_runnable(T171* C,T0* a1){
T0* _n2=NULL;
T0* _n1=NULL;
T2 _i=0;
(/*SFN*/C->_flat_list)=r272twin((T272*)((/*RF2*/(C)->_flat_list/*8*/)));
_i=(/*RF2*/((T272*)((/*RF2*/(C)->_flat_list/*8*/)))->_upper/*12*/);
while (!((_i)<((/*RF2*/((T272*)((/*RF2*/(C)->_flat_list/*8*/)))->_lower/*16*/))))
{
_n1=r272item((T272*)((/*RF2*/(C)->_flat_list/*8*/)),_i);
_n2=r271to_runnable(((T271*)_n1),a1);
/*[IF*/
if((_n2)==((void*)(NULL))){
{T104 se_tmp0;
r171error((/*RF2*/(((T271*)_n1))->_start_position/*4*/),((T0*)ms122_2009288523));
}
}
else{
/*[IRF3.6put*/{T272* C1=(T272*)((/*RF2*/(C)->_flat_list/*8*/));
T0* b1=_n2;
T2 b2=_i;
((/*RF2*/(C1)->_storage/*4*/))[(b2)-((/*RF2*/(C1)->_lower/*16*/))]=(b1);
}/*]*/
}
/*FI]*/
_i=(_i)-(1);
}
}


void r171declaration_list_make(T171* C,T0* a1){
T2 _actual_count=0;
T2 _il=0;
(/*SFN*/C->_list)=a1;
_il=/*SSWARF2*//*X398upper*/(/*RF2*/((T398*)((/*RF2*/(C)->_list/*4*/)))->_upper/*12*/);
while (!((_il)<(/*SSWARF2*//*X398lower*/(/*RF2*/((T398*)((/*RF2*/(C)->_list/*4*/)))->_lower/*16*/))))
{
_actual_count=(_actual_count)+(X397count(X398item((/*RF2*/(C)->_list/*4*/),_il)));
_il=(_il)-(1);
}
{T272*n=((T272*)se_malloc(sizeof(*n))/*20*/);
*n=M272;
r272make(n,1,_actual_count);
(/*SFN*/C->_flat_list)=((T0*)n);
}
_il=/*SSWARF2*//*X398lower*/(/*RF2*/((T398*)((/*RF2*/(C)->_list/*4*/)))->_lower/*16*/);
while (!((_il)>(/*SSWARF2*//*X398upper*/(/*RF2*/((T398*)((/*RF2*/(C)->_list/*4*/)))->_upper/*12*/))))
{
X397append_in(X398item((/*RF2*/(C)->_list/*4*/),_il),(T0*)C);
_il=(_il)+(1);
}
}


void r171initialize_expanded(T171* C){
T0* _rf3=NULL;
T0* _t=NULL;
T2 _i=0;
_i=/*(IRF4.6count*/r272count(((T272*)((/*RF2*/(C)->_flat_list/*8*/))))/*)*/;
while (!((_i)==(0)))
{
_t=X62run_type(r171type(C,_i));
/*[IF*/
if(X62is_expanded(_t)){
/*[IF*/
if(!(X62is_basic_eiffel_expanded(_t))){
_rf3=X62expanded_initializer(_t);
/*[IF*/
if((_rf3)!=((void*)(NULL))){
r83put_proc_call_0((T83*)(oBC19cpp),_rf3,/*(IRF4.6name*/r272item(((T272*)((/*RF2*/(C)->_flat_list/*8*/))),_i)/*)*/,NULL);
}
/*FI]*/
}
/*FI]*/
}
/*FI]*/
_i=(_i)-(1);
}
}


T0* r171twin(T171* C){
T0* R=NULL;
R=se_malloc(sizeof(*C));
*((T171*)R)=*C;
return R;
}


T0* r171to_runnable(T171* C,T0* a1){
T0* R=NULL;
/*[IF*/
if(r171is_runnable(C,a1)){
R=((T0*)(C));
}
else{
R=r171twin(C);
r171dynamic_runnable(((T171*)R),a1);
r171check_name_clash(((T171*)R),a1);
}
/*FI]*/
return R;
}


T6 r171produce_c(T171* C){
T6 R=0;
T2 _i=0;
_i=/*(IRF4.6count*/r272count(((T272*)((/*RF2*/(C)->_flat_list/*8*/))))/*)*/;
while (!((R)||((_i)==(0))))
{
R=r271produce_c((T271*)(/*(IRF4.6name*/r272item(((T272*)((/*RF2*/(C)->_flat_list/*8*/))),_i)/*)*/));
_i=(_i)-(1);
}
return R;
}


void r325error(T104 a1,T0* a2){
r82add_position(a1);
/*[IRF3.6append*/{T0* b1=a2;
r7append((T7*)(oBC82explanation),b1);
}/*]*/
r82print_as_error((T82*)(oBC19eh));
}


void r325add_when(T325* C,T0* a1){
/*[IF*/
if(((/*RF2*/(C)->_when_list/*16*/))==((void*)(NULL))){
{T327*n=((T327*)se_malloc(sizeof(*n))/*8*/);
*n=M327;
r327make(n,a1);
(/*SFN*/C->_when_list)=((T0*)n);
}
}
else{
/*[IRF3.5add_last*/r328add_last(((T328*)((/*RF2*/((T327*)((/*RF2*/(C)->_when_list/*16*/)))->_list/*4*/))),a1);
/*]*/
}
/*FI]*/
}
T0*oBC19exceptions_handler=NULL;


void r325compile_to_c(T325* C){
T6 _debug_check=0;
T6 _no_check=0;
_no_check=r57no_check((T57*)(oBC19run_control));
_debug_check=r57debug_check((T57*)(oBC19run_control));
r83inspect_incr((T83*)(oBC19cpp));
/*[IRF3.5put_string*/r58put_string(((T58*)((/*RF2*/((T83*)(oBC19cpp))->_current_out/*63*/))),((T0*)ms325_1470642763));
/*]*/
r83put_inspect((T83*)(oBC19cpp));
/*[IRF3.5put_character*//*[IRF3.6put_character*/{T58* C1=((T58*)((/*RF2*/((T83*)(oBC19cpp))->_current_out/*63*/)));
T3 b1=((T3)'\75');
putc(b1,((FILE*)((/*RF2*/(C1)->_output_stream/*4*/))));
}/*]*/
/*]*/
/*[IF*/
if(_debug_check){
/*[IRF3.5put_character*//*[IRF3.6put_character*/{T58* C1=((T58*)((/*RF2*/((T83*)(oBC19cpp))->_current_out/*63*/)));
T3 b1=((T3)'\50');
putc(b1,((FILE*)((/*RF2*/(C1)->_output_stream/*4*/))));
}/*]*/
/*]*/
{T104 se_tmp0;
r83se_trace_exp((T83*)(oBC19cpp),(*(se_tmp0=X126start_position((/*RF2*/(C)->_expression/*12*/)),&se_tmp0)));
}
/*[IRF3.5put_character*//*[IRF3.6put_character*/{T58* C1=((T58*)((/*RF2*/((T83*)(oBC19cpp))->_current_out/*63*/)));
T3 b1=((T3)'\54');
putc(b1,((FILE*)((/*RF2*/(C1)->_output_stream/*4*/))));
}/*]*/
/*]*/
}
/*FI]*/
X126compile_to_c((/*RF2*/(C)->_expression/*12*/));
/*[IF*/
if(_debug_check){
/*[IRF3.5put_character*//*[IRF3.6put_character*/{T58* C1=((T58*)((/*RF2*/((T83*)(oBC19cpp))->_current_out/*63*/)));
T3 b1=((T3)'\51');
putc(b1,((FILE*)((/*RF2*/(C1)->_output_stream/*4*/))));
}/*]*/
/*]*/
}
/*FI]*/
/*[IRF3.5put_string*/r58put_string(((T58*)((/*RF2*/((T83*)(oBC19cpp))->_current_out/*63*/))),((T0*)ms20_305));
/*]*/
/*[IF*/
if(((/*RF2*/(C)->_when_list/*16*/))==((void*)(NULL))){
{T104 se_tmp0;
/*[IF*/
if(r104is_unknown(&((/*RF2*/(C)->_else_position/*20*/)))){
{T104 se_tmp0;
/*[IF*/
if(_no_check){
{T104 se_tmp1;
T104 se_tmp0;
r165bad_inspect_value((T165*)(oBC19exceptions_handler),(/*RF2*/(C)->_start_position/*4*/));
}
}
/*FI]*/
}
}
 else if(((/*RF2*/(C)->_else_compound/*28*/))!=((void*)(NULL))){
{T104 se_tmp1;
T104 se_tmp0;
r159compile_to_c((T159*)((/*RF2*/(C)->_else_compound/*28*/)));
}
}
/*FI]*/
}
}
 else if(r325use_c_switch_statement(C)){
/*[IRF3.5put_string*/r58put_string(((T58*)((/*RF2*/((T83*)(oBC19cpp))->_current_out/*63*/))),((T0*)ms325_2251910));
/*]*/
r83put_inspect((T83*)(oBC19cpp));
/*[IRF3.5put_string*/r58put_string(((T58*)((/*RF2*/((T83*)(oBC19cpp))->_current_out/*63*/))),((T0*)ms325_1650));
/*]*/
{T104 se_tmp0;
r327compile_to_c_switch((T327*)((/*RF2*/(C)->_when_list/*16*/)),(/*RF2*/(C)->_else_position/*20*/));
}
{T104 se_tmp0;
/*[IF*/
if(r104is_unknown(&((/*RF2*/(C)->_else_position/*20*/)))){
{T104 se_tmp0;
/*[IF*/
if(_no_check){
{T104 se_tmp0;
/*[IRF3.5put_string*/r58put_string(((T58*)((/*RF2*/((T83*)(oBC19cpp))->_current_out/*63*/))),((T0*)ms325_244699380));
/*]*/
}
{T104 se_tmp1;
T104 se_tmp0;
r165bad_inspect_value((T165*)(oBC19exceptions_handler),(/*RF2*/(C)->_start_position/*4*/));
}
}
/*FI]*/
}
}
 else if(((/*RF2*/(C)->_else_compound/*28*/))!=((void*)(NULL))){
{T104 se_tmp1;
T104 se_tmp0;
/*[IRF3.5put_string*/r58put_string(((T58*)((/*RF2*/((T83*)(oBC19cpp))->_current_out/*63*/))),((T0*)ms325_244699380a));
/*]*/
}
{T104 se_tmp1;
T104 se_tmp0;
r159compile_to_c((T159*)((/*RF2*/(C)->_else_compound/*28*/)));
}
}
/*FI]*/
}
/*[IRF3.5put_string*/r58put_string(((T58*)((/*RF2*/((T83*)(oBC19cpp))->_current_out/*63*/))),((T0*)ms325_635));
/*]*/
}
else{
{T104 se_tmp0;
r327compile_to_c((T327*)((/*RF2*/(C)->_when_list/*16*/)),(/*RF2*/(C)->_else_position/*20*/));
}
{T104 se_tmp0;
/*[IF*/
if(r104is_unknown(&((/*RF2*/(C)->_else_position/*20*/)))){
{T104 se_tmp0;
/*[IF*/
if(_no_check){
{T104 se_tmp0;
/*[IRF3.5put_character*//*[IRF3.6put_character*/{T58* C1=((T58*)((/*RF2*/((T83*)(oBC19cpp))->_current_out/*63*/)));
T3 b1=((T3)'\40');
{T104 se_tmp0;
putc(b1,((FILE*)((/*RF2*/(C1)->_output_stream/*4*/))));
}
}/*]*/
/*]*/
}
{T104 se_tmp0;
/*[IRF3.5put_string*/r58put_string(((T58*)((/*RF2*/((T83*)(oBC19cpp))->_current_out/*63*/))),((T0*)ms20_16001));
/*]*/
}
{T104 se_tmp0;
/*[IRF3.5put_character*//*[IRF3.6put_character*/{T58* C1=((T58*)((/*RF2*/((T83*)(oBC19cpp))->_current_out/*63*/)));
T3 b1=((T3)'\173');
{T104 se_tmp0;
putc(b1,((FILE*)((/*RF2*/(C1)->_output_stream/*4*/))));
}
}/*]*/
/*]*/
}
{T104 se_tmp1;
T104 se_tmp0;
r165bad_inspect_value((T165*)(oBC19exceptions_handler),(/*RF2*/(C)->_start_position/*4*/));
}
{T104 se_tmp1;
T104 se_tmp0;
/*[IRF3.5put_character*//*[IRF3.6put_character*/{T58* C1=((T58*)((/*RF2*/((T83*)(oBC19cpp))->_current_out/*63*/)));
T3 b1=((T3)'\175');
{T104 se_tmp1;
T104 se_tmp0;
putc(b1,((FILE*)((/*RF2*/(C1)->_output_stream/*4*/))));
}
}/*]*/
/*]*/
}
}
/*FI]*/
}
}
 else if(((/*RF2*/(C)->_else_compound/*28*/))!=((void*)(NULL))){
{T104 se_tmp1;
T104 se_tmp0;
/*[IRF3.5put_character*//*[IRF3.6put_character*/{T58* C1=((T58*)((/*RF2*/((T83*)(oBC19cpp))->_current_out/*63*/)));
T3 b1=((T3)'\40');
{T104 se_tmp1;
T104 se_tmp0;
putc(b1,((FILE*)((/*RF2*/(C1)->_output_stream/*4*/))));
}
}/*]*/
/*]*/
}
{T104 se_tmp1;
T104 se_tmp0;
/*[IRF3.5put_string*/r58put_string(((T58*)((/*RF2*/((T83*)(oBC19cpp))->_current_out/*63*/))),((T0*)ms20_16001));
/*]*/
}
{T104 se_tmp1;
T104 se_tmp0;
/*[IRF3.5put_character*//*[IRF3.6put_character*/{T58* C1=((T58*)((/*RF2*/((T83*)(oBC19cpp))->_current_out/*63*/)));
T3 b1=((T3)'\173');
{T104 se_tmp1;
T104 se_tmp0;
putc(b1,((FILE*)((/*RF2*/(C1)->_output_stream/*4*/))));
}
}/*]*/
/*]*/
}
{T104 se_tmp1;
T104 se_tmp0;
r159compile_to_c((T159*)((/*RF2*/(C)->_else_compound/*28*/)));
}
{T104 se_tmp1;
T104 se_tmp0;
/*[IRF3.5put_character*//*[IRF3.6put_character*/{T58* C1=((T58*)((/*RF2*/((T83*)(oBC19cpp))->_current_out/*63*/)));
T3 b1=((T3)'\175');
{T104 se_tmp1;
T104 se_tmp0;
putc(b1,((FILE*)((/*RF2*/(C1)->_output_stream/*4*/))));
}
}/*]*/
/*]*/
}
}
/*FI]*/
}
}
/*FI]*/
/*[IRF3.5put_string*/r58put_string(((T58*)((/*RF2*/((T83*)(oBC19cpp))->_current_out/*63*/))),((T0*)ms325_485184123));
/*]*/
r83inspect_decr((T83*)(oBC19cpp));
}


T6 r325stupid_switch(T325* C,T0* a1){
T6 R=0;
/*[IF*/
if(X126stupid_switch((/*RF2*/(C)->_expression/*12*/),a1)){
/*[IF*/
if((((/*RF2*/(C)->_when_list/*16*/))==((void*)(NULL)))||(r327stupid_switch((T327*)((/*RF2*/(C)->_when_list/*16*/)),a1))){
/*[IF*/
if((((/*RF2*/(C)->_else_compound/*28*/))==((void*)(NULL)))||(r159stupid_switch((T159*)((/*RF2*/(C)->_else_compound/*28*/)),a1))){
R=1;
}
/*FI]*/
}
/*FI]*/
}
/*FI]*/
return R;
}


void r325make(T325* C,T104 a1,T0* a2){
(/*SFN*/C->_start_position)=a1;
(/*SFN*/C->_expression)=a2;
}


void r325set_else_compound(T325* C,T104 a1,T0* a2){
(/*SFN*/C->_else_position)=a1;
(/*SFN*/C->_else_compound)=a2;
}


void r325afd_check(T325* C){
X126afd_check((/*RF2*/(C)->_expression/*12*/));
/*[IF*/
if(((/*RF2*/(C)->_when_list/*16*/))!=((void*)(NULL))){
r327afd_check((T327*)((/*RF2*/(C)->_when_list/*16*/)));
}
/*FI]*/
/*[IF*/
if(((/*RF2*/(C)->_else_compound/*28*/))!=((void*)(NULL))){
r159afd_check((T159*)((/*RF2*/(C)->_else_compound/*28*/)));
}
/*FI]*/
}


T6 r325use_current(T325* C){
T6 R=0;
R=(R)||(X126use_current((/*RF2*/(C)->_expression/*12*/)));
/*[IF*/
if(((/*RF2*/(C)->_when_list/*16*/))!=((void*)(NULL))){
R=(R)||(r327use_current((T327*)((/*RF2*/(C)->_when_list/*16*/))));
}
/*FI]*/
/*[IF*/
if(((/*RF2*/(C)->_else_compound/*28*/))!=((void*)(NULL))){
R=(R)||(r159use_current((T159*)((/*RF2*/(C)->_else_compound/*28*/))));
}
/*FI]*/
return R;
}


T0* r325twin(T325* C){
T0* R=NULL;
R=se_malloc(sizeof(*C));
*((T325*)R)=*C;
return R;
}


T0* r325add_comment(T325* C,T0* a1){
T0* R=NULL;
/*[IF*/
if(((a1)==((void*)(NULL)))||((/*(IRF4.6count*/r52count(((T52*)((/*RF2*/(((T164*)a1))->_list/*8*/))))/*)*/)==(0))){
R=((T0*)(C));
}
 else {/*AT*//*[IF*/
if((/*(IRF4.6count*/r52count(((T52*)((/*RF2*/(((T164*)a1))->_list/*8*/))))/*)*/)==(1)){
R=((T0*)(C));
}
else{
{T316*n=((T316*)se_malloc(sizeof(*n))/*12*/);
*n=M316;
r316make(n,(T0*)C,a1);
R=((T0*)n);
}
}
/*FI]*/
}
/*FI]*/
return R;
}


T6 r325use_c_switch_statement(T325* C){
T6 R=0;
/*[IF*/
if((r327largest_range_of_values((T327*)((/*RF2*/(C)->_when_list/*16*/))))<=(32)){
R=1;
}
/*FI]*/
return R;
}


T0* r325to_runnable(T325* C,T0* a1){
T0* R=NULL;
T0* _wl=NULL;
T0* _te=NULL;
T0* _e=NULL;
/*[IF*/
if(((/*RF2*/(C)->_current_type/*32*/))==((void*)(NULL))){
(/*SFN*/C->_current_type)=a1;
_e=X126to_runnable((/*RF2*/(C)->_expression/*12*/),a1);
/*[IF*/
if((/*(IRF4.9nb_errors*/(/*RF2*/((T82*)(oBC19eh))->_error_counter/*0*/)/*)*/)==(0)){
(/*SFN*/C->_expression)=_e;
_te=X126result_type(_e);
}
/*FI]*/
/*[IF*/
if((/*(IRF4.9nb_errors*/(/*RF2*/((T82*)(oBC19eh))->_error_counter/*0*/)/*)*/)==(0)){
/*[IF*/
if(X62is_character(_te)){
/*[IF*/
if(((/*RF2*/(C)->_when_list/*16*/))!=((void*)(NULL))){
(/*SFN*/C->_when_list)=r327to_runnable_character((T327*)((/*RF2*/(C)->_when_list/*16*/)),(T0*)C);
/*[IF*/
if(((/*RF2*/(C)->_when_list/*16*/))==((void*)(NULL))){
{T104 se_tmp0;
r325error((/*RF2*/(C)->_start_position/*4*/),((T0*)ms325_93134055));
}
}
/*FI]*/
}
/*FI]*/
}
 else if(X62is_integer(_te)){
/*[IF*/
if(((/*RF2*/(C)->_when_list/*16*/))!=((void*)(NULL))){
(/*SFN*/C->_when_list)=r327to_runnable_integer((T327*)((/*RF2*/(C)->_when_list/*16*/)),(T0*)C);
/*[IF*/
if(((/*RF2*/(C)->_when_list/*16*/))==((void*)(NULL))){
{T104 se_tmp0;
r325error((/*RF2*/(C)->_start_position/*4*/),((T0*)ms325_93134055));
}
}
/*FI]*/
}
/*FI]*/
}
else{
/*[IRF3.6append*/{T0* b1=((T0*)ms325_403041978);
r7append((T7*)(oBC82explanation),b1);
}/*]*/
r82add_type(_te,((T0*)ms325_1492662176));
{T104 se_tmp0;
r82add_position((/*RF2*/(C)->_start_position/*4*/));
}
r82print_as_error((T82*)(oBC19eh));
}
/*FI]*/
}
/*FI]*/
/*[IF*/
if(((/*RF2*/(C)->_else_compound/*28*/))!=((void*)(NULL))){
(/*SFN*/C->_else_compound)=r159to_runnable((T159*)((/*RF2*/(C)->_else_compound/*28*/)),a1);
}
/*FI]*/
R=((T0*)(C));
}
else{
R=r325twin(C);
{T327*n=((T327*)se_malloc(sizeof(*n))/*8*/);
*n=M327;
r327from_when_list(n,(/*RF2*/(C)->_when_list/*16*/));
_wl=((T0*)n);
}
/*[IRF3.3set_when_list*/((((T325*)(((T325*)R))))->_when_list)=(_wl);
/*]*/
/*[IRF3.3clear_current_type*/((((T325*)(((T325*)R))))->_current_type)=(NULL);
/*]*/
R=r325to_runnable(((T325*)R),a1);
}
/*FI]*/
return R;
}


void r121check_name_clash(T121* C,T0* a1){
T2 _i=0;
_i=/*(IRF4.6count*/r128count(((T128*)((/*RF2*/(C)->_flat_list/*8*/))))/*)*/;
while (!((_i)==(0)))
{
/*[IRF3.6name_clash*/{T123* C1=(T123*)(/*(IRF4.6name*/r128item(((T128*)((/*RF2*/(C)->_flat_list/*8*/))),_i)/*)*/);
T0* b1=a1;
r123name_clash_for(C1,b1,((T0*)ms123_2015374870));
}/*]*/
_i=(_i)-(1);
}
}


void r121compile_to_c_in(T121* C,T0* a1){
T0* _t=NULL;
T2 _i=0;
_i=1;
while (!((_i)>(/*(IRF4.6count*/r128count(((T128*)((/*RF2*/(C)->_flat_list/*8*/))))/*)*/)))
{
_t=X62run_type(r121type(C,_i));
X62c_type_for_argument_in(_t,a1);
r7extend(((T7*)a1),((T3)'\40'));
r7extend(((T7*)a1),((T3)'a'));
r2append_in(_i,a1);
/*[IF*/
if(r57no_check((T57*)(oBC19run_control))){
r297increment((T297*)(oBC19c_frame_descriptor_local_count));
r7append((T7*)(oBC19c_frame_descriptor_format),(/*RF2*/((T123*)(/*(IRF4.6name*/r128item(((T128*)((/*RF2*/(C)->_flat_list/*8*/))),_i)/*)*/))->_to_string/*12*/));
X62c_frame_descriptor(_t);
r7append((T7*)(oBC19c_frame_descriptor_locals),((T0*)ms121_134876562));
r2append_in(_i,oBC19c_frame_descriptor_locals);
r7extend((T7*)(oBC19c_frame_descriptor_locals),((T3)'\54'));
}
/*FI]*/
_i=(_i)+(1);
/*[IF*/
if((_i)<=(/*(IRF4.6count*/r128count(((T128*)((/*RF2*/(C)->_flat_list/*8*/))))/*)*/)){
r7extend(((T7*)a1),((T3)'\54'));
}
/*FI]*/
}
}


T2 r121rank_of(T121* C,T0* a1){
T2 R=0;
R=/*(IRF4.6count*/r128count(((T128*)((/*RF2*/(C)->_flat_list/*8*/))))/*)*/;
while (!(((R)==(0))||((a1)==((void*)((/*RF2*/((T123*)(/*(IRF4.6name*/r128item(((T128*)((/*RF2*/(C)->_flat_list/*8*/))),R)/*)*/))->_to_string/*12*/))))))
{
R=(R)-(1);
}
return R;
}


void r121error(T104 a1,T0* a2){
r82add_position(a1);
/*[IRF3.6append*/{T0* b1=a2;
r7append((T7*)(oBC82explanation),b1);
}/*]*/
r82print_as_error((T82*)(oBC19eh));
}


T6 r121is_runnable(T121* C,T0* a1){
T6 R=0;
T0* _t=NULL;
T0* _n=NULL;
T2 _i=0;
R=1;
_i=/*(IRF4.6count*/r128count(((T128*)((/*RF2*/(C)->_flat_list/*8*/))))/*)*/;
while (!((!(R))||((_i)==(0))))
{
_t=r121type(C,_i);
/*[IF*/
if(X62is_run_type(_t)){
/*[IF*/
if((X62run_type(_t))!=((void*)(_t))){
R=0;
}
/*FI]*/
}
else{
R=0;
}
/*FI]*/
_i=(_i)-(1);
}
/*[IF*/
if(R){
_i=/*(IRF4.6count*/r128count(((T128*)((/*RF2*/(C)->_flat_list/*8*/))))/*)*/;
while (!((_i)==(0)))
{
_n=r128item((T128*)((/*RF2*/(C)->_flat_list/*8*/)),_i);
/*[IF*/
if((r123to_runnable(((T123*)_n),a1))==((void*)(NULL))){
{T104 se_tmp0;
r121error((/*RF2*/(((T123*)_n))->_start_position/*4*/),((T0*)ms122_2009288523));
}
_i=0;
}
else{
_i=(_i)-(1);
}
/*FI]*/
}
r121check_name_clash(C,a1);
}
/*FI]*/
return R;
}
T0*oBC19c_frame_descriptor_locals=NULL;


void r121with(T121* C,T0* a1,T0* a2){
*((T121*)(C))=*((T121*)(a1));
r121dynamic_runnable(C,a2);
r121check_name_clash(C,a2);
}


T0* r121type(T121* C,T2 a1){
T0* R=NULL;
R=(/*RF2*/((T123*)(/*(IRF4.6name*/r128item(((T128*)((/*RF2*/(C)->_flat_list/*8*/))),a1)/*)*/))->_result_type/*16*/);
return R;
}
T0*oBC121tmp_string=NULL;
T0*oBC19c_frame_descriptor_local_count=NULL;


void r121make(T121* C,T0* a1){
T0* _an2=NULL;
T2 _rank=0;
T2 _i=0;
T0* _tla2=NULL;
T0* _tla=NULL;
T0* _tlf=NULL;
T0* _an=NULL;
r121declaration_list_make(C,a1);
_i=/*(IRF4.6count*/r128count(((T128*)((/*RF2*/(C)->_flat_list/*8*/))))/*)*/;
while (!((_i)==(0)))
{
_an=/*(IRF4.6name*/r128item(((T128*)((/*RF2*/(C)->_flat_list/*8*/))),_i)/*)*/;
_tlf=(/*RF2*/(((T123*)_an))->_result_type/*16*/);
if(NULL!=(_tlf)){
switch(((T0*)_tlf)->id){
case 352:
break;
default:
_tlf=NULL;
}
}/*[IF*/
if((_tlf)!=((void*)(NULL))){
_rank=r121rank_of(C,X117to_string((/*RF2*/(((T352*)_tlf))->_like_what/*20*/)));
/*[IF*/
if((_rank)==(_i)){
{T104 se_tmp0;
r82add_position((/*RF2*/(((T352*)_tlf))->_start_position/*12*/));
}
r121fatal_error(((T0*)ms20_1839765037));
}
 else if((_rank)>(0)){
{T104 se_tmp0;
{T275*n=((T275*)se_malloc(sizeof(*n))/*20*/);
*n=M275;
r275refer_to(n,(*(se_tmp0=X117start_position((/*RF2*/(((T352*)_tlf))->_like_what/*20*/)),&se_tmp0)),(T0*)C,_rank);
_an2=((T0*)n);
}
}
{T104 se_tmp0;
{T355*n=((T355*)se_malloc(sizeof(*n))/*32*/);
*n=M355;
r355make(n,(/*RF2*/(((T352*)_tlf))->_start_position/*12*/),_an2);
_tla=((T0*)n);
}
}
/*[IRF3.3set_result_type*/((((T123*)(((T123*)_an))))->_result_type)=(_tla);
/*]*/
}
/*FI]*/
}
/*FI]*/
_i=(_i)-(1);
}
/*[IF*/
if(r57all_check((T57*)(oBC19run_control))){
_i=/*(IRF4.6count*/r128count(((T128*)((/*RF2*/(C)->_flat_list/*8*/))))/*)*/;
while (!((_i)==(0)))
{
_tla=(/*RF2*/((T123*)(/*(IRF4.6name*/r128item(((T128*)((/*RF2*/(C)->_flat_list/*8*/))),_i)/*)*/))->_result_type/*16*/);
if(NULL!=(_tla)){
switch(((T0*)_tla)->id){
case 355:
break;
default:
_tla=NULL;
}
}/*[IF*/
if((_tla)!=((void*)(NULL))){
_rank=r121rank_of(C,r275to_string((T275*)((/*RF2*/(((T355*)_tla))->_like_what/*20*/))));
_tla2=(/*RF2*/((T123*)(/*(IRF4.6name*/r128item(((T128*)((/*RF2*/(C)->_flat_list/*8*/))),_rank)/*)*/))->_result_type/*16*/);
if(NULL!=(_tla2)){
switch(((T0*)_tla2)->id){
case 355:
break;
default:
_tla2=NULL;
}
}/*[IF*/
if((_tla2)!=((void*)(NULL))){
{T104 se_tmp0;
r82add_position((/*RF2*/(((T355*)_tla))->_start_position/*12*/));
}
{T104 se_tmp0;
r82add_position((/*RF2*/(((T355*)_tla2))->_start_position/*12*/));
}
r121fatal_error(((T0*)ms20_1839765037));
}
/*FI]*/
}
/*FI]*/
_i=(_i)-(1);
}
}
/*FI]*/
}


void r121fatal_error(T0* a1){
/*[IRF3.6append*/{T0* b1=a1;
r7append((T7*)(oBC82explanation),b1);
}/*]*/
r82print_as_fatal_error((T82*)(oBC19eh));
}


void r121inline_one_pc(T121* C){
T0* _t=NULL;
T2 _i=0;
_i=1;
while (!((_i)>(/*(IRF4.6count*/r128count(((T128*)((/*RF2*/(C)->_flat_list/*8*/))))/*)*/)))
{
_t=X62run_type(r121type(C,_i));
/*[IRF3.3clear*/((((T7*)((T7*)(oBC121tmp_string))))->_count)=(0);
/*]*/
X62c_type_for_argument_in(_t,oBC121tmp_string);
r7extend((T7*)(oBC121tmp_string),((T3)'\40'));
/*[IRF3.5put_string*/r58put_string(((T58*)((/*RF2*/((T83*)(oBC19cpp))->_current_out/*63*/))),oBC121tmp_string);
/*]*/
r83inline_level_incr((T83*)(oBC19cpp));
r83print_argument((T83*)(oBC19cpp),_i);
r83inline_level_decr((T83*)(oBC19cpp));
/*[IRF3.5put_character*//*[IRF3.6put_character*/{T58* C1=((T58*)((/*RF2*/((T83*)(oBC19cpp))->_current_out/*63*/)));
T3 b1=((T3)'\75');
putc(b1,((FILE*)((/*RF2*/(C1)->_output_stream/*4*/))));
}/*]*/
/*]*/
r83put_ith_argument((T83*)(oBC19cpp),_i);
/*[IRF3.5put_string*/r58put_string(((T58*)((/*RF2*/((T83*)(oBC19cpp))->_current_out/*63*/))),((T0*)ms20_305));
/*]*/
_i=(_i)+(1);
}
}


void r121add_last(T121* C,T0* a1){
T0* _n2=NULL;
T2 _i=0;
_i=(/*RF2*/((T128*)((/*RF2*/(C)->_flat_list/*8*/)))->_lower/*16*/);
while (!((r128item((T128*)((/*RF2*/(C)->_flat_list/*8*/)),_i))==((void*)(NULL))))
{
_n2=r128item((T128*)((/*RF2*/(C)->_flat_list/*8*/)),_i);
/*[IF*/
if(((/*RF2*/(((T123*)_n2))->_to_string/*12*/))==((void*)((/*RF2*/(((T123*)a1))->_to_string/*12*/)))){
{T104 se_tmp0;
r82add_position((/*RF2*/(((T123*)a1))->_start_position/*4*/));
}
{T104 se_tmp0;
r82add_position((/*RF2*/(((T123*)_n2))->_start_position/*4*/));
}
r121fatal_error(((T0*)ms122_1318898854));
}
/*FI]*/
_i=(_i)+(1);
}
/*[IRF3.6put*/{T128* C1=(T128*)((/*RF2*/(C)->_flat_list/*8*/));
T0* b1=a1;
T2 b2=_i;
((/*RF2*/(C1)->_storage/*4*/))[(b2)-((/*RF2*/(C1)->_lower/*16*/))]=(b1);
}/*]*/
/*[IRF3.3set_rank*/((((T123*)(((T123*)a1))))->_rank)=(_i);
/*]*/
}


void r121external_prototype_in(T121* C,T0* a1){
T0* _t=NULL;
T2 _i=0;
_i=1;
while (!((_i)>(/*(IRF4.6count*/r128count(((T128*)((/*RF2*/(C)->_flat_list/*8*/))))/*)*/)))
{
_t=X62run_type(r121type(C,_i));
X62c_type_for_external_in(_t,a1);
r7extend(((T7*)a1),((T3)'\40'));
r7extend(((T7*)a1),((T3)'a'));
r2append_in(_i,a1);
_i=(_i)+(1);
/*[IF*/
if((_i)<=(/*(IRF4.6count*/r128count(((T128*)((/*RF2*/(C)->_flat_list/*8*/))))/*)*/)){
r7extend(((T7*)a1),((T3)'\54'));
}
/*FI]*/
}
}


void r121dynamic_runnable(T121* C,T0* a1){
T0* _n2=NULL;
T0* _n1=NULL;
T2 _i=0;
(/*SFN*/C->_flat_list)=r128twin((T128*)((/*RF2*/(C)->_flat_list/*8*/)));
_i=(/*RF2*/((T128*)((/*RF2*/(C)->_flat_list/*8*/)))->_upper/*12*/);
while (!((_i)<((/*RF2*/((T128*)((/*RF2*/(C)->_flat_list/*8*/)))->_lower/*16*/))))
{
_n1=r128item((T128*)((/*RF2*/(C)->_flat_list/*8*/)),_i);
_n2=r123to_runnable(((T123*)_n1),a1);
/*[IF*/
if((_n2)==((void*)(NULL))){
{T104 se_tmp0;
r121error((/*RF2*/(((T123*)_n1))->_start_position/*4*/),((T0*)ms122_2009288523));
}
}
else{
/*[IRF3.6put*/{T128* C1=(T128*)((/*RF2*/(C)->_flat_list/*8*/));
T0* b1=_n2;
T2 b2=_i;
((/*RF2*/(C1)->_storage/*4*/))[(b2)-((/*RF2*/(C1)->_lower/*16*/))]=(b1);
}/*]*/
}
/*FI]*/
_i=(_i)-(1);
}
}


T6 r121is_a_in(T121* C,T0* a1,T0* a2){
T6 R=0;
T0* _t2=NULL;
T0* _t1=NULL;
T2 _i=0;
_i=/*(IRF4.6count*/r128count(((T128*)((/*RF2*/(C)->_flat_list/*8*/))))/*)*/;
/*[IF*/
if((/*(IRF4.6count*/r128count(((T128*)((/*RF2*/(((T121*)a1))->_flat_list/*8*/))))/*)*/)!=(_i)){
{T104 se_tmp0;
r82add_position((*(se_tmp0=r121start_position(((T121*)a1)),&se_tmp0)));
}
{T104 se_tmp0;
r121error((*(se_tmp0=r121start_position(C),&se_tmp0)),((T0*)ms121_172193497));
}
}
/*FI]*/
/*[IF*/
if((/*(IRF4.9nb_errors*/(/*RF2*/((T82*)(oBC19eh))->_error_counter/*0*/)/*)*/)==(0)){
R=1;
while (!((!(R))||((_i)==(0))))
{
_t1=r121type(C,_i);
_t2=r121type(((T121*)a1),_i);
/*[IF*/
if(!(X62is_a_in(_t1,_t2,a2))){
R=0;
r82print_as_error((T82*)(oBC19eh));
{T104 se_tmp0;
r82add_position((*(se_tmp0=X62start_position(_t1),&se_tmp0)));
}
{T104 se_tmp0;
r82add_position((*(se_tmp0=X62start_position(_t2),&se_tmp0)));
}
/*[IRF3.6append*/{T0* b1=((T0*)ms121_671015455);
r7append((T7*)(oBC82explanation),b1);
}/*]*/
/*[IRF3.6append*/{T0* b1=X62run_time_mark((/*RF2*/(((T60*)a2))->_current_type/*0*/));
r7append((T7*)(oBC82explanation),b1);
}/*]*/
/*[IRF3.6append*/{T0* b1=((T0*)ms20_46);
r7append((T7*)(oBC82explanation),b1);
}/*]*/
r82print_as_error((T82*)(oBC19eh));
}
/*FI]*/
_i=(_i)-(1);
}
}
/*FI]*/
return R;
}


void r121declaration_list_make(T121* C,T0* a1){
T2 _actual_count=0;
T2 _il=0;
(/*SFN*/C->_list)=a1;
_il=/*SSWARF2*//*X398upper*/(/*RF2*/((T398*)((/*RF2*/(C)->_list/*4*/)))->_upper/*12*/);
while (!((_il)<(/*SSWARF2*//*X398lower*/(/*RF2*/((T398*)((/*RF2*/(C)->_list/*4*/)))->_lower/*16*/))))
{
_actual_count=(_actual_count)+(X397count(X398item((/*RF2*/(C)->_list/*4*/),_il)));
_il=(_il)-(1);
}
{T128*n=((T128*)se_malloc(sizeof(*n))/*20*/);
*n=M128;
r128make(n,1,_actual_count);
(/*SFN*/C->_flat_list)=((T0*)n);
}
_il=/*SSWARF2*//*X398lower*/(/*RF2*/((T398*)((/*RF2*/(C)->_list/*4*/)))->_lower/*16*/);
while (!((_il)>(/*SSWARF2*//*X398upper*/(/*RF2*/((T398*)((/*RF2*/(C)->_list/*4*/)))->_upper/*12*/))))
{
X397append_in(X398item((/*RF2*/(C)->_list/*4*/),_il),(T0*)C);
_il=(_il)+(1);
}
}


void r121afd_notify_conversion(T121* C,T0* a1){
T0* _destination_type=NULL;
T0* _source_type=NULL;
T2 _i=0;
_i=/*(IRF4.6count*/r128count(((T128*)((/*RF2*/(C)->_flat_list/*8*/))))/*)*/;
while (!((_i)==(0)))
{
_source_type=r121type(C,_i);
_destination_type=r121type(((T121*)a1),_i);
r440passing((T440*)(oBC19conversion_handler),_source_type,_destination_type);
_i=(_i)-(1);
}
}


T104 r121start_position(T121* C){
T104 R={NULL,0};
{T104 se_tmp0;
R=(/*RF2*/((T123*)(/*(IRF4.6first*/((/*RF2*/((T128*)((/*RF2*/(C)->_flat_list/*8*/)))->_storage/*4*/))[0]/*)*/))->_start_position/*4*/);
}
return R;
}


T0* r123base_class_written(T123* C){
T0* R=NULL;
{T104 se_tmp0;
R=(/*RF2*/((/*RF2*/(C)->_start_position/*4*/))._base_class/*0*/);
}
return R;
}


void r123error(T104 a1,T0* a2){
r82add_position(a1);
/*[IRF3.6append*/{T0* b1=a2;
r7append((T7*)(oBC82explanation),b1);
}/*]*/
r82print_as_error((T82*)(oBC19eh));
}


void r123name_clash_for(T123* C,T0* a1,T0* a2){
T0* _bc=NULL;
T0* _rc=NULL;
T0* _rf=NULL;
_bc=r123base_class_written(C);
/*[IF*/
if(r61has_simple_feature_name(((T61*)_bc),(/*RF2*/(C)->_to_string/*12*/))){
_rc=X62run_class(a1);
_rf=r60get_feature_with(((T60*)_rc),(/*RF2*/(C)->_to_string/*12*/));
/*[IF*/
if((_rf)!=((void*)(NULL))){
{T104 se_tmp0;
r82add_position((*(se_tmp0=X96start_position(_rf),&se_tmp0)));
}
}
/*FI]*/
{T104 se_tmp0;
r123error((/*RF2*/(C)->_start_position/*4*/),a2);
}
}
/*FI]*/
}


T6 r123stupid_switch(T123* C,T0* a1){
T6 R=0;
/*[IF*/
if(r59stupid_switch((/*RF2*/(C)->_result_type/*16*/),a1)){
R=1;
}
/*FI]*/
return R;
}


void r123make(T123* C,T104 a1,T0* a2){
(/*SFN*/C->_start_position)=a1;
(/*SFN*/C->_to_string)=a2;
}


void r123to_integer_error(T123* C){
/*[IRF3.6append*/{T0* b1=((T0*)ms20_752996481);
r7append((T7*)(oBC82explanation),b1);
}/*]*/
{T104 se_tmp0;
r82add_position((/*RF2*/(C)->_start_position/*4*/));
}
r82print_as_error((T82*)(oBC19eh));
}


void r123mapping_c_target(T123* C,T0* a1){
T0* _rt=NULL;
T6 _flag=0;
_flag=r83call_invariant_start(a1);
_rt=X62run_type((/*RF2*/(C)->_result_type/*16*/));
/*[IF*/
if(X62is_reference(_rt)){
/*[IF*/
if(X62is_reference(a1)){
/*[IRF3.5put_character*//*[IRF3.6put_character*/{T58* C1=((T58*)((/*RF2*/((T83*)(oBC19cpp))->_current_out/*63*/)));
T3 b1=((T3)'\50');
putc(b1,((FILE*)((/*RF2*/(C1)->_output_stream/*4*/))));
}/*]*/
/*]*/
X62mapping_cast(a1);
r83print_argument((T83*)(oBC19cpp),(/*RF2*/(C)->_rank/*20*/));
/*[IRF3.5put_character*//*[IRF3.6put_character*/{T58* C1=((T58*)((/*RF2*/((T83*)(oBC19cpp))->_current_out/*63*/)));
T3 b1=((T3)'\51');
putc(b1,((FILE*)((/*RF2*/(C1)->_output_stream/*4*/))));
}/*]*/
/*]*/
}
else{
r83print_argument((T83*)(oBC19cpp),(/*RF2*/(C)->_rank/*20*/));
}
/*FI]*/
}
 else if(X62is_reference(a1)){
r83print_argument((T83*)(oBC19cpp),(/*RF2*/(C)->_rank/*20*/));
}
 else if(X62is_user_expanded(_rt)){
/*[IF*/
if(!(X62is_dummy_expanded(_rt))){
/*[IRF3.5put_character*//*[IRF3.6put_character*/{T58* C1=((T58*)((/*RF2*/((T83*)(oBC19cpp))->_current_out/*63*/)));
T3 b1=((T3)'\46');
putc(b1,((FILE*)((/*RF2*/(C1)->_output_stream/*4*/))));
}/*]*/
/*]*/
}
/*FI]*/
r83print_argument((T83*)(oBC19cpp),(/*RF2*/(C)->_rank/*20*/));
}
else{
r83print_argument((T83*)(oBC19cpp),(/*RF2*/(C)->_rank/*20*/));
}
/*FI]*/
/*[IF*/
if(_flag){
/*[IRF3.2call_invariant_end*//*[IRF3.6put_character*/{T58* C1=(T58*)(oBC83out_c);
T3 b1=((T3)'\51');
putc(b1,((FILE*)((/*RF2*/(C1)->_output_stream/*4*/))));
}/*]*/
/*]*/
}
/*FI]*/
}


T0* r123twin(T123* C){
T0* R=NULL;
R=se_malloc(sizeof(*C));
*((T123*)R)=*C;
return R;
}


T2 r123to_integer_or_error(T123* C){
T2 R=0;
r123to_integer_error(C);
return R;
}


T0* r123add_comment(T123* C,T0* a1){
T0* R=NULL;
/*[IF*/
if(((a1)==((void*)(NULL)))||((/*(IRF4.6count*/r52count(((T52*)((/*RF2*/(((T164*)a1))->_list/*8*/))))/*)*/)==(0))){
R=((T0*)(C));
}
else{
{T323*n=((T323*)se_malloc(sizeof(*n))/*12*/);
*n=M323;
r323make(n,(T0*)C,a1);
R=((T0*)n);
}
}
/*FI]*/
return R;
}


T0* r123to_runnable(T123* C,T0* a1){
T0* R=NULL;
T0* _rt=NULL;
_rt=X62to_runnable((/*RF2*/(C)->_result_type/*16*/),a1);
/*[IF*/
if((_rt)==((void*)(NULL))){
{T104 se_tmp0;
r82add_position((*(se_tmp0=X62start_position((/*RF2*/(C)->_result_type/*16*/)),&se_tmp0)));
}
{T104 se_tmp0;
r123error((/*RF2*/(C)->_start_position/*4*/),((T0*)ms123_462691396));
}
}
/*FI]*/
/*[IF*/
if(((/*RF2*/(C)->_result_type/*16*/))==((void*)(_rt))){
R=((T0*)(C));
}
else{
R=r123twin(C);
/*[IRF3.3set_result_type*/((((T123*)(((T123*)R))))->_result_type)=(_rt);
/*]*/
}
/*FI]*/
return R;
}


T0* r123static_result_base_class(T123* C){
T0* R=NULL;
T0* _bcn=NULL;
_bcn=X62static_base_class_name((/*RF2*/(C)->_result_type/*16*/));
/*[IF*/
if((_bcn)!=((void*)(NULL))){
R=r77base_class(((T77*)_bcn));
}
/*FI]*/
return R;
}


void r218run_feature_match(T218* C,T0* a1){
r218run_feature_has_result(C);
X245match_with((/*RF2*/(C)->_arguments/*8*/),(/*RF2*/(C)->_run_feature/*16*/),a1);
}


T0* r218runnable_expression(T0* a1,T0* a2){
T0* R=NULL;
R=X126to_runnable(a1,a2);
/*[IF*/
if((R)==((void*)(NULL))){
{T104 se_tmp0;
r82add_position((*(se_tmp0=X126start_position(a1),&se_tmp0)));
}
r218fatal_error(((T0*)ms168_1263631766));
}
/*FI]*/
return R;
}


T6 r218call_proc_call_stupid_switch(T218* C,T0* a1){
T6 R=0;
/*[IF*/
if(((/*RF2*/(C)->_arguments/*8*/))==((void*)(NULL))){
R=1;
}
else{
R=/*SSFRF4*//*X245stupid_switch*/r245stupid_switch((T245*)((/*RF2*/(C)->_arguments/*8*/)),a1);
}
/*FI]*/
/*[IF*/
if(R){
/*[IF*/
if(X126is_current((/*RF2*/(C)->_target/*4*/))){
/*[IF*/
if(r59same_base_feature((/*RF2*/(C)->_run_feature/*16*/),a1)){
R=(X96stupid_switch((/*RF2*/(C)->_run_feature/*16*/),a1))!=((void*)(NULL));
}
else{
R=0;
}
/*FI]*/
}
else{
R=X126stupid_switch((/*RF2*/(C)->_target/*4*/),a1);
}
/*FI]*/
}
/*FI]*/
return R;
}


T6 r218is_static(T218* C){
T6 R=0;
/*[IF*/
if(X62is_boolean(X126result_type((/*RF2*/(C)->_target/*4*/)))){
/*[IF*/
if(X126is_static((/*RF2*/(C)->_target/*4*/))){
/*[IF*/
if((X126static_value((/*RF2*/(C)->_target/*4*/)))==(0)){
R=1;
(/*SFN*/C->_static_value_mem)=1;
}
 else if(X126is_static(r218arg1(C))){
R=1;
(/*SFN*/C->_static_value_mem)=X126static_value(r218arg1(C));
}
/*FI]*/
}
/*FI]*/
}
/*FI]*/
return R;
}


T0* r218operator(void){
T0* R=NULL;
R=((T0*)ms21_2067995);
return R;
}


void r218with(T218* C,T0* a1,T0* a2,T0* a3,T0* a4,T0* a5){
(/*SFN*/C->_target)=a1;
(/*SFN*/C->_feature_name)=a2;
(/*SFN*/C->_arguments)=a3;
(/*SFN*/C->_run_feature)=a4;
r218run_feature_match(C,a5);
}


void r218run_feature_has_result(T218* C){
/*[IF*/
if((X96result_type((/*RF2*/(C)->_run_feature/*16*/)))==((void*)(NULL))){
{T104 se_tmp0;
r82add_position((*(se_tmp0=X96start_position((/*RF2*/(C)->_run_feature/*16*/)),&se_tmp0)));
}
{T104 se_tmp0;
r82add_position((/*RF2*/((T235*)((/*RF2*/(C)->_feature_name/*12*/)))->_start_position/*4*/));
}
r218fatal_error(((T0*)ms222_793028699));
}
/*FI]*/
}


T6 r218stupid_switch(T218* C,T0* a1){
T6 R=0;
R=r218call_proc_call_stupid_switch(C,a1);
/*[IF*/
if(R){
R=!(X62is_native_array(r218result_type(C)));
}
/*FI]*/
return R;
}


void r218make(T218* C,T0* a1,T104 a2,T0* a3){
(/*SFN*/C->_target)=a1;
{T235*n=((T235*)se_malloc(sizeof(*n))/*20*/);
*n=M235;
r235make(n,r218operator(),a2);
(/*SFN*/C->_feature_name)=((T0*)n);
}
{T245*n=((T245*)se_malloc(sizeof(*n))/*16*/);
*n=M245;
/*[IRF3.3make_1*/((((T245*)(n)))->_first_one)=(a3);
/*]*/
(/*SFN*/C->_arguments)=((T0*)n);
}
}


void r218fatal_error(T0* a1){
/*[IRF3.6append*/{T0* b1=a1;
r7append((T7*)(oBC82explanation),b1);
}/*]*/
r82print_as_fatal_error((T82*)(oBC19eh));
}


void r218to_integer_error(T218* C){
/*[IRF3.6append*/{T0* b1=((T0*)ms20_752996481);
r7append((T7*)(oBC82explanation),b1);
}/*]*/
{T104 se_tmp0;
r82add_position(/*(IRF4.6start_position*/(/*RF2*/(((T235*)((/*RF2*/(C)->_feature_name/*12*/))))->_start_position/*4*/)/*)*/);
}
r82print_as_error((T82*)(oBC19eh));
}


T0* r218arg1(T218* C){
T0* R=NULL;
R=/*SSFRF4*//*X245first*//*(IRF4.3first*/(/*RF2*/((T245*)((/*RF2*/(C)->_arguments/*8*/)))->_first_one/*4*/)/*)*/;
return R;
}


void r218assertion_check(T218* C,T3 a1){
/*[IF*/
if((a1)==(((T3)'R'))){
{T104 se_tmp0;
X96vape_check_from((/*RF2*/(C)->_run_feature/*16*/),/*(IRF4.6start_position*/(/*RF2*/(((T235*)((/*RF2*/(C)->_feature_name/*12*/))))->_start_position/*4*/)/*)*/);
}
}
/*FI]*/
X126assertion_check((/*RF2*/(C)->_target/*4*/),a1);
X126assertion_check(r218arg1(C),a1);
}


T0* r218result_type(T218* C){
T0* R=NULL;
T0* _tla=NULL;
R=X96result_type((/*RF2*/(C)->_run_feature/*16*/));
/*[IF*/
if(X62is_like_current(R)){
R=/*SSWARF2*//*X96current_type*/(/*RF2*/((T154*)((/*RF2*/(C)->_run_feature/*16*/)))->_current_type/*8*/);
}
else{
_tla=R;
if(NULL!=(_tla)){
switch(((T0*)_tla)->id){
case 355:
break;
default:
_tla=NULL;
}
}/*[IF*/
if((_tla)!=((void*)(NULL))){
R=X62run_type(X126result_type(r218arg1(C)));
}
/*FI]*/
}
/*FI]*/
return R;
}


void r218afd_check(T218* C){
T0* _running=NULL;
T0* _rc=NULL;
/*[IF*/
if(((/*RF2*/(C)->_run_feature/*16*/))!=((void*)(NULL))){
_rc=X62run_class(X126result_type((/*RF2*/(C)->_target/*4*/)));
_running=(/*RF2*/(((T60*)_rc))->_running/*21*/);
/*[IF*/
if((_running)==((void*)(NULL))){
}
 else if((r63count(((T63*)_running)))>(1)){
r432update((/*RF2*/(C)->_target/*4*/),(/*RF2*/(C)->_run_feature/*16*/));
}
/*FI]*/
}
/*FI]*/
X126afd_check((/*RF2*/(C)->_target/*4*/));
/*[IF*/
{/*AT*//*SSPRF3*//*X245afd_check*/r245afd_check((T245*)((/*RF2*/(C)->_arguments/*8*/)));
}
/*FI]*/
}


T6 r218use_current(T218* C){
T6 R=0;
/*[IF*/
{/*AT*/R=/*SSFRF4*//*X245use_current*/r245use_current((T245*)((/*RF2*/(C)->_arguments/*8*/)));
}
/*FI]*/
/*[IF*/
if(R){
}
 else if(X126is_current((/*RF2*/(C)->_target/*4*/))){
R=X96use_current((/*RF2*/(C)->_run_feature/*16*/));
}
else{
R=X126use_current((/*RF2*/(C)->_target/*4*/));
}
/*FI]*/
return R;
}


void r218c_declare_for_old(T218* C){
X126c_declare_for_old((/*RF2*/(C)->_target/*4*/));
/*[IF*/
{/*AT*//*SSPRF3*//*X245c_declare_for_old*/r245c_declare_for_old((T245*)((/*RF2*/(C)->_arguments/*8*/)));
}
/*FI]*/
}


void r218compile_to_c_old(T218* C){
X126compile_to_c_old((/*RF2*/(C)->_target/*4*/));
/*[IF*/
{/*AT*//*SSPRF3*//*X245compile_to_c_old*/r245compile_to_c_old((T245*)((/*RF2*/(C)->_arguments/*8*/)));
}
/*FI]*/
}


T0* r218runnable_args(T0* a1,T0* a2){
T0* R=NULL;
R=X245to_runnable(a1,a2);
/*[IF*/
if((R)==((void*)(NULL))){
{T104 se_tmp0;
r82add_position((*(se_tmp0=X245start_position(a1),&se_tmp0)));
}
r218fatal_error(((T0*)ms20_462691396));
}
/*FI]*/
return R;
}


void r218mapping_c_target(T218* C,T0* a1){
T0* _actual_type=NULL;
T6 _flag=0;
_flag=r83call_invariant_start(a1);
_actual_type=X62run_type(r218result_type(C));
/*[IF*/
if(X62is_reference(_actual_type)){
/*[IF*/
if(X62is_reference(a1)){
X62mapping_cast(a1);
/*[IRF3.5put_character*//*[IRF3.6put_character*/{T58* C1=((T58*)((/*RF2*/((T83*)(oBC19cpp))->_current_out/*63*/)));
T3 b1=((T3)'\50');
putc(b1,((FILE*)((/*RF2*/(C1)->_output_stream/*4*/))));
}/*]*/
/*]*/
/*[IRF3.4compile_to_c*//*[IRF3.6call_proc_call_c2c*/{T218* C1=C;
r83put_cpc((T83*)(oBC19cpp),(T0*)C1);
}/*]*/
/*]*/
/*[IRF3.5put_character*//*[IRF3.6put_character*/{T58* C1=((T58*)((/*RF2*/((T83*)(oBC19cpp))->_current_out/*63*/)));
T3 b1=((T3)'\51');
putc(b1,((FILE*)((/*RF2*/(C1)->_output_stream/*4*/))));
}/*]*/
/*]*/
}
else{
/*[IRF3.4compile_to_c*//*[IRF3.6call_proc_call_c2c*/{T218* C1=C;
r83put_cpc((T83*)(oBC19cpp),(T0*)C1);
}/*]*/
/*]*/
}
/*FI]*/
}
else{
/*[IF*/
if(X62is_reference(a1)){
/*[IRF3.4compile_to_c*//*[IRF3.6call_proc_call_c2c*/{T218* C1=C;
r83put_cpc((T83*)(oBC19cpp),(T0*)C1);
}/*]*/
/*]*/
}
else{
/*[IF*/
if(X62need_c_struct(a1)){
/*[IRF3.5put_character*//*[IRF3.6put_character*/{T58* C1=((T58*)((/*RF2*/((T83*)(oBC19cpp))->_current_out/*63*/)));
T3 b1=((T3)'\46');
putc(b1,((FILE*)((/*RF2*/(C1)->_output_stream/*4*/))));
}/*]*/
/*]*/
/*[IRF3.5put_character*//*[IRF3.6put_character*/{T58* C1=((T58*)((/*RF2*/((T83*)(oBC19cpp))->_current_out/*63*/)));
T3 b1=((T3)'\50');
putc(b1,((FILE*)((/*RF2*/(C1)->_output_stream/*4*/))));
}/*]*/
/*]*/
/*[IRF3.4compile_to_c*//*[IRF3.6call_proc_call_c2c*/{T218* C1=C;
r83put_cpc((T83*)(oBC19cpp),(T0*)C1);
}/*]*/
/*]*/
/*[IRF3.5put_character*//*[IRF3.6put_character*/{T58* C1=((T58*)((/*RF2*/((T83*)(oBC19cpp))->_current_out/*63*/)));
T3 b1=((T3)'\51');
putc(b1,((FILE*)((/*RF2*/(C1)->_output_stream/*4*/))));
}/*]*/
/*]*/
}
else{
/*[IRF3.4compile_to_c*//*[IRF3.6call_proc_call_c2c*/{T218* C1=C;
r83put_cpc((T83*)(oBC19cpp),(T0*)C1);
}/*]*/
/*]*/
}
/*FI]*/
}
/*FI]*/
}
/*FI]*/
/*[IF*/
if(_flag){
/*[IRF3.2call_invariant_end*//*[IRF3.6put_character*/{T58* C1=(T58*)(oBC83out_c);
T3 b1=((T3)'\51');
putc(b1,((FILE*)((/*RF2*/(C1)->_output_stream/*4*/))));
}/*]*/
/*]*/
}
/*FI]*/
}


T0* r218run_feature_for(T218* C,T0* a1,T0* a2){
T0* R=NULL;
T0* _bc=NULL;
T0* _rt=NULL;
T0* _rc=NULL;
_rt=X126result_type(a1);
/*[IF*/
if((_rt)!=((void*)(NULL))){
_rc=X62run_class(_rt);
/*[IF*/
if((_rc)!=((void*)(NULL))){
_bc=(/*RF2*/(((T60*)_rc))->_base_class/*8*/);
R=r61run_feature_for(((T61*)_bc),_rc,a1,(/*RF2*/(C)->_feature_name/*12*/),a2);
}
/*FI]*/
}
/*FI]*/
/*[IF*/
if((R)==((void*)(NULL))){
{T104 se_tmp0;
r82add_position((/*RF2*/((T235*)((/*RF2*/(C)->_feature_name/*12*/)))->_start_position/*4*/));
}
/*[IRF3.6append*/{T0* b1=((T0*)ms168_608361995);
r7append((T7*)(oBC82explanation),b1);
}/*]*/
r82print_as_fatal_error((T82*)(oBC19eh));
}
/*FI]*/
return R;
}


T2 r218to_integer_or_error(T218* C){
T2 R=0;
r218to_integer_error(C);
return R;
}


T0* r218add_comment(T218* C,T0* a1){
T0* R=NULL;
/*[IF*/
if(((a1)==((void*)(NULL)))||((/*(IRF4.6count*/r52count(((T52*)((/*RF2*/(((T164*)a1))->_list/*8*/))))/*)*/)==(0))){
R=((T0*)(C));
}
else{
{T323*n=((T323*)se_malloc(sizeof(*n))/*12*/);
*n=M323;
r323make(n,(T0*)C,a1);
R=((T0*)n);
}
}
/*FI]*/
return R;
}


T0* r218to_runnable(T218* C,T0* a1){
T0* R=NULL;
T0* _target_type=NULL;
T0* _argument_type=NULL;
T0* _rf=NULL;
T0* _a=NULL;
T0* _t=NULL;
_t=r218runnable_expression((/*RF2*/(C)->_target/*4*/),a1);
_a=r218runnable_args((/*RF2*/(C)->_arguments/*8*/),a1);
_target_type=X126result_type(_t);
_argument_type=X126result_type(r218arg1(C));
/*[IF*/
if(X62is_real(_argument_type)){
/*[IF*/
if(X62is_integer(_target_type)){
_t=r440implicit_cast((T440*)(oBC19conversion_handler),_t,_argument_type);
}
/*FI]*/
}
 else if(X62is_double(_argument_type)){
/*[IF*/
if((X62is_integer(_target_type))||(X62is_real(_target_type))){
_t=r440implicit_cast((T440*)(oBC19conversion_handler),_t,_argument_type);
}
/*FI]*/
}
/*FI]*/
_rf=r218run_feature_for(C,_t,a1);
/*[IF*/
if(((/*RF2*/(C)->_run_feature/*16*/))==((void*)(NULL))){
(/*SFN*/C->_target)=_t;
(/*SFN*/C->_arguments)=_a;
(/*SFN*/C->_run_feature)=_rf;
r218run_feature_match(C,a1);
R=((T0*)(C));
}
 else if(((_t)==((void*)((/*RF2*/(C)->_target/*4*/))))&&((_a)==((void*)((/*RF2*/(C)->_arguments/*8*/))))){
R=((T0*)(C));
}
else{
{T218*n=((T218*)se_malloc(sizeof(*n))/*24*/);
*n=M218;
r218with(n,_t,(/*RF2*/(C)->_feature_name/*12*/),_a,_rf,a1);
R=((T0*)n);
}
}
/*FI]*/
return R;
}


void r218collect_c_tmp(T218* C){
/*[IF*/
if(((/*RF2*/(C)->_run_feature/*16*/))!=((void*)(NULL))){
X96collect_c_tmp((/*RF2*/(C)->_run_feature/*16*/));
}
/*FI]*/
X126collect_c_tmp((/*RF2*/(C)->_target/*4*/));
/*[IF*/
if(((/*RF2*/(C)->_arguments/*8*/))!=((void*)(NULL))){
/*SSPRF3*//*X245collect_c_tmp*/r245collect_c_tmp((T245*)((/*RF2*/(C)->_arguments/*8*/)));
}
/*FI]*/
}


void r218finalize(T218* C){
T0* _rf=NULL;
T0* _rc=NULL;
_rf=(/*RF2*/(C)->_run_feature/*16*/);
_rc=/*SSWARF2*//*X96run_class*/(/*RF2*/(((T154*)_rf))->_run_class/*12*/);
(/*SFN*/C->_run_feature)=r60dynamic((T60*)(/*(IRF4.6first*/((/*RF2*/((T63*)((/*RF2*/(((T60*)_rc))->_running/*21*/)))->_storage/*4*/))[0]/*)*/),_rf);
}


T0* r218static_result_base_class(T218* C){
T0* R=NULL;
T0* _cn=NULL;
T0* _rt=NULL;
T0* _e_feature=NULL;
T0* _bc=NULL;
_bc=X126static_result_base_class((/*RF2*/(C)->_target/*4*/));
/*[IF*/
if((_bc)!=((void*)(NULL))){
_e_feature=r61e_feature(((T61*)_bc),(/*RF2*/(C)->_feature_name/*12*/));
/*[IF*/
if((_e_feature)!=((void*)(NULL))){
_rt=X99result_type(_e_feature);
/*[IF*/
if((_rt)!=((void*)(NULL))){
_cn=X62static_base_class_name(_rt);
/*[IF*/
if((_cn)!=((void*)(NULL))){
R=r77base_class(((T77*)_cn));
}
/*FI]*/
}
/*FI]*/
}
/*FI]*/
}
/*FI]*/
return R;
}


void r287warning(T104 a1,T0* a2){
r82add_position(a1);
/*[IRF3.6append*/{T0* b1=a2;
r7append((T7*)(oBC82explanation),b1);
}/*]*/
r82print_as_warning((T82*)(oBC19eh));
}


T6 r287gives_permission_to(T287* C,T0* a1){
T6 R=0;
T2 _i=0;
/*[IF*/
if((r287index_of(C,a1))>(0)){
R=1;
}
else{
_i=r287count(C);
while (!((R)||((_i)==(0))))
{
R=r77is_subclass_of(((T77*)a1),r287item(C,_i));
_i=(_i)-(1);
}
}
/*FI]*/
return R;
}


T2 r287count(T287* C){
T2 R=0;
/*[IF*/
if(((/*RF2*/(C)->_remainder/*4*/))==((void*)(NULL))){
R=1;
}
else{
R=(2)+((/*RF2*/((T288*)((/*RF2*/(C)->_remainder/*4*/)))->_upper/*8*/));
}
/*FI]*/
return R;
}


T0* r287item(T287* C,T2 a1){
T0* R=NULL;
/*[IF*/
if((a1)==(1)){
R=(/*RF2*/(C)->_first/*0*/);
}
else{
R=/*(IRF4.6item*/((/*RF2*/((T288*)((/*RF2*/(C)->_remainder/*4*/)))->_storage/*0*/))[(a1)-(2)]/*)*/;
}
/*FI]*/
return R;
}


void r287merge(T287* C,T0* a1,T0* a2){
T0* _cn=NULL;
T2 _i=0;
(/*SFN*/C->_first)=r287item(((T287*)a1),1);
{T288*n=((T288*)se_malloc(sizeof(*n))/*12*/);
*n=M288;
r288with_capacity(n,((r287count(((T287*)a1)))+(r287count(((T287*)a2))))-(1));
(/*SFN*/C->_remainder)=((T0*)n);
}
_i=r287count(((T287*)a1));
while (!((_i)==(1)))
{
r288add_last((T288*)((/*RF2*/(C)->_remainder/*4*/)),r287item(((T287*)a1),_i));
_i=(_i)-(1);
}
_i=r287count(((T287*)a2));
while (!((_i)==(0)))
{
_cn=r287item(((T287*)a2),_i);
/*[IF*/
if((r287index_of(C,_cn))==(0)){
r288add_last((T288*)((/*RF2*/(C)->_remainder/*4*/)),_cn);
}
/*FI]*/
_i=(_i)-(1);
}
}


T2 r287index_of(T287* C,T0* a1){
T2 R=0;
T0* _to_string=NULL;
_to_string=(/*RF2*/(((T77*)a1))->_to_string/*8*/);
R=r287count(C);
while (!(((R)==(0))||((_to_string)==((void*)((/*RF2*/((T77*)(r287item(C,R)))->_to_string/*8*/))))))
{
R=(R)-(1);
}
return R;
}


T6 r287gives_permission_to_any(T287* C){
T6 R=0;
T0* _cn=NULL;
T2 _i=0;
_i=r287count(C);
while (!((R)||((_i)==(0))))
{
_cn=r287item(C,_i);
R=((/*RF2*/(((T77*)_cn))->_to_string/*8*/))==((void*)(((T0*)ms21_2104)));
_i=(_i)-(1);
}
return R;
}


void r287add_last(T287* C,T0* a1){
T2 _i=0;
_i=r287index_of(C,a1);
/*[IF*/
if((_i)>(0)){
{T104 se_tmp0;
r82add_position((/*RF2*/((T77*)(r287item(C,_i)))->_start_position/*0*/));
}
{T104 se_tmp0;
r287warning((/*RF2*/(((T77*)a1))->_start_position/*0*/),((T0*)ms287_2094878563));
}
}
/*FI]*/
/*[IF*/
if(((/*RF2*/(C)->_remainder/*4*/))==((void*)(NULL))){
{T288*n=((T288*)se_malloc(sizeof(*n))/*12*/);
*n=M288;
r288with_capacity(n,4);
(/*SFN*/C->_remainder)=((T0*)n);
}
}
/*FI]*/
r288add_last((T288*)((/*RF2*/(C)->_remainder/*4*/)),a1);
}


void r236run_feature_match(T236* C){
r236run_feature_has_result(C);
/*[IF*/
if((X96arguments((/*RF2*/(C)->_run_feature/*8*/)))!=((void*)(NULL))){
{T104 se_tmp0;
r82add_position((/*RF2*/((T239*)((/*RF2*/(C)->_feature_name/*12*/)))->_start_position/*4*/));
}
{T104 se_tmp0;
r82add_position((*(se_tmp0=X96start_position((/*RF2*/(C)->_run_feature/*8*/)),&se_tmp0)));
}
r236fatal_error(((T0*)ms238_1369876739));
}
/*FI]*/
}


T6 r236can_be_dropped(T236* C){
T6 R=0;
/*[IF*/
if(X126can_be_dropped((/*RF2*/(C)->_target/*4*/))){
R=X96can_be_dropped((/*RF2*/(C)->_run_feature/*8*/));
}
/*FI]*/
return R;
}


T0* r236runnable_expression(T0* a1,T0* a2){
T0* R=NULL;
R=X126to_runnable(a1,a2);
/*[IF*/
if((R)==((void*)(NULL))){
{T104 se_tmp0;
r82add_position((*(se_tmp0=X126start_position(a1),&se_tmp0)));
}
r236fatal_error(((T0*)ms168_1263631766));
}
/*FI]*/
return R;
}


T6 r236call_proc_call_stupid_switch(T236* C,T0* a1){
T6 R=0;
/*[IF*/
{/*AT*/R=1;
}
/*FI]*/
/*[IF*/
if(R){
/*[IF*/
if(X126is_current((/*RF2*/(C)->_target/*4*/))){
/*[IF*/
if(r59same_base_feature((/*RF2*/(C)->_run_feature/*8*/),a1)){
R=(X96stupid_switch((/*RF2*/(C)->_run_feature/*8*/),a1))!=((void*)(NULL));
}
else{
R=0;
}
/*FI]*/
}
else{
R=X126stupid_switch((/*RF2*/(C)->_target/*4*/),a1);
}
/*FI]*/
}
/*FI]*/
return R;
}


T6 r236is_static(T236* C){
T6 R=0;
T0* _rf=NULL;
T0* _running=NULL;
_running=(/*RF2*/((T60*)(/*SSWARF2*//*X96run_class*/(/*RF2*/((T154*)((/*RF2*/(C)->_run_feature/*8*/)))->_run_class/*12*/)))->_running/*21*/);
/*[IF*/
if(((_running)!=((void*)(NULL)))&&((r63count(((T63*)_running)))==(1))){
_rf=r60dynamic((T60*)(/*(IRF4.6first*/((/*RF2*/(((T63*)_running))->_storage/*4*/))[0]/*)*/),(/*RF2*/(C)->_run_feature/*8*/));
/*[IF*/
if(X96is_static(_rf)){
R=1;
}
/*FI]*/
}
/*FI]*/
return R;
}


void r236with(T236* C,T0* a1,T0* a2,T0* a3){
(/*SFN*/C->_target)=a1;
(/*SFN*/C->_feature_name)=a2;
(/*SFN*/C->_run_feature)=a3;
r236run_feature_match(C);
}


void r236run_feature_has_result(T236* C){
/*[IF*/
if((X96result_type((/*RF2*/(C)->_run_feature/*8*/)))==((void*)(NULL))){
{T104 se_tmp0;
r82add_position((*(se_tmp0=X96start_position((/*RF2*/(C)->_run_feature/*8*/)),&se_tmp0)));
}
{T104 se_tmp0;
r82add_position((/*RF2*/((T239*)((/*RF2*/(C)->_feature_name/*12*/)))->_start_position/*4*/));
}
r236fatal_error(((T0*)ms222_793028699));
}
/*FI]*/
}


T6 r236stupid_switch(T236* C,T0* a1){
T6 R=0;
R=r236call_proc_call_stupid_switch(C,a1);
/*[IF*/
if(R){
R=!(X62is_native_array(r236result_type(C)));
}
/*FI]*/
return R;
}


void r236make(T236* C,T0* a1,T0* a2){
(/*SFN*/C->_target)=a1;
(/*SFN*/C->_feature_name)=a2;
}


void r236fatal_error(T0* a1){
/*[IRF3.6append*/{T0* b1=a1;
r7append((T7*)(oBC82explanation),b1);
}/*]*/
r82print_as_fatal_error((T82*)(oBC19eh));
}


void r236to_integer_error(T236* C){
/*[IRF3.6append*/{T0* b1=((T0*)ms20_752996481);
r7append((T7*)(oBC82explanation),b1);
}/*]*/
{T104 se_tmp0;
r82add_position(/*(IRF4.6start_position*/(/*RF2*/(((T239*)((/*RF2*/(C)->_feature_name/*12*/))))->_start_position/*4*/)/*)*/);
}
r82print_as_error((T82*)(oBC19eh));
}


void r236assertion_check(T236* C,T3 a1){
/*[IF*/
if((a1)==(((T3)'R'))){
{T104 se_tmp0;
X96vape_check_from((/*RF2*/(C)->_run_feature/*8*/),/*(IRF4.6start_position*/(/*RF2*/(((T239*)((/*RF2*/(C)->_feature_name/*12*/))))->_start_position/*4*/)/*)*/);
}
}
/*FI]*/
X126assertion_check((/*RF2*/(C)->_target/*4*/),a1);
}


T0* r236result_type(T236* C){
T0* R=NULL;
R=X96result_type((/*RF2*/(C)->_run_feature/*8*/));
/*[IF*/
if(X62is_like_current(R)){
R=/*SSWARF2*//*X96current_type*/(/*RF2*/((T154*)((/*RF2*/(C)->_run_feature/*8*/)))->_current_type/*8*/);
}
/*FI]*/
return R;
}


void r236afd_check(T236* C){
T0* _running=NULL;
T0* _rc=NULL;
/*[IF*/
if(((/*RF2*/(C)->_run_feature/*8*/))!=((void*)(NULL))){
_rc=X62run_class(X126result_type((/*RF2*/(C)->_target/*4*/)));
_running=(/*RF2*/(((T60*)_rc))->_running/*21*/);
/*[IF*/
if((_running)==((void*)(NULL))){
}
 else if((r63count(((T63*)_running)))>(1)){
r432update((/*RF2*/(C)->_target/*4*/),(/*RF2*/(C)->_run_feature/*8*/));
}
/*FI]*/
}
/*FI]*/
X126afd_check((/*RF2*/(C)->_target/*4*/));
/*[IF*/
/*AF*//*AE*/
/*FI]*/
}


T6 r236use_current(T236* C){
T6 R=0;
/*[IF*/
/*AF*//*AE*/
/*FI]*/
/*[IF*/
if(R){
}
 else if(X126is_current((/*RF2*/(C)->_target/*4*/))){
R=X96use_current((/*RF2*/(C)->_run_feature/*8*/));
}
else{
R=X126use_current((/*RF2*/(C)->_target/*4*/));
}
/*FI]*/
return R;
}


T2 r236static_value(T236* C){
T2 R=0;
T0* _rf=NULL;
T0* _running=NULL;
_running=(/*RF2*/((T60*)(/*SSWARF2*//*X96run_class*/(/*RF2*/((T154*)((/*RF2*/(C)->_run_feature/*8*/)))->_run_class/*12*/)))->_running/*21*/);
/*[IF*/
if(((_running)!=((void*)(NULL)))&&((r63count(((T63*)_running)))==(1))){
_rf=r60dynamic((T60*)(/*(IRF4.6first*/((/*RF2*/(((T63*)_running))->_storage/*4*/))[0]/*)*/),(/*RF2*/(C)->_run_feature/*8*/));
/*[IF*/
if(X96is_static(_rf)){
R=X96static_value_mem(_rf);
}
/*FI]*/
}
/*FI]*/
return R;
}


void r236c_declare_for_old(T236* C){
X126c_declare_for_old((/*RF2*/(C)->_target/*4*/));
/*[IF*/
/*AF*//*AE*/
/*FI]*/
}


void r236compile_to_c_old(T236* C){
X126compile_to_c_old((/*RF2*/(C)->_target/*4*/));
/*[IF*/
/*AF*//*AE*/
/*FI]*/
}


void r236mapping_c_target(T236* C,T0* a1){
T0* _actual_type=NULL;
T6 _flag=0;
_flag=r83call_invariant_start(a1);
_actual_type=X62run_type(r236result_type(C));
/*[IF*/
if(X62is_reference(_actual_type)){
/*[IF*/
if(X62is_reference(a1)){
X62mapping_cast(a1);
/*[IRF3.5put_character*//*[IRF3.6put_character*/{T58* C1=((T58*)((/*RF2*/((T83*)(oBC19cpp))->_current_out/*63*/)));
T3 b1=((T3)'\50');
putc(b1,((FILE*)((/*RF2*/(C1)->_output_stream/*4*/))));
}/*]*/
/*]*/
/*[IRF3.4compile_to_c*//*[IRF3.6call_proc_call_c2c*/{T236* C1=C;
r83put_cpc((T83*)(oBC19cpp),(T0*)C1);
}/*]*/
/*]*/
/*[IRF3.5put_character*//*[IRF3.6put_character*/{T58* C1=((T58*)((/*RF2*/((T83*)(oBC19cpp))->_current_out/*63*/)));
T3 b1=((T3)'\51');
putc(b1,((FILE*)((/*RF2*/(C1)->_output_stream/*4*/))));
}/*]*/
/*]*/
}
else{
/*[IRF3.4compile_to_c*//*[IRF3.6call_proc_call_c2c*/{T236* C1=C;
r83put_cpc((T83*)(oBC19cpp),(T0*)C1);
}/*]*/
/*]*/
}
/*FI]*/
}
else{
/*[IF*/
if(X62is_reference(a1)){
/*[IRF3.4compile_to_c*//*[IRF3.6call_proc_call_c2c*/{T236* C1=C;
r83put_cpc((T83*)(oBC19cpp),(T0*)C1);
}/*]*/
/*]*/
}
else{
/*[IF*/
if(X62need_c_struct(a1)){
/*[IRF3.5put_character*//*[IRF3.6put_character*/{T58* C1=((T58*)((/*RF2*/((T83*)(oBC19cpp))->_current_out/*63*/)));
T3 b1=((T3)'\46');
putc(b1,((FILE*)((/*RF2*/(C1)->_output_stream/*4*/))));
}/*]*/
/*]*/
/*[IRF3.5put_character*//*[IRF3.6put_character*/{T58* C1=((T58*)((/*RF2*/((T83*)(oBC19cpp))->_current_out/*63*/)));
T3 b1=((T3)'\50');
putc(b1,((FILE*)((/*RF2*/(C1)->_output_stream/*4*/))));
}/*]*/
/*]*/
/*[IRF3.4compile_to_c*//*[IRF3.6call_proc_call_c2c*/{T236* C1=C;
r83put_cpc((T83*)(oBC19cpp),(T0*)C1);
}/*]*/
/*]*/
/*[IRF3.5put_character*//*[IRF3.6put_character*/{T58* C1=((T58*)((/*RF2*/((T83*)(oBC19cpp))->_current_out/*63*/)));
T3 b1=((T3)'\51');
putc(b1,((FILE*)((/*RF2*/(C1)->_output_stream/*4*/))));
}/*]*/
/*]*/
}
else{
/*[IRF3.4compile_to_c*//*[IRF3.6call_proc_call_c2c*/{T236* C1=C;
r83put_cpc((T83*)(oBC19cpp),(T0*)C1);
}/*]*/
/*]*/
}
/*FI]*/
}
/*FI]*/
}
/*FI]*/
/*[IF*/
if(_flag){
/*[IRF3.2call_invariant_end*//*[IRF3.6put_character*/{T58* C1=(T58*)(oBC83out_c);
T3 b1=((T3)'\51');
putc(b1,((FILE*)((/*RF2*/(C1)->_output_stream/*4*/))));
}/*]*/
/*]*/
}
/*FI]*/
}


T0* r236run_feature_for(T236* C,T0* a1,T0* a2){
T0* R=NULL;
T0* _bc=NULL;
T0* _rt=NULL;
T0* _rc=NULL;
_rt=X126result_type(a1);
/*[IF*/
if((_rt)!=((void*)(NULL))){
_rc=X62run_class(_rt);
/*[IF*/
if((_rc)!=((void*)(NULL))){
_bc=(/*RF2*/(((T60*)_rc))->_base_class/*8*/);
R=r61run_feature_for(((T61*)_bc),_rc,a1,(/*RF2*/(C)->_feature_name/*12*/),a2);
}
/*FI]*/
}
/*FI]*/
/*[IF*/
if((R)==((void*)(NULL))){
{T104 se_tmp0;
r82add_position((/*RF2*/((T239*)((/*RF2*/(C)->_feature_name/*12*/)))->_start_position/*4*/));
}
/*[IRF3.6append*/{T0* b1=((T0*)ms168_608361995);
r7append((T7*)(oBC82explanation),b1);
}/*]*/
r82print_as_fatal_error((T82*)(oBC19eh));
}
/*FI]*/
return R;
}


T2 r236to_integer_or_error(T236* C){
T2 R=0;
T0* _rf1=NULL;
_rf1=(/*RF2*/(C)->_run_feature/*8*/);
if(NULL!=(_rf1)){
switch(((T0*)_rf1)->id){
case 437:
break;
default:
_rf1=NULL;
}
}/*[IF*/
if((_rf1)==((void*)(NULL))){
r236to_integer_error(C);
}
else{
R=X126to_integer_or_error((/*RF2*/(((T437*)_rf1))->_value/*32*/));
}
/*FI]*/
return R;
}


T0* r236add_comment(T236* C,T0* a1){
T0* R=NULL;
/*[IF*/
if(((a1)==((void*)(NULL)))||((/*(IRF4.6count*/r52count(((T52*)((/*RF2*/(((T164*)a1))->_list/*8*/))))/*)*/)==(0))){
R=((T0*)(C));
}
else{
{T323*n=((T323*)se_malloc(sizeof(*n))/*12*/);
*n=M323;
r323make(n,(T0*)C,a1);
R=((T0*)n);
}
}
/*FI]*/
return R;
}


T0* r236to_runnable(T236* C,T0* a1){
T0* R=NULL;
T0* _rf=NULL;
T0* _t=NULL;
_t=r236runnable_expression((/*RF2*/(C)->_target/*4*/),a1);
_rf=r236run_feature_for(C,_t,a1);
/*[IF*/
if(((/*RF2*/(C)->_run_feature/*8*/))==((void*)(NULL))){
(/*SFN*/C->_target)=_t;
(/*SFN*/C->_run_feature)=_rf;
r236run_feature_match(C);
R=((T0*)(C));
}
 else if((_t)==((void*)((/*RF2*/(C)->_target/*4*/)))){
R=((T0*)(C));
}
else{
{T236*n=((T236*)se_malloc(sizeof(*n))/*16*/);
*n=M236;
r236with(n,_t,(/*RF2*/(C)->_feature_name/*12*/),_rf);
R=((T0*)n);
}
}
/*FI]*/
return R;
}


void r236collect_c_tmp(T236* C){
/*[IF*/
if(((/*RF2*/(C)->_run_feature/*8*/))!=((void*)(NULL))){
X96collect_c_tmp((/*RF2*/(C)->_run_feature/*8*/));
}
/*FI]*/
X126collect_c_tmp((/*RF2*/(C)->_target/*4*/));
/*[IF*/
/*AF*//*AE*/
/*FI]*/
}


void r236finalize(T236* C){
T0* _rf=NULL;
T0* _rc=NULL;
_rf=(/*RF2*/(C)->_run_feature/*8*/);
_rc=/*SSWARF2*//*X96run_class*/(/*RF2*/(((T154*)_rf))->_run_class/*12*/);
(/*SFN*/C->_run_feature)=r60dynamic((T60*)(/*(IRF4.6first*/((/*RF2*/((T63*)((/*RF2*/(((T60*)_rc))->_running/*21*/)))->_storage/*4*/))[0]/*)*/),_rf);
}


T0* r236static_result_base_class(T236* C){
T0* R=NULL;
T0* _cn=NULL;
T0* _rt=NULL;
T0* _e_feature=NULL;
T0* _bc=NULL;
_bc=X126static_result_base_class((/*RF2*/(C)->_target/*4*/));
/*[IF*/
if((_bc)!=((void*)(NULL))){
_e_feature=r61e_feature(((T61*)_bc),(/*RF2*/(C)->_feature_name/*12*/));
/*[IF*/
if((_e_feature)!=((void*)(NULL))){
_rt=X99result_type(_e_feature);
/*[IF*/
if((_rt)!=((void*)(NULL))){
_cn=X62static_base_class_name(_rt);
/*[IF*/
if((_cn)!=((void*)(NULL))){
R=r77base_class(((T77*)_cn));
}
/*FI]*/
}
/*FI]*/
}
/*FI]*/
}
/*FI]*/
return R;
}


void r240run_feature_match(T240* C){
r240run_feature_has_result(C);
/*[IF*/
if((X96arguments((/*RF2*/(C)->_run_feature/*8*/)))!=((void*)(NULL))){
{T104 se_tmp0;
r82add_position((/*RF2*/((T239*)((/*RF2*/(C)->_feature_name/*12*/)))->_start_position/*4*/));
}
{T104 se_tmp0;
r82add_position((*(se_tmp0=X96start_position((/*RF2*/(C)->_run_feature/*8*/)),&se_tmp0)));
}
r240fatal_error(((T0*)ms238_1369876739));
}
/*FI]*/
}


T6 r240can_be_dropped(T240* C){
T6 R=0;
/*[IF*/
if(X126can_be_dropped((/*RF2*/(C)->_target/*4*/))){
R=X96can_be_dropped((/*RF2*/(C)->_run_feature/*8*/));
}
/*FI]*/
return R;
}


T0* r240runnable_expression(T0* a1,T0* a2){
T0* R=NULL;
R=X126to_runnable(a1,a2);
/*[IF*/
if((R)==((void*)(NULL))){
{T104 se_tmp0;
r82add_position((*(se_tmp0=X126start_position(a1),&se_tmp0)));
}
r240fatal_error(((T0*)ms168_1263631766));
}
/*FI]*/
return R;
}


T6 r240call_proc_call_stupid_switch(T240* C,T0* a1){
T6 R=0;
/*[IF*/
{/*AT*/R=1;
}
/*FI]*/
/*[IF*/
if(R){
/*[IF*/
if(X126is_current((/*RF2*/(C)->_target/*4*/))){
/*[IF*/
if(r59same_base_feature((/*RF2*/(C)->_run_feature/*8*/),a1)){
R=(X96stupid_switch((/*RF2*/(C)->_run_feature/*8*/),a1))!=((void*)(NULL));
}
else{
R=0;
}
/*FI]*/
}
else{
R=X126stupid_switch((/*RF2*/(C)->_target/*4*/),a1);
}
/*FI]*/
}
/*FI]*/
return R;
}


T6 r240is_static(T240* C){
T6 R=0;
/*[IF*/
if(X62is_boolean(X126result_type((/*RF2*/(C)->_target/*4*/)))){
/*[IF*/
if(X126is_static((/*RF2*/(C)->_target/*4*/))){
R=1;
}
/*FI]*/
}
/*FI]*/
return R;
}


T0* r240operator(void){
T0* R=NULL;
R=((T0*)ms21_3421);
return R;
}


void r240with(T240* C,T0* a1,T0* a2,T0* a3){
(/*SFN*/C->_target)=a1;
(/*SFN*/C->_feature_name)=a2;
(/*SFN*/C->_run_feature)=a3;
r240run_feature_match(C);
}


void r240run_feature_has_result(T240* C){
/*[IF*/
if((X96result_type((/*RF2*/(C)->_run_feature/*8*/)))==((void*)(NULL))){
{T104 se_tmp0;
r82add_position((*(se_tmp0=X96start_position((/*RF2*/(C)->_run_feature/*8*/)),&se_tmp0)));
}
{T104 se_tmp0;
r82add_position((/*RF2*/((T239*)((/*RF2*/(C)->_feature_name/*12*/)))->_start_position/*4*/));
}
r240fatal_error(((T0*)ms222_793028699));
}
/*FI]*/
}


void r240compile_to_c(T240* C){
/*[IF*/
if((r57boost((T57*)(oBC19run_control)))&&(X62is_boolean(X62run_type(X126result_type((/*RF2*/(C)->_target/*4*/)))))){
/*[IRF3.5put_string*/r58put_string(((T58*)((/*RF2*/((T83*)(oBC19cpp))->_current_out/*63*/))),((T0*)ms240_205));
/*]*/
X126compile_to_c((/*RF2*/(C)->_target/*4*/));
/*[IRF3.5put_character*//*[IRF3.6put_character*/{T58* C1=((T58*)((/*RF2*/((T83*)(oBC19cpp))->_current_out/*63*/)));
T3 b1=((T3)'\51');
putc(b1,((FILE*)((/*RF2*/(C1)->_output_stream/*4*/))));
}/*]*/
/*]*/
}
else{
/*[IRF3.6call_proc_call_c2c*/{T240* C1=C;
r83put_cpc((T83*)(oBC19cpp),(T0*)C1);
}/*]*/
}
/*FI]*/
}


T6 r240stupid_switch(T240* C,T0* a1){
T6 R=0;
R=r240call_proc_call_stupid_switch(C,a1);
/*[IF*/
if(R){
R=!(X62is_native_array(r240result_type(C)));
}
/*FI]*/
return R;
}


void r240make(T240* C,T104 a1,T0* a2){
{T239*n=((T239*)se_malloc(sizeof(*n))/*20*/);
*n=M239;
r239make(n,r240operator(),a1);
(/*SFN*/C->_feature_name)=((T0*)n);
}
(/*SFN*/C->_target)=a2;
}


void r240fatal_error(T0* a1){
/*[IRF3.6append*/{T0* b1=a1;
r7append((T7*)(oBC82explanation),b1);
}/*]*/
r82print_as_fatal_error((T82*)(oBC19eh));
}


void r240to_integer_error(T240* C){
/*[IRF3.6append*/{T0* b1=((T0*)ms20_752996481);
r7append((T7*)(oBC82explanation),b1);
}/*]*/
{T104 se_tmp0;
r82add_position(/*(IRF4.6start_position*/(/*RF2*/(((T239*)((/*RF2*/(C)->_feature_name/*12*/))))->_start_position/*4*/)/*)*/);
}
r82print_as_error((T82*)(oBC19eh));
}


void r240assertion_check(T240* C,T3 a1){
/*[IF*/
if((a1)==(((T3)'R'))){
{T104 se_tmp0;
X96vape_check_from((/*RF2*/(C)->_run_feature/*8*/),/*(IRF4.6start_position*/(/*RF2*/(((T239*)((/*RF2*/(C)->_feature_name/*12*/))))->_start_position/*4*/)/*)*/);
}
}
/*FI]*/
X126assertion_check((/*RF2*/(C)->_target/*4*/),a1);
}


T0* r240result_type(T240* C){
T0* R=NULL;
R=X96result_type((/*RF2*/(C)->_run_feature/*8*/));
/*[IF*/
if(X62is_like_current(R)){
R=/*SSWARF2*//*X96current_type*/(/*RF2*/((T154*)((/*RF2*/(C)->_run_feature/*8*/)))->_current_type/*8*/);
}
/*FI]*/
return R;
}


void r240afd_check(T240* C){
T0* _running=NULL;
T0* _rc=NULL;
/*[IF*/
if(((/*RF2*/(C)->_run_feature/*8*/))!=((void*)(NULL))){
_rc=X62run_class(X126result_type((/*RF2*/(C)->_target/*4*/)));
_running=(/*RF2*/(((T60*)_rc))->_running/*21*/);
/*[IF*/
if((_running)==((void*)(NULL))){
}
 else if((r63count(((T63*)_running)))>(1)){
r432update((/*RF2*/(C)->_target/*4*/),(/*RF2*/(C)->_run_feature/*8*/));
}
/*FI]*/
}
/*FI]*/
X126afd_check((/*RF2*/(C)->_target/*4*/));
/*[IF*/
/*AF*//*AE*/
/*FI]*/
}


T6 r240use_current(T240* C){
T6 R=0;
/*[IF*/
/*AF*//*AE*/
/*FI]*/
/*[IF*/
if(R){
}
 else if(X126is_current((/*RF2*/(C)->_target/*4*/))){
R=X96use_current((/*RF2*/(C)->_run_feature/*8*/));
}
else{
R=X126use_current((/*RF2*/(C)->_target/*4*/));
}
/*FI]*/
return R;
}


T2 r240static_value(T240* C){
T2 R=0;
/*[IF*/
if(X62is_boolean(X126result_type((/*RF2*/(C)->_target/*4*/)))){
/*[IF*/
if(X126is_static((/*RF2*/(C)->_target/*4*/))){
/*[IF*/
if((X126static_value((/*RF2*/(C)->_target/*4*/)))==(0)){
R=1;
}
/*FI]*/
}
/*FI]*/
}
/*FI]*/
return R;
}


void r240c_declare_for_old(T240* C){
X126c_declare_for_old((/*RF2*/(C)->_target/*4*/));
/*[IF*/
/*AF*//*AE*/
/*FI]*/
}


void r240compile_to_c_old(T240* C){
X126compile_to_c_old((/*RF2*/(C)->_target/*4*/));
/*[IF*/
/*AF*//*AE*/
/*FI]*/
}


void r240mapping_c_target(T240* C,T0* a1){
T0* _actual_type=NULL;
T6 _flag=0;
_flag=r83call_invariant_start(a1);
_actual_type=X62run_type(r240result_type(C));
/*[IF*/
if(X62is_reference(_actual_type)){
/*[IF*/
if(X62is_reference(a1)){
X62mapping_cast(a1);
/*[IRF3.5put_character*//*[IRF3.6put_character*/{T58* C1=((T58*)((/*RF2*/((T83*)(oBC19cpp))->_current_out/*63*/)));
T3 b1=((T3)'\50');
putc(b1,((FILE*)((/*RF2*/(C1)->_output_stream/*4*/))));
}/*]*/
/*]*/
r240compile_to_c(C);
/*[IRF3.5put_character*//*[IRF3.6put_character*/{T58* C1=((T58*)((/*RF2*/((T83*)(oBC19cpp))->_current_out/*63*/)));
T3 b1=((T3)'\51');
putc(b1,((FILE*)((/*RF2*/(C1)->_output_stream/*4*/))));
}/*]*/
/*]*/
}
else{
r240compile_to_c(C);
}
/*FI]*/
}
else{
/*[IF*/
if(X62is_reference(a1)){
r240compile_to_c(C);
}
else{
/*[IF*/
if(X62need_c_struct(a1)){
/*[IRF3.5put_character*//*[IRF3.6put_character*/{T58* C1=((T58*)((/*RF2*/((T83*)(oBC19cpp))->_current_out/*63*/)));
T3 b1=((T3)'\46');
putc(b1,((FILE*)((/*RF2*/(C1)->_output_stream/*4*/))));
}/*]*/
/*]*/
/*[IRF3.5put_character*//*[IRF3.6put_character*/{T58* C1=((T58*)((/*RF2*/((T83*)(oBC19cpp))->_current_out/*63*/)));
T3 b1=((T3)'\50');
putc(b1,((FILE*)((/*RF2*/(C1)->_output_stream/*4*/))));
}/*]*/
/*]*/
r240compile_to_c(C);
/*[IRF3.5put_character*//*[IRF3.6put_character*/{T58* C1=((T58*)((/*RF2*/((T83*)(oBC19cpp))->_current_out/*63*/)));
T3 b1=((T3)'\51');
putc(b1,((FILE*)((/*RF2*/(C1)->_output_stream/*4*/))));
}/*]*/
/*]*/
}
else{
r240compile_to_c(C);
}
/*FI]*/
}
/*FI]*/
}
/*FI]*/
/*[IF*/
if(_flag){
/*[IRF3.2call_invariant_end*//*[IRF3.6put_character*/{T58* C1=(T58*)(oBC83out_c);
T3 b1=((T3)'\51');
putc(b1,((FILE*)((/*RF2*/(C1)->_output_stream/*4*/))));
}/*]*/
/*]*/
}
/*FI]*/
}


T0* r240run_feature_for(T240* C,T0* a1,T0* a2){
T0* R=NULL;
T0* _bc=NULL;
T0* _rt=NULL;
T0* _rc=NULL;
_rt=X126result_type(a1);
/*[IF*/
if((_rt)!=((void*)(NULL))){
_rc=X62run_class(_rt);
/*[IF*/
if((_rc)!=((void*)(NULL))){
_bc=(/*RF2*/(((T60*)_rc))->_base_class/*8*/);
R=r61run_feature_for(((T61*)_bc),_rc,a1,(/*RF2*/(C)->_feature_name/*12*/),a2);
}
/*FI]*/
}
/*FI]*/
/*[IF*/
if((R)==((void*)(NULL))){
{T104 se_tmp0;
r82add_position((/*RF2*/((T239*)((/*RF2*/(C)->_feature_name/*12*/)))->_start_position/*4*/));
}
/*[IRF3.6append*/{T0* b1=((T0*)ms168_608361995);
r7append((T7*)(oBC82explanation),b1);
}/*]*/
r82print_as_fatal_error((T82*)(oBC19eh));
}
/*FI]*/
return R;
}


T2 r240to_integer_or_error(T240* C){
T2 R=0;
T0* _rf1=NULL;
_rf1=(/*RF2*/(C)->_run_feature/*8*/);
if(NULL!=(_rf1)){
switch(((T0*)_rf1)->id){
case 437:
break;
default:
_rf1=NULL;
}
}/*[IF*/
if((_rf1)==((void*)(NULL))){
r240to_integer_error(C);
}
else{
R=X126to_integer_or_error((/*RF2*/(((T437*)_rf1))->_value/*32*/));
}
/*FI]*/
return R;
}


T0* r240add_comment(T240* C,T0* a1){
T0* R=NULL;
/*[IF*/
if(((a1)==((void*)(NULL)))||((/*(IRF4.6count*/r52count(((T52*)((/*RF2*/(((T164*)a1))->_list/*8*/))))/*)*/)==(0))){
R=((T0*)(C));
}
else{
{T323*n=((T323*)se_malloc(sizeof(*n))/*12*/);
*n=M323;
r323make(n,(T0*)C,a1);
R=((T0*)n);
}
}
/*FI]*/
return R;
}


T0* r240to_runnable(T240* C,T0* a1){
T0* R=NULL;
T0* _rf=NULL;
T0* _t=NULL;
_t=r240runnable_expression((/*RF2*/(C)->_target/*4*/),a1);
_rf=r240run_feature_for(C,_t,a1);
/*[IF*/
if(((/*RF2*/(C)->_run_feature/*8*/))==((void*)(NULL))){
(/*SFN*/C->_target)=_t;
(/*SFN*/C->_run_feature)=_rf;
r240run_feature_match(C);
R=((T0*)(C));
}
 else if((_t)==((void*)((/*RF2*/(C)->_target/*4*/)))){
R=((T0*)(C));
}
else{
{T240*n=((T240*)se_malloc(sizeof(*n))/*16*/);
*n=M240;
r240with(n,_t,(/*RF2*/(C)->_feature_name/*12*/),_rf);
R=((T0*)n);
}
}
/*FI]*/
return R;
}


void r240collect_c_tmp(T240* C){
/*[IF*/
if(((/*RF2*/(C)->_run_feature/*8*/))!=((void*)(NULL))){
X96collect_c_tmp((/*RF2*/(C)->_run_feature/*8*/));
}
/*FI]*/
X126collect_c_tmp((/*RF2*/(C)->_target/*4*/));
/*[IF*/
/*AF*//*AE*/
/*FI]*/
}


void r240finalize(T240* C){
T0* _rf=NULL;
T0* _rc=NULL;
_rf=(/*RF2*/(C)->_run_feature/*8*/);
_rc=/*SSWARF2*//*X96run_class*/(/*RF2*/(((T154*)_rf))->_run_class/*12*/);
(/*SFN*/C->_run_feature)=r60dynamic((T60*)(/*(IRF4.6first*/((/*RF2*/((T63*)((/*RF2*/(((T60*)_rc))->_running/*21*/)))->_storage/*4*/))[0]/*)*/),_rf);
}


T0* r240static_result_base_class(T240* C){
T0* R=NULL;
T0* _cn=NULL;
T0* _rt=NULL;
T0* _e_feature=NULL;
T0* _bc=NULL;
_bc=X126static_result_base_class((/*RF2*/(C)->_target/*4*/));
/*[IF*/
if((_bc)!=((void*)(NULL))){
_e_feature=r61e_feature(((T61*)_bc),(/*RF2*/(C)->_feature_name/*12*/));
/*[IF*/
if((_e_feature)!=((void*)(NULL))){
_rt=X99result_type(_e_feature);
/*[IF*/
if((_rt)!=((void*)(NULL))){
_cn=X62static_base_class_name(_rt);
/*[IF*/
if((_cn)!=((void*)(NULL))){
R=r77base_class(((T77*)_cn));
}
/*FI]*/
}
/*FI]*/
}
/*FI]*/
}
/*FI]*/
return R;
}


void r58disconnect(T58* C){
fclose((/*RF2*/(C)->_output_stream/*4*/));
(/*SFN*/C->_path)=NULL;
}
T0*oBC40tmp_string=NULL;


void r58connect_to(T58* C,T0* a1){
T8 _p=NULL;
_p=r7to_external(((T7*)a1));
(/*SFN*/C->_output_stream)=fopen((char*)_p,"w");
/*[IF*/
if((NULL!=(/*RF2*/(C)->_output_stream/*4*/))){
(/*SFN*/C->_path)=a1;
}
/*FI]*/
}


void r58put_integer(T58* C,T2 a1){
/*[IRF3.3clear*/((((T7*)((T7*)(oBC40tmp_string))))->_count)=(0);
/*]*/
r2append_in(a1,oBC40tmp_string);
r58put_string(C,oBC40tmp_string);
}


void r58put_string(T58* C,T0* a1){
T2 _i=0;
_i=1;
while (!((_i)>((/*RF2*/(((T7*)a1))->_count/*4*/))))
{
/*[IRF3.6put_character*/{T58* C1=C;
T3 b1=/*(IRF4.6item*/((/*RF2*/(((T7*)a1))->_storage/*0*/))[(_i)-(1)]/*)*/;
putc(b1,((FILE*)((/*RF2*/(C1)->_output_stream/*4*/))));
}/*]*/
_i=(_i)+(1);
}
}


void r382error(T104 a1,T0* a2){
r82add_position(a1);
/*[IRF3.6append*/{T0* b1=a2;
r7append((T7*)(oBC82explanation),b1);
}/*]*/
r82print_as_error((T82*)(oBC19eh));
}


void r382from_effective(T382* C,T0* a1,T0* a2,T0* a3,T0* a4,T0* a5){
{T118*n=((T118*)se_malloc(sizeof(*n))/*8*/);
*n=M118;
/*[IRF3.3make_1*/((((T118*)(n)))->_first)=(a1);
/*]*/
(/*SFN*/C->_names)=((T0*)n);
}
r382make_routine(C,(/*RF2*/(C)->_names/*8*/),a2,NULL,NULL,a3);
/*[IRF3.3set_ensure_assertion*/((((T382*)(C)))->_ensure_assertion)=(a4);
/*]*/
(/*SFN*/C->_base_class)=a5;
}


T6 r382can_hide(T382* C,T0* a1,T0* a2){
T6 R=0;
/*[IF*/
if((/*(IRF4.1result_type*/NULL/*)*/)!=((void*)(X99result_type(a1)))){
/*[IF*/
{/*AT*/{T104 se_tmp0;
r82add_position((*(se_tmp0=X99start_position(a1),&se_tmp0)));
}
{T104 se_tmp0;
r382error((*(se_tmp0=r382start_position(C),&se_tmp0)),((T0*)ms99_1393094289));
}
}
/*FI]*/
}
/*FI]*/
/*[IF*/
if(((/*RF2*/(C)->_arguments/*20*/))!=((void*)(X99arguments(a1)))){
/*[IF*/
if((((/*RF2*/(C)->_arguments/*20*/))==((void*)(NULL)))||((X99arguments(a1))==((void*)(NULL)))){
{T104 se_tmp0;
r82add_position((*(se_tmp0=X99start_position(a1),&se_tmp0)));
}
{T104 se_tmp0;
r382error((*(se_tmp0=r382start_position(C),&se_tmp0)),((T0*)ms99_1854646737));
}
}
 else if((/*(IRF4.6count*/r128count(((T128*)((/*RF2*/((T121*)((/*RF2*/(C)->_arguments/*20*/)))->_flat_list/*8*/))))/*)*/)!=(/*(IRF4.6count*/r128count(((T128*)((/*RF2*/((T121*)(X99arguments(a1)))->_flat_list/*8*/))))/*)*/)){
{T104 se_tmp0;
r82add_position((*(se_tmp0=X99start_position(a1),&se_tmp0)));
}
{T104 se_tmp0;
r382error((*(se_tmp0=r382start_position(C),&se_tmp0)),((T0*)ms99_1060258809));
}
}
/*FI]*/
}
/*FI]*/
/*[IF*/
if((/*(IRF4.9nb_errors*/(/*RF2*/((T82*)(oBC19eh))->_error_counter/*0*/)/*)*/)==(0)){
/*[IF*/
/*AF*//*AE*/
/*FI]*/
}
/*FI]*/
/*[IF*/
if((/*(IRF4.9nb_errors*/(/*RF2*/((T82*)(oBC19eh))->_error_counter/*0*/)/*)*/)==(0)){
/*[IF*/
if(((/*RF2*/(C)->_arguments/*20*/))!=((void*)(NULL))){
/*[IF*/
if(!(r121is_a_in((T121*)((/*RF2*/(C)->_arguments/*20*/)),X99arguments(a1),a2))){
{T104 se_tmp0;
r82add_position((*(se_tmp0=X99start_position(a1),&se_tmp0)));
}
{T104 se_tmp0;
r82add_position((*(se_tmp0=r382start_position(C),&se_tmp0)));
}
/*[IRF3.6append*/{T0* b1=((T0*)ms99_895448585);
r7append((T7*)(oBC82explanation),b1);
}/*]*/
/*[IRF3.6append*/{T0* b1=X62run_time_mark((/*RF2*/(((T60*)a2))->_current_type/*0*/));
r7append((T7*)(oBC82explanation),b1);
}/*]*/
/*[IRF3.6append*/{T0* b1=((T0*)ms20_46);
r7append((T7*)(oBC82explanation),b1);
}/*]*/
r82print_as_error((T82*)(oBC19eh));
}
/*FI]*/
}
/*FI]*/
}
/*FI]*/
R=(/*(IRF4.9nb_errors*/(/*RF2*/((T82*)(oBC19eh))->_error_counter/*0*/)/*)*/)==(0);
/*[IF*/
if(R){
r382merge_header_comments(C,a1);
}
/*FI]*/
return R;
}


void r382merge_header_comments(T382* C,T0* a1){
/*[IF*/
if((/*RF2*/((T59*)(oBC19small_eiffel))->_short_flag/*5*/)){
/*[IF*/
if(((/*RF2*/(C)->_header_comment/*12*/))==((void*)(NULL))){
(/*SFN*/C->_header_comment)=/*SSWARF2*//*X99header_comment*/(/*RF2*/(((T293*)a1))->_header_comment/*12*/);
}
 else if((/*SSWARF2*//*X99header_comment*/(/*RF2*/(((T293*)a1))->_header_comment/*12*/))==((void*)(NULL))){
X99set_header_comment(a1,(/*RF2*/(C)->_header_comment/*12*/));
}
/*FI]*/
}
/*FI]*/
}


void r382add_into(T382* C,T0* a1){
T0* _key=NULL;
T0* _fn=NULL;
T2 _i=0;
{T104 se_tmp0;
(/*SFN*/C->_base_class)=(/*RF2*/((*(se_tmp0=X117start_position(r118item((T118*)((/*RF2*/(C)->_names/*8*/)),1)),&se_tmp0)))._base_class/*0*/);
}
_i=1;
while (!((_i)>(r118count((T118*)((/*RF2*/(C)->_names/*8*/))))))
{
_fn=r118item((T118*)((/*RF2*/(C)->_names/*8*/)),_i);
_key=X117to_key(_fn);
/*[IF*/
if(r172has(((T172*)a1),_key)){
_fn=/*SSFRF4*//*X99first_name*//*(IRF4.6first_name*/(/*RF2*/(((T118*)((/*RF2*/((T293*)(r172at(((T172*)a1),_key)))->_names/*8*/))))->_first/*0*/)/*)*/;
{T104 se_tmp0;
r82add_position((*(se_tmp0=X117start_position(_fn),&se_tmp0)));
}
{T104 se_tmp0;
r82add_position((*(se_tmp0=X117start_position(r118item((T118*)((/*RF2*/(C)->_names/*8*/)),_i)),&se_tmp0)));
}
/*[IRF3.6append*/{T0* b1=((T0*)ms99_1087076085);
r7append((T7*)(oBC82explanation),b1);
}/*]*/
/*[IRF3.6append*/{T0* b1=X117to_string(_fn);
r7append((T7*)(oBC82explanation),b1);
}/*]*/
/*[IRF3.6append*/{T0* b1=((T0*)ms20_46);
r7append((T7*)(oBC82explanation),b1);
}/*]*/
r82print_as_error((T82*)(oBC19eh));
}
else{
r172add(((T172*)a1),(T0*)C,_key);
}
/*FI]*/
_i=(_i)+(1);
}
}


void r382make_routine(T382* C,T0* a1,T0* a2,T0* a3,T0* a4,T0* a5){
/*[IRF3.3make_e_feature*/((((T382*)(C)))->_names)=(a1);
/*]*/
(/*SFN*/C->_header_comment)=a4;
(/*SFN*/C->_arguments)=a2;
(/*SFN*/C->_obsolete_mark)=a3;
(/*SFN*/C->_require_assertion)=a5;
}


T0* r382try_to_undefine(T382* C,T0* a1,T0* a2){
T0* R=NULL;
T0* _fn2=NULL;
{T104 se_tmp0;
r82add_position((*(se_tmp0=X117start_position(a1),&se_tmp0)));
}
_fn2=r118feature_name((T118*)((/*RF2*/(C)->_names/*8*/)),X117to_key(a1));
/*[IF*/
if((_fn2)!=((void*)(NULL))){
X117undefine_in(_fn2,a2);
}
/*FI]*/
/*[IRF3.2cancel*//*[IRF3.3clear*/((((T7*)((T7*)(oBC82explanation))))->_count)=(0);
/*]*/
/*[IRF3.3clear*/((((T105*)((T105*)(oBC82positions))))->_upper)=(-(1));
/*]*/
/*]*/
R=/*(IRF4.4try_to_undefine_aux*/((T0*)(C))/*)*/;
/*[IF*/
if((R)!=((void*)(NULL))){
X381set_clients(R,(/*RF2*/(C)->_clients/*16*/));
r382merge_header_comments(C,R);
}
else{
r61fatal_undefine(((T61*)a2),a1);
}
/*FI]*/
return R;
}


void r382check_obsolete(T382* C,T104 a1){
/*[IF*/
if(((/*RF2*/(C)->_obsolete_mark/*24*/))!=((void*)(NULL))){
/*[IF*/
if(!((/*RF2*/((T59*)(oBC19small_eiffel))->_short_flag/*5*/))){
r82add_position(a1);
/*[IRF3.6append*/{T0* b1=((T0*)ms99_2129004198);
r7append((T7*)(oBC82explanation),b1);
}/*]*/
/*[IRF3.6append*/{T0* b1=(/*RF2*/((T262*)((/*RF2*/(C)->_obsolete_mark/*24*/)))->_to_string/*12*/);
r7append((T7*)(oBC82explanation),b1);
}/*]*/
{T104 se_tmp0;
r82add_position((*(se_tmp0=r382start_position(C),&se_tmp0)));
}
r82print_as_warning((T82*)(oBC19eh));
}
/*FI]*/
}
/*FI]*/
}

