/*
-- ANSI C code generated by :
-- SmallEiffel The GNU Eiffel Compiler -- Release (- 0.79)      --
-- Copyright (C), 1994-98 - LORIA - UHP - CRIN - INRIA - FRANCE --
-- Dominique COLNET and Suzanne COLLIN -    colnet@loria.fr     --
--                 http://www.loria.fr/SmallEiffel              --
*/
#include "compile_to_c.h"


void r177compile_to_c(T177* C){
r25push_precursor((T25*)(oBC12cpp),(C)->_run_feature/*20*/,(C)->_arguments/*16*/);
/*[IRF3.4mapping_c*/r372default_mapping_procedure((T372*)((C)->_run_feature/*20*/));
/*]*/
r25pop((T25*)(oBC12cpp));
}


T0* r177to_runnable(T177* C,T0* a1){
T0* R=NULL;
T0* _pn=NULL;
T0* _super=NULL;
T0* _wrf=NULL;
/*[IF*/
if(((C)->_current_type/*12*/)==((void*)(NULL))){
C->_current_type=a1;
R=(T0*)C;
_wrf=r22top_rf((T22*)(oBC12small_eiffel));
/*[IF*/
if((X51result_type(_wrf))!=((void*)(NULL))){
r21add_position((C)->_start_position/*4*/);
/*[IRF3.6fatal_error*/{T0* b1=((T0*)ms177_359888);
r21fatal_error((T21*)(oBC12eh),b1);
}/*]*/
}
/*FI]*/
_super=r177super_feature(C,_wrf);
if(NULL!=(_super))switch(((T0*)_super)->id) {
case 302: 
break;
default:
_super=NULL;
};_pn=r177precursor_name(/*X51name*/((T0*)(((T324*)_wrf))->_name/*16*/),_super);
{T372*n=malloc(sizeof(*n));
*n=M372;
r372make(n,a1,_pn,_super);
C->_run_feature=(T0*)n;
}
r177prepare_arguments(C,a1);
}
else{
{T177*n=malloc(sizeof(*n));
*n=M177;
r177make(n,(C)->_start_position/*4*/,(C)->_parent/*8*/,(C)->_arguments/*16*/);
R=(T0*)n;
}
R=r177to_runnable(((T177*)R),a1);
}
/*FI]*/
return R;
}
/*No:E_PRECURSOR_PROCEDURE.current_type*/
/*No:E_PRECURSOR_PROCEDURE.is_pre_computable*/


T0* r177super_feature(T177* C,T0* a1){
T0* R=NULL;
T0* _pl=NULL;
T0* _wbc=NULL;
T0* _e_feature=NULL;
_e_feature=X51base_feature(a1);
_wbc=/*X93base_class*/((T0*)(((T199*)_e_feature))->_base_class/*4*/);
_pl=(((T63*)_wbc))->_parent_list/*40*/;
/*[IF*/
if((_pl)==((void*)(NULL))){
r21add_position((C)->_start_position/*4*/);
/*[IRF3.6fatal_error*/{T0* b1=((T0*)ms176_269232);
r21fatal_error((T21*)(oBC12eh),b1);
}/*]*/
}
else{
R=r78precursor_for(((T78*)_pl),(T0*)C,a1);
}
/*FI]*/
return R;
}


void r177collect_c_tmp(T177* C){
/*[IF*/
if(((C)->_arguments/*16*/)!=((void*)(NULL))){
X149collect_c_tmp((C)->_arguments/*16*/);
}
/*FI]*/
}


T0* r177precursor_name(T0* a1,T0* a2){
T0* R=NULL;
{T374*n=malloc(sizeof(*n));
*n=M374;
r374refer_to(n,((T63*)(/*X93base_class*/((T0*)(((T199*)a2))->_base_class/*4*/)))->_id/*0*/,a1);
R=(T0*)n;
}
return R;
}


void r177error(T0* a1,T0* a2){
r21add_position(a1);
r21error((T21*)(oBC12eh),a2);
}
/*No:E_PRECURSOR_PROCEDURE.run_feature*/
/*No:E_PRECURSOR_PROCEDURE.end_mark_comment*/


void r177make(T177* C,T0* a1,T0* a2,T0* a3){
C->_start_position=a1;
C->_parent=a2;
C->_arguments=a3;
}


void r177prepare_arguments(T177* C,T0* a1){
T0* _a=NULL;
/*[IF*/
if(((C)->_arguments/*16*/)!=((void*)(NULL))){
_a=X149to_runnable((C)->_arguments/*16*/,a1);
/*[IF*/
if((_a)==((void*)(NULL))){
r177error(X149start_position((C)->_arguments/*16*/),((T0*)ms13_14714));
}
else{
C->_arguments=_a;
}
/*FI]*/
/*[IF*/
if((/*(IRF4.9nb_errors*/((T21*)(oBC12eh))->_nb_errors/*4*//*)*/)==(0)){
X149match_with((C)->_arguments/*16*/,(C)->_run_feature/*20*/,a1);
}
/*FI]*/
}
 else if((((T372*)((C)->_run_feature/*20*/))->_arguments/*36*/)!=((void*)(NULL))){
r21add_position(r372start_position((T372*)((C)->_run_feature/*20*/)));
r21add_position((C)->_start_position/*4*/);
/*[IRF3.6fatal_error*/{T0* b1=((T0*)ms176_63936);
r21fatal_error((T21*)(oBC12eh),b1);
}/*]*/
}
/*FI]*/
}
/*No:E_PRECURSOR_PROCEDURE.parent*/
/*No:E_PRECURSOR_PROCEDURE.fz_bad_arguments*/


