/*
-- 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"
/*No:CALL_PREFIX_PLUS.feature_name*/


void r127run_feature_match(T127* C){
r127run_feature_has_result(C);
/*[IF*/
if((X312arg_count((C)->_run_feature/*8*/))>(0)){
r37add_position(((T125*)((C)->_feature_name/*12*/))->_start_position/*8*/);
r37add_position(X312start_position((C)->_run_feature/*8*/));
/*[IRF3.6fatal_error*/{T0* b1=((T0*)ms124_50512);
r37fatal_error((T37*)(oBC11eh),b1);
}/*]*/
}
/*FI]*/
}


T0* r127runnable_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;
}


T0* r127start_position(T127* C){
T0* R=NULL;
R=((T125*)((C)->_feature_name/*12*/))->_start_position/*8*/;
return R;
}


T0* r127add_comment(T127* C,T0* a1){
T0* R=NULL;
/*[IF*/
if(((a1)==((void*)(NULL)))||((/*(IRF4.6count*/r32count(((T32*)((((T64*)a1))->_list/*4*/)))/*)*/)==(0))){
R=(T0*)C;
}
else{
{T214*n=malloc(sizeof(*n));
*n=M214;
r214make(n,(T0*)C,a1);
R=(T0*)n;
}
}
/*FI]*/
return R;
}


T2 r127to_integer(T127* C){
T2 R=0;
T0* _rf1=NULL;
_rf1=(C)->_run_feature/*8*/;
if(NULL!=(_rf1))switch(((T0*)_rf1)->id) {
case 325: 
break;
default:
_rf1=NULL;
};/*[IF*/
if((_rf1)==((void*)(NULL))){
r127error(r127start_position(C),((T0*)ms12_45846));
}
else{
R=X89to_integer((((T325*)_rf1))->_value/*28*/);
}
/*FI]*/
return R;
}


void r127print_as_target(T127* C){
r310put_character((T310*)(oBC11fmt),'\50');
r127pretty_print(C);
r310put_character((T310*)(oBC11fmt),'\51');
r310put_character((T310*)(oBC11fmt),'\56');
}


void r127bracketed_pretty_print(T127* C){
r310put_character((T310*)(oBC11fmt),'\50');
r127pretty_print(C);
r310put_character((T310*)(oBC11fmt),'\51');
}


T0* r127to_runnable(T127* C,T0* a1){
T0* R=NULL;
T0* _rf=NULL;
T0* _t=NULL;
_t=r127runnable_expression((C)->_target/*4*/,a1);
_rf=r127run_feature_for(C,_t,a1);
/*[IF*/
if(((C)->_run_feature/*8*/)==((void*)(NULL))){
C->_target=_t;
C->_run_feature=_rf;
r127run_feature_match(C);
R=(T0*)C;
}
 else if((_t)==((void*)((C)->_target/*4*/))){
R=(T0*)C;
}
else{
{T127*n=malloc(sizeof(*n));
*n=M127;
r127with(n,_t,(C)->_feature_name/*12*/,_rf);
R=(T0*)n;
}
}
/*FI]*/
return R;
}


void r127run_feature_has_result(T127* C){
/*[IF*/
if((X312result_type((C)->_run_feature/*8*/))==((void*)(NULL))){
r37add_position(X312start_position((C)->_run_feature/*8*/));
r37add_position(((T125*)((C)->_feature_name/*12*/))->_start_position/*8*/);
/*[IRF3.6fatal_error*/{T0* b1=((T0*)ms100_53650);
r37fatal_error((T37*)(oBC11eh),b1);
}/*]*/
}
/*FI]*/
}
/*No:CALL_PREFIX_PLUS.fz_iinaiv*/


T0* r127run_feature_for(T127* 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;
}


T0* r127result_type(T127* C){
T0* R=NULL;
R=X312result_type((C)->_run_feature/*8*/);
/*[IF*/
if(X62is_like_current(R)){
R=/*X312current_type*/((T0*)((T325*)((C)->_run_feature/*8*/))->_current_type/*4*/);
}
/*FI]*/
return R;
}
/*No:CALL_PREFIX_PLUS.target*/


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


void r127make(T127* C,T0* a1,T0* a2){
{T125*n=malloc(sizeof(*n));
*n=M125;
r125make(n,r127operator(),a1);
C->_feature_name=(T0*)n;
}
C->_target=a2;
}
/*No:CALL_PREFIX_PLUS.us_plus*/
/*No:CALL_PREFIX_PLUS.is_current*/


void r127pretty_print(T127* C){
/*[IRF3.6pretty_print*/{T125* C1=(T125*)((C)->_feature_name/*12*/);
r310put_string((T310*)(oBC11fmt),(C1)->_to_string/*4*/);
}/*]*/
r310put_character((T310*)(oBC11fmt),'\40');
/*[IF*/
if((X89precedence((C)->_target/*4*/))<(11)){
r310put_character((T310*)(oBC11fmt),'\50');
X89pretty_print((C)->_target/*4*/);
r310put_character((T310*)(oBC11fmt),'\51');
}
else{
X89pretty_print((C)->_target/*4*/);
}
/*FI]*/
}
/*No:CALL_PREFIX_PLUS.is_void*/


T0* r127operator(void){
T0* R=NULL;
R=((T0*)ms13_44);
return R;
}


void r127with(T127* C,T0* a1,T0* a2,T0* a3){
C->_target=a1;
C->_feature_name=a2;
C->_run_feature=a3;
r127run_feature_match(C);
}
/*No:CALL_PREFIX_PLUS.fatal_error*/
int fBC11type_pointer=0;
T0*oBC11type_pointer=NULL;


T0* r143type_pointer(void){
if(fBC11type_pointer==0){
fBC11type_pointer=1;
{T254*n=malloc(sizeof(*n));
*n=M254;
r254make(n,NULL);
oBC11type_pointer=(T0*)n;
}
}
return oBC11type_pointer;}
/*No:ADDRESS_OF.feature_name*/


T0* r143start_position(T143* C){
T0* R=NULL;
R=X65start_position((C)->_feature_name/*4*/);
return R;
}


T0* r143add_comment(T143* C,T0* a1){
T0* R=NULL;
/*[IF*/
if(((a1)==((void*)(NULL)))||((/*(IRF4.6count*/r32count(((T32*)((((T64*)a1))->_list/*4*/)))/*)*/)==(0))){
R=(T0*)C;
}
else{
{T214*n=malloc(sizeof(*n));
*n=M214;
r214make(n,(T0*)C,a1);
R=(T0*)n;
}
}
/*FI]*/
return R;
}


T2 r143to_integer(T143* C){
T2 R=0;
r143error(r143start_position(C),((T0*)ms12_45846));
return R;
}
/*No:ADDRESS_OF.print_as_target*/


void r143bracketed_pretty_print(T143* C){
r310put_character((T310*)(oBC11fmt),'\50');
r143pretty_print(C);
r310put_character((T310*)(oBC11fmt),'\51');
}


T0* r143to_runnable(T143* C,T0* a1){
T0* R=NULL;
/*[IF*/
if(((C)->_current_type/*8*/)==((void*)(NULL))){
C->_current_type=a1;
C->_run_feature=r313get_rf_with((T313*)(X62run_class(a1)),(C)->_feature_name/*4*/);
/*[IF*/
if(((C)->_run_feature/*12*/)==((void*)(NULL))){
r143error(r143start_position(C),((T0*)ms143_24192));
}
else{
r353register_for((T0*)C);
}
/*FI]*/
R=(T0*)C;
}
else{
{T143*n=malloc(sizeof(*n));
*n=M143;
/*[IRF3.3make*/((((T143*)(n)))->_feature_name)=((C)->_feature_name/*4*/);
/*]*/
R=(T0*)n;
}
R=r143to_runnable(((T143*)R),a1);
}
/*FI]*/
return R;
}
T0*oBC11address_of_pool=NULL;
/*No:ADDRESS_OF.current_type*/
/*No:ADDRESS_OF.fz_iinaiv*/
/*No:ADDRESS_OF.result_type*/


void r143error(T0* a1,T0* a2){
r37add_position(a1);
r37error((T37*)(oBC11eh),a2);
}
/*No:ADDRESS_OF.run_feature*/
/*No:ADDRESS_OF.precedence*/
/*No:ADDRESS_OF.make*/
/*No:ADDRESS_OF.is_current*/


void r143pretty_print(T143* C){
r310put_character((T310*)(oBC11fmt),'\44');
X65pretty_print((C)->_feature_name/*4*/);
}
/*No:ADDRESS_OF.is_void*/
/*No:ADDRESS_OF.atomic_precedence*/
/*No:CST_ATT_CHARACTER.base_class*/
/*No:CST_ATT_CHARACTER.value_mem*/


T0* r190start_position(T190* C){
T0* R=NULL;
R=X65start_position(/*(IRF4.6first_name*/r67item(((T67*)((C)->_names/*8*/)),1)/*)*/);
return R;
}


