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


void r87fe_multiple(T0* a1,T0* a2){
r21add_position(X50start_position(a1));
r21add_position(X50start_position(a2));
/*[IRF3.6fatal_error*/{T0* b1=((T0*)ms87_61088);
r21fatal_error((T21*)(oBC12eh),b1);
}/*]*/
}


T6 r87has(T87* C,T0* a1){
T6 R=0;
R=(r87index_of(C,a1))>(0);
return R;
}
/*No:FEATURE_NAME_LIST.make_1*/


void r87add_last(T87* C,T0* a1){
T0* _fn2=NULL;
_fn2=r87feature_name(C,X50to_key(a1));
/*[IF*/
if((_fn2)!=((void*)(NULL))){
r87fe_multiple(_fn2,a1);
}
/*FI]*/
/*[IF*/
if(((C)->_remainder/*4*/)==((void*)(NULL))){
{T88*n=malloc(sizeof(*n));
*n=M88;
r88with_capacity(n,4);
C->_remainder=(T0*)n;
}
}
/*FI]*/
r88add_last((T88*)((C)->_remainder/*4*/),a1);
}


T0* r87item(T87* C,T2 a1){
T0* R=NULL;
/*[IF*/
if((a1)==(1)){
R=(C)->_first/*0*/;
}
else{
R=/*(IRF4.6item*/(((T88*)((C)->_remainder/*4*/))->_storage/*0*/)[(a1)-(2)]/*)*/;
}
/*FI]*/
return R;
}
/*No:FEATURE_NAME_LIST.first*/


T2 r87count(T87* C){
T2 R=0;
/*[IF*/
if(((C)->_remainder/*4*/)==((void*)(NULL))){
R=1;
}
else{
R=(((T88*)((C)->_remainder/*4*/))->_upper/*8*/)+(2);
}
/*FI]*/
return R;
}
/*No:FEATURE_NAME_LIST.remainder*/


T2 r87index_of(T87* C,T0* a1){
T2 R=0;
T0* _fn_key=NULL;
_fn_key=X50to_key(a1);
/*[IF*/
if((X50to_key((C)->_first/*0*/))==((void*)(_fn_key))){
R=1;
}
 else if(((C)->_remainder/*4*/)==((void*)(NULL))){
}
else{
R=((T88*)((C)->_remainder/*4*/))->_upper/*8*/;
while (!(((R)<(0))||((_fn_key)==((void*)(X50to_key(/*(IRF4.6item*/(((T88*)((C)->_remainder/*4*/))->_storage/*0*/)[R]/*)*/)))))) {
R=(R)-(1);
}
/*[IF*/
if((R)<(0)){
R=0;
}
else{
R=(R)+(2);
}
/*FI]*/
}
/*FI]*/
return R;
}
/*No:FEATURE_NAME_LIST.fatal_error*/
/*No:CLASS_INVARIANT.start_position*/
/*No:CLASS_INVARIANT.header_comment*/
/*No:CLASS_INVARIANT.current_type*/


void r106add_into(T106* C,T0* a1){
T0* _a=NULL;
T2 _i=0;
/*[IF*/
if(((C)->_list/*8*/)!=((void*)(NULL))){
_i=1;
while (!((_i)>(((T108*)((C)->_list/*8*/))->_upper/*8*/))) {
_a=r108item((T108*)((C)->_list/*8*/),_i);
/*[IF*/
if(!(r108fast_has(((T108*)a1),_a))){
r108add_last(((T108*)a1),_a);
}
/*FI]*/
_i=(_i)+(1);
}
}
/*FI]*/
}
/*No:CLASS_INVARIANT.run_feature*/


void r106make(T106* C,T0* a1,T0* a2,T0* a3){
C->_start_position=a1;
C->_header_comment=a2;
C->_list=a3;
}


void r106make_runnable(T106* C,T0* a1,T0* a2,T0* a3){
C->_list=a1;
C->_current_type=a2;
C->_run_feature=a3;
}


