/*
-- 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 "pretty.h"


T0* r119result_type(T119* C){
T0* R=NULL;
T0* _tla=NULL;
R=X312result_type((C)->_run_feature/*16*/);
/*[IF*/
if(X62is_like_current(R)){
R=/*X312current_type*/((T0*)((T325*)((C)->_run_feature/*16*/))->_current_type/*4*/);
}
else{
_tla=R;
if(NULL!=(_tla))switch(((T0*)_tla)->id) {
case 242: 
break;
default:
_tla=NULL;
};/*[IF*/
if((_tla)!=((void*)(NULL))){
R=X62run_type(X89result_type(/*(IRF4.6arg1*//*(IRF4.3first*/(((T132*)((C)->_arguments/*8*/)))->_first_one/*0*//*)*//*)*/));
}
/*FI]*/
}
/*FI]*/
return R;
}
/*No:CALL_INFIX_TIMES.run_feature*/


T0* r119runnable_args(T0* a1,T0* a2){
T0* R=NULL;
R=r132to_runnable(((T132*)a1),a2);
/*[IF*/
if((R)==((void*)(NULL))){
r37add_position(r132start_position(((T132*)a1)));
/*[IRF3.6fatal_error*/{T0* b1=((T0*)ms12_13065);
r37fatal_error((T37*)(oBC11eh),b1);
}/*]*/
}
/*FI]*/
return R;
}


void r119with(T119* C,T0* a1,T0* a2,T0* a3,T0* a4,T0* a5){
C->_target=a1;
C->_feature_name=a2;
C->_arguments=a3;
C->_run_feature=a4;
r119run_feature_match(C,a5);
}
/*No:CALL_INFIX_TIMES.fatal_error*/


void r119run_feature_match(T119* C,T0* a1){
r119run_feature_has_result(C);
r132match_with((T132*)((C)->_arguments/*8*/),(C)->_run_feature/*16*/,a1);
}
/*No:CALL_INFIX_TIMES.arguments*/


T0* r119runnable_expression(T0* a1,T0* a2){
T0* R=NULL;
R=X89to_runnable(a1,a2);
/*[IF*/
if((R)==((void*)(NULL))){
r37add_position(X89start_position(a1));
/*[IRF3.6fatal_error*/{T0* b1=((T0*)ms101_16515);
r37fatal_error((T37*)(oBC11eh),b1);
}/*]*/
}
/*FI]*/
return R;
}
/*No:CALL_INFIX_TIMES.left_brackets*/
/*No:CALL_INFIX_TIMES.implicit_cast*/


void r119print_as_target(T119* C){
r310put_character((T310*)(oBC11fmt),'\50');
r119pretty_print(C);
r310put_character((T310*)(oBC11fmt),'\51');
r310put_character((T310*)(oBC11fmt),'\56');
}
/*No:CALL_INFIX_TIMES.arg1*/


void r119run_feature_has_result(T119* C){
/*[IF*/
if((X312result_type((C)->_run_feature/*16*/))==((void*)(NULL))){
r37add_position(X312start_position((C)->_run_feature/*16*/));
r37add_position(((T121*)((C)->_feature_name/*12*/))->_start_position/*8*/);
/*[IRF3.6fatal_error*/{T0* b1=((T0*)ms100_53650);
r37fatal_error((T37*)(oBC11eh),b1);
}/*]*/
}
/*FI]*/
}


T0* r119run_feature_for(T119* C,T0* a1,T0* a2){
T0* R=NULL;
T0* _rc=NULL;
_rc=X62run_class(X89result_type(a1));
R=r313get_rf(((T313*)_rc),a1,(C)->_feature_name/*12*/,a2);
return R;
}
/*No:CALL_INFIX_TIMES.target*/


void r119error(T0* a1,T0* a2){
r37add_position(a1);
r37error((T37*)(oBC11eh),a2);
}
/*No:CALL_INFIX_TIMES.precedence*/


void r119make(T119* C,T0* a1,T0* a2,T0* a3){
C->_target=a1;
{T121*n=malloc(sizeof(*n));
*n=M121;
r121make(n,r119operator(),a2);
C->_feature_name=(T0*)n;
}
{T132*n=malloc(sizeof(*n));
*n=M132;
/*[IRF3.3make_1*/((((T132*)(n)))->_first_one)=(a3);
/*]*/
C->_arguments=(T0*)n;
}
}
/*No:CALL_INFIX_TIMES.is_current*/