T6 r190is_merge_with(T190* C,T0* a1,T0* a2){
T6 R=0;
R=1;
/*[IF*/
if(((C)->_result_type/*20*/)!=((void*)(X75result_type(a1)))){
/*[IF*/
if((((C)->_result_type/*20*/)==((void*)(NULL)))||((X75result_type(a1))==((void*)(NULL)))){
R=0;
}
/*FI]*/
}
/*FI]*/
/*[IF*/
if((/*(IRF4.1arguments*/NULL/*)*/)!=((void*)(X75arguments(a1)))){
/*[IF*/
{/*AT*/R=0;
}
/*FI]*/
}
/*FI]*/
/*[IF*/
if(R){
/*[IF*/
if(((C)->_result_type/*20*/)!=((void*)(NULL))){
R=X62is_a_in((C)->_result_type/*20*/,X75result_type(a1),a2);
}
/*FI]*/
/*[IF*/
if((R)&&((/*(IRF4.1arguments*/NULL/*)*/)!=((void*)(NULL)))){
R=r171is_a_in((T171*)(/*(IRF4.1arguments*/NULL/*)*/),X75arguments(a1),a2);
}
/*FI]*/
/*[IF*/
if(!(R)){
R=1;
/*[IRF3.2cancel*//*[IRF3.3clear*/((((T7*)((T7*)(oBC37explanation))))->_count)=(0);
/*]*/
/*[IRF3.3clear*/((((T38*)((T38*)(oBC37positions))))->_upper)=(-(1));
/*]*/
/*]*/
/*[IF*/
if(((C)->_result_type/*20*/)!=((void*)(NULL))){
R=X62is_a_in(X75result_type(a1),(C)->_result_type/*20*/,a2);
}
/*FI]*/
/*[IF*/
if((R)&&((/*(IRF4.1arguments*/NULL/*)*/)!=((void*)(NULL)))){
R=r171is_a_in((T171*)(X75arguments(a1)),/*(IRF4.1arguments*/NULL/*)*/,a2);
}
/*FI]*/
}
/*FI]*/
}
/*FI]*/
/*[IF*/
if(R){
r190merge_header_comments(C,a1);
}
/*FI]*/
return R;
}
/*No:CST_ATT_CHARACTER.first_name*/
/*No:CST_ATT_CHARACTER.em1*/
/*No:CST_ATT_CHARACTER.header_comment*/


void r190pretty_print_profile(T190* C){
r190pretty_print_names(C);
/*[IRF3.3set_indent_level*/((((T310*)((T310*)(oBC11fmt))))->_indent_level)=(2);
/*]*/
/*[IRF3.1pretty_print_arguments*//*]*/
/*[IRF3.3set_indent_level*/((((T310*)((T310*)(oBC11fmt))))->_indent_level)=(3);
/*]*/
/*[IF*/
if(((C)->_result_type/*20*/)!=((void*)(NULL))){
r310put_string((T310*)(oBC11fmt),((T0*)ms75_186));
X62pretty_print((C)->_result_type/*20*/);
}
/*FI]*/
}
/*No:CST_ATT_CHARACTER.names*/
/*No:CST_ATT_CHARACTER.result_type*/
/*No:CST_ATT_CHARACTER.code_require*/
/*No:CST_ATT_CHARACTER.make_e_feature*/


void r190add_into(T190* C,T0* a1){
T0* _fn=NULL;
T2 _i=0;
C->_base_class=r39base_class((T39*)(X65start_position(r67item((T67*)((C)->_names/*8*/),1))));
_i=1;
while (!((_i)>(r67count((T67*)((C)->_names/*8*/))))) {
_fn=r67item((T67*)((C)->_names/*8*/),_i);
/*[IF*/
if(r74has(((T74*)a1),X65to_key(_fn))){
_fn=/*X75first_name*/((T0*)/*(IRF4.6first_name*/r67item(((T67*)(((T183*)(r74at(((T74*)a1),X65to_key(_fn))))->_names/*8*/)),1)/*)*/);
r37add_position(X65start_position(_fn));
r37add_position(X65start_position(r67item((T67*)((C)->_names/*8*/),_i)));
r37error((T37*)(oBC11eh),((T0*)ms75_41905));
/*[IRF3.6append*/{T0* b1=X65to_string(_fn);
r7append((T7*)(oBC37explanation),b1);
}/*]*/
r37error((T37*)(oBC11eh),((T0*)ms12_47));
}
else{
r74put(((T74*)a1),(T0*)C,X65to_key(_fn));
}
/*FI]*/
_i=(_i)+(1);
}
}


T6 r190can_hide(T190* C,T0* a1,T0* a2){
T6 R=0;
/*[IF*/
if(((C)->_result_type/*20*/)!=((void*)(X75result_type(a1)))){
/*[IF*/
if((((C)->_result_type/*20*/)==((void*)(NULL)))||((X75result_type(a1))==((void*)(NULL)))){
r37add_position(X75start_position(a1));
r190error(r190start_position(C),((T0*)ms75_64647));
}
/*FI]*/
}
/*FI]*/
/*[IF*/
if((/*(IRF4.1arguments*/NULL/*)*/)!=((void*)(X75arguments(a1)))){
/*[IF*/
{/*AT*/r37add_position(X75start_position(a1));
r190error(r190start_position(C),((T0*)ms75_83182));
}
/*FI]*/
}
/*FI]*/
/*[IF*/
if((/*(IRF4.9nb_errors*/((T37*)(oBC11eh))->_nb_errors/*4*//*)*/)==(0)){
/*[IF*/
if(((C)->_result_type/*20*/)!=((void*)(NULL))){
/*[IF*/
if(!(X62is_a_in((C)->_result_type/*20*/,X75result_type(a1),a2))){
/*[IRF3.6append*/{T0* b1=((T0*)ms75_54285);
r7append((T7*)(oBC37explanation),b1);
}/*]*/
/*[IRF3.6append*/{T0* b1=X62run_time_mark((((T313*)a2))->_current_type/*0*/);
r7append((T7*)(oBC37explanation),b1);
}/*]*/
r37error((T37*)(oBC11eh),((T0*)ms12_47));
}
/*FI]*/
}
/*FI]*/
}
/*FI]*/
/*[IF*/
if((/*(IRF4.9nb_errors*/((T37*)(oBC11eh))->_nb_errors/*4*//*)*/)==(0)){
/*[IF*/
/*AF*//*AE*/
/*FI]*/
}
/*FI]*/
R=(/*(IRF4.9nb_errors*/((T37*)(oBC11eh))->_nb_errors/*4*//*)*/)==(0);
/*[IF*/
if(R){
r190merge_header_comments(C,a1);
}
/*FI]*/
return R;
}
/*No:CST_ATT_CHARACTER.ensure_assertion*/


T0* r190try_to_undefine(T190* C,T0* a1,T0* a2){
T0* R=NULL;
T0* _fn2=NULL;
r37add_position(X65start_position(a1));
_fn2=r67feature_name((T67*)((C)->_names/*8*/),X65to_key(a1));
/*[IF*/
if((_fn2)!=((void*)(NULL))){
X65undefine_in(_fn2,a2);
}
/*FI]*/
/*[IRF3.2cancel*//*[IRF3.3clear*/((((T7*)((T7*)(oBC37explanation))))->_count)=(0);
/*]*/
/*[IRF3.3clear*/((((T38*)((T38*)(oBC37positions))))->_upper)=(-(1));
/*]*/
/*]*/
R=r190try_to_undefine_aux(C,a1,a2);
/*[IF*/
if((R)!=((void*)(NULL))){
/*X269set_clients*//*[IRF3.3set_clients*/((((T272*)(((T272*)R))))->_clients)=((C)->_clients/*16*/);
/*]*/
r190merge_header_comments(C,R);
}
else{
r41fatal_undefine(((T41*)a2),a1);
}
/*FI]*/
return R;
}
/*No:CST_ATT_CHARACTER.is_deferred*/
/*No:CST_ATT_CHARACTER.set_clients*/
/*No:CST_ATT_CHARACTER.value*/
/*No:CST_ATT_CHARACTER.nb_errors*/


T0* r190to_run_feature(T190* C,T0* a1,T0* a2){
T0* R=NULL;
T0* _rc=NULL;
_rc=X62run_class(a1);
R=r313at(((T313*)_rc),a2);
if(NULL!=(R))switch(((T0*)R)->id) {
case 325: 
break;
default:
R=NULL;
};/*[IF*/
if((R)==((void*)(NULL))){
{T325*n=malloc(sizeof(*n));
*n=M325;
r325make(n,a1,a2,(T0*)C);
R=(T0*)n;
}
}
/*FI]*/
return R;
}