void r106compile_to_jvm(T106* C,T6 a1){
T0* _ca=NULL;
T2 _i=0;
T2 _point_true=0;
_ca=oBC12code_attribute;
r28check_opening(((T28*)_ca));
/*[IRF3.3clear*/((((T48*)((T48*)(oBC107failure))))->_upper)=(-(1));
/*]*/
_i=1;
while (!((_i)>(((T108*)((C)->_list/*8*/))->_upper/*8*/))) {
r105compile_to_jvm((T105*)(r108item((T108*)((C)->_list/*8*/),_i)),a1);
r48add_last((T48*)(oBC107failure),r28opcode_ifeq(((T28*)_ca)));
_i=(_i)+(1);
}
/*[IRF3.4opcode_iconst_1*/r28opcode(((T28*)_ca),4,1);
/*]*/
_point_true=r28opcode_goto(((T28*)_ca));
r28resolve_with(oBC107failure);
/*[IRF3.4opcode_iconst_0*/r28opcode(((T28*)_ca),3,1);
/*]*/
r28resolve_u2_branch(_point_true);
r28check_closing(((T28*)_ca));
}


void r106afd_check(T106* C){
T2 _i=0;
/*[IF*/
if(((C)->_list/*8*/)!=((void*)(NULL))){
_i=((T108*)((C)->_list/*8*/))->_upper/*8*/;
while (!((_i)==(0))) {
r105afd_check((T105*)(r108item((T108*)((C)->_list/*8*/),_i)));
_i=(_i)-(1);
}
}
/*FI]*/
}
/*No:CLASS_INVARIANT.list*/
/*No:CLASS_NAME_LIST.make_1*/


T6 r199gives_permission_to_any(T199* C){
T6 R=0;
T2 _i=0;
_i=r199count(C);
while (!((R)||((_i)==(0)))) {
R=(((T70*)(r199item(C,_i)))->_to_string/*0*/)==((void*)(((T0*)ms14_714)));
_i=(_i)-(1);
}
return R;
}


void r199add_last(T199* C,T0* a1){
T2 _i=0;
_i=r199index_of(C,a1);
/*[IF*/
if((_i)>(0)){
r21add_position(((T70*)(r199item(C,_i)))->_start_position/*4*/);
r199warning((((T70*)a1))->_start_position/*4*/,((T0*)ms199_54510));
}
/*FI]*/
/*[IF*/
if(((C)->_remainder/*4*/)==((void*)(NULL))){
{T200*n=malloc(sizeof(*n));
*n=M200;
r200with_capacity(n,4);
C->_remainder=(T0*)n;
}
}
/*FI]*/
r200add_last((T200*)((C)->_remainder/*4*/),a1);
}


void r199merge(T199* C,T0* a1,T0* a2){
T0* _cn=NULL;
T2 _i=0;
C->_first=r199item(((T199*)a1),1);
{T200*n=malloc(sizeof(*n));
*n=M200;
r200with_capacity(n,((r199count(((T199*)a1)))+(r199count(((T199*)a2))))-(1));
C->_remainder=(T0*)n;
}
_i=r199count(((T199*)a1));
while (!((_i)==(1))) {
r200add_last((T200*)((C)->_remainder/*4*/),r199item(((T199*)a1),_i));
_i=(_i)-(1);
}
_i=r199count(((T199*)a2));
while (!((_i)==(0))) {
_cn=r199item(((T199*)a2),_i);
/*[IF*/
if((r199index_of(C,_cn))==(0)){
r200add_last((T200*)((C)->_remainder/*4*/),_cn);
}
/*FI]*/
_i=(_i)-(1);
}
}


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


void r199warning(T0* a1,T0* a2){
r21add_position(a1);
r21warning((T21*)(oBC12eh),a2);
}
/*No:CLASS_NAME_LIST.first*/


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


T6 r199gives_permission_to(T199* C,T0* a1){
T6 R=0;
T2 _i=0;
/*[IF*/
if((r199index_of(C,a1))>(0)){
R=1;
}
else{
_i=r199count(C);
while (!((R)||((_i)==(0)))) {
R=r70is_subclass_of(((T70*)a1),r199item(C,_i));
_i=(_i)-(1);
}
}
/*FI]*/
return R;
}
/*No:CLASS_NAME_LIST.us_any*/
/*No:CLASS_NAME_LIST.remainder*/