void r177afd_check(T177* C){
/*[IF*/
if(((C)->_arguments/*16*/)!=((void*)(NULL))){
X149afd_check((C)->_arguments/*16*/);
}
/*FI]*/
}
/*No:E_PRECURSOR_PROCEDURE.fatal_error*/
/*No:ID_PROVIDER.us_double*/
/*No:ID_PROVIDER.us_character*/
/*No:ID_PROVIDER.us_native_array_character*/


T2 r102max_id(T102* C){
T2 R=0;
T2 _i=0;
_i=((T47*)((C)->_mem_id/*0*/))->_upper/*8*/;
while (!((_i)<(0))) {
/*[IF*/
if((/*(IRF4.6item*/(((T47*)((C)->_mem_id/*0*/))->_storage/*0*/)[_i]/*)*/)>(R)){
R=/*(IRF4.6item*/(((T47*)((C)->_mem_id/*0*/))->_storage/*0*/)[_i]/*)*/;
}
/*FI]*/
_i=(_i)-(1);
}
return R;
}


T2 r102item(T102* C,T0* a1){
T2 R=0;
T2 _index=0;
_index=r62fast_index_of((T62*)((C)->_mem_str/*4*/),a1);
/*[IF*/
if((_index)<=(((T62*)((C)->_mem_str/*4*/))->_upper/*8*/)){
R=/*(IRF4.6item*/(((T47*)((C)->_mem_id/*0*/))->_storage/*0*/)[_index]/*)*/;
}
 else if(r43boost((T43*)(oBC12run_control))){
R=(r102max_id(C))+(1);
r102add2(C,a1,R);
}
else{
R=r102hash_code(a1);
/*[IF*/
if(r47fast_has((T47*)((C)->_mem_id/*0*/),R)){
R=10;
while (!(!(r47fast_has((T47*)((C)->_mem_id/*0*/),R)))) {
R=(R)+(1);
}
}
/*FI]*/
r102add2(C,a1,R);
}
/*FI]*/
return R;
}
/*No:ID_PROVIDER.us_general*/
/*No:ID_PROVIDER.us_pointer*/
/*No:ID_PROVIDER.us_string*/


void r102make(T102* C){
{T47*n=malloc(sizeof(*n));
*n=M47;
r47with_capacity(n,1024);
C->_mem_id=(T0*)n;
}
{T62*n=malloc(sizeof(*n));
*n=M62;
r62with_capacity(n,1024);
C->_mem_str=(T0*)n;
}
r102add2(C,((T0*)ms14_1990),0);
r102add2(C,((T0*)ms14_6412),1);
r102add2(C,((T0*)ms14_6748),2);
r102add2(C,((T0*)ms14_9936),3);
r102add2(C,((T0*)ms14_1208),4);
r102add2(C,((T0*)ms14_4818),5);
r102add2(C,((T0*)ms14_6510),6);
r102add2(C,((T0*)ms14_5046),7);
r102add2(C,((T0*)ms14_6881),8);
r102add2(C,((T0*)ms14_58420),9);
}
/*No:ID_PROVIDER.us_real*/
/*No:ID_PROVIDER.us_array*/
/*No:ID_PROVIDER.us_integer*/
/*No:ID_PROVIDER.mem_str*/
/*No:ID_PROVIDER.mem_id*/


void r102add2(T102* C,T0* a1,T2 a2){
r62add_last((T62*)((C)->_mem_str/*4*/),a1);
r47add_last((T47*)((C)->_mem_id/*0*/),a2);
}


T2 r102hash_code(T0* a1){
T2 R=0;
T2 _max=0;
T2 _val=0;
T3 _c=0;
T2 _i=0;
_i=1;
while (!((_i)>((((T7*)a1))->_count/*4*/))) {
_c=r3to_upper(/*(IRF4.6item*/((((T7*)a1))->_storage/*0*/)[(_i)-(1)]/*)*/);
{int z1=_c;

if(((65<=z1)&&(z1<=90))){
_val=(((unsigned char)_c))-(((unsigned char)'A'));
}
 else 
if(((48<=z1)&&(z1<=57))){
_val=((25)+(((unsigned char)_c)))-(((unsigned char)'0'));
}
 else{_val=0;
}}
R=(R)+((_i)*(_val));
_i=(_i)+(1);
}
/*[IF*/
if((R)<(0)){
R=-(R);
}
/*FI]*/
/*[IF*/
if(r43boost((T43*)(oBC12run_control))){
_max=2048;
}
else{
_max=8192;
}
/*FI]*/
while (!((R)<=(_max))) {
R=(R)-(999);
}
return R;
}
/*No:ID_PROVIDER.us_boolean*/