void r190merge_header_comments(T190* C,T0* a1){
/*[IF*/
if(((T42*)(oBC11small_eiffel))->_short_flag/*0*/){
/*[IF*/
if(((C)->_header_comment/*12*/)==((void*)(NULL))){
C->_header_comment=/*X75header_comment*/((T0*)(((T183*)a1))->_header_comment/*12*/);
}
 else if((/*X75header_comment*/((T0*)(((T183*)a1))->_header_comment/*12*/))==((void*)(NULL))){
X75set_header_comment(a1,(C)->_header_comment/*12*/);
}
/*FI]*/
}
/*FI]*/
}
/*No:CST_ATT_CHARACTER.arguments*/
/*No:CST_ATT_CHARACTER.require_assertion*/
/*No:CST_ATT_CHARACTER.pretty_print_arguments*/


T0* r190try_to_undefine_aux(T190* C,T0* a1,T0* a2){
T0* R=NULL;
r37add_position(r190start_position(C));
r190error(X65start_position(a1),((T0*)ms185_99414));
r41fatal_undefine(((T41*)a2),a1);
return R;
}
/*No:CST_ATT_CHARACTER.fz_dot*/


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


void r190make(T190* C,T0* a1,T0* a2,T0* a3){
/*[IRF3.3make_e_feature*/((((T190*)(C)))->_names)=(a1);
/*]*/
C->_result_type=a2;
C->_value_mem=a3;
}


void r190pretty_print_names(T190* C){
T2 _i=0;
_i=1;
X65declaration_pretty_print(r67item((T67*)((C)->_names/*8*/),_i));
_i=(_i)+(1);
while (!((_i)>(r67count((T67*)((C)->_names/*8*/))))) {
r310put_string((T310*)(oBC11fmt),((T0*)ms75_158));
X65declaration_pretty_print(r67item((T67*)((C)->_names/*8*/),_i));
_i=(_i)+(1);
}
}


void r190pretty_print(T190* C){
r190pretty_print_profile(C);
r190pretty_tail(C);
r310put_character((T310*)(oBC11fmt),'\73');
/*[IF*/
if(((C)->_header_comment/*12*/)!=((void*)(NULL))){
/*[IRF3.3set_indent_level*/((((T310*)((T310*)(oBC11fmt))))->_indent_level)=(2);
/*]*/
r310indent((T310*)(oBC11fmt));
/*[IRF3.3set_indent_level*/((((T310*)((T310*)(oBC11fmt))))->_indent_level)=(1);
/*]*/
r64pretty_print((T64*)((C)->_header_comment/*12*/));
}
else{
/*[IRF3.3set_indent_level*/((((T310*)((T310*)(oBC11fmt))))->_indent_level)=(1);
/*]*/
}
/*FI]*/
}


void r190collect_for(T2 a1){
T0* _er=NULL;
/*[IF*/
if((a1)==(1)){
_er=/*(IRF4.1require_assertion*/NULL/*)*/;
/*[IF*/
if((_er)!=((void*)(NULL))){
/*[IF*/
if(!(r332fast_has((T332*)(oBC75require_collector),_er))){
r332add_last((T332*)(oBC75require_collector),_er);
}
/*FI]*/
}
/*FI]*/
}
else{
/*[IF*/
/*AF*//*AE*/
/*FI]*/
}
/*FI]*/
}
/*No:CST_ATT_CHARACTER.set_header_comment*/


void r190pretty_tail(T190* C){
r310put_string((T310*)(oBC11fmt),((T0*)ms184_1176));
/*[IRF3.6pretty_print*/{T153* C1=(T153*)(/*(IRF4.3value*/(C)->_value_mem/*24*//*)*/);
r310put_string((T310*)(oBC11fmt),r153to_string(C1));
}/*]*/
}
/*No:CST_ATT_CHARACTER.clients*/


T0* r243generic_list(T243* C){
T0* R=NULL;
r243fatal_error_generic_list(C);
return R;
}


T0* r243base_class(T243* C){
T0* R=NULL;
T0* _bcn=NULL;
_bcn=(C)->_base_class_name/*4*/;
/*[IF*/
if((_bcn)!=((void*)(NULL))){
R=r49base_class(((T49*)_bcn));
}
else{
/*[IRF3.6append*/{T0* b1=((T0*)ms62_37098);
r7append((T7*)(oBC37explanation),b1);
}/*]*/
r37add_type((T0*)C,((T0*)ms12_47));
r37print_as_fatal_error((T37*)(oBC11eh));
}
/*FI]*/
return R;
}
/*No:TYPE_ANY.base_class_name*/
/*No:TYPE_ANY.start_position*/
/*No:TYPE_ANY.is_formal_generic*/
/*No:TYPE_ANY.used_as_reference*/