T2 r199index_of(T199* C,T0* a1){
T2 R=0;
T0* _to_string=NULL;
_to_string=(((T70*)a1))->_to_string/*0*/;
R=r199count(C);
while (!(((R)==(0))||((_to_string)==((void*)(((T70*)(r199item(C,R)))->_to_string/*0*/))))) {
R=(R)-(1);
}
return R;
}
/*No:IMPLICIT_CURRENT.static_value*/
/*No:IMPLICIT_CURRENT.is_static*/
/*No:IMPLICIT_CURRENT.can_be_dropped*/
/*No:IMPLICIT_CURRENT.is_manifest_string*/
/*No:IMPLICIT_CURRENT.start_position*/


T0* r197add_comment(T197* C,T0* a1){
T0* R=NULL;
/*[IF*/
if(((a1)==((void*)(NULL)))||((/*(IRF4.6count*/r73count(((T73*)((((T85*)a1))->_list/*4*/)))/*)*/)==(0))){
R=(T0*)C;
}
else{
{T234*n=malloc(sizeof(*n));
*n=M234;
r234make(n,(T0*)C,a1);
R=(T0*)n;
}
}
/*FI]*/
return R;
}
/*No:IMPLICIT_CURRENT.is_written*/


void r197compile_target_to_jvm(T197* C){
/*[IF*/
/*AF*//*AE*/
r197compile_to_jvm(C);
/*FI]*/
}


T2 r197to_integer(T197* C){
T2 R=0;
r197error((C)->_start_position/*4*/,((T0*)ms13_45846));
return R;
}
/*No:IMPLICIT_CURRENT.use_current*/


T2 r197jvm_branch_if_true(T197* C){
T2 R=0;
r197compile_to_jvm(C);
R=r28opcode_ifne((T28*)(oBC12code_attribute));
return R;
}


T0* r197to_runnable(T197* C,T0* a1){
T0* R=NULL;
/*[IF*/
if(((C)->_result_type/*8*/)==((void*)(NULL))){
C->_result_type=a1;
R=(T0*)C;
}
 else if(((C)->_result_type/*8*/)==((void*)(a1))){
R=(T0*)C;
}
else{
{T197*n=malloc(sizeof(*n));
*n=M197;
/*[IRF3.3make*/((((T197*)(n)))->_start_position)=((C)->_start_position/*4*/);
/*]*/
R=(T0*)n;
}
R=r197to_runnable(((T197*)R),a1);
}
/*FI]*/
return R;
}


T2 r197compile_to_jvm_into(T197* C,T0* a1){
T2 R=0;
R=r197standard_compile_to_jvm_into(C,a1);
return R;
}
/*No:IMPLICIT_CURRENT.isa_dca_inline_argument*/
/*No:IMPLICIT_CURRENT.is_pre_computable*/
/*No:IMPLICIT_CURRENT.fz_iinaiv*/
/*No:IMPLICIT_CURRENT.result_type*/


void r197error(T0* a1,T0* a2){
r21add_position(a1);
r21error((T21*)(oBC12eh),a2);
}
/*No:IMPLICIT_CURRENT.make*/


void r197standard_compile_target_to_jvm(T197* C){
r197compile_to_jvm(C);
X52jvm_check_class_invariant((C)->_result_type/*8*/);
}
/*No:IMPLICIT_CURRENT.compile_to_jvm_assignment*/
/*No:IMPLICIT_CURRENT.is_current*/


T2 r197standard_compile_to_jvm_into(T197* C,T0* a1){
T2 R=0;
r197compile_to_jvm(C);
R=X52jvm_convert_to(X52run_type((C)->_result_type/*8*/),a1);
return R;
}
/*No:IMPLICIT_CURRENT.is_void*/
/*No:IMPLICIT_CURRENT.compile_to_jvm_old*/
/*No:IMPLICIT_CURRENT.jvm_assign*/


T2 r197jvm_branch_if_false(T197* C){
T2 R=0;
r197compile_to_jvm(C);
R=r28opcode_ifeq((T28*)(oBC12code_attribute));
return R;
}


void r197compile_to_jvm(T197* C){
X52jvm_push_local((C)->_result_type/*8*/,0);
}
/*No:IMPLICIT_CURRENT.afd_check*/
/*No:IMPLICIT_CURRENT.is_result*/