void r119pretty_print(T119* C){
/*[IF*/
if((X89precedence((C)->_target/*4*/))==(13)){
X89pretty_print((C)->_target/*4*/);
}
 else if((8)>(X89precedence((C)->_target/*4*/))){
X89bracketed_pretty_print((C)->_target/*4*/);
}
 else if((8)<(X89precedence((C)->_target/*4*/))){
X89pretty_print((C)->_target/*4*/);
}
/*AF*/else{
X89pretty_print((C)->_target/*4*/);
}
/*FI]*/
r119print_op(C);
/*[IF*/
if((X89precedence(/*(IRF4.6arg1*//*(IRF4.3first*/(((T132*)((C)->_arguments/*8*/)))->_first_one/*0*//*)*//*)*/))==(13)){
X89pretty_print(/*(IRF4.6arg1*//*(IRF4.3first*/(((T132*)((C)->_arguments/*8*/)))->_first_one/*0*//*)*//*)*/);
}
 else if((8)>(X89precedence(/*(IRF4.6arg1*//*(IRF4.3first*/(((T132*)((C)->_arguments/*8*/)))->_first_one/*0*//*)*//*)*/))){
X89bracketed_pretty_print(/*(IRF4.6arg1*//*(IRF4.3first*/(((T132*)((C)->_arguments/*8*/)))->_first_one/*0*//*)*//*)*/);
}
 else if((8)<(X89precedence(/*(IRF4.6arg1*//*(IRF4.3first*/(((T132*)((C)->_arguments/*8*/)))->_first_one/*0*//*)*//*)*/))){
X89pretty_print(/*(IRF4.6arg1*//*(IRF4.3first*/(((T132*)((C)->_arguments/*8*/)))->_first_one/*0*//*)*//*)*/);
}
 else {/*AT*/X89bracketed_pretty_print(/*(IRF4.6arg1*//*(IRF4.3first*/(((T132*)((C)->_arguments/*8*/)))->_first_one/*0*//*)*//*)*/);
}
/*FI]*/
}
/*No:CALL_INFIX_TIMES.is_void*/


T0* r119operator(void){
T0* R=NULL;
R=((T0*)ms13_43);
return R;
}
/*No:CALL_INFIX_TIMES.atomic_precedence*/
/*No:EFFECTIVE_ARG_LIST.nb_errors*/


void r132make_n(T132* C,T0* a1,T0* a2){
C->_first_one=a1;
C->_remainder=a2;
}
/*No:EFFECTIVE_ARG_LIST.make_1*/


T0* r132start_position(T132* C){
T0* R=NULL;
R=X89start_position(/*(IRF4.3first*/(C)->_first_one/*0*//*)*/);
return R;
}


T0* r132expression(T132* C,T2 a1){
T0* R=NULL;
/*[IF*/
if((a1)==(1)){
R=(C)->_first_one/*0*/;
}
else{
R=/*X134item*/((T0*)r134item((T134*)((C)->_remainder/*4*/),(a1)-(2)));
}
/*FI]*/
return R;
}
/*No:EFFECTIVE_ARG_LIST.em1*/
/*No:EFFECTIVE_ARG_LIST.em2*/


void r132from_model(T132* C,T0* a1){
C->_first_one=(((T132*)a1))->_first_one/*0*/;
C->_remainder=(((T132*)a1))->_remainder/*4*/;
/*[IF*/
if(((C)->_remainder/*4*/)!=((void*)(NULL))){
C->_remainder=X134twin((C)->_remainder/*4*/);
}
/*FI]*/
}
/*No:EFFECTIVE_ARG_LIST.first_one*/


T0* r132to_runnable(T132* C,T0* a1){
T0* R=NULL;
T0* _e2=NULL;
T0* _e1=NULL;
T2 _i=0;
/*[IF*/
if(((C)->_current_type/*8*/)==((void*)(NULL))){
C->_current_type=a1;
_i=r132count(C);
while (!((_i)==(0))) {
_e1=r132expression(C,_i);
_e2=X89to_runnable(_e1,(C)->_current_type/*8*/);
/*[IF*/
if((_e2)==((void*)(NULL))){
r132error(X89start_position(_e1),((T0*)ms132_16515));
}
 else if((_e1)!=((void*)(_e2))){
r132put(C,_e2,_i);
}
/*FI]*/
_i=(_i)-(1);
}
/*[IF*/
if((/*(IRF4.9nb_errors*/((T37*)(oBC11eh))->_nb_errors/*4*//*)*/)==(0)){
R=(T0*)C;
}
/*FI]*/
}
 else if((X62run_class(a1))==((void*)(r132run_class(C)))){
R=(T0*)C;
}
else{
{T132*n=malloc(sizeof(*n));
*n=M132;
r132from_model(n,(T0*)C);
R=(T0*)n;
}
R=r132to_runnable(((T132*)R),a1);
}
/*FI]*/
return R;
}
/*No:EFFECTIVE_ARG_LIST.current_type*/
/*No:EFFECTIVE_ARG_LIST.first*/