T6 r243is_a_in(T243* C,T0* a1,T0* a2){
T6 R=0;
T0* _ct=NULL;
T0* _t2=NULL;
T0* _t1=NULL;
/*[IF*/
if((r243written_mark())==((void*)(X62written_mark(a1)))){
R=1;
}
else{
_ct=(((T313*)a2))->_current_type/*0*/;
_t1=r243to_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;
}


T2 r243id(T243* C){
T2 R=0;
R=((T41*)(r243base_class(C)))->_id/*0*/;
return R;
}
/*No:TYPE_ANY.is_pointer*/


T0* r243look_up_for(T243* C,T0* a1,T0* a2){
T0* R=NULL;
R=r41look_up_for((T41*)(r243base_class(C)),a1,a2);
return R;
}


T0* r243to_runnable(T243* C,T0* a1){
T0* R=NULL;
R=(T0*)C;
r243check_type(C);
return R;
}
/*No:TYPE_ANY.run_type*/


T0* r243run_class(T243* C){
T0* R=NULL;
R=r42run_class((T0*)C);
return R;
}


T6 r243has_creation(T243* C,T0* a1){
T6 R=0;
r37add_position(X65start_position(a1));
r243error(/*(IRF4.6start_position*/(((T49*)((C)->_base_class_name/*4*/)))->_start_position/*4*//*)*/,((T0*)ms243_27380));
return R;
}
/*No:TYPE_ANY.expanded_initializer*/
/*No:TYPE_ANY.is_like_current*/
/*No:TYPE_ANY.is_boolean*/
/*No:TYPE_ANY.is_generic*/
/*No:TYPE_ANY.is_bit*/
/*No:TYPE_ANY.is_real*/
/*No:TYPE_ANY.smallest_ancestor*/
/*No:TYPE_ANY.is_any*/
/*No:TYPE_ANY.nb_errors*/


T0* r243run_time_mark(void){
T0* R=NULL;
R=((T0*)ms13_714);
return R;
}
/*No:TYPE_ANY.is_expanded*/
/*No:TYPE_ANY.is_basic_eiffel_expanded*/
/*No:TYPE_ANY.is_string*/
/*No:TYPE_ANY.is_integer*/
/*No:TYPE_ANY.is_like_feature*/
/*No:TYPE_ANY.fz_dot*/
/*No:TYPE_ANY.is_anchored*/
/*No:TYPE_ANY.is_run_type*/


T6 r243is_a(T243* C,T0* a1){
T6 R=0;
/*[IF*/
if(X62is_any(a1)){
R=1;
}
 else if(X62is_none(a1)){
}
else{
R=r41is_subclass_of((T41*)(r243base_class(C)),X62base_class(a1));
}
/*FI]*/
/*[IF*/
if(!(R)){
r37add_type((T0*)C,((T0*)ms12_17730));
r37add_type(a1,((T0*)ms12_47));
}
/*FI]*/
return R;
}
/*No:TYPE_ANY.is_character*/
/*No:TYPE_ANY.is_reference*/


T0* r243written_mark(void){
T0* R=NULL;
R=((T0*)ms13_714);
return R;
}


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


void r243make(T243* C,T0* a1){
{T49*n=malloc(sizeof(*n));
*n=M49;
r49make(n,((T0*)ms13_714),a1);
C->_base_class_name=(T0*)n;
}
}
/*No:TYPE_ANY.us_any*/
/*No:TYPE_ANY.is_none*/
/*No:TYPE_ANY.pretty_print*/
/*No:TYPE_ANY.is_array*/
/*No:TYPE_ANY.fz_inako*/


void r243fatal_error_generic_list(T243* C){
r37add_type((T0*)C,((T0*)ms62_29184));
r37print_as_fatal_error((T37*)(oBC11eh));
}
/*No:TYPE_ANY.is_like_argument*/
int fBC243check_type=0;


void r243check_type(T243* C){
if (fBC243check_type==0){
T0* _rc=NULL;
T0* _bc=NULL;
fBC243check_type=1;
_bc=r243base_class(C);
/*[IF*/
if((/*(IRF4.9nb_errors*/((T37*)(oBC11eh))->_nb_errors/*4*//*)*/)==(0)){
_rc=r243run_class(C);
}
/*FI]*/
/*[IF*/
if((/*(IRF4.9nb_errors*/((T37*)(oBC11eh))->_nb_errors/*4*//*)*/)==(0)){
/*[IF*/
if((((T41*)_bc))->_is_expanded/*20*/){
r243error(/*(IRF4.6start_position*/(((T49*)((C)->_base_class_name/*4*/)))->_start_position/*4*//*)*/,((T0*)ms243_38450));
}
/*FI]*/
}
/*FI]*/
}}
/*No:TYPE_ANY.is_double*/


T6 r41is_general(T41* C){
T6 R=0;
R=(((T0*)ms13_6412))==((void*)(((T49*)((C)->_name/*24*/))->_to_string/*0*/));
return R;
}


void r41fatal_undefine(T41* C,T0* a1){
/*[IRF3.6append*/{T0* b1=((T0*)ms41_36660);
r7append((T7*)(oBC37explanation),b1);
}/*]*/
/*[IRF3.6append*/{T0* b1=X65to_string(a1);
r7append((T7*)(oBC37explanation),b1);
}/*]*/
/*[IRF3.6append*/{T0* b1=((T0*)ms41_3192);
r7append((T7*)(oBC37explanation),b1);
}/*]*/
/*[IRF3.6append*/{T0* b1=((T49*)((C)->_name/*24*/))->_to_string/*0*/;
r7append((T7*)(oBC37explanation),b1);
}/*]*/
/*[IRF3.6fatal_error*/{T0* b1=((T0*)ms41_166);
r37fatal_error((T37*)(oBC11eh),b1);
}/*]*/
}


T0* r41going_up(T41* C,T0* a1,T0* a2,T0* a3){
T0* R=NULL;
/*[IF*/
if(((C)->_parent_list/*40*/)==((void*)(NULL))){
R=r41going_up((T41*)(r41class_any()),a1,a2,a3);
}
else{
R=r59going_up((T59*)((C)->_parent_list/*40*/),a1,a2,a3);
}
/*FI]*/
return R;
}
/*No:BASE_CLASS.creation_clause_list*/
/*No:BASE_CLASS.set_obsolete_type_string*/


void r41add_feature_clause(T41* C,T0* a1){
/*[IF*/
if(((C)->_feature_clause_list/*48*/)==((void*)(NULL))){
{T77*n=malloc(sizeof(*n));
*n=M77;
/*[IRF3.3make*/((((T77*)(n)))->_list)=(se_ma79(1,
a1));
/*]*/
C->_feature_clause_list=(T0*)n;
}
}
else{
/*[IRF3.5add_last*/r79add_last(((T79*)(((T77*)((C)->_feature_clause_list/*48*/))->_list/*0*/)),a1);
/*]*/
}
/*FI]*/
}
/*No:BASE_CLASS.id*/
/*No:BASE_CLASS.heading_comment2*/


void r41get_started(T41* C){
C->_id=r84item((T84*)(r41id_provider()),((T49*)((C)->_name/*24*/))->_to_string/*0*/);
/*[IF*/
if(((C)->_feature_clause_list/*48*/)!=((void*)(NULL))){
r77get_started((T77*)((C)->_feature_clause_list/*48*/),(C)->_feature_dictionary/*60*/);
}
/*FI]*/
/*[IF*/
if(((C)->_parent_list/*40*/)!=((void*)(NULL))){
r59get_started((T59*)((C)->_parent_list/*40*/));
}
/*FI]*/
/*[IF*/
if(((C)->_end_comment/*56*/)!=((void*)(NULL))){
r64good_end((T64*)((C)->_end_comment/*56*/),(C)->_name/*24*/);
}
/*FI]*/
/*[IF*/
if(((C)->_parent_list/*40*/)!=((void*)(NULL))){
/*[IRF3.3clear*/((((T47*)((T47*)(oBC41visited))))->_upper)=(-(1));
/*]*/
r47add_last((T47*)(oBC41visited),(T0*)C);
r59inherit_cycle_check((T59*)((C)->_parent_list/*40*/));
}
/*FI]*/
/*[IF*/
if(((r54all_check((T54*)(oBC11run_control)))&&((C)->_is_deferred/*16*/))&&(((C)->_creation_clause_list/*44*/)!=((void*)(NULL)))){
r37add_position(((T49*)((C)->_name/*24*/))->_start_position/*4*/);
r41warning(r55start_position((T55*)((C)->_creation_clause_list/*44*/)),((T0*)ms41_172312));
}
/*FI]*/
}


T0* r41new_name_of_original(T41* C,T0* a1,T0* a2){
T0* R=NULL;
/*[IF*/
if((C)==((void*)(a1))){
R=a2;
}
 else if(r41is_general(C)){
R=a2;
}
else{
/*[IF*/
if(((C)->_parent_list/*40*/)==((void*)(NULL))){
R=r41new_name_of((T41*)(r41class_any()),a1,a2);
}
else{
/*[IRF3.3clear*/((((T322*)((T322*)(oBC41going_up_trace))))->_upper)=(-(1));
/*]*/
R=r59going_up((T59*)((C)->_parent_list/*40*/),oBC41going_up_trace,a1,a2);
}
/*FI]*/
}
/*FI]*/
return R;
}


T0* r41run_class(T41* C){
T0* R=NULL;
T0* _type=NULL;
T0* _n=NULL;
T0* _rcd=NULL;
_n=((T49*)((C)->_name/*24*/))->_to_string/*0*/;
_rcd=oBC42run_class_dictionary;
/*[IF*/
if(r318has(((T318*)_rcd),_n)){
R=r318at(((T318*)_rcd),_n);
}
else{
{T257*n=malloc(sizeof(*n));
*n=M257;
/*[IRF3.3make*/((((T257*)(n)))->_base_class_name)=((C)->_name/*24*/);
/*]*/
_type=(T0*)n;
}
R=r257run_class(((T257*)_type));
}
/*FI]*/
return R;
}
/*No:BASE_CLASS.feature_clause_list*/
/*No:BASE_CLASS.formal_generic_list*/
/*No:BASE_CLASS.set_end_comment*/


T0* r41get_copy(T41* C){
T0* R=NULL;
R=r74at((T74*)((C)->_feature_dictionary/*60*/),((T0*)ms13_1812));
return R;
}


T0* r41super_look_up_for(T41* C,T0* a1,T0* a2){
T0* R=NULL;
/*[IF*/
if(((C)->_parent_list/*40*/)==((void*)(NULL))){
/*[IF*/
if(r41is_general(C)){
R=NULL;
}
else{
R=r41look_up_for((T41*)(r41class_any()),a1,a2);
}
/*FI]*/
}
else{
R=r59look_up_for((T59*)((C)->_parent_list/*40*/),a1,a2);
}
/*FI]*/
return R;
}
T0*oBC41visited=NULL;
/*No:BASE_CLASS.fatal_error*/
/*No:BASE_CLASS.parent_list*/
/*No:BASE_CLASS.is_expanded*/


void r41fatal_error_vdrd6(T0* a1,T0* a2,T0* a3){
r37add_position(X75start_position(a1));
r37add_position(X75start_position(a2));
/*[IRF3.6append*/{T0* b1=((T0*)ms41_18000);
r7append((T7*)(oBC37explanation),b1);
}/*]*/
/*[IRF3.6append*/{T0* b1=a3;
r7append((T7*)(oBC37explanation),b1);
}/*]*/
r37print_as_fatal_error((T37*)(oBC11eh));
}


T0* r41clients_for(T41* C,T0* a1){
T0* R=NULL;
/*[IF*/
if(r41proper_has(C,a1)){
R=X75clients(r74at((T74*)((C)->_feature_dictionary/*60*/),X65to_key(a1)));
}
 else if(r41is_general(C)){
}
 else if(((C)->_parent_list/*40*/)==((void*)(NULL))){
R=r41clients_for((T41*)(r41class_any()),a1);
}
else{
R=r59clients_for((T59*)((C)->_parent_list/*40*/),a1);
}
/*FI]*/
return R;
}
/*No:BASE_CLASS.us_general*/


void r41warning(T0* a1,T0* a2){
r37add_position(a1);
r37warning((T37*)(oBC11eh),a2);
}
/*No:BASE_CLASS.obsolete_type_string*/


T0* r41class_with(T0* a1){
T0* R=NULL;
R=r42get_class(a1);
return R;
}
/*No:BASE_CLASS.set_formal_generic_list*/
/*No:BASE_CLASS.fz_dot*/
int fBC11class_any=0;
T0*oBC11class_any=NULL;


T0* r41class_any(void){
if(fBC11class_any==0){
fBC11class_any=1;
oBC11class_any=r41class_with(((T0*)ms13_714));
}
return oBC11class_any;}
/*No:BASE_CLASS.fz_expanded*/


void r41error(T0* a1,T0* a2){
r37add_position(a1);
r37error((T37*)(oBC11eh),a2);
}
/*No:BASE_CLASS.class_invariant*/


void r41make(T41* C){
{T47*n=malloc(sizeof(*n));
*n=M47;
r47with_capacity(n,16);
C->_isom=(T0*)n;
}
C->_path=r66item(((T52*)(oBC11parser_buffer))->_path/*0*/);
{T49*n=malloc(sizeof(*n));
*n=M49;
r49make_unknown(n);
C->_name=(T0*)n;
}
{T74*n=malloc(sizeof(*n));
*n=M74;
/*[IRF3.4make*/r74with_capacity(n,32);
/*]*/
C->_feature_dictionary=(T0*)n;
}
}
/*No:BASE_CLASS.heading_comment1*/


T0* r41id_provider(void){
if(fBC11id_provider==0){
fBC11id_provider=1;
{T84*n=malloc(sizeof(*n));
*n=M84;
r84make(n);
oBC11id_provider=(T0*)n;
}
}
return oBC11id_provider;}


void r41pretty_print(T41* C){
/*[IRF3.3set_indent_level*/((((T310*)((T310*)(oBC11fmt))))->_indent_level)=(0);
/*]*/
/*[IF*/
if(((C)->_index_list/*8*/)!=((void*)(NULL))){
r306pretty_print((T306*)((C)->_index_list/*8*/));
r310indent((T310*)(oBC11fmt));
}
/*FI]*/
/*[IF*/
if(((C)->_heading_comment1/*12*/)!=((void*)(NULL))){
r64pretty_print((T64*)((C)->_heading_comment1/*12*/));
r310indent((T310*)(oBC11fmt));
}
/*FI]*/
/*[IF*/
if((C)->_is_deferred/*16*/){
r310keyword((T310*)(oBC11fmt),((T0*)ms41_10664));
}
 else if((C)->_is_expanded/*20*/){
r310keyword((T310*)(oBC11fmt),((T0*)ms12_10840));
}
/*FI]*/
r310keyword((T310*)(oBC11fmt),((T0*)ms41_2745));
/*[IRF3.6pretty_print*/{T49* C1=(T49*)((C)->_name/*24*/);
r310put_string((T310*)(oBC11fmt),(C1)->_to_string/*0*/);
}/*]*/
/*[IF*/
if(/*(IRF4.7is_generic*/((C)->_formal_generic_list/*28*/)!=(NULL)/*)*/){
r76pretty_print((T76*)((C)->_formal_generic_list/*28*/));
}
/*FI]*/
r310indent((T310*)(oBC11fmt));
/*[IF*/
if(((C)->_obsolete_type_string/*36*/)!=((void*)(NULL))){
r310keyword((T310*)(oBC11fmt),((T0*)ms41_10928));
r154pretty_print((T154*)((C)->_obsolete_type_string/*36*/));
}
/*FI]*/
r310indent((T310*)(oBC11fmt));
/*[IF*/
if(((C)->_heading_comment2/*32*/)!=((void*)(NULL))){
r64pretty_print((T64*)((C)->_heading_comment2/*32*/));
}
/*FI]*/
/*[IF*/
if(((C)->_parent_list/*40*/)!=((void*)(NULL))){
r59pretty_print((T59*)((C)->_parent_list/*40*/));
}
/*FI]*/
/*[IF*/
if(((C)->_creation_clause_list/*44*/)!=((void*)(NULL))){
r55pretty_print((T55*)((C)->_creation_clause_list/*44*/));
}
/*FI]*/
/*[IF*/
if(((C)->_feature_clause_list/*48*/)!=((void*)(NULL))){
r77pretty_print((T77*)((C)->_feature_clause_list/*48*/));
}
/*FI]*/
/*[IF*/
if(((C)->_class_invariant/*52*/)!=((void*)(NULL))){
r86pretty_print((T86*)((C)->_class_invariant/*52*/));
}
/*FI]*/
/*[IRF3.3set_indent_level*/((((T310*)((T310*)(oBC11fmt))))->_indent_level)=(0);
/*]*/
/*[IF*/
if(r310zen_mode((T310*)(oBC11fmt))){
r310skip((T310*)(oBC11fmt),0);
}
else{
r310skip((T310*)(oBC11fmt),1);
}
/*FI]*/
r310keyword((T310*)(oBC11fmt),((T0*)ms12_951));
/*[IF*/
if((((C)->_end_comment/*56*/)!=((void*)(NULL)))&&(!(r64dummy((T64*)((C)->_end_comment/*56*/))))){
r64pretty_print((T64*)((C)->_end_comment/*56*/));
}
 else if(!(r310zen_mode((T310*)(oBC11fmt)))){
r310put_string((T310*)(oBC11fmt),((T0*)ms41_5688));
r310put_string((T310*)(oBC11fmt),((T49*)((C)->_name/*24*/))->_to_string/*0*/);
}
/*FI]*/
/*[IF*/
if((((T310*)(oBC11fmt))->_column/*8*/)!=(1)){
r310put_character((T310*)(oBC11fmt),'\n');
}
/*FI]*/
}


void r41collect_for(T41* C,T2 a1,T0* a2){
T0* _fn_key=NULL;
_fn_key=X65to_key(a2);
/*[IF*/
if(r74has((T74*)((C)->_feature_dictionary/*60*/),_fn_key)){
X75collect_for(r74at((T74*)((C)->_feature_dictionary/*60*/),_fn_key),a1);
}
/*FI]*/
/*[IF*/
if(((C)->_parent_list/*40*/)==((void*)(NULL))){
/*[IF*/
if(r41is_general(C)){
}
else{
r41collect_for((T41*)(r41class_any()),a1,a2);
}
/*FI]*/
}
else{
r59collect_for((T59*)((C)->_parent_list/*40*/),a1,a2);
}
/*FI]*/
}
/*No:BASE_CLASS.end_comment*/
/*No:BASE_CLASS.name*/
/*No:BASE_CLASS.set_heading_comment1*/
T0*oBC41going_up_trace=NULL;
/*No:BASE_CLASS.us_copy*/


T6 r41has(T41* C,T0* a1){
T6 R=0;
/*[IF*/
if(r74has((T74*)((C)->_feature_dictionary/*60*/),X65to_key(a1))){
R=1;
}
else{
R=r41super_has(C,a1);
}
/*FI]*/
return R;
}
/*No:BASE_CLASS.set_heading_comment2*/


void r41vdrd6(T0* a1,T0* a2,T0* a3){
T0* _rt2=NULL;
T0* _rt1=NULL;
T0* _ct=NULL;
T0* _writable_attribute=NULL;
_writable_attribute=a2;
if(NULL!=(_writable_attribute))switch(((T0*)_writable_attribute)->id) {
case 299: 
break;
default:
_writable_attribute=NULL;
};/*[IF*/
if((_writable_attribute)!=((void*)(NULL))){
_writable_attribute=a3;
if(NULL!=(_writable_attribute))switch(((T0*)_writable_attribute)->id) {
case 299: 
break;
default:
_writable_attribute=NULL;
};/*[IF*/
if((_writable_attribute)==((void*)(NULL))){
r41fatal_error_vdrd6(a2,a3,((T0*)ms41_197701));
}
else{
/*[IRF3.3set_isa_redefinition*/((((T299*)(((T299*)_writable_attribute))))->_isa_redefinition)=(1);
/*]*/
_ct=(((T313*)a1))->_current_type/*0*/;
_rt1=X62to_runnable(X75result_type(a2),_ct);
_rt2=X62to_runnable(X75result_type(a3),_ct);
/*[IF*/
if(X62is_reference(_rt1)){
/*[IF*/
if(X62is_reference(_rt2)){
}
else{
r41fatal_error_vdrd6(a2,a3,((T0*)ms41_229320));
}
/*FI]*/
}
 else if(X62is_reference(_rt2)){
r41fatal_error_vdrd6(a2,a3,((T0*)ms41_229320));
}
/*FI]*/
}
/*FI]*/
}
/*FI]*/
}


T6 r41has_simple_feature_name(T41* C,T0* a1){
T6 R=0;
r131make((T131*)(r41mem_fn()),a1,NULL);
R=r41has(C,r41mem_fn());
return R;
}


T6 r41is_subclass_of(T41* C,T0* a1){
T6 R=0;
/*[IF*/
if(r47fast_has((T47*)((C)->_isom/*64*/),a1)){
R=1;
}
else{
/*[IF*/
if(r41is_any(((T41*)a1))){
R=1;
}
else{
/*[IRF3.3clear*/((((T47*)((T47*)(oBC41visited))))->_upper)=(-(1));
/*]*/
R=r41is_subclass_of_aux(C,a1);
}
/*FI]*/
/*[IF*/
if(R){
r47add_last((T47*)((C)->_isom/*64*/),a1);
}
/*FI]*/
}
/*FI]*/
return R;
}
/*No:BASE_CLASS.next_parent_for*/
/*No:BASE_CLASS.index_list*/


void r41set_invariant(T41* C,T0* a1,T0* a2,T0* a3){
/*[IF*/
if(((a2)!=((void*)(NULL)))||((a3)!=((void*)(NULL)))){
{T86*n=malloc(sizeof(*n));
*n=M86;
r86make(n,a1,a2,a3);
C->_class_invariant=(T0*)n;
}
}
/*FI]*/
}
/*No:BASE_CLASS.path*/
/*No:BASE_CLASS.vdrd6_types*/


T0* r41look_up_for(T41* C,T0* a1,T0* a2){
T0* R=NULL;
T2 _i=0;
T0* _super_fn=NULL;
T0* _fnl=NULL;
T0* _cst_att=NULL;
T0* _fn_key=NULL;
T0* _super=NULL;
_fn_key=X65to_key(a2);
/*[IF*/
if(r74has((T74*)((C)->_feature_dictionary/*60*/),_fn_key)){
R=r74at((T74*)((C)->_feature_dictionary/*60*/),_fn_key);
_super=r41super_look_up_for(C,a1,a2);
/*[IF*/
if(((_super)!=((void*)(NULL)))&&((_super)!=((void*)(R)))){
r41vdrd6(a1,_super,R);
_cst_att=_super;
if(NULL!=(_cst_att))switch(((T0*)_cst_att)->id) {
case 197: case 195: case 189: case 196: case 183: case 194: case 191: case 190: 
break;
default:
_cst_att=NULL;
};/*[IF*/
if((_cst_att)!=((void*)(NULL))){
r37add_position(X75start_position(_super));
r37add_position(X75start_position(R));
/*[IRF3.6fatal_error*/{T0* b1=((T0*)ms41_82732);
r37fatal_error((T37*)(oBC11eh),b1);
}/*]*/
}
/*FI]*/
_fnl=/*X75names*/((T0*)(((T183*)_super))->_names/*8*/);
_i=r67count(((T67*)_fnl));
while (!((_i)<(1))) {
_super_fn=r67item(((T67*)_fnl),_i);
/*[IF*/
if(X65is_frozen(_super_fn)){
/*[IF*/
if((X65to_key(_super_fn))==((void*)(_fn_key))){
r37add_position(X65start_position(_super_fn));
r37add_position(X75start_position(R));
/*[IRF3.6fatal_error*/{T0* b1=((T0*)ms41_66924);
r37fatal_error((T37*)(oBC11eh),b1);
}/*]*/
}
/*FI]*/
}
/*FI]*/
_i=(_i)-(1);
}
/*[IF*/
if(!(X75can_hide(R,_super,a1))){
r37add_position(X75start_position(_super));
r37add_position(X75start_position(R));
/*[IRF3.6append*/{T0* b1=((T0*)ms41_90129);
r7append((T7*)(oBC37explanation),b1);
}/*]*/
r37print_as_warning((T37*)(oBC11eh));
}
/*FI]*/
/*[IF*/
if(X75is_deferred(_super)){
}
 else if(r41has_redefine(C,a2)){
}
else{
r37add_position(X75start_position(R));
r37add_position(X75start_position(_super));
/*[IRF3.6append*/{T0* b1=((T0*)ms41_30936);
r7append((T7*)(oBC37explanation),b1);
}/*]*/
/*[IRF3.6append*/{T0* b1=((T49*)((C)->_name/*24*/))->_to_string/*0*/;
r7append((T7*)(oBC37explanation),b1);
}/*]*/
/*[IRF3.6append*/{T0* b1=((T0*)ms41_33000);
r7append((T7*)(oBC37explanation),b1);
}/*]*/
r37print_as_error((T37*)(oBC11eh));
}
/*FI]*/
}
/*FI]*/
}
else{
R=r41super_look_up_for(C,a1,a2);
}
/*FI]*/
return R;
}


T6 r41is_subclass_of_aux(T41* C,T0* a1){
T6 R=0;
/*[IF*/
if(r47fast_has((T47*)(oBC41visited),(T0*)C)){
}
else{
r47add_last((T47*)(oBC41visited),(T0*)C);
/*[IF*/
if(((C)->_parent_list/*40*/)!=((void*)(NULL))){
R=r59has_parent((T59*)((C)->_parent_list/*40*/),a1);
}
 else if(!(r47fast_has((T47*)(oBC41visited),r41class_any()))){
R=r41is_subclass_of_aux((T41*)(r41class_any()),a1);
}
/*FI]*/
}
/*FI]*/
return R;
}
int fBC41mem_fn=0;
T0*oBC41mem_fn=NULL;


T0* r41mem_fn(void){
if(fBC41mem_fn==0){
fBC41mem_fn=1;
{T131*n=malloc(sizeof(*n));
*n=M131;
r131make(n,((T0*)ms41_5012),NULL);
oBC41mem_fn=(T0*)n;
}
}
return oBC41mem_fn;}


void r41set_parent_list(T41* C,T0* a1,T0* a2,T0* a3){
{T59*n=malloc(sizeof(*n));
*n=M59;
r59make(n,(T0*)C,a1,a2,a3);
C->_parent_list=(T0*)n;
}
}
/*No:BASE_CLASS.first_parent_for*/


T6 r41has_creation(T41* C,T0* a1){
T6 R=0;
T0* _cn=NULL;
T0* _bc=NULL;
T0* _cc=NULL;
/*[IF*/
if(((C)->_creation_clause_list/*44*/)==((void*)(NULL))){
/*[IRF3.6append*/{T0* b1=((T49*)((C)->_name/*24*/))->_to_string/*0*/;
r7append((T7*)(oBC37explanation),b1);
}/*]*/
/*[IRF3.6append*/{T0* b1=((T0*)ms41_35976);
r7append((T7*)(oBC37explanation),b1);
}/*]*/
r37add_position(X65start_position(a1));
r37print_as_error((T37*)(oBC11eh));
}
else{
_cc=r55get_clause((T55*)((C)->_creation_clause_list/*44*/),a1);
/*[IF*/
if((_cc)==((void*)(NULL))){
/*[IRF3.6append*/{T0* b1=((T0*)ms12_7398);
r7append((T7*)(oBC37explanation),b1);
}/*]*/
/*[IRF3.6append*/{T0* b1=X65to_string(a1);
r7append((T7*)(oBC37explanation),b1);
}/*]*/
/*[IRF3.6append*/{T0* b1=((T0*)ms41_72954);
r7append((T7*)(oBC37explanation),b1);
}/*]*/
/*[IRF3.6append*/{T0* b1=((T49*)((C)->_name/*24*/))->_to_string/*0*/;
r7append((T7*)(oBC37explanation),b1);
}/*]*/
r41error(X65start_position(a1),((T0*)ms12_47));
}
else{
R=1;
_bc=X65origin_base_class(a1);
/*[IF*/
if((_bc)!=((void*)(NULL))){
_cn=(((T41*)_bc))->_name/*24*/;
R=r83gives_permission_to((T83*)((((T56*)_cc))->_clients/*4*/),_cn);
}
/*FI]*/
}
/*FI]*/
}
/*FI]*/
/*[IF*/
if(!(R)){
r41error(X65start_position(a1),((T0*)ms41_44356));
}
/*FI]*/
return R;
}


T0* r41expanded_initializer(T41* C,T0* a1){
T0* R=NULL;
/*[IF*/
if(((C)->_creation_clause_list/*44*/)!=((void*)(NULL))){
R=r55expanded_initializer((T55*)((C)->_creation_clause_list/*44*/),a1);
}
/*FI]*/
return R;
}


T6 r41proper_has(T41* C,T0* a1){
T6 R=0;
R=r74has((T74*)((C)->_feature_dictionary/*60*/),X65to_key(a1));
return R;
}


void r41add_index_clause(T41* C,T0* a1){
/*[IF*/
if(((C)->_index_list/*8*/)==((void*)(NULL))){
{T306*n=malloc(sizeof(*n));
*n=M306;
/*[IRF3.3make*/((((T306*)(n)))->_list)=(se_ma307(1,
a1));
/*]*/
C->_index_list=(T0*)n;
}
}
else{
/*[IRF3.5add_last*/r307add_last(((T307*)(((T306*)((C)->_index_list/*8*/))->_list/*0*/)),a1);
/*]*/
}
/*FI]*/
}
/*No:BASE_CLASS.isom*/
/*No:BASE_CLASS.is_generic*/


T6 r41super_has(T41* C,T0* a1){
T6 R=0;
/*[IF*/
if(((C)->_parent_list/*40*/)==((void*)(NULL))){
/*[IF*/
if(r41is_general(C)){
R=0;
}
else{
R=r41has((T41*)(r41class_any()),a1);
}
/*FI]*/
}
else{
R=r59has((T59*)((C)->_parent_list/*40*/),a1);
}
/*FI]*/
return R;
}
/*No:BASE_CLASS.fz_09*/
/*No:BASE_CLASS.is_deferred*/


T6 r41is_any(T41* C){
T6 R=0;
R=(((T0*)ms13_714))==((void*)(((T49*)((C)->_name/*24*/))->_to_string/*0*/));
return R;
}
/*No:BASE_CLASS.error_vtec1*/


void r41check_expanded_with(T41* C,T0* a1){
T0* _rf=NULL;
/*[IF*/
if((C)->_is_deferred/*16*/){
r37add_type(a1,((T0*)ms12_11472));
/*[IRF3.6fatal_error*/{T0* b1=((T0*)ms41_122544);
r37fatal_error((T37*)(oBC11eh),b1);
}/*]*/
}
/*FI]*/
/*[IF*/
if(((C)->_creation_clause_list/*44*/)!=((void*)(NULL))){
r55check_expanded_with((T55*)((C)->_creation_clause_list/*44*/),a1);
}
/*FI]*/
_rf=r41expanded_initializer(C,a1);
}


T6 r41has_redefine(T41* C,T0* a1){
T6 R=0;
/*[IF*/
if(((C)->_parent_list/*40*/)!=((void*)(NULL))){
R=r59has_redefine((T59*)((C)->_parent_list/*40*/),a1);
}
/*FI]*/
return R;
}


void r41inherit_cycle_check(T41* C){
T2 _i=0;
r47add_last((T47*)(oBC41visited),(T0*)C);
/*[IF*/
if((/*(IRF4.5first*//*(IRF4.6item*/(((T47*)(oBC41visited))->_storage/*0*/)[0]/*)*//*)*/)==((void*)(C))){
/*[IRF3.6append*/{T0* b1=((T0*)ms41_37233);
r7append((T7*)(oBC37explanation),b1);
}/*]*/
_i=0;
while (!((_i)>(((T47*)(oBC41visited))->_upper/*8*/))) {
/*[IRF3.6append*/{T0* b1=((T49*)(((T41*)(/*(IRF4.6item*/(((T47*)(oBC41visited))->_storage/*0*/)[_i]/*)*/))->_name/*24*/))->_to_string/*0*/;
r7append((T7*)(oBC37explanation),b1);
}/*]*/
/*[IF*/
if((_i)<(((T47*)(oBC41visited))->_upper/*8*/)){
/*[IRF3.6append*/{T0* b1=((T0*)ms41_158);
r7append((T7*)(oBC37explanation),b1);
}/*]*/
}
/*FI]*/
_i=(_i)+(1);
}
/*[IRF3.6fatal_error*/{T0* b1=((T0*)ms41_1145);
r37fatal_error((T37*)(oBC11eh),b1);
}/*]*/
}
 else if(((C)->_parent_list/*40*/)!=((void*)(NULL))){
r59inherit_cycle_check((T59*)((C)->_parent_list/*40*/));
}
/*FI]*/
}


T0* r41up_to_original(T41* C,T0* a1,T0* a2){
T0* R=NULL;
/*[IF*/
if(r41proper_has(C,a2)){
/*[IF*/
if(((C)->_parent_list/*40*/)==((void*)(NULL))){
R=r41new_name_of_original(((T41*)a1),(T0*)C,a2);
}
else{
R=r59up_to_original((T59*)((C)->_parent_list/*40*/),a1,a2);
/*[IF*/
if((R)==((void*)(NULL))){
R=r41new_name_of_original(((T41*)a1),(T0*)C,a2);
}
/*FI]*/
}
/*FI]*/
}
 else if(((C)->_parent_list/*40*/)!=((void*)(NULL))){
R=r59up_to_original((T59*)((C)->_parent_list/*40*/),a1,a2);
}
 else if(r41is_general(C)){
}
else{
R=r41up_to_original((T41*)(r41class_any()),a1,a2);
}
/*FI]*/
return R;
}
/*No:BASE_CLASS.fz_is_invalid*/
/*No:BASE_CLASS.feature_dictionary*/
/*No:BASE_CLASS.fz_end*/


T0* r41new_name_of(T41* C,T0* a1,T0* a2){
T0* R=NULL;
/*[IF*/
if((C)==((void*)(a1))){
R=a2;
}
else{
R=r41up_to_original(((T41*)a1),(T0*)C,a2);
/*[IF*/
if((R)==((void*)(NULL))){
r37add_position(X65start_position(a2));
/*[IRF3.6append*/{T0* b1=((T0*)ms12_7398);
r7append((T7*)(oBC37explanation),b1);
}/*]*/
/*[IRF3.6append*/{T0* b1=X65to_string(a2);
r7append((T7*)(oBC37explanation),b1);
}/*]*/
/*[IRF3.6append*/{T0* b1=((T0*)ms41_5440);
r7append((T7*)(oBC37explanation),b1);
}/*]*/
/*[IRF3.6append*/{T0* b1=((T49*)((((T41*)a1))->_name/*24*/))->_to_string/*0*/;
r7append((T7*)(oBC37explanation),b1);
}/*]*/
/*[IRF3.6append*/{T0* b1=((T0*)ms41_15392);
r7append((T7*)(oBC37explanation),b1);
}/*]*/
/*[IRF3.6append*/{T0* b1=((T49*)((C)->_name/*24*/))->_to_string/*0*/;
r7append((T7*)(oBC37explanation),b1);
}/*]*/
/*[IRF3.6fatal_error*/{T0* b1=((T0*)ms41_166a);
r37fatal_error((T37*)(oBC11eh),b1);
}/*]*/
}
/*FI]*/
}
/*FI]*/
return R;
}
/*No:BASE_CLASS.us_any*/
/*No:BASE_CLASS.has_creation_clause*/


T6 r41is_a_vncg(T41* C,T0* a1,T0* a2){
T6 R=0;
/*[IF*/
if(((C)->_parent_list/*40*/)!=((void*)(NULL))){
R=r59is_a_vncg((T59*)((C)->_parent_list/*40*/),X62run_type(a1),X62run_type(a2));
}
/*FI]*/
return R;
}


void r41set_is_expanded(T41* C){
/*[IF*/
if((C)->_is_deferred/*16*/){
/*[IRF3.6error_vtec1*/{T41* C1=C;
r41error(((T49*)((C1)->_name/*24*/))->_start_position/*4*/,((T0*)ms41_130830));
}/*]*/
}
/*FI]*/
C->_is_expanded=1;
}


void r41set_is_deferred(T41* C){
/*[IF*/
if((C)->_is_expanded/*20*/){
/*[IRF3.6error_vtec1*/{T41* C1=C;
r41error(((T49*)((C1)->_name/*24*/))->_start_position/*4*/,((T0*)ms41_130830));
}/*]*/
}
/*FI]*/
C->_is_deferred=1;
}


void r41add_creation_clause(T41* C,T0* a1){
/*[IF*/
if(((C)->_creation_clause_list/*44*/)==((void*)(NULL))){
{T55*n=malloc(sizeof(*n));
*n=M55;
/*[IRF3.3make*/((((T55*)(n)))->_list)=(se_ma57(1,
a1));
/*]*/
C->_creation_clause_list=(T0*)n;
}
}
else{
/*[IRF3.5add_last*/r57add_last(((T57*)(((T55*)((C)->_creation_clause_list/*44*/))->_list/*0*/)),a1);
/*]*/
}
/*FI]*/
}
/*No:IFTHENLIST.nb_errors*/
/*No:IFTHENLIST.add_last*/


T0* r211to_runnable(T211* C,T0* a1){
T0* R=NULL;
T2 _i=0;
/*[IF*/
if(((C)->_current_type/*4*/)!=((void*)(NULL))){
{T211*n=malloc(sizeof(*n));
*n=M211;
/*[IRF3.3make*/((((T211*)(n)))->_list)=(r212twin((T212*)((C)->_list/*0*/)));
/*]*/
R=(T0*)n;
}
R=r211to_runnable(((T211*)R),a1);
}
else{
C->_current_type=a1;
_i=1;
while (!(((_i)>(((T212*)((C)->_list/*0*/))->_upper/*8*/))||((/*(IRF4.9nb_errors*/((T37*)(oBC11eh))->_nb_errors/*4*//*)*/)>(0)))) {
/*[IRF3.6put*/{T212* C1=(T212*)((C)->_list/*0*/);
T0* b1=r210to_runnable((T210*)(r212item((T212*)((C)->_list/*0*/),_i)),a1);
T2 b2=_i;
((C1)->_storage/*0*/)[(b2)-((C1)->_lower/*12*/)]=(b1);
}/*]*/
_i=(_i)+(1);
}
R=(T0*)C;
}
/*FI]*/
return R;
}
/*No:IFTHENLIST.current_type*/
/*No:IFTHENLIST.make*/


void r211pretty_print(T211* C){
T2 _i=0;
_i=1;
while (!((_i)>(((T212*)((C)->_list/*0*/))->_upper/*8*/))) {
r210pretty_print((T210*)(r212item((T212*)((C)->_list/*0*/),_i)));
_i=(_i)+(1);
/*[IF*/
if((_i)<=(((T212*)((C)->_list/*0*/))->_upper/*8*/)){
r310indent((T310*)(oBC11fmt));
r310keyword((T310*)(oBC11fmt),((T0*)ms211_6942));
}
/*FI]*/
}
}
/*No:IFTHENLIST.list*/


T0* r214start_position(T214* C){
T0* R=NULL;
R=X89start_position((C)->_expression/*4*/);
return R;
}


T0* r214add_comment(T214* C,T0* a1){
T0* R=NULL;
/*[IF*/
if(((a1)==((void*)(NULL)))||((/*(IRF4.6count*/r32count(((T32*)((((T64*)a1))->_list/*4*/)))/*)*/)==(0))){
R=(T0*)C;
}
else{
{T214*n=malloc(sizeof(*n));
*n=M214;
r214make(n,(T0*)C,a1);
R=(T0*)n;
}
}
/*FI]*/
return R;
}
/*No:EXPRESSION_WITH_COMMENT.expression*/


T2 r214to_integer(T214* C){
T2 R=0;
r214error(r214start_position(C),((T0*)ms12_45846));
return R;
}


void r214print_as_target(T214* C){
X89print_as_target((C)->_expression/*4*/);
}


void r214bracketed_pretty_print(T214* C){
X89pretty_print((C)->_expression/*4*/);
r64pretty_print((T64*)((C)->_comment/*8*/));
}


T0* r214to_runnable(T214* C,T0* a1){
T0* R=NULL;
T0* _e=NULL;
_e=X89to_runnable((C)->_expression/*4*/,a1);
/*[IF*/
if(((C)->_expression/*4*/)==((void*)(_e))){
R=(T0*)C;
}
else{
{T214*n=malloc(sizeof(*n));
*n=M214;
r214make(n,_e,(C)->_comment/*8*/);
R=(T0*)n;
}
}
/*FI]*/
return R;
}
/*No:EXPRESSION_WITH_COMMENT.fz_iinaiv*/


T0* r214result_type(T214* C){
T0* R=NULL;
R=X89result_type((C)->_expression/*4*/);
return R;
}


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


T2 r214precedence(T214* C){
T2 R=0;
R=X89precedence((C)->_expression/*4*/);
return R;
}


void r214make(T214* C,T0* a1,T0* a2){
C->_expression=a1;
C->_comment=a2;
}


T6 r214is_current(T214* C){
T6 R=0;
R=X89is_current((C)->_expression/*4*/);
return R;
}


void r214pretty_print(T214* C){
X89pretty_print((C)->_expression/*4*/);
r64pretty_print((T64*)((C)->_comment/*8*/));
}


T6 r214is_void(T214* C){
T6 R=0;
R=X89is_void((C)->_expression/*4*/);
return R;
}
/*No:EXPRESSION_WITH_COMMENT.comment*/
/*No:CALL_PREFIX_MINUS.us_minus*/
/*No:CALL_PREFIX_MINUS.feature_name*/


void r126run_feature_match(T126* C){
r126run_feature_has_result(C);
/*[IF*/
if((X312arg_count((C)->_run_feature/*8*/))>(0)){
r37add_position(((T125*)((C)->_feature_name/*12*/))->_start_position/*8*/);
r37add_position(X312start_position((C)->_run_feature/*8*/));
/*[IRF3.6fatal_error*/{T0* b1=((T0*)ms124_50512);
r37fatal_error((T37*)(oBC11eh),b1);
}/*]*/
}
/*FI]*/
}


T0* r126runnable_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;
}


T0* r126start_position(T126* C){
T0* R=NULL;
R=((T125*)((C)->_feature_name/*12*/))->_start_position/*8*/;
return R;
}


T0* r126add_comment(T126* C,T0* a1){
T0* R=NULL;
/*[IF*/
if(((a1)==((void*)(NULL)))||((/*(IRF4.6count*/r32count(((T32*)((((T64*)a1))->_list/*4*/)))/*)*/)==(0))){
R=(T0*)C;
}
else{
{T214*n=malloc(sizeof(*n));
*n=M214;
r214make(n,(T0*)C,a1);
R=(T0*)n;
}
}
/*FI]*/
return R;
}


T2 r126to_integer(T126* C){
T2 R=0;
T0* _rf1=NULL;
_rf1=(C)->_run_feature/*8*/;
if(NULL!=(_rf1))switch(((T0*)_rf1)->id) {
case 325: 
break;
default:
_rf1=NULL;
};/*[IF*/
if((_rf1)==((void*)(NULL))){
r126error(r126start_position(C),((T0*)ms12_45846));
}
else{
R=X89to_integer((((T325*)_rf1))->_value/*28*/);
}
/*FI]*/
return R;
}


void r126print_as_target(T126* C){
r310put_character((T310*)(oBC11fmt),'\50');
r126pretty_print(C);
r310put_character((T310*)(oBC11fmt),'\51');
r310put_character((T310*)(oBC11fmt),'\56');
}