void r132match_with(T132* C,T0* a1,T0* a2){
T0* _ft=NULL;
T0* _at=NULL;
T0* _e=NULL;
T2 _i=0;
T0* _fal=NULL;
_fal=X312arguments(a1);
/*[IF*/
if((_fal)==((void*)(NULL))){
r37add_position(X312start_position(a1));
r132error(r132start_position(C),((T0*)ms132_36576));
}
/*FI]*/
/*[IF*/
if(((/*(IRF4.9nb_errors*/((T37*)(oBC11eh))->_nb_errors/*4*//*)*/)==(0))&&((/*(IRF4.6count*/(((T175*)((((T171*)_fal))->_flat_list/*8*/)))->_upper/*12*//*)*/)!=(r132count(C)))){
r37add_position(r171start_position(((T171*)_fal)));
r132error(r132start_position(C),((T0*)ms132_36576));
}
/*FI]*/
_i=r132count(C);
while (!(((_i)==(0))||((/*(IRF4.9nb_errors*/((T37*)(oBC11eh))->_nb_errors/*4*//*)*/)>(0)))) {
_e=r132expression(C,_i);
_at=X89result_type(_e);
_ft=r171type(((T171*)_fal),_i);
/*[IF*/
if(X89is_void(_e)){
/*[IF*/
if(X62is_expanded(_ft)){
r37add_position(X89start_position(_e));
r132error(X62start_position(_ft),((T0*)ms132_89856));
}
/*FI]*/
}
 else if(X62is_like_current(_ft)){
/*[IF*/
if(X89is_current(_e)){
}
 else if(X62is_a(X62run_type(_at),X62run_type(_ft))){
/*[IF*/
if(X62is_expanded(X62run_type(_at))){
}
 else if(X62is_a(X62run_type(_at),X62run_type(_ft))){
}
else{
r37add_position(X89start_position(_e));
r132error(X62start_position(_ft),((T0*)ms132_35448));
}
/*FI]*/
}
else{
r37add_position(X89start_position(_e));
r132error(X62start_position(_ft),((T0*)ms132_35448));
}
/*FI]*/
}
 else if(X62is_like_feature(_ft)){
/*[IF*/
if(X62is_a(X62run_type(_at),X62run_type(_ft))){
}
else{
r37add_position(X89start_position(_e));
r132error(X62start_position(_ft),((T0*)ms132_40794));
}
/*FI]*/
}
 else if(r132is_like_argument(C,_e,_at,_ft)){
}
 else if(X62is_a(_at,_ft)){
}
else{
/*[IRF3.2cancel*//*[IRF3.3clear*/((((T7*)((T7*)(oBC37explanation))))->_count)=(0);
/*]*/
/*[IRF3.3clear*/((((T38*)((T38*)(oBC37positions))))->_upper)=(-(1));
/*]*/
/*]*/
_at=X62to_runnable(_at,a2);
/*[IF*/
if(!(X62is_a(_at,_ft))){
r132error(X89start_position(_e),((T0*)ms132_99792));
}
/*FI]*/
}
/*FI]*/
_at=X62run_type(_at);
_ft=X62run_type(_ft);
/*[IF*/
if(X62is_expanded(_ft)){
/*[IF*/
if(X62is_expanded(_at)){
}
else{
X62used_as_reference(_ft);
}
/*FI]*/
}
 else if(X62is_expanded(_at)){
X62used_as_reference(_at);
}
/*FI]*/
_i=(_i)-(1);
}
}


T2 r132count(T132* C){
T2 R=0;
/*[IF*/
if(((C)->_remainder/*4*/)==((void*)(NULL))){
R=1;
}
else{
R=(/*X134upper*/((T2)((T134*)((C)->_remainder/*4*/))->_upper/*12*/))+(2);
}
/*FI]*/
return R;
}


T0* r132run_class(T132* C){
T0* R=NULL;
R=X62run_class((C)->_current_type/*8*/);
return R;
}


void r132error(T0* a1,T0* a2){
r37add_position(a1);
r37error((T37*)(oBC11eh),a2);
}


void r132pretty_print(T132* C){
T2 _i=0;
r310put_character((T310*)(oBC11fmt),'\50');
_i=1;
while (!((_i)>(r132count(C)))) {
X89pretty_print(r132expression(C,_i));
_i=(_i)+(1);
/*[IF*/
if((_i)<=(r132count(C))){
r310put_character((T310*)(oBC11fmt),'\54');
}
/*FI]*/
}
r310put_character((T310*)(oBC11fmt),'\51');
}


T6 r132is_like_argument(T132* C,T0* a1,T0* a2,T0* a3){
T6 R=0;
T0* _ot=NULL;
T0* _tla=NULL;
_tla=a3;
if(NULL!=(_tla))switch(((T0*)_tla)->id) {
case 242: 
break;
default:
_tla=NULL;
};/*[IF*/
if((_tla)!=((void*)(NULL))){
R=1;
_ot=X89result_type(r132expression(C,/*(IRF4.6rank*/(((T172*)((((T242*)_tla))->_like_what/*8*/)))->_rank/*8*//*)*/));
/*[IF*/
if(!(X62is_a(X62run_type(a2),X62run_type(_ot)))){
r37add_position(X89start_position(a1));
r132error(X62start_position(a3),((T0*)ms132_43605));
}
/*FI]*/
}
/*FI]*/
return R;
}
/*No:EFFECTIVE_ARG_LIST.remainder*/


void r132put(T132* C,T0* a1,T2 a2){
/*[IF*/
if((a2)==(1)){
C->_first_one=a1;
}
else{
/*X134put*//*[IRF3.6put*/{T134* C1=(T134*)((C)->_remainder/*4*/);
T0* b1=a1;
T2 b2=(a2)-(2);
((C1)->_storage/*4*/)[b2]=(b1);
}/*]*/
}
/*FI]*/
}