void r126bracketed_pretty_print(T126* C){
r310put_character((T310*)(oBC11fmt),'\50');
r126pretty_print(C);
r310put_character((T310*)(oBC11fmt),'\51');
}


T0* r126to_runnable(T126* C,T0* a1){
T0* R=NULL;
T0* _rf=NULL;
T0* _t=NULL;
_t=r126runnable_expression((C)->_target/*4*/,a1);
_rf=r126run_feature_for(C,_t,a1);
/*[IF*/
if(((C)->_run_feature/*8*/)==((void*)(NULL))){
C->_target=_t;
C->_run_feature=_rf;
r126run_feature_match(C);
R=(T0*)C;
}
 else if((_t)==((void*)((C)->_target/*4*/))){
R=(T0*)C;
}
else{
{T126*n=malloc(sizeof(*n));
*n=M126;
r126with(n,_t,(C)->_feature_name/*12*/,_rf);
R=(T0*)n;
}
}
/*FI]*/
return R;
}


void r126run_feature_has_result(T126* C){
/*[IF*/
if((X312result_type((C)->_run_feature/*8*/))==((void*)(NULL))){
r37add_position(X312start_position((C)->_run_feature/*8*/));
r37add_position(((T125*)((C)->_feature_name/*12*/))->_start_position/*8*/);
/*[IRF3.6fatal_error*/{T0* b1=((T0*)ms100_53650);
r37fatal_error((T37*)(oBC11eh),b1);
}/*]*/
}
/*FI]*/
}
/*No:CALL_PREFIX_MINUS.fz_iinaiv*/


T0* r126run_feature_for(T126* 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;
}


T0* r126result_type(T126* C){
T0* R=NULL;
R=X312result_type((C)->_run_feature/*8*/);
/*[IF*/
if(X62is_like_current(R)){
R=/*X312current_type*/((T0*)((T325*)((C)->_run_feature/*8*/))->_current_type/*4*/);
}
/*FI]*/
return R;
}
/*No:CALL_PREFIX_MINUS.target*/


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


void r126make(T126* C,T0* a1,T0* a2){
{T125*n=malloc(sizeof(*n));
*n=M125;
r125make(n,r126operator(),a1);
C->_feature_name=(T0*)n;
}
C->_target=a2;
}
/*No:CALL_PREFIX_MINUS.is_current*/


void r126pretty_print(T126* C){
/*[IRF3.6pretty_print*/{T125* C1=(T125*)((C)->_feature_name/*12*/);
r310put_string((T310*)(oBC11fmt),(C1)->_to_string/*4*/);
}/*]*/
r310put_character((T310*)(oBC11fmt),'\40');
/*[IF*/
if((X89precedence((C)->_target/*4*/))<(11)){
r310put_character((T310*)(oBC11fmt),'\50');
X89pretty_print((C)->_target/*4*/);
r310put_character((T310*)(oBC11fmt),'\51');
}
else{
X89pretty_print((C)->_target/*4*/);
}
/*FI]*/
}
/*No:CALL_PREFIX_MINUS.is_void*/


T0* r126operator(void){
T0* R=NULL;
R=((T0*)ms13_46);
return R;
}


void r126with(T126* C,T0* a1,T0* a2,T0* a3){
C->_target=a1;
C->_feature_name=a2;
C->_run_feature=a3;
r126run_feature_match(C);
}
/*No:CALL_PREFIX_MINUS.fatal_error*/


T0* r152type_boolean(void){
if(fBC11type_boolean==0){
fBC11type_boolean=1;
{T248*n=malloc(sizeof(*n));
*n=M248;
r248make(n,NULL);
oBC11type_boolean=(T0*)n;
}
}
return oBC11type_boolean;}
/*No:E_FALSE.start_position*/


T0* r152to_string(void){
T0* R=NULL;
R=((T0*)ms12_2690);
return R;
}

