home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 10 Tools
/
10-Tools.zip
/
sa104os2.zip
/
SATHR104.ZIP
/
SATHER
/
BOOT
/
CS.COD
/
CODE4.C
< prev
next >
Wrap
C/C++ Source or Header
|
1995-02-15
|
299KB
|
9,788 lines
/* C code generated by Sather 1.0 compiler */
#include "sather.h"
#include "strings.h"
TP AM_VARR_ASSIGN_E(AM_VARR_ASSIGN_EXPR self) {
TP noname4605;
AM_EXPR local0;
local0 = self->ob;
return (*AM_EXPR_tp_TP[local0->header.tag+AM_EXPR_tp_TP_offset])(local0);
}
TP AM_EXT_CALL_EXPR_4606(AM_EXT_CALL_EXPR self) {
TP noname4607;
return self->fun->ret;
}
INT AM_EXT_CALL_EXPR_4608(AM_EXT_CALL_EXPR self) {
INT noname4609 = ((INT) 0);
return self->asize;
fprintf(stderr,"Last statement wasn't return ../Library/aref.sa:20:8\n");
exit(16);
}
AM_EXPR AM_EXT_CALL_EXPR_4610(AM_EXT_CALL_EXPR self, INT ind_4611) {
AM_EXPR noname4612;
BOOL local0;
INT local1;
INT local2;
if ((!((self==((AM_EXT_CALL_EXPR) NULL))))) {
local1 = 0;
local2 = (self->asize);
local0 = INT_is_bet_INT_I(ind_4611, local1, (c_INT_minus_INT_INT_chk(local2,1)));
} else {
local0 = FALSE;
}
if (!(local0)) {
fprintf(stderr,"Violation of precondition ../Library/aref.sa:33:7\n");
exit(16);
}
if (ind_4611<0||ind_4611>=self->asize) {
fprintf(stderr,"Index out of bounds ../Library/aref.sa:33:7\n");
exit(16);
}
return self->arr_part[ind_4611];
}
INT AM_ARRAY_EXPR_as(AM_ARRAY_EXPR self) {
INT noname4613 = ((INT) 0);
return self->asize;
fprintf(stderr,"Last statement wasn't return ../Library/aref.sa:20:8\n");
exit(16);
}
AM_EXPR AM_ARRAY_EXPR_ag(AM_ARRAY_EXPR self, INT ind_4614) {
AM_EXPR noname4615;
BOOL local0;
INT local1;
INT local2;
if ((!((self==((AM_ARRAY_EXPR) NULL))))) {
local1 = 0;
local2 = (self->asize);
local0 = INT_is_bet_INT_I(ind_4614, local1, (c_INT_minus_INT_INT_chk(local2,1)));
} else {
local0 = FALSE;
}
if (!(local0)) {
fprintf(stderr,"Violation of precondition ../Library/aref.sa:33:7\n");
exit(16);
}
if (ind_4614<0||ind_4614>=self->asize) {
fprintf(stderr,"Index out of bounds ../Library/aref.sa:33:7\n");
exit(16);
}
return self->arr_part[ind_4614];
}
STR BE_value_void_TP(BE self, TP tp_4616, STR e_4617) {
STR noname4618;
AM_OB_DEF aod;
BOOL after_first = ((BOOL) 0);
STR res;
FMAPIDENTTP noname4619;
TUPIDENTTP p = TUPIDENTTP_zero;
STR key_4620;
INT noname4621 = ((INT) 0);
INT noname4622 = ((INT) 0);
INT i = ((INT) 0);
TP local0;
STR local1;
STR local2;
STR local3;
TUPIDENTTP local4;
OB local5;
TP local6;
STR local7;
TP local8;
STR local9;
STR local10;
STR local11;
STR local12;
STR local13;
TP local14;
STR local15;
STR local16;
STR local17;
STR local18;
STR local19;
STR local20;
STR local21;
STR local22;
STR local23;
STR local24;
STR local25;
STR local26;
STR local27;
STR local28;
STR local29;
STR local30;
INT local31;
INT local32;
INT local33;
INT local31e;
STR local34;
STR local35;
STR local36;
STR local37;
STR local38;
STR local39;
local0 = tp_4616;
if (!((*TP_is_value_BOOL[local0->header.tag+TP_is_value_BOOL_offset])(local0))) {
fprintf(stderr,"Violation of precondition ./be.sa:2425:14\n");
exit(16);
}
if (BE_is_built_in_t(self, tp_4616)) {
local1 = STR_plus_STR_STR(((STR) &name_4623), e_4617);
local2 = STR_plus_STR_STR(local1, ((STR) &name_4624));
local3 = STR_plus_STR_STR(local2, BE_mangle_OB_STR(self, ((OB) tp_4616)));
return STR_plus_STR_STR(local3, ((STR) &S0_4625));
}
aod = PROG_am_ob_def_f(self->prog, tp_4616);
after_first = FALSE;
res = ((STR) &name_4626);
if ((!((aod->at==((FMAPIDENTTP) NULL))))) {
{
struct FMAPIDENTTP_pair_frame_struct temp4627_0;
FMAPIDENTTP_pair_frame
noname4628 = &temp4627_0;
noname4628->state = 0;
while (1) {
if (noname4628->state == 0) {
noname4619 = aod->at;
noname4628->arg0 = noname4619;
}
local4 = FMAPIDENTTP_pair(noname4628);
if (noname4628->state == -1) goto after_loop;
p = local4;
local5 = (OB)((IDENT_boxed) sbi_alloc(sizeof(struct IDENT_boxed_struct), IDENT_tag));
((IDENT_boxed) local5)->value_part = p.t1;
key_4620 = BE_mangle_OB_STR(self, local5);
if (after_first) {
res = STR_plus_STR_STR(res, ((STR) &name_4629));
}
local6 = p.t2;
if ((*TP_is_value_BOOL[local6->header.tag+TP_is_value_BOOL_offset])(local6)) {
local7 = STR_tail_INT_STR(e_4617, 1);
if (STR_is_eq_STR_BOOL(local7, ((STR) &name_4630))) {
local8 = p.t2;
local9 = ((STR) &name_4631);
local10 = STR_plus_STR_STR(local9, BE_mangle_OB_STR(self, ((OB) tp_4616)));
local11 = STR_plus_STR_STR(local10, ((STR) &S_blob_4632));
local12 = STR_plus_STR_STR(local11, e_4617);
local13 = STR_plus_STR_STR(local12, ((STR) &name_4633));
res = STR_plus_STR_STR(res, BE_value_void_TP(self, local8, STR_plus_STR_STR(local13, key_4620)));
}
else {
local14 = p.t2;
local15 = STR_plus_CHAR_STR(e_4617, '.');
res = STR_plus_STR_STR(res, BE_value_void_TP(self, local14, STR_plus_STR_STR(local15, key_4620)));
}
}
else {
local16 = STR_tail_INT_STR(e_4617, 1);
if (STR_is_eq_STR_BOOL(local16, ((STR) &name_4634))) {
local17 = STR_plus_STR_STR(res, ((STR) &name_4635));
local18 = STR_plus_STR_STR(local17, BE_mangle_OB_STR(self, ((OB) tp_4616)));
local19 = STR_plus_STR_STR(local18, ((STR) &S_blob_4636));
local20 = STR_plus_STR_STR(local19, e_4617);
local21 = STR_plus_STR_STR(local20, ((STR) &name_4637));
local22 = STR_plus_STR_STR(local21, key_4620);
local23 = STR_plus_STR_STR(local22, ((STR) &name_4638));
local24 = STR_plus_STR_STR(local23, BE_mangle_OB_STR(self, ((OB) p.t2)));
res = STR_plus_STR_STR(local24, ((STR) &S0_4639));
}
else {
local25 = STR_plus_CHAR_STR(res, '(');
local26 = STR_plus_STR_STR(local25, e_4617);
local27 = STR_plus_CHAR_STR(local26, '.');
local28 = STR_plus_STR_STR(local27, key_4620);
local29 = STR_plus_STR_STR(local28, ((STR) &name_4640));
local30 = STR_plus_STR_STR(local29, BE_mangle_OB_STR(self, ((OB) p.t2)));
res = STR_plus_STR_STR(local30, ((STR) &S0_4641));
}
}
after_first = TRUE;
}
}
after_loop: ;
}
if ((!((aod->arr==((TP) NULL))))) {
{
BOOL noname4644 = TRUE;
while (1) {
if (noname4644) {
noname4644 = FALSE;
noname4621 = 0;
noname4622 = aod->asize;
local32 = noname4621;
local33 = noname4622;
local31 = local32; local31e = local32+local33;
} else {
local31++;
}
if (local31>=local31e) goto after_loop_4642;
i = local31;
if (after_first) {
res = STR_plus_STR_STR(res, ((STR) &name_4645));
}
local34 = STR_plus_CHAR_STR(res, '(');
local35 = STR_plus_STR_STR(local34, e_4617);
local36 = STR_plus_STR_STR(local35, ((STR) &arr_part_4646));
local37 = STR_plus_INT_STR(local36, i);
local38 = STR_plus_STR_STR(local37, ((STR) &name_4647));
local39 = STR_plus_STR_STR(local38, BE_mangle_OB_STR(self, ((OB) aod->arr)));
res = STR_plus_STR_STR(local39, ((STR) &S0_4648));
after_first = TRUE;
}
}
after_loop_4642: ;
}
return res;
}
INT FLISTAM_BND_CREA_4649(FLISTAM_BND_CREA self) {
INT noname4650 = ((INT) 0);
return self->asize;
fprintf(stderr,"Last statement wasn't return ../Library/aref.sa:20:8\n");
exit(16);
}
INT FLISTAM_BND_CREA_4651(FLISTAM_BND_CREA self) {
INT noname4652 = ((INT) 0);
if ((self==((FLISTAM_BND_CREA) NULL))) {
return 0;
}
return self->loc_17;
if (!FLISTAM_BND_CREA_1044(self)) {
fprintf(stderr,"Failed invariant FLIST{AM_BND_CREATE_EXPR}::invariant:BOOL ../Library/flist.sa:50:7\n");
exit(16);
}
}
BOOL FLISTAM_BND_CREA_4653(FLISTAM_BND_CREA self) {
BOOL noname4654 = ((BOOL) 0);
INT local0;
local0 = FLISTAM_BND_CREA_4651(self);
return (local0==0);
if (!FLISTAM_BND_CREA_1044(self)) {
fprintf(stderr,"Failed invariant FLIST{AM_BND_CREATE_EXPR}::invariant:BOOL ../Library/flist.sa:113:11\n");
exit(16);
}
}
void FLISTAM_BND_CREA_4655(FLISTAM_BND_CREA self) {
AM_BND_CREATE_EXPR nil = ((AM_BND_CREATE_EXPR) NULL);
FLISTAM_BND_CREA noname4656;
if (!((!((self==((FLISTAM_BND_CREA) NULL)))))) {
fprintf(stderr,"Violation of precondition ../Library/aref.sa:43:9\n");
exit(16);
}
{
struct FLISTAM_BND_CREA_4658_frame_struct temp4657_0;
FLISTAM_BND_CREA_4658_frame
noname4659 = &temp4657_0;
noname4659->state = 0;
while (1) {
if (noname4659->state == 0) {
noname4656 = self;
noname4659->arg0 = noname4656;
}
noname4659->arg1 = nil;
FLISTAM_BND_CREA_4658(noname4659);
if (noname4659->state == -1) goto after_loop;
0 /* No return value from iter call */;
}
}
after_loop: ;
}
void FLISTAM_BND_CREA_4660(FLISTAM_BND_CREA self) {
if (FLISTAM_BND_CREA_4653(self)) {
return;
}
else {
FLISTAM_BND_CREA_4655(self);
self->loc_17 = 0;
}
if (!FLISTAM_BND_CREA_1044(self)) {
fprintf(stderr,"Failed invariant FLIST{AM_BND_CREATE_EXPR}::invariant:BOOL ../Library/flist.sa:117:8\n");
exit(16);
}
}
void FLISTAM_BND_CREA_4661(FLISTAM_BND_CREA self, INT ind_4662, AM_BND_CREATE_EXPR val_4663) {
BOOL local0;
INT local1;
INT local2;
if ((!((self==((FLISTAM_BND_CREA) NULL))))) {
local1 = 0;
local2 = (self->asize);
local0 = INT_is_bet_INT_I(ind_4662, local1, (c_INT_minus_INT_INT_chk(local2,1)));
} else {
local0 = FALSE;
}
if (!(local0)) {
fprintf(stderr,"Violation of precondition ../Library/aref.sa:38:7\n");
exit(16);
}
if (ind_4662<0||ind_4662>=self->asize) {
fprintf(stderr,"Index out of bounds ../Library/aref.sa:38:7\n");
exit(16);
}
self->arr_part[ind_4662] = val_4663;
}
void FLISTAM_BND_CREA_4664(FLISTAM_BND_CREA self, INT ind_4665, AM_BND_CREATE_EXPR val_4666) {
BOOL local0;
INT local1;
if ((!((self==((FLISTAM_BND_CREA) NULL))))) {
local1 = 0;
local0 = INT_is_bet_INT_I(ind_4665, local1, (c_INT_minus_INT_INT_chk(self->loc_17,1)));
} else {
local0 = FALSE;
}
if (!(local0)) {
fprintf(stderr,"Violation of precondition ../Library/flist.sa:73:7\n");
exit(16);
}
FLISTAM_BND_CREA_4661(self, ind_4665, val_4666);
if (!FLISTAM_BND_CREA_1044(self)) {
fprintf(stderr,"Failed invariant FLIST{AM_BND_CREATE_EXPR}::invariant:BOOL ../Library/flist.sa:73:7\n");
exit(16);
}
}
FLISTAM_BND_CREA FLISTAM_BND_CREA_4667(FLISTAM_BND_CREA self, AM_BND_CREATE_EXPR e_4668) {
FLISTAM_BND_CREA noname4669;
FLISTAM_BND_CREA r_4670 = ((FLISTAM_BND_CREA) NULL);
FLISTAM_BND_CREA noname4671;
FLISTAM_BND_CREA noname4672;
FLISTAM_BND_CREA local0;
INT local1;
FLISTAM_BND_CREA local2;
INT local3;
AM_BND_CREATE_EXPR local4;
INT local5;
if ((self==((FLISTAM_BND_CREA) NULL))) {
local0 = ((FLISTAM_BND_CREA) sbi_arr_alloc(sizeof(struct FLISTAM_BND_CREA_struct), FLISTAM_BND_CREA_tag, sizeof(AM_BND_CREATE_EXPR) , 5));
local0->asize = 5;
r_4670 = local0;
}
else {
local1 = self->loc_17;
if ((local1<(self->asize))) {
r_4670 = self;
}
else {
local3 = 2;
local2 = ((FLISTAM_BND_CREA) sbi_arr_alloc(sizeof(struct FLISTAM_BND_CREA_struct), FLISTAM_BND_CREA_tag, sizeof(AM_BND_CREATE_EXPR) , (c_INT_times_INT_INT_chk(local3,(self->asize)))));
local2->asize = (c_INT_times_INT_INT_chk(local3,(self->asize)));
r_4670 = local2;
r_4670->loc_17 = self->loc_17;
{
struct FLISTAM_BND_CREA_4674_frame_struct temp4673_0;
FLISTAM_BND_CREA_4674_frame
noname4675 = &temp4673_0;
struct FLISTAM_BND_CREA_4658_frame_struct temp4673_1;
FLISTAM_BND_CREA_4658_frame
noname4676 = &temp4673_1;
noname4675->state = 0;
noname4676->state = 0;
while (1) {
if (noname4676->state == 0) {
noname4672 = r_4670;
noname4676->arg0 = noname4672;
}
if (noname4675->state == 0) {
noname4671 = self;
noname4675->arg0 = noname4671;
}
local4 = FLISTAM_BND_CREA_4674(noname4675);
if (noname4675->state == -1) goto after_loop;
noname4676->arg1 = local4;
FLISTAM_BND_CREA_4658(noname4676);
if (noname4676->state == -1) goto after_loop;
0 /* No return value from iter call */;
}
}
after_loop: ;
FLISTAM_BND_CREA_4660(self);
}
}
r_4670->loc_17 = (c_INT_plus_INT_INT_chk(r_4670->loc_17,1));
local5 = (c_INT_minus_INT_INT_chk(r_4670->loc_17,1));
FLISTAM_BND_CREA_4664(r_4670, local5, e_4668);
return r_4670;
if (!FLISTAM_BND_CREA_1044(self)) {
fprintf(stderr,"Failed invariant FLIST{AM_BND_CREATE_EXPR}::invariant:BOOL ../Library/flist.sa:79:7\n");
exit(16);
}
}
INT AM_BND_ROUT_CALL_4677(AM_BND_ROUT_CALL self) {
INT noname4678 = ((INT) 0);
return self->asize;
fprintf(stderr,"Last statement wasn't return ../Library/aref.sa:20:8\n");
exit(16);
}
AM_EXPR AM_BND_ROUT_CALL_4679(AM_BND_ROUT_CALL self, INT ind_4680) {
AM_EXPR noname4681;
BOOL local0;
INT local1;
INT local2;
if ((!((self==((AM_BND_ROUT_CALL) NULL))))) {
local1 = 0;
local2 = (self->asize);
local0 = INT_is_bet_INT_I(ind_4680, local1, (c_INT_minus_INT_INT_chk(local2,1)));
} else {
local0 = FALSE;
}
if (!(local0)) {
fprintf(stderr,"Violation of precondition ../Library/aref.sa:33:7\n");
exit(16);
}
if (ind_4680<0||ind_4680>=self->asize) {
fprintf(stderr,"Index out of bounds ../Library/aref.sa:33:7\n");
exit(16);
}
return self->arr_part[ind_4680];
}
STR BE_emit_expr_AM_(BE self, AM_EXPR arg_4682) {
STR noname4683;
STR res;
STR res_4684;
STR s2;
STR s1;
STR s2_4685;
STR s1_4686;
STR s2_4687;
STR s3;
STR res_4688;
STR s1_4689;
STR s2_4690;
STR s1_4691;
STR s2_4692;
STR s3_4693;
STR res_4694;
ARRAYSTR arg_list;
STR extern_4695;
STR res_4696;
INT i = ((INT) 0);
TP_CLASS arr_4697;
STR se;
STR res_4698;
AM_ARRAY_EXPR noname4699;
INT i_4700 = ((INT) 0);
TP arg_tp;
STR res_4701;
AM_BND_CREATE_EXPR noname4702;
INT i_4703 = ((INT) 0);
STR entry_4704 = ((STR) NULL);
INT idx = ((INT) 0);
TP tp_4705;
STR br_4706;
STR res_4707;
ARRAYSTR arg_list_4708;
AM_BND_ROUT_CALL noname4709;
INT i_4710 = ((INT) 0);
ARRAYSTR noname4711;
STR local0;
STR local1;
STR local2;
STR local3;
STR local4;
STR local5;
STR local6;
STR local7;
TP local8;
STR local9;
TP local10;
STR local11;
STR local12;
STR local13;
STR local14;
STR local15;
STR local16;
STR local17;
BOOL local18;
BOOL local19;
AM_EXPR local20;
TP local21;
STR local22;
STR local23;
STR local24;
TP local25;
AM_EXPR local26;
TP local27;
TP local28;
BOOL local29;
STR local30;
STR local31;
STR local32;
AM_EXPR local33;
STR local34;
STR local35;
STR local36;
STR local37;
OB local38;
STR local39;
OB local40;
STR local41;
OB local42;
OB local43;
TP local44;
STR local45;
STR local46;
STR local47;
STR local48;
STR local49;
STR local50;
AM_EXPR local51;
TP local52;
BOOL local53;
STR local54;
STR local55;
STR local56;
STR local57;
STR local58;
STR local59;
AM_EXPR local60;
TP local61;
STR local62;
STR local63;
STR local64;
STR local65;
TP local66;
STR local67;
STR local68;
STR local69;
STR local70;
STR local71;
STR local72;
STR local73;
STR local74;
AM_EXPR local75;
TP local76;
INT local77;
IMPL_TBL local78;
AM_EXPR local79;
STR local80;
STR local81;
STR local82;
STR local83;
STR local84;
AM_EXPR local85;
AM_EXPR local86;
STR local87;
TP local88;
STR local89;
STR local90;
STR local91;
INT local92;
STR local93;
STR local94;
STR local95;
STR local96;
AM_EXPR local97;
BOOL local98;
TP local99;
STR local100;
STR local101;
STR local102;
STR local103;
FILE_20 local104;
FILE_20 local105;
FILE_20 local106;
FILE_20 local107;
FILE_20 local108;
FILE_20 local109;
STR local110;
STR local111;
STR local112;
STR local113;
STR local114;
STR local115;
INT local116;
TP local117;
AM_EXPR local118;
TP local119;
ARRAYTP local120;
TP local121;
AM_EXPR local122;
TP local123;
STR local124;
STR local125;
STR local126;
STR local127;
STR local128;
STR local129;
STR local130;
AM_EXPR local131;
STR local132;
STR local133;
STR local134;
STR local135;
INT local136;
STR local137;
TP local138;
AM_EXPR local139;
TP local140;
STR local141;
if (!((!((arg_4682==((AM_EXPR) NULL)))))) {
fprintf(stderr,"Violation of precondition ./be.sa:2178:13\n");
exit(16);
}
if (arg_4682==NULL) {
} else
switch (arg_4682->header.tag) {
case AM_LOCAL_EXPR_tag:
return BE_mangle_OB_STR(self, ((OB) arg_4682)); break;
case AM_ROUT_CALL_EXPR_tag:
return BE_emit_rout_cal(self, ((AM_ROUT_CALL_EXPR) arg_4682)); break;
case AM_ITER_CALL_EXPR_tag:
return BE_emit_iter_cal(self, ((AM_ITER_CALL_EXPR) arg_4682)); break;
case AM_VOID_CONST_tag:
if (!((!((((AM_VOID_CONST) arg_4682)->tp_at==((TP) NULL)))))) {
fprintf(stderr,"Violation of assertion ./be.sa:2187:22\n");
exit(16);
}
return BE_default_init_(self, ((AM_VOID_CONST) arg_4682)->tp_at); break;
case AM_STR_CONST_tag:
return BE_emit_str_cons(self, ((AM_STR_CONST) arg_4682)); break;
case AM_BOOL_CONST_tag:
if (((AM_BOOL_CONST) arg_4682)->val_16) {
return ((STR) &TRUE_4712);
}
else {
return ((STR) &FALSE_4713);
} break;
case AM_INT_CONST_tag:
return INTI_str_STR(((AM_INT_CONST) arg_4682)->val_16); break;
case AM_CHAR_CONST_tag:
local0 = ((STR) &name_4714);
local1 = STR_plus_STR_STR(local0, BE_Cify_CHAR_STR(self, ((AM_CHAR_CONST) arg_4682)->bval));
return STR_plus_CHAR_STR(local1, '\''); break;
case AM_FLT_CONST_tag:
return RAT_str_INT_STR(((AM_FLT_CONST) arg_4682)->val_16, 8); break;
case AM_FLTD_CONST_tag:
return RAT_str_INT_STR(((AM_FLTD_CONST) arg_4682)->val_16, 17); break;
case AM_FLTX_CONST_tag:
BE_barf_at_STR_P(self, ((STR) &FLTXliteralsnoti), ((PROG_ERR) arg_4682)); break;
case AM_FLTDX_CONST_tag:
BE_barf_at_STR_P(self, ((STR) &FLTDXliteralsnot), ((PROG_ERR) arg_4682)); break;
case AM_IF_EXPR_tag:
res = BE_dec_local_com(self, ((AM_IF_EXPR) arg_4682)->tp_at, ((STR) &localfortest));
local2 = ((STR) &if_4715);
local3 = STR_plus_STR_STR(local2, BE_emit_expr_AM_(self, ((AM_IF_EXPR) arg_4682)->test_40));
BE_ndefer_STR(self, STR_plus_STR_STR(local3, ((STR) &name_4716)));
BE_in(self);
local4 = STR_plus_STR_STR(res, ((STR) &name_4717));
local5 = STR_plus_STR_STR(local4, BE_emit_expr_AM_(self, ((AM_IF_EXPR) arg_4682)->if_true));
BE_ndefer_STR(self, STR_plus_CHAR_STR(local5, ';'));
BE_out(self);
BE_ndefer_STR(self, ((STR) &else_4718));
BE_in(self);
local6 = STR_plus_STR_STR(res, ((STR) &name_4719));
local7 = STR_plus_STR_STR(local6, BE_emit_expr_AM_(self, ((AM_IF_EXPR) arg_4682)->if_false));
BE_ndefer_STR(self, STR_plus_CHAR_STR(local7, ';'));
BE_out(self);
BE_ndefer_STR(self, ((STR) &name_4720));
return res; break;
case AM_NEW_EXPR_tag:
local8 = ((AM_NEW_EXPR) arg_4682)->tp_at;
local9 = ((STR) &localfor);
local10 = ((AM_NEW_EXPR) arg_4682)->tp_at;
local11 = STR_plus_STR_STR(local9, (*TP_str_STR[local10->header.tag+TP_str_STR_offset])(local10));
res_4684 = BE_dec_local_com(self, local8, STR_plus_STR_STR(local11, ((STR) &create_4721)));
if ((!((((AM_NEW_EXPR) arg_4682)->asz==((AM_EXPR) NULL))))) {
s2 = BE_emit_expr_AM_(self, ((AM_NEW_EXPR) arg_4682)->asz);
local12 = STR_plus_STR_STR(res_4684, ((STR) &name_4722));
local13 = STR_plus_STR_STR(local12, BE_array_allocat(self, ((AM_NEW_EXPR) arg_4682)->tp_at, s2));
BE_ndefer_STR(self, STR_plus_STR_STR(local13, ((STR) &name_4723)));
local14 = STR_plus_STR_STR(res_4684, ((STR) &asize_4724));
local15 = STR_plus_STR_STR(local14, s2);
BE_ndefer_STR(self, STR_plus_STR_STR(local15, ((STR) &name_4725)));
}
else {
local16 = STR_plus_STR_STR(res_4684, ((STR) &name_4726));
local17 = STR_plus_STR_STR(local16, BE_allocate_TP_STR(self, ((AM_NEW_EXPR) arg_4682)->tp_at));
BE_ndefer_STR(self, STR_plus_STR_STR(local17, ((STR) &name_4727)));
}
return res_4684; break;
case AM_ATTR_EXPR_tag:
s1 = BE_emit_expr_AM_(self, ((AM_ATTR_EXPR) arg_4682)->ob);
if (self->chk_void) {
local20 = ((AM_ATTR_EXPR) arg_4682)->ob;
local21 = (*AM_EXPR_tp_TP[local20->header.tag+AM_EXPR_tp_TP_offset])(local20);
local19 = (!((*TP_is_value_BOOL[local21->header.tag+TP_is_value_BOOL_offset])(local21)));
} else {
local19 = FALSE;
}
if (local19) {
local18 = (!(self->prog->options_55->null_segfaults));
} else {
local18 = FALSE;
}
if (local18) {
local22 = STR_plus_STR_STR(((STR) &if_4728), s1);
BE_ndefer_STR(self, STR_plus_STR_STR(local22, ((STR) &NULL_4729)));
BE_in(self);
local23 = STR_plus_STR_STR(((STR) &Attraccess), ((AM_ATTR_EXPR) arg_4682)->at.str_4);
local24 = STR_plus_STR_STR(local23, ((STR) &ofvoid));
BE_runtime_error(self, local24, ((PROG_ERR) arg_4682));
BE_out(self);
BE_ndefer_STR(self, ((STR) &name_4730));
}
local25 = ((AM_ATTR_EXPR) arg_4682)->self_tp;
local26 = ((AM_ATTR_EXPR) arg_4682)->ob;
local27 = (*AM_EXPR_tp_TP[local26->header.tag+AM_EXPR_tp_TP_offset])(local26);
s2_4685 = BE_cast_TP_TP_ST(self, local25, local27, s1);
local28 = ((AM_ATTR_EXPR) arg_4682)->self_tp;
if ((*TP_is_value_BOOL[local28->header.tag+TP_is_value_BOOL_offset])(local28)) {
local30 = STR_tail_INT_STR(s1, 1);
if (STR_is_eq_STR_BOOL(local30, ((STR) &name_4731))) {
local31 = STR_tail_INT_STR(s2_4685, 1);
local29 = STR_is_eq_STR_BOOL(local31, ((STR) &name_4732));
} else {
local29 = FALSE;
}
if (local29) {
local32 = ((STR) &name_4733);
local33 = ((AM_ATTR_EXPR) arg_4682)->ob;
local34 = STR_plus_STR_STR(local32, BE_mangle_OB_STR(self, ((OB) (*AM_EXPR_tp_TP[local33->header.tag+AM_EXPR_tp_TP_offset])(local33))));
local35 = STR_plus_STR_STR(local34, ((STR) &S_blob_4734));
local36 = STR_plus_STR_STR(local35, s2_4685);
local37 = STR_plus_STR_STR(local36, ((STR) &name_4735));
local38 = (OB)((IDENT_boxed) sbi_alloc(sizeof(struct IDENT_boxed_struct), IDENT_tag));
((IDENT_boxed) local38)->value_part = ((AM_ATTR_EXPR) arg_4682)->at;
return STR_plus_STR_STR(local37, BE_mangle_OB_STR(self, local38));
}
else {
local39 = STR_plus_STR_STR(s2_4685, ((STR) &name_4736));
local40 = (OB)((IDENT_boxed) sbi_alloc(sizeof(struct IDENT_boxed_struct), IDENT_tag));
((IDENT_boxed) local40)->value_part = ((AM_ATTR_EXPR) arg_4682)->at;
return STR_plus_STR_STR(local39, BE_mangle_OB_STR(self, local40));
}
}
else {
local41 = STR_plus_STR_STR(s2_4685, ((STR) &name_4737));
local42 = (OB)((IDENT_boxed) sbi_alloc(sizeof(struct IDENT_boxed_struct), IDENT_tag));
((IDENT_boxed) local42)->value_part = ((AM_ATTR_EXPR) arg_4682)->at;
return STR_plus_STR_STR(local41, BE_mangle_OB_STR(self, local42));
} break;
case AM_VATTR_ASSIGN_EXPR_tag:
s1_4686 = BE_emit_expr_AM_(self, ((AM_VATTR_ASSIGN_EXPR) arg_4682)->ob);
local43 = (OB)((IDENT_boxed) sbi_alloc(sizeof(struct IDENT_boxed_struct), IDENT_tag));
((IDENT_boxed) local43)->value_part = ((AM_VATTR_ASSIGN_EXPR) arg_4682)->at;
s2_4687 = BE_mangle_OB_STR(self, local43);
s3 = BE_emit_expr_AM_(self, ((AM_VATTR_ASSIGN_EXPR) arg_4682)->val_16);
local44 = AM_VATTR_ASSIGN_(((AM_VATTR_ASSIGN_EXPR) arg_4682));
res_4688 = BE_dec_local_com(self, local44, ((STR) &localforvaluetyp));
local45 = STR_plus_STR_STR(res_4688, ((STR) &name_4738));
local46 = STR_plus_STR_STR(local45, s1_4686);
BE_ndefer_STR(self, STR_plus_STR_STR(local46, ((STR) &name_4739)));
local47 = STR_plus_STR_STR(res_4688, ((STR) &name_4740));
local48 = STR_plus_STR_STR(local47, s2_4687);
local49 = STR_plus_STR_STR(local48, ((STR) &name_4741));
local50 = STR_plus_STR_STR(local49, s3);
BE_ndefer_STR(self, STR_plus_STR_STR(local50, ((STR) &name_4742)));
return res_4688; break;
case AM_ARR_EXPR_tag:
s1_4689 = BE_emit_expr_AM_(self, ((AM_ARR_EXPR) arg_4682)->ob);
s2_4690 = BE_emit_expr_AM_(self, ((AM_ARR_EXPR) arg_4682)->ind);
local51 = ((AM_ARR_EXPR) arg_4682)->ob;
local52 = (*AM_EXPR_tp_TP[local51->header.tag+AM_EXPR_tp_TP_offset])(local51);
if ((!((*TP_is_value_BOOL[local52->header.tag+TP_is_value_BOOL_offset])(local52)))) {
if (self->chk_void) {
local53 = (!(self->prog->options_55->null_segfaults));
} else {
local53 = FALSE;
}
if (local53) {
local54 = STR_plus_STR_STR(((STR) &if_4743), s1_4689);
BE_ndefer_STR(self, STR_plus_STR_STR(local54, ((STR) &NULL_4744)));
BE_in(self);
BE_runtime_error(self, ((STR) &Voidarrayaccess), ((PROG_ERR) arg_4682));
BE_out(self);
BE_ndefer_STR(self, ((STR) &name_4745));
}
if (self->chk_bounds) {
local55 = STR_plus_STR_STR(((STR) &if_4746), s2_4690);
local56 = STR_plus_STR_STR(local55, ((STR) &S0_4747));
local57 = STR_plus_STR_STR(local56, s2_4690);
local58 = STR_plus_STR_STR(local57, ((STR) &name_4748));
local59 = STR_plus_STR_STR(local58, s1_4689);
BE_ndefer_STR(self, STR_plus_STR_STR(local59, ((STR) &asize_4749)));
BE_in(self);
BE_runtime_error(self, ((STR) &Indexoutofbounds), ((PROG_ERR) arg_4682));
BE_out(self);
BE_ndefer_STR(self, ((STR) &name_4750));
}
}
else {
BE_ndefer_STR(self, ((STR) &shoulddoboundsch));
}
local60 = ((AM_ARR_EXPR) arg_4682)->ob;
local61 = (*AM_EXPR_tp_TP[local60->header.tag+AM_EXPR_tp_TP_offset])(local60);
if ((*TP_is_value_BOOL[local61->header.tag+TP_is_value_BOOL_offset])(local61)) {
local62 = STR_plus_STR_STR(s1_4689, ((STR) &arr_part_4751));
local63 = STR_plus_STR_STR(local62, s2_4690);
return STR_plus_STR_STR(local63, ((STR) &name_4752));
}
else {
local64 = STR_plus_STR_STR(s1_4689, ((STR) &arr_part_4753));
local65 = STR_plus_STR_STR(local64, s2_4690);
return STR_plus_STR_STR(local65, ((STR) &name_4754));
} break;
case AM_VARR_ASSIGN_EXPR_tag:
s1_4691 = BE_emit_expr_AM_(self, ((AM_VARR_ASSIGN_EXPR) arg_4682)->ob);
s2_4692 = BE_emit_expr_AM_(self, ((AM_VARR_ASSIGN_EXPR) arg_4682)->ind);
s3_4693 = BE_emit_expr_AM_(self, ((AM_VARR_ASSIGN_EXPR) arg_4682)->val_16);
local66 = AM_VARR_ASSIGN_E(((AM_VARR_ASSIGN_EXPR) arg_4682));
res_4694 = BE_dec_local_com(self, local66, ((STR) &localforvaluearr));
BE_ndefer_STR(self, ((STR) &shoulddodynamicb));
local67 = STR_plus_STR_STR(res_4694, ((STR) &name_4755));
local68 = STR_plus_STR_STR(local67, s1_4691);
BE_ndefer_STR(self, STR_plus_STR_STR(local68, ((STR) &name_4756)));
local69 = STR_plus_STR_STR(res_4694, ((STR) &arr_part_4757));
local70 = STR_plus_STR_STR(local69, s2_4692);
local71 = STR_plus_STR_STR(local70, ((STR) &name_4758));
local72 = STR_plus_STR_STR(local71, s3_4693);
BE_ndefer_STR(self, STR_plus_STR_STR(local72, ((STR) &name_4759)));
return res_4694; break;
case AM_EXT_CALL_EXPR_tag:
arg_list = BE_emit_args_AM_(self, ((AM_CALL_EXPR) arg_4682));
extern_4695 = ((STR) &extern_4760);
if ((!((AM_EXT_CALL_EXPR_4606(((AM_EXT_CALL_EXPR) arg_4682))==((TP) NULL))))) {
local73 = STR_plus_STR_STR(extern_4695, BE_mangle_OB_STR(self, ((OB) AM_EXT_CALL_EXPR_4606(((AM_EXT_CALL_EXPR) arg_4682)))));
extern_4695 = STR_plus_STR_STR(local73, ((STR) &name_4761));
}
else {
extern_4695 = STR_plus_STR_STR(extern_4695, ((STR) &void_4762));
}
local74 = STR_plus_STR_STR(extern_4695, ((AM_EXT_CALL_EXPR) arg_4682)->nm.str_4);
extern_4695 = STR_plus_STR_STR(local74, ((STR) &name_4763));
res_4696 = STR_plus_STR_STR(((AM_EXT_CALL_EXPR) arg_4682)->nm.str_4, ((STR) &name_4764));
i = 1;
while (1) {
if ((i>=(arg_list->asize))) {
goto after_loop;
}
local75 = AM_EXT_CALL_EXPR_4610(((AM_EXT_CALL_EXPR) arg_4682), i);
local76 = (*AM_EXPR_tp_TP[local75->header.tag+AM_EXPR_tp_TP_offset])(local75);
local77 = (*TP_kind_INT[local76->header.tag+TP_kind_INT_offset])(local76);
if ((local77==shared_TP_KIND_r_2617)) {
local78 = self->prog->impl_tbl;
local79 = AM_EXT_CALL_EXPR_4610(((AM_EXT_CALL_EXPR) arg_4682), i);
arr_4697 = IMPL_TBL_impl_of(local78, (*AM_EXPR_tp_TP[local79->header.tag+AM_EXPR_tp_TP_offset])(local79))->arr;
if ((!((arr_4697==((TP_CLASS) NULL))))) {
local80 = STR_plus_STR_STR(extern_4695, BE_mangle_OB_STR(self, ((OB) ARRAYTP_aget_INT_TP(arr_4697->params, 0))));
extern_4695 = STR_plus_STR_STR(local80, ((STR) &name_4766));
local81 = STR_plus_STR_STR(res_4696, ((STR) &name_4767));
local82 = STR_plus_STR_STR(local81, ARRAYSTR_aget_IN(arg_list, i));
local83 = STR_plus_STR_STR(local82, ((STR) &NULLNULL));
local84 = STR_plus_STR_STR(local83, ARRAYSTR_aget_IN(arg_list, i));
res_4696 = STR_plus_STR_STR(local84, ((STR) &arr_part_4768));
}
else {
local85 = AM_EXT_CALL_EXPR_4610(((AM_EXT_CALL_EXPR) arg_4682), i);
extern_4695 = STR_plus_STR_STR(extern_4695, BE_mangle_OB_STR(self, ((OB) (*AM_EXPR_tp_TP[local85->header.tag+AM_EXPR_tp_TP_offset])(local85))));
res_4696 = STR_plus_STR_STR(res_4696, ARRAYSTR_aget_IN(arg_list, i));
}
}
else {
local86 = AM_EXT_CALL_EXPR_4610(((AM_EXT_CALL_EXPR) arg_4682), i);
extern_4695 = STR_plus_STR_STR(extern_4695, BE_mangle_OB_STR(self, ((OB) (*AM_EXPR_tp_TP[local86->header.tag+AM_EXPR_tp_TP_offset])(local86))));
res_4696 = STR_plus_STR_STR(res_4696, ARRAYSTR_aget_IN(arg_list, i));
}
i = (c_INT_plus_INT_INT_chk(i,1));
if ((i<(arg_list->asize))) {
extern_4695 = STR_plus_STR_STR(extern_4695, ((STR) &name_4769));
res_4696 = STR_plus_STR_STR(res_4696, ((STR) &name_4770));
}
}
after_loop: ;
extern_4695 = STR_plus_STR_STR(extern_4695, ((STR) &name_4771));
se = FMAPSTRSTR_get_S(self->special_externs, ((AM_EXT_CALL_EXPR) arg_4682)->nm.str_4);
if ((!((se==((STR) NULL))))) {
extern_4695 = STR_plus_CHAR_STR(se, '\n');
}
(fwrite(extern_4695->arr_part,extern_4695->asize,1,self->decs_h->fp));
return STR_plus_CHAR_STR(res_4696, ')'); break;
case AM_GLOBAL_EXPR_tag:
return BE_mangle_OB_STR(self, ((OB) arg_4682)); break;
case AM_ARRAY_EXPR_tag:
res_4698 = BE_dec_local_com(self, ((AM_ARRAY_EXPR) arg_4682)->tp_at, ((STR) &localforarraycre));
local87 = STR_plus_STR_STR(res_4698, ((STR) &name_4772));
local88 = ((AM_ARRAY_EXPR) arg_4682)->tp_at;
local89 = STR_plus_STR_STR(local87, BE_array_allocat(self, local88, INT_str_STR((((AM_ARRAY_EXPR) arg_4682)->asize))));
BE_ndefer_STR(self, STR_plus_STR_STR(local89, ((STR) &name_4773)));
local90 = STR_plus_STR_STR(res_4698, ((STR) &asize_4774));
local91 = STR_plus_INT_STR(local90, (((AM_ARRAY_EXPR) arg_4682)->asize));
BE_ndefer_STR(self, STR_plus_STR_STR(local91, ((STR) &name_4775)));
{
struct AM_ARRAY_EXPR_in_frame_struct temp4777_0;
AM_ARRAY_EXPR_in_frame
noname4778 = &temp4777_0;
noname4778->state = 0;
while (1) {
if (noname4778->state == 0) {
noname4699 = ((AM_ARRAY_EXPR) arg_4682);
noname4778->arg0 = noname4699;
}
local92 = AM_ARRAY_EXPR_in(noname4778);
if (noname4778->state == -1) goto after_loop_4776;
i_4700 = local92;
local93 = STR_plus_STR_STR(res_4698, ((STR) &arr_part_4779));
local94 = STR_plus_INT_STR(local93, i_4700);
local95 = STR_plus_STR_STR(local94, ((STR) &name_4780));
local96 = STR_plus_STR_STR(local95, BE_emit_expr_AM_(self, AM_ARRAY_EXPR_ag(((AM_ARRAY_EXPR) arg_4682), i_4700)));
BE_ndefer_STR(self, STR_plus_CHAR_STR(local96, ';'));
}
}
after_loop_4776: ;
return res_4698; break;
case AM_IS_VOID_EXPR_tag:
if (!((!((((AM_IS_VOID_EXPR) arg_4682)->arg_51==((AM_EXPR) NULL)))))) {
fprintf(stderr,"Violation of assertion ./be.sa:2330:22\n");
exit(16);
}
local97 = ((AM_IS_VOID_EXPR) arg_4682)->arg_51;
arg_tp = (*AM_EXPR_tp_TP[local97->header.tag+AM_EXPR_tp_TP_offset])(local97);
if (!((!((arg_tp==((TP) NULL)))))) {
fprintf(stderr,"Violation of assertion ./be.sa:2332:22\n");
exit(16);
}
local99 = arg_tp;
if ((*TP_is_value_BOOL[local99->header.tag+TP_is_value_BOOL_offset])(local99)) {
local98 = (!(BE_is_built_in_t(self, arg_tp)));
} else {
local98 = FALSE;
}
if (local98) {
return BE_value_void_TP(self, arg_tp, BE_emit_expr_AM_(self, ((AM_IS_VOID_EXPR) arg_4682)->arg_51));
}
else {
local100 = ((STR) &name_4781);
local101 = STR_plus_STR_STR(local100, BE_emit_expr_AM_(self, ((AM_IS_VOID_EXPR) arg_4682)->arg_51));
local102 = STR_plus_STR_STR(local101, ((STR) &name_4782));
local103 = STR_plus_STR_STR(local102, BE_default_init_(self, arg_tp));
return STR_plus_STR_STR(local103, ((STR) &name_4783));
} break;
case AM_STMT_EXPR_tag:
if ((!((((AM_STMT_EXPR) arg_4682)->stmts==((AM_STMT) NULL))))) {
BE_emit_code_AM_STMT(self, ((AM_STMT_EXPR) arg_4682)->stmts);
}
if ((!((((AM_STMT_EXPR) arg_4682)->expr==((AM_EXPR) NULL))))) {
return BE_emit_expr_AM_(self, ((AM_STMT_EXPR) arg_4682)->expr);
}
else {
return ((STR) NULL);
} break;
case AM_EXCEPT_EXPR_tag:
return BE_cast_TP_TP_ST(self, ((AM_EXCEPT_EXPR) arg_4682)->tp_at, ((TP) self->prog->tp_builtin->dollar_ob), ((STR) &exception_4784)); break;
case AM_BND_CREATE_EXPR_tag:
self->bnd_rout_creates = FLISTAM_BND_CREA_4667(self->bnd_rout_creates, ((AM_BND_CREATE_EXPR) arg_4682));
res_4701 = BE_genlocal_STR(self);
local104 = self->code_c;
local105 = FILE_plus_STR_FILE(local104, BE_eol_STR(self));
local106 = FILE_plus_CHAR_FILE(local105, ' ');
local107 = FILE_plus_STR_FILE(local106, BE_mangle_OB_STR(self, ((OB) arg_4682)));
local108 = FILE_plus_STR_FILE(local107, ((STR) &S_ob));
local109 = FILE_plus_STR_FILE(local108, res_4701);
FILE_plus_CHAR(local109, ';');
local110 = STR_plus_STR_STR(res_4701, ((STR) &name_4785));
local111 = STR_plus_STR_STR(local110, BE_mangle_OB_STR(self, ((OB) arg_4682)));
local112 = STR_plus_STR_STR(local111, ((STR) &S_obGC_mallocsiz));
local113 = STR_plus_STR_STR(local112, BE_mangle_OB_STR(self, ((OB) arg_4682)));
BE_ndefer_STR(self, STR_plus_STR_STR(local113, ((STR) &S_ob_struct)));
local114 = STR_plus_STR_STR(res_4701, ((STR) &funcptr_4786));
local115 = STR_plus_STR_STR(local114, BE_mangle_OB_STR(self, ((OB) arg_4682)));
BE_ndefer_STR(self, STR_plus_CHAR_STR(local115, ';'));
{
struct AM_BND_CREATE_EX_3800_frame_struct temp4788_0;
AM_BND_CREATE_EX_3800_frame
noname4789 = &temp4788_0;
noname4789->state = 0;
while (1) {
if (noname4789->state == 0) {
noname4702 = ((AM_BND_CREATE_EXPR) arg_4682);
noname4789->arg0 = noname4702;
}
local116 = AM_BND_CREATE_EX_3800(noname4789);
if (noname4789->state == -1) goto after_loop_4787;
i_4703 = local116;
idx = ARRAYINT_aget_IN(((AM_BND_CREATE_EXPR) arg_4682)->bnd_args, i_4703);
if ((idx==0)) {
local117 = ((AM_BND_CREATE_EXPR) arg_4682)->fun->tp;
local118 = AM_BND_CREATE_EX_3787(((AM_BND_CREATE_EXPR) arg_4682), i_4703);
local119 = (*AM_EXPR_tp_TP[local118->header.tag+AM_EXPR_tp_TP_offset])(local118);
entry_4704 = BE_cast_TP_TP_ST(self, local117, local119, BE_emit_expr_AM_(self, AM_BND_CREATE_EX_3787(((AM_BND_CREATE_EXPR) arg_4682), i_4703)));
}
else {
local120 = ((AM_BND_CREATE_EXPR) arg_4682)->fun->args_7;
local121 = ARRAYTP_aget_INT_TP(local120, (c_INT_minus_INT_INT_chk(idx,1)));
local122 = AM_BND_CREATE_EX_3787(((AM_BND_CREATE_EXPR) arg_4682), i_4703);
local123 = (*AM_EXPR_tp_TP[local122->header.tag+AM_EXPR_tp_TP_offset])(local122);
entry_4704 = BE_cast_TP_TP_ST(self, local121, local123, BE_emit_expr_AM_(self, AM_BND_CREATE_EX_3787(((AM_BND_CREATE_EXPR) arg_4682), i_4703)));
}
local124 = STR_plus_STR_STR(res_4701, ((STR) &bound_arg));
local125 = STR_plus_INT_STR(local124, i_4703);
local126 = STR_plus_STR_STR(local125, ((STR) &name_4790));
local127 = STR_plus_STR_STR(local126, entry_4704);
BE_ndefer_STR(self, STR_plus_CHAR_STR(local127, ';'));
}
}
after_loop_4787: ;
local128 = ((STR) &name_4791);
local129 = STR_plus_STR_STR(local128, BE_mangle_OB_STR(self, ((OB) ((AM_BND_CREATE_EXPR) arg_4682)->tp_at)));
local130 = STR_plus_STR_STR(local129, ((STR) &name_4792));
return STR_plus_STR_STR(local130, res_4701); break;
case AM_BND_ROUT_CALL_tag:
local131 = ((AM_BND_ROUT_CALL) arg_4682)->br;
tp_4705 = (*AM_EXPR_tp_TP[local131->header.tag+AM_EXPR_tp_TP_offset])(local131);
br_4706 = BE_dec_local_TP_STR(self, tp_4705);
local132 = STR_plus_STR_STR(br_4706, ((STR) &name_4793));
local133 = STR_plus_STR_STR(local132, BE_emit_expr_AM_(self, ((AM_BND_ROUT_CALL) arg_4682)->br));
BE_ndefer_STR(self, STR_plus_CHAR_STR(local133, ';'));
local134 = STR_plus_STR_STR(((STR) &name_4794), br_4706);
local135 = STR_plus_STR_STR(local134, ((STR) &funcptr_4795));
res_4707 = STR_plus_STR_STR(local135, br_4706);
arg_list_4708 = BE_emit_args_AM_(self, ((AM_CALL_EXPR) arg_4682));
{
struct AM_BND_ROUT_CALL_4798_frame_struct temp4797_0;
AM_BND_ROUT_CALL_4798_frame
noname4799 = &temp4797_0;
struct ARRAYSTR_elt_STR_frame_struct temp4797_1;
ARRAYSTR_elt_STR_frame
noname4800 = &temp4797_1;
noname4799->state = 0;
noname4800->state = 0;
while (1) {
if (noname4799->state == 0) {
noname4709 = ((AM_BND_ROUT_CALL) arg_4682);
noname4799->arg0 = noname4709;
}
local136 = AM_BND_ROUT_CALL_4798(noname4799);
if (noname4799->state == -1) goto after_loop_4796;
i_4710 = local136;
if (tp_4705==NULL) {
} else
switch (tp_4705->header.tag) {
case TP_ROUT_tag:
local137 = STR_plus_STR_STR(res_4707, ((STR) &name_4801));
local138 = ARRAYTP_aget_INT_TP(((TP_ROUT) tp_4705)->args_7, i_4710);
local139 = AM_BND_ROUT_CALL_4679(((AM_BND_ROUT_CALL) arg_4682), i_4710);
local140 = (*AM_EXPR_tp_TP[local139->header.tag+AM_EXPR_tp_TP_offset])(local139);
if (noname4800->state == 0) {
noname4711 = arg_list_4708;
noname4800->arg0 = noname4711;
}
local141 = ARRAYSTR_elt_STR(noname4800);
if (noname4800->state == -1) goto after_loop_4796;
res_4707 = STR_plus_STR_STR(local137, BE_cast_TP_TP_ST(self, local138, local140, local141)); break;
default: ;
fprintf(stderr,"No applicable type in typecase ./be.sa:2374:28\n");
exit(16);
}
}
}
after_loop_4796: ;
return STR_plus_CHAR_STR(res_4707, ')'); break;
case AM_BND_ITER_CALL_tag:
BE_barf_at_STR_P(self, ((STR) &bounditersnotimp), ((PROG_ERR) arg_4682)); break;
case AM_ARR_CONST_tag:
BE_barf_at_STR_P(self, ((STR) &constantarraylit), ((PROG_ERR) arg_4682)); break;
case AM_INTI_CONST_tag:
BE_barf_at_STR_P(self, ((STR) &INTIliteralsnoti), ((PROG_ERR) arg_4682)); break;
case AM_FLTI_CONST_tag:
BE_barf_at_STR_P(self, ((STR) &FLTIconstantsnot), ((PROG_ERR) arg_4682)); break;
default: ;
fprintf(stderr,"No applicable type in typecase ./be.sa:2182:16\n");
exit(16);
}
BE_barf_STR(self, ((STR) &Gottoendofemit_expr));
return ((STR) &name_4802);
}
STR BE_genother_STR(BE self) {
STR noname4803;
STR res = ((STR) NULL);
while (1) {
res = STR_plus_INT_STR(((STR) &temp_4805), self->counter_21);
self->counter_21 = (c_INT_plus_INT_INT_chk(self->counter_21,1));
if ((!(FSETSTR_test_STR(self->mangleset, res)))) {
goto after_loop;
}
}
after_loop: ;
return res;
}
BOOL FLISTAM_ITER_CAL_4806(FLISTAM_ITER_CAL self, AM_ITER_CALL_EXPR e1_4807, AM_ITER_CALL_EXPR e2_4808) {
BOOL noname4809 = ((BOOL) 0);
return c_SYS_ob_eq_OB_OB_BOOL(((OB) e1_4807),((OB) e2_4808));
if (!FLISTAM_ITER_CAL_4190(self)) {
fprintf(stderr,"Failed invariant FLIST{AM_ITER_CALL_EXPR}::invariant:BOOL ../Library/flist.sa:37:9\n");
exit(16);
}
}
BOOL FLISTAM_ITER_CAL_4810(FLISTAM_ITER_CAL self, AM_ITER_CALL_EXPR e_4811) {
BOOL noname4812 = ((BOOL) 0);
FLISTAM_ITER_CAL noname4813;
AM_ITER_CALL_EXPR local0;
{
struct FLISTAM_ITER_CAL_4815_frame_struct temp4814_0;
FLISTAM_ITER_CAL_4815_frame
noname4816 = &temp4814_0;
noname4816->state = 0;
while (1) {
if (noname4816->state == 0) {
noname4813 = self;
noname4816->arg0 = noname4813;
}
local0 = FLISTAM_ITER_CAL_4815(noname4816);
if (noname4816->state == -1) goto after_loop;
if (FLISTAM_ITER_CAL_4806(self, e_4811, local0)) {
return TRUE;
}
}
}
after_loop: ;
return FALSE;
if (!FLISTAM_ITER_CAL_4190(self)) {
fprintf(stderr,"Failed invariant FLIST{AM_ITER_CALL_EXPR}::invariant:BOOL ../Library/flist.sa:171:11\n");
exit(16);
}
}
INT FLISTAM_ITER_CAL_4817(FLISTAM_ITER_CAL self) {
INT noname4818 = ((INT) 0);
return self->asize;
fprintf(stderr,"Last statement wasn't return ../Library/aref.sa:20:8\n");
exit(16);
}
INT FLISTAM_ITER_CAL_4819(FLISTAM_ITER_CAL self) {
INT noname4820 = ((INT) 0);
if ((self==((FLISTAM_ITER_CAL) NULL))) {
return 0;
}
return self->loc_17;
if (!FLISTAM_ITER_CAL_4190(self)) {
fprintf(stderr,"Failed invariant FLIST{AM_ITER_CALL_EXPR}::invariant:BOOL ../Library/flist.sa:50:7\n");
exit(16);
}
}
BOOL FLISTAM_ITER_CAL_4821(FLISTAM_ITER_CAL self) {
BOOL noname4822 = ((BOOL) 0);
INT local0;
local0 = FLISTAM_ITER_CAL_4819(self);
return (local0==0);
if (!FLISTAM_ITER_CAL_4190(self)) {
fprintf(stderr,"Failed invariant FLIST{AM_ITER_CALL_EXPR}::invariant:BOOL ../Library/flist.sa:113:11\n");
exit(16);
}
}
void FLISTAM_ITER_CAL_4823(FLISTAM_ITER_CAL self) {
AM_ITER_CALL_EXPR nil = ((AM_ITER_CALL_EXPR) NULL);
FLISTAM_ITER_CAL noname4824;
if (!((!((self==((FLISTAM_ITER_CAL) NULL)))))) {
fprintf(stderr,"Violation of precondition ../Library/aref.sa:43:9\n");
exit(16);
}
{
struct FLISTAM_ITER_CAL_4826_frame_struct temp4825_0;
FLISTAM_ITER_CAL_4826_frame
noname4827 = &temp4825_0;
noname4827->state = 0;
while (1) {
if (noname4827->state == 0) {
noname4824 = self;
noname4827->arg0 = noname4824;
}
noname4827->arg1 = nil;
FLISTAM_ITER_CAL_4826(noname4827);
if (noname4827->state == -1) goto after_loop;
0 /* No return value from iter call */;
}
}
after_loop: ;
}
void FLISTAM_ITER_CAL_4828(FLISTAM_ITER_CAL self) {
if (FLISTAM_ITER_CAL_4821(self)) {
return;
}
else {
FLISTAM_ITER_CAL_4823(self);
self->loc_17 = 0;
}
if (!FLISTAM_ITER_CAL_4190(self)) {
fprintf(stderr,"Failed invariant FLIST{AM_ITER_CALL_EXPR}::invariant:BOOL ../Library/flist.sa:117:8\n");
exit(16);
}
}
void FLISTAM_ITER_CAL_4829(FLISTAM_ITER_CAL self, INT ind_4830, AM_ITER_CALL_EXPR val_4831) {
BOOL local0;
INT local1;
INT local2;
if ((!((self==((FLISTAM_ITER_CAL) NULL))))) {
local1 = 0;
local2 = (self->asize);
local0 = INT_is_bet_INT_I(ind_4830, local1, (c_INT_minus_INT_INT_chk(local2,1)));
} else {
local0 = FALSE;
}
if (!(local0)) {
fprintf(stderr,"Violation of precondition ../Library/aref.sa:38:7\n");
exit(16);
}
if (ind_4830<0||ind_4830>=self->asize) {
fprintf(stderr,"Index out of bounds ../Library/aref.sa:38:7\n");
exit(16);
}
self->arr_part[ind_4830] = val_4831;
}
void FLISTAM_ITER_CAL_4832(FLISTAM_ITER_CAL self, INT ind_4833, AM_ITER_CALL_EXPR val_4834) {
BOOL local0;
INT local1;
if ((!((self==((FLISTAM_ITER_CAL) NULL))))) {
local1 = 0;
local0 = INT_is_bet_INT_I(ind_4833, local1, (c_INT_minus_INT_INT_chk(self->loc_17,1)));
} else {
local0 = FALSE;
}
if (!(local0)) {
fprintf(stderr,"Violation of precondition ../Library/flist.sa:73:7\n");
exit(16);
}
FLISTAM_ITER_CAL_4829(self, ind_4833, val_4834);
if (!FLISTAM_ITER_CAL_4190(self)) {
fprintf(stderr,"Failed invariant FLIST{AM_ITER_CALL_EXPR}::invariant:BOOL ../Library/flist.sa:73:7\n");
exit(16);
}
}
FLISTAM_ITER_CAL FLISTAM_ITER_CAL_4835(FLISTAM_ITER_CAL self, AM_ITER_CALL_EXPR e_4836) {
FLISTAM_ITER_CAL noname4837;
FLISTAM_ITER_CAL r_4838 = ((FLISTAM_ITER_CAL) NULL);
FLISTAM_ITER_CAL noname4839;
FLISTAM_ITER_CAL noname4840;
FLISTAM_ITER_CAL local0;
INT local1;
FLISTAM_ITER_CAL local2;
INT local3;
AM_ITER_CALL_EXPR local4;
INT local5;
if ((self==((FLISTAM_ITER_CAL) NULL))) {
local0 = ((FLISTAM_ITER_CAL) sbi_arr_alloc(sizeof(struct FLISTAM_ITER_CAL_struct), FLISTAM_ITER_CAL_tag, sizeof(AM_ITER_CALL_EXPR) , 5));
local0->asize = 5;
r_4838 = local0;
}
else {
local1 = self->loc_17;
if ((local1<(self->asize))) {
r_4838 = self;
}
else {
local3 = 2;
local2 = ((FLISTAM_ITER_CAL) sbi_arr_alloc(sizeof(struct FLISTAM_ITER_CAL_struct), FLISTAM_ITER_CAL_tag, sizeof(AM_ITER_CALL_EXPR) , (c_INT_times_INT_INT_chk(local3,(self->asize)))));
local2->asize = (c_INT_times_INT_INT_chk(local3,(self->asize)));
r_4838 = local2;
r_4838->loc_17 = self->loc_17;
{
struct FLISTAM_ITER_CAL_4815_frame_struct temp4841_0;
FLISTAM_ITER_CAL_4815_frame
noname4842 = &temp4841_0;
struct FLISTAM_ITER_CAL_4826_frame_struct temp4841_1;
FLISTAM_ITER_CAL_4826_frame
noname4843 = &temp4841_1;
noname4842->state = 0;
noname4843->state = 0;
while (1) {
if (noname4843->state == 0) {
noname4840 = r_4838;
noname4843->arg0 = noname4840;
}
if (noname4842->state == 0) {
noname4839 = self;
noname4842->arg0 = noname4839;
}
local4 = FLISTAM_ITER_CAL_4815(noname4842);
if (noname4842->state == -1) goto after_loop;
noname4843->arg1 = local4;
FLISTAM_ITER_CAL_4826(noname4843);
if (noname4843->state == -1) goto after_loop;
0 /* No return value from iter call */;
}
}
after_loop: ;
FLISTAM_ITER_CAL_4828(self);
}
}
r_4838->loc_17 = (c_INT_plus_INT_INT_chk(r_4838->loc_17,1));
local5 = (c_INT_minus_INT_INT_chk(r_4838->loc_17,1));
FLISTAM_ITER_CAL_4832(r_4838, local5, e_4836);
return r_4838;
if (!FLISTAM_ITER_CAL_4190(self)) {
fprintf(stderr,"Failed invariant FLIST{AM_ITER_CALL_EXPR}::invariant:BOOL ../Library/flist.sa:79:7\n");
exit(16);
}
}
void BE_defer_STR(BE self, STR s_4844) {
self->routine_code = FSTR_plus_STR_FSTR(self->routine_code, s_4844);
}
ARRAYARRAYSTR ARRAYARRAYSTR_cr(ARRAYARRAYSTR self, INT n_4845) {
ARRAYARRAYSTR noname4846;
ARRAYARRAYSTR local0;
if (!((n_4845>=0))) {
fprintf(stderr,"Violation of precondition ../Library/array.sa:56:9\n");
exit(16);
}
local0 = ((ARRAYARRAYSTR) sbi_arr_alloc(sizeof(struct ARRAYARRAYSTR_struct), ARRAYARRAYSTR_tag, sizeof(ARRAYSTR) , n_4845));
local0->asize = n_4845;
return local0;
}
INT ARRAYARRAYSTR_as(ARRAYARRAYSTR self) {
INT noname4847 = ((INT) 0);
return self->asize;
fprintf(stderr,"Last statement wasn't return ../Library/aref.sa:20:8\n");
exit(16);
}
void ARRAYARRAYSTR_as_4848(ARRAYARRAYSTR self, INT ind_4849, ARRAYSTR val_4850) {
BOOL local0;
INT local1;
INT local2;
if ((!((self==((ARRAYARRAYSTR) NULL))))) {
local1 = 0;
local2 = (self->asize);
local0 = INT_is_bet_INT_I(ind_4849, local1, (c_INT_minus_INT_INT_chk(local2,1)));
} else {
local0 = FALSE;
}
if (!(local0)) {
fprintf(stderr,"Violation of precondition ../Library/aref.sa:38:7\n");
exit(16);
}
if (ind_4849<0||ind_4849>=self->asize) {
fprintf(stderr,"Index out of bounds ../Library/aref.sa:38:7\n");
exit(16);
}
self->arr_part[ind_4849] = val_4850;
}
ARRAYSTR ARRAYARRAYSTR_ag(ARRAYARRAYSTR self, INT ind_4851) {
ARRAYSTR noname4852;
BOOL local0;
INT local1;
INT local2;
if ((!((self==((ARRAYARRAYSTR) NULL))))) {
local1 = 0;
local2 = (self->asize);
local0 = INT_is_bet_INT_I(ind_4851, local1, (c_INT_minus_INT_INT_chk(local2,1)));
} else {
local0 = FALSE;
}
if (!(local0)) {
fprintf(stderr,"Violation of precondition ../Library/aref.sa:33:7\n");
exit(16);
}
if (ind_4851<0||ind_4851>=self->asize) {
fprintf(stderr,"Index out of bounds ../Library/aref.sa:33:7\n");
exit(16);
}
return self->arr_part[ind_4851];
}
void BE_emit_typeswit(BE self, STR test_4853, FLISTTP tgts_4854, FLISTAM_STMT stmts_4855) {
FSETTP gen_4856;
FLISTTP noname4857;
INT i = ((INT) 0);
TP tp_4858;
BOOL dseen = ((BOOL) 0);
FSETTP noname4859;
TP d;
FSETTP noname4860;
STR local0;
INT local1;
TP local2;
TP local3;
STR local4;
TP local5;
STR local6;
STR local7;
STR local8;
local0 = STR_plus_STR_STR(((STR) &switch_4861), test_4853);
BE_ndefer_STR(self, STR_plus_STR_STR(local0, ((STR) &headertag_4862)));
BE_in(self);
if ((!((tgts_4854==((FLISTTP) NULL))))) {
gen_4856 = FSETTP_create_FSETTP(((FSETTP) NULL));
{
struct FLISTTP_ind_INT_frame_struct temp4863_0;
FLISTTP_ind_INT_frame
noname4864 = &temp4863_0;
noname4864->state = 0;
while (1) {
if (noname4864->state == 0) {
noname4857 = tgts_4854;
noname4864->arg0 = noname4857;
}
local1 = FLISTTP_ind_INT(noname4864);
if (noname4864->state == -1) goto after_loop;
i = local1;
tp_4858 = FLISTTP_aget_INT_TP(tgts_4854, i);
dseen = FALSE;
local2 = tp_4858;
if ((*TP_is_abstract_BOOL[local2->header.tag+TP_is_abstract_BOOL_offset])(local2)) {
if (tp_4858==NULL) {
} else
switch (tp_4858->header.tag) {
case TP_CLASS_tag:
{
struct FSETTP_elt_TP_frame_struct temp4866_0;
FSETTP_elt_TP_frame
noname4867 = &temp4866_0;
struct FSETTP_elt_TP_frame_struct temp4866_1;
FSETTP_elt_TP_frame
noname4868 = &temp4866_1;
noname4867->state = 0;
noname4868->state = 0;
while (1) {
if (noname4867->state == 0) {
noname4859 = PROG_descendants(self->prog, ((TP_CLASS) tp_4858));
noname4867->arg0 = noname4859;
}
local3 = FSETTP_elt_TP(noname4867);
if (noname4867->state == -1) goto after_loop_4865;
d = local3;
if ((!(FSETTP_test_TP_BOOL(gen_4856, d)))) {
local4 = ((STR) &case_4869);
if (noname4868->state == 0) {
noname4860 = PROG_descendants(self->prog, ((TP_CLASS) tp_4858));
noname4868->arg0 = noname4860;
}
local5 = FSETTP_elt_TP(noname4868);
if (noname4868->state == -1) goto after_loop_4865;
local6 = STR_plus_STR_STR(local4, BE_tag_for_TP_STR(self, local5));
BE_ndefer_STR(self, STR_plus_CHAR_STR(local6, ':'));
dseen = TRUE;
gen_4856 = FSETTP_insert_TP(gen_4856, d);
}
}
}
after_loop_4865: ; break;
default: ;
fprintf(stderr,"No applicable type in typecase ./be.sa:1783:28\n");
exit(16);
}
}
else {
if ((!(FSETTP_test_TP_BOOL(gen_4856, tp_4858)))) {
local7 = ((STR) &case_4870);
local8 = STR_plus_STR_STR(local7, BE_tag_for_TP_STR(self, tp_4858));
BE_ndefer_STR(self, STR_plus_CHAR_STR(local8, ':'));
dseen = TRUE;
gen_4856 = FSETTP_insert_TP(gen_4856, tp_4858);
}
}
if (dseen) {
BE_in(self);
BE_emit_code_AM_STMT(self, FLISTAM_STMT_age(stmts_4855, i));
BE_defer_STR(self, ((STR) &break_4871));
BE_out(self);
}
}
}
after_loop: ;
}
BE_ndefer_STR(self, ((STR) &default_4872));
}
void BE_emit_code_AM_STMT(BE self, AM_STMT arg_4873) {
STR s1 = ((STR) NULL);
STR s2 = ((STR) NULL);
STR outer_loop;
STR fname;
INT fnamecount = ((INT) 0);
FLISTAM_ITER_CAL noname4874;
AM_ITER_CALL_EXPR e_4875;
STR tname;
FLISTAM_ITER_CAL noname4876;
AM_ITER_CALL_EXPR e_4877;
FLISTAM_ITER_CAL noname4878;
AM_ITER_CALL_EXPR it;
FLISTAM_ITER_CAL noname4879;
AM_ITER_CALL_EXPR e_4880;
STR ep;
ARRAYARRAYSTR targets = ((ARRAYARRAYSTR) NULL);
STR test_4881;
ARRAYARRAYSTR noname4882;
INT i = ((INT) 0);
ARRAYSTR noname4883;
INT j = ((INT) 0);
ARRAYARRAYSTR noname4884;
INT i_4885 = ((INT) 0);
ARRAYSTR noname4886;
AM_STMT local0;
STR local1;
AM_EXPR local2;
TP local3;
AM_EXPR local4;
TP local5;
STR local6;
STR local7;
BOOL local8;
AM_ITER_CALL_EXPR local9;
BOOL local10;
STR local11;
STR local12;
STR local13;
STR local14;
STR local15;
STR local16;
STR local17;
STR local18;
STR local19;
STR local20;
STR local21;
STR local22;
STR local23;
STR local24;
STR local25;
STR local26;
STR local27;
AM_ITER_CALL_EXPR local28;
BOOL local29;
STR local30;
STR local31;
STR local32;
STR local33;
STR local34;
AM_ITER_CALL_EXPR local35;
BOOL local36;
STR local37;
BOOL local38;
BOOL local39;
AM_ITER_CALL_EXPR local40;
BOOL local41;
STR local42;
STR local43;
STR local44;
STR local45;
STR local46;
TP local47;
AM_EXPR local48;
TP local49;
STR local50;
BOOL local51;
AM_EXPR local52;
STR local53;
STR local54;
STR local55;
TP local56;
AM_EXPR local57;
TP local58;
STR local59;
STR local60;
ARRAYARRAYSTR local61;
INT local62;
ARRAYSTR local63;
INT local64;
ARRAYSTR local65;
FLISTAM_CONST local66;
STR local67;
INT local68;
STR local69;
STR local70;
STR local71;
STR local72;
STR local73;
STR local74;
STR local75;
STR local76;
STR local77;
BOOL local78;
STR local79;
STR local80;
STR local81;
STR local82;
TP_CLASS local83;
AM_EXPR local84;
TP local85;
STR local86;
STR local87;
STR local88;
STR local89;
STR local90;
STR local91;
STR local92;
AM_STMT local93;
while (1) {
if ((arg_4873==((AM_STMT) NULL))) {
goto after_loop;
}
local0 = arg_4873;
BE_announce_at_S(self, (*AM_STMT_source_S[local0->header.tag+AM_STMT_source_S_offset])(local0));
if (arg_4873==NULL) {
} else
switch (arg_4873->header.tag) {
case AM_ASSIGN_STMT_tag:
s1 = BE_emit_expr_AM_(self, ((AM_ASSIGN_STMT) arg_4873)->dest);
s2 = BE_emit_expr_AM_(self, ((AM_ASSIGN_STMT) arg_4873)->src_42);
local1 = STR_plus_STR_STR(s1, ((STR) &name_4888));
local2 = ((AM_ASSIGN_STMT) arg_4873)->dest;
local3 = (*AM_EXPR_tp_TP[local2->header.tag+AM_EXPR_tp_TP_offset])(local2);
local4 = ((AM_ASSIGN_STMT) arg_4873)->src_42;
local5 = (*AM_EXPR_tp_TP[local4->header.tag+AM_EXPR_tp_TP_offset])(local4);
local6 = STR_plus_STR_STR(local1, BE_cast_TP_TP_ST(self, local3, local5, s2));
BE_ndefer_STR(self, STR_plus_CHAR_STR(local6, ';')); break;
case AM_IF_STMT_tag:
s1 = BE_emit_expr_AM_(self, ((AM_IF_STMT) arg_4873)->test_40);
local7 = STR_plus_STR_STR(((STR) &if_4889), s1);
BE_ndefer_STR(self, STR_plus_STR_STR(local7, ((STR) &name_4890)));
BE_in(self);
BE_emit_code_AM_STMT(self, ((AM_IF_STMT) arg_4873)->if_true);
BE_out(self);
BE_ndefer_STR(self, ((STR) &name_4891));
if ((!((((AM_IF_STMT) arg_4873)->if_false==((AM_STMT) NULL))))) {
BE_ndefer_STR(self, ((STR) &else_4892));
BE_in(self);
BE_emit_code_AM_STMT(self, ((AM_IF_STMT) arg_4873)->if_false);
BE_out(self);
BE_ndefer_STR(self, ((STR) &name_4893));
} break;
case AM_LOOP_STMT_tag:
outer_loop = self->current_loop;
self->current_loop = BE_mangle_OB_STR(self, ((OB) arg_4873));
fname = BE_genother_STR(self);
fnamecount = 0;
if ((!((((AM_LOOP_STMT) arg_4873)->bits_59==((FLISTAM_BND_ITER) NULL))))) {
local8 = TRUE;
} else {
local8 = (!((((AM_LOOP_STMT) arg_4873)->its_60==((FLISTAM_ITER_CAL) NULL))));
}
if (local8) {
BE_comment_STR(self, ((STR) &loop_4894));
BE_ndefer_STR(self, ((STR) &name_4895));
BE_in(self);
}
if ((!((((AM_LOOP_STMT) arg_4873)->bits_59==((FLISTAM_BND_ITER) NULL))))) {
BE_defer_newline(self);
BE_barf_at_STR_P(self, ((STR) &Bounditersnotimp), ((PROG_ERR) arg_4873));
(fwrite(((STR) &initializeboundi)->arr_part,((STR) &initializeboundi)->asize,1,self->code_c->fp));
}
if ((!((((AM_LOOP_STMT) arg_4873)->its_60==((FLISTAM_ITER_CAL) NULL))))) {
{
struct FLISTAM_ITER_CAL_4815_frame_struct temp4897_0;
FLISTAM_ITER_CAL_4815_frame
noname4898 = &temp4897_0;
noname4898->state = 0;
while (1) {
if (noname4898->state == 0) {
noname4874 = ((AM_LOOP_STMT) arg_4873)->its_60;
noname4898->arg0 = noname4874;
}
local9 = FLISTAM_ITER_CAL_4815(noname4898);
if (noname4898->state == -1) goto after_loop_4896;
e_4875 = local9;
if (SIG_is_iter_BOOL(self->current_function)) {
local10 = TRUE;
} else {
local10 = (!(BE_is_built_in_i(self, e_4875->fun)));
}
if (local10) {
local11 = ((STR) &Frameforcallto);
BE_comment_STR(self, STR_plus_STR_STR(local11, SIG_str_STR(e_4875->fun)));
if ((!((self->nested_its==((FLISTAM_ITER_CAL) NULL))))) {
if (!((!(FLISTAM_ITER_CAL_4810(self->nested_its, e_4875))))) {
fprintf(stderr,"Violation of assertion ./be.sa:1532:38\n");
exit(16);
}
self->nested_its = FLISTAM_ITER_CAL_4835(self->nested_its, e_4875);
local12 = ((STR) &framenested);
BE_force_mangle_(self, ((OB) e_4875), STR_plus_INT_STR(local12, FLISTAM_ITER_CAL_4819(self->nested_its)));
}
BE_defer_newline(self);
if (((AM_LOOP_STMT) arg_4873)->has_yield) {
if ((self->nested_its==((FLISTAM_ITER_CAL) NULL))) {
local13 = BE_mangle_OB_STR(self, ((OB) e_4875->fun));
BE_defer_STR(self, STR_plus_STR_STR(local13, ((STR) &S_frame)));
}
local14 = BE_mangle_OB_STR(self, ((OB) e_4875));
local15 = STR_plus_STR_STR(local14, ((STR) &ALLOCATE_4899));
local16 = STR_plus_STR_STR(local15, BE_mangle_OB_STR(self, ((OB) e_4875->fun)));
BE_defer_STR(self, STR_plus_STR_STR(local16, ((STR) &S_frame_4900)));
}
else {
local17 = STR_plus_CHAR_STR(fname, '_');
tname = STR_plus_INT_STR(local17, fnamecount);
fnamecount = (c_INT_plus_INT_INT_chk(fnamecount,1));
local18 = ((STR) &struct_4901);
local19 = STR_plus_STR_STR(local18, BE_mangle_OB_STR(self, ((OB) e_4875->fun)));
local20 = STR_plus_STR_STR(local19, ((STR) &S_frame_struct));
local21 = STR_plus_STR_STR(local20, tname);
BE_defer_STR(self, STR_plus_CHAR_STR(local21, ';'));
BE_defer_newline(self);
if ((self->nested_its==((FLISTAM_ITER_CAL) NULL))) {
local22 = BE_mangle_OB_STR(self, ((OB) e_4875->fun));
BE_defer_STR(self, STR_plus_STR_STR(local22, ((STR) &S_frame_4902)));
local23 = BE_mangle_OB_STR(self, ((OB) e_4875));
local24 = STR_plus_STR_STR(local23, ((STR) &name_4903));
local25 = STR_plus_STR_STR(local24, tname);
BE_ndefer_STR(self, STR_plus_CHAR_STR(local25, ';'));
}
}
}
else {
local26 = ((STR) &BOOL_4904);
local27 = STR_plus_STR_STR(local26, BE_mangle_OB_STR(self, ((OB) e_4875)));
BE_ndefer_STR(self, STR_plus_STR_STR(local27, ((STR) &TRUE_4905)));
}
}
}
after_loop_4896: ;
if ((!((self->nested_its==((FLISTAM_ITER_CAL) NULL))))) {
fnamecount = 0;
{
struct FLISTAM_ITER_CAL_4815_frame_struct temp4907_0;
FLISTAM_ITER_CAL_4815_frame
noname4908 = &temp4907_0;
noname4908->state = 0;
while (1) {
if (noname4908->state == 0) {
noname4876 = ((AM_LOOP_STMT) arg_4873)->its_60;
noname4908->arg0 = noname4876;
}
local28 = FLISTAM_ITER_CAL_4815(noname4908);
if (noname4908->state == -1) goto after_loop_4906;
e_4877 = local28;
if (SIG_is_iter_BOOL(self->current_function)) {
local29 = TRUE;
} else {
local29 = (!(BE_is_built_in_i(self, e_4877->fun)));
}
if (local29) {
if ((!(((AM_LOOP_STMT) arg_4873)->has_yield))) {
local30 = BE_mangle_OB_STR(self, ((OB) e_4877));
local31 = STR_plus_STR_STR(local30, ((STR) &name_4909));
local32 = STR_plus_STR_STR(local31, fname);
local33 = STR_plus_CHAR_STR(local32, '_');
local34 = STR_plus_INT_STR(local33, fnamecount);
BE_ndefer_STR(self, STR_plus_CHAR_STR(local34, ';'));
fnamecount = (c_INT_plus_INT_INT_chk(fnamecount,1));
}
}
}
}
after_loop_4906: ;
}
{
struct FLISTAM_ITER_CAL_4815_frame_struct temp4911_0;
FLISTAM_ITER_CAL_4815_frame
noname4912 = &temp4911_0;
noname4912->state = 0;
while (1) {
if (noname4912->state == 0) {
noname4878 = ((AM_LOOP_STMT) arg_4873)->its_60;
noname4912->arg0 = noname4878;
}
local35 = FLISTAM_ITER_CAL_4815(noname4912);
if (noname4912->state == -1) goto after_loop_4910;
it = local35;
if (SIG_is_iter_BOOL(self->current_function)) {
local36 = TRUE;
} else {
local36 = (!(BE_is_built_in_i(self, it->fun)));
}
if (local36) {
local37 = BE_mangle_OB_STR(self, ((OB) it));
BE_ndefer_STR(self, STR_plus_STR_STR(local37, ((STR) &state0_4913)));
}
}
}
after_loop_4910: ;
}
BE_ndefer_STR(self, ((STR) &while1));
BE_in(self);
BE_emit_code_AM_STMT(self, ((AM_LOOP_STMT) arg_4873)->body);
BE_out(self);
BE_ndefer_STR(self, ((STR) &name_4914));
if ((!((((AM_LOOP_STMT) arg_4873)->bits_59==((FLISTAM_BND_ITER) NULL))))) {
local38 = TRUE;
} else {
local38 = (!((((AM_LOOP_STMT) arg_4873)->its_60==((FLISTAM_ITER_CAL) NULL))));
}
if (local38) {
BE_out(self);
BE_ndefer_STR(self, ((STR) &name_4915));
}
BE_ndefer_STR(self, STR_plus_STR_STR(self->current_loop, ((STR) &name_4916)));
if (((AM_LOOP_STMT) arg_4873)->has_yield) {
local39 = (!((((AM_LOOP_STMT) arg_4873)->its_60==((FLISTAM_ITER_CAL) NULL))));
} else {
local39 = FALSE;
}
if (local39) {
{
struct FLISTAM_ITER_CAL_4815_frame_struct temp4918_0;
FLISTAM_ITER_CAL_4815_frame
noname4919 = &temp4918_0;
noname4919->state = 0;
while (1) {
if (noname4919->state == 0) {
noname4879 = ((AM_LOOP_STMT) arg_4873)->its_60;
noname4919->arg0 = noname4879;
}
local40 = FLISTAM_ITER_CAL_4815(noname4919);
if (noname4919->state == -1) goto after_loop_4917;
e_4880 = local40;
if (SIG_is_iter_BOOL(self->current_function)) {
local41 = TRUE;
} else {
local41 = (!(BE_is_built_in_i(self, e_4880->fun)));
}
if (local41) {
ep = BE_mangle_OB_STR(self, ((OB) e_4880));
local42 = STR_plus_STR_STR(((STR) &GC_free_4920), ep);
local43 = STR_plus_STR_STR(local42, ((STR) &name_4921));
local44 = STR_plus_STR_STR(local43, ep);
BE_ndefer_STR(self, STR_plus_STR_STR(local44, ((STR) &NULL_4922)));
}
}
}
after_loop_4917: ;
}
self->current_loop = outer_loop; break;
case AM_BREAK_STMT_tag:
local45 = STR_plus_STR_STR(((STR) &goto_4923), self->current_loop);
BE_ndefer_STR(self, STR_plus_STR_STR(local45, ((STR) &name_4924))); break;
case AM_RETURN_STMT_tag:
if (SIG_is_iter_BOOL(self->current_function)) {
BE_ndefer_STR(self, ((STR) &framestate1));
}
if ((!((((AM_RETURN_STMT) arg_4873)->val_16==((AM_EXPR) NULL))))) {
s1 = BE_emit_expr_AM_(self, ((AM_RETURN_STMT) arg_4873)->val_16);
local46 = ((STR) &return_4925);
local47 = self->current_function->ret;
local48 = ((AM_RETURN_STMT) arg_4873)->val_16;
local49 = (*AM_EXPR_tp_TP[local48->header.tag+AM_EXPR_tp_TP_offset])(local48);
local50 = STR_plus_STR_STR(local46, BE_cast_TP_TP_ST(self, local47, local49, s1));
BE_ndefer_STR(self, STR_plus_CHAR_STR(local50, ';'));
}
else {
if ((self->current_function->ret==((TP) NULL))) {
local51 = TRUE;
} else {
local51 = SIG_is_iter_BOOL(self->current_function);
}
if (!(local51)) {
fprintf(stderr,"Violation of assertion ./be.sa:1614:30\n");
exit(16);
}
BE_ndefer_STR(self, ((STR) &return_4926));
}
if ((self->indent==1)) {
self->saw_outer_return = TRUE;
} break;
case AM_EXPR_STMT_tag:
s1 = BE_emit_expr_AM_(self, ((AM_EXPR_STMT) arg_4873)->expr);
if ((!((s1==((STR) NULL))))) {
local52 = ((AM_EXPR_STMT) arg_4873)->expr;
if ((!(((*AM_EXPR_tp_TP[local52->header.tag+AM_EXPR_tp_TP_offset])(local52)==((TP) NULL))))) {
local53 = STR_plus_STR_STR(((STR) &void_4927), s1);
BE_ndefer_STR(self, STR_plus_CHAR_STR(local53, ';'));
}
else {
BE_ndefer_STR(self, STR_plus_CHAR_STR(s1, ';'));
}
} break;
case AM_YIELD_STMT_tag:
local54 = STR_plus_INT_STR(((STR) &framestate), ((AM_YIELD_STMT) arg_4873)->ret);
BE_ndefer_STR(self, STR_plus_CHAR_STR(local54, ';'));
if ((!((((AM_YIELD_STMT) arg_4873)->val_16==((AM_EXPR) NULL))))) {
local55 = ((STR) &return_4928);
local56 = self->current_function->ret;
local57 = ((AM_YIELD_STMT) arg_4873)->val_16;
local58 = (*AM_EXPR_tp_TP[local57->header.tag+AM_EXPR_tp_TP_offset])(local57);
local59 = STR_plus_STR_STR(local55, BE_cast_TP_TP_ST(self, local56, local58, BE_emit_expr_AM_(self, ((AM_YIELD_STMT) arg_4873)->val_16)));
BE_ndefer_STR(self, STR_plus_CHAR_STR(local59, ';'));
}
else {
BE_ndefer_STR(self, ((STR) &return_4929));
}
local60 = STR_plus_INT_STR(((STR) &state_4930), self->state_counter);
BE_ndefer_STR(self, STR_plus_STR_STR(local60, ((STR) &name_4931)));
self->state_counter = (c_INT_plus_INT_INT_chk(self->state_counter,1)); break;
case AM_CASE_STMT_tag:
test_4881 = BE_emit_expr_AM_(self, ((AM_CASE_STMT) arg_4873)->test_40);
if ((!((((AM_CASE_STMT) arg_4873)->tgts==((FLISTFLISTAM_CONST) NULL))))) {
local61 = ((ARRAYARRAYSTR) NULL);
targets = ARRAYARRAYSTR_cr(local61, FLISTFLISTAM_CON(((AM_CASE_STMT) arg_4873)->tgts));
{
struct ARRAYARRAYSTR_in_frame_struct temp4933_0;
ARRAYARRAYSTR_in_frame
noname4934 = &temp4933_0;
noname4934->state = 0;
while (1) {
if (noname4934->state == 0) {
noname4882 = targets;
noname4934->arg0 = noname4882;
}
local62 = ARRAYARRAYSTR_in(noname4934);
if (noname4934->state == -1) goto after_loop_4932;
i = local62;
local63 = ((ARRAYSTR) NULL);
ARRAYARRAYSTR_as_4848(targets, i, ARRAYSTR_create_(local63, FLISTAM_CONST_si(FLISTFLISTAM_CON_3988(((AM_CASE_STMT) arg_4873)->tgts, i))));
{
struct ARRAYSTR_ind_INT_frame_struct temp4936_0;
ARRAYSTR_ind_INT_frame
noname4937 = &temp4936_0;
noname4937->state = 0;
while (1) {
if (noname4937->state == 0) {
noname4883 = ARRAYARRAYSTR_ag(targets, i);
noname4937->arg0 = noname4883;
}
local64 = ARRAYSTR_ind_INT(noname4937);
if (noname4937->state == -1) goto after_loop_4935;
j = local64;
local65 = ARRAYARRAYSTR_ag(targets, i);
local66 = FLISTFLISTAM_CON_3988(((AM_CASE_STMT) arg_4873)->tgts, i);
ARRAYSTR_aset_IN_4289(local65, j, BE_emit_expr_AM_(self, ((AM_EXPR) FLISTAM_CONST_ag(local66, j))));
}
}
after_loop_4935: ;
}
}
after_loop_4932: ;
local67 = STR_plus_STR_STR(((STR) &switch_4938), test_4881);
BE_ndefer_STR(self, STR_plus_STR_STR(local67, ((STR) &name_4939)));
BE_in(self);
BE_comment_STR(self, ((STR) &casestatement_4940));
{
struct ARRAYARRAYSTR_in_frame_struct temp4942_0;
ARRAYARRAYSTR_in_frame
noname4943 = &temp4942_0;
noname4943->state = 0;
while (1) {
if (noname4943->state == 0) {
noname4884 = targets;
noname4943->arg0 = noname4884;
}
local68 = ARRAYARRAYSTR_in(noname4943);
if (noname4943->state == -1) goto after_loop_4941;
i_4885 = local68;
{
struct ARRAYSTR_elt_STR_frame_struct temp4945_0;
ARRAYSTR_elt_STR_frame
noname4946 = &temp4945_0;
noname4946->state = 0;
while (1) {
local69 = ((STR) &case_4947);
if (noname4946->state == 0) {
noname4886 = ARRAYARRAYSTR_ag(targets, i_4885);
noname4946->arg0 = noname4886;
}
local70 = ARRAYSTR_elt_STR(noname4946);
if (noname4946->state == -1) goto after_loop_4944;
local71 = STR_plus_STR_STR(local69, local70);
BE_ndefer_STR(self, STR_plus_CHAR_STR(local71, ':'));
}
}
after_loop_4944: ;
BE_in(self);
BE_emit_code_AM_STMT(self, FLISTAM_STMT_age(((AM_CASE_STMT) arg_4873)->stmts, i_4885));
BE_out(self);
BE_ndefer_STR(self, ((STR) &break_4948));
}
}
after_loop_4941: ;
BE_ndefer_STR(self, ((STR) &default_4949));
BE_in(self);
if (((AM_CASE_STMT) arg_4873)->no_else) {
BE_runtime_error(self, ((STR) &Noapplicabletarg), ((PROG_ERR) arg_4873));
}
else {
BE_emit_code_AM_STMT(self, ((AM_CASE_STMT) arg_4873)->else_stmts);
}
BE_out(self);
BE_out(self);
BE_ndefer_STR(self, ((STR) &name_4950));
}
else {
BE_runtime_error(self, ((STR) &Noapplicabletarg_4951), ((PROG_ERR) arg_4873));
} break;
case AM_PRE_STMT_tag:
if (self->chk_pre) {
local72 = ((STR) &if_4952);
local73 = STR_plus_STR_STR(local72, BE_emit_expr_AM_(self, ((AM_PRE_STMT) arg_4873)->test_40));
BE_ndefer_STR(self, STR_plus_STR_STR(local73, ((STR) &name_4953)));
BE_in(self);
BE_runtime_error(self, ((STR) &Violationofpreco), ((PROG_ERR) arg_4873));
BE_out(self);
BE_ndefer_STR(self, ((STR) &name_4954));
} break;
case AM_POST_STMT_tag:
if (self->chk_post) {
local74 = ((STR) &if_4955);
local75 = STR_plus_STR_STR(local74, BE_emit_expr_AM_(self, ((AM_POST_STMT) arg_4873)->test_40));
BE_ndefer_STR(self, STR_plus_STR_STR(local75, ((STR) &name_4956)));
BE_in(self);
BE_runtime_error(self, ((STR) &Violationofpostc), ((PROG_ERR) arg_4873));
BE_out(self);
BE_ndefer_STR(self, ((STR) &name_4957));
} break;
case AM_INITIAL_STMT_tag:
if (self->chk_post) {
BE_emit_code_AM_STMT(self, ((AM_INITIAL_STMT) arg_4873)->stmts);
} break;
case AM_ASSERT_STMT_tag:
if (self->chk_assert) {
local76 = ((STR) &if_4958);
local77 = STR_plus_STR_STR(local76, BE_emit_expr_AM_(self, ((AM_ASSERT_STMT) arg_4873)->test_40));
BE_ndefer_STR(self, STR_plus_STR_STR(local77, ((STR) &name_4959)));
BE_in(self);
BE_runtime_error(self, ((STR) &Violationofassertion), ((PROG_ERR) arg_4873));
BE_out(self);
BE_ndefer_STR(self, ((STR) &name_4960));
} break;
case AM_TYPECASE_STMT_tag:
if (((AM_TYPECASE_STMT) arg_4873)->has_void_stmts) {
local78 = TRUE;
} else {
local78 = self->chk_when;
}
if (local78) {
local79 = ((STR) &if_4961);
local80 = STR_plus_STR_STR(local79, BE_mangle_OB_STR(self, ((OB) ((AM_TYPECASE_STMT) arg_4873)->test_40)));
BE_ndefer_STR(self, STR_plus_STR_STR(local80, ((STR) &NULL_4962)));
BE_in(self);
if (((AM_TYPECASE_STMT) arg_4873)->has_void_stmts) {
BE_emit_code_AM_STMT(self, ((AM_TYPECASE_STMT) arg_4873)->void_stmts);
}
else {
BE_runtime_error(self, ((STR) &Voidobjectoftypecase), ((PROG_ERR) arg_4873));
}
BE_out(self);
BE_ndefer_STR(self, ((STR) &else_4963));
}
local81 = BE_mangle_OB_STR(self, ((OB) ((AM_TYPECASE_STMT) arg_4873)->test_40));
BE_emit_typeswit(self, local81, ((AM_TYPECASE_STMT) arg_4873)->tgts, ((AM_TYPECASE_STMT) arg_4873)->stmts);
if (((AM_TYPECASE_STMT) arg_4873)->no_else) {
BE_in(self);
BE_runtime_error(self, ((STR) &Noapplicabletype), ((PROG_ERR) arg_4873));
BE_out(self);
}
else {
BE_in(self);
BE_emit_code_AM_STMT(self, ((AM_TYPECASE_STMT) arg_4873)->else_stmts);
BE_out(self);
}
BE_out(self);
BE_ndefer_STR(self, ((STR) &name_4964)); break;
case AM_RAISE_STMT_tag:
if (!((!((((AM_RAISE_STMT) arg_4873)->val_16==((AM_EXPR) NULL)))))) {
fprintf(stderr,"Violation of assertion ./be.sa:1719:26\n");
exit(16);
}
local82 = ((STR) &exception_4965);
local83 = self->prog->tp_builtin->dollar_ob;
local84 = ((AM_RAISE_STMT) arg_4873)->val_16;
local85 = (*AM_EXPR_tp_TP[local84->header.tag+AM_EXPR_tp_TP_offset])(local84);
local86 = STR_plus_STR_STR(local82, BE_cast_TP_TP_ST(self, ((TP) local83), local85, BE_emit_expr_AM_(self, ((AM_RAISE_STMT) arg_4873)->val_16)));
BE_ndefer_STR(self, STR_plus_STR_STR(local86, ((STR) &name_4966)));
BE_ndefer_STR(self, ((STR) &longjmplast_protect1)); break;
case AM_INVARIANT_STMT_tag:
if (self->chk_invariant) {
if (!((!((self->current_self==((STR) NULL)))))) {
fprintf(stderr,"Violation of assertion ./be.sa:1725:30\n");
exit(16);
}
local87 = ((STR) &if_4967);
local88 = STR_plus_STR_STR(local87, BE_mangle_OB_STR(self, ((OB) ((AM_INVARIANT_STMT) arg_4873)->sig_6)));
local89 = STR_plus_STR_STR(local88, ((STR) &name_4968));
local90 = STR_plus_STR_STR(local89, self->current_self);
BE_ndefer_STR(self, STR_plus_STR_STR(local90, ((STR) &name_4969)));
BE_in(self);
local91 = ((STR) &Failedinvariant);
local92 = STR_plus_STR_STR(local91, SIG_str_STR(((AM_INVARIANT_STMT) arg_4873)->sig_6));
BE_runtime_error(self, local92, ((PROG_ERR) arg_4873));
BE_out(self);
BE_ndefer_STR(self, ((STR) &name_4970));
} break;
case AM_PROTECT_STMT_tag:
BE_ndefer_STR(self, ((STR) &name_4971));
BE_in(self);
BE_ndefer_STR(self, ((STR) &OBold_exceptione));
BE_ndefer_STR(self, ((STR) &jmp_bufold_protect));
BE_ndefer_STR(self, ((STR) &bcopylast_protec));
BE_ndefer_STR(self, ((STR) &ifsetjmplast_pro));
BE_in(self);
BE_emit_code_AM_STMT(self, ((AM_PROTECT_STMT) arg_4873)->body);
BE_out(self);
BE_ndefer_STR(self, ((STR) &else_4972));
BE_in(self);
BE_ndefer_STR(self, ((STR) &bcopyold_protect));
BE_emit_typeswit(self, ((STR) &exception_4973), ((AM_PROTECT_STMT) arg_4873)->tgts, ((AM_PROTECT_STMT) arg_4873)->stmts);
if (((AM_PROTECT_STMT) arg_4873)->no_else) {
BE_ndefer_STR(self, ((STR) &longjmplast_prot_4974));
}
else {
BE_in(self);
BE_emit_code_AM_STMT(self, ((AM_PROTECT_STMT) arg_4873)->else_stmts);
BE_out(self);
}
BE_out(self);
BE_ndefer_STR(self, ((STR) &name_4975));
BE_out(self);
BE_ndefer_STR(self, ((STR) &name_4976));
BE_ndefer_STR(self, ((STR) &bcopyold_protect_4977));
BE_ndefer_STR(self, ((STR) &exceptionold_exc));
BE_out(self);
BE_ndefer_STR(self, ((STR) &name_4978)); break;
default: ;
fprintf(stderr,"No applicable type in typecase ./be.sa:1494:20\n");
exit(16);
}
local93 = arg_4873;
arg_4873 = (*AM_STMT_next_AM_STMT[local93->header.tag+AM_STMT_next_AM_STMT_offset])(local93);
}
after_loop: ;
}
void FILE_plus_FSTR(FILE_20 self, FSTR f_4979) {
INT fs = ((INT) 0);
INT local0;
if (!((!((self->fp==((EXT_OB) NULL)))))) {
fprintf(stderr,"Violation of precondition ../Library/file.sa:165:7\n");
exit(16);
}
local0 = FSTR_size_INT(f_4979);
fs = fwrite(((f_4979==NULL)?NULL:f_4979->arr_part), local0, 1, self->fp);
}
FMAPOBSTR FMAPOBSTR_halve_(FMAPOBSTR self) {
FMAPOBSTR noname4980;
INT ns = ((INT) 0);
FMAPOBSTR r_4981;
FMAPOBSTR noname4982;
BOOL local0;
INT local1;
INT local2;
INT local3;
INT local4;
INT local5;
INT local6;
TUPOBSTR local7;
if ((!((self==((FMAPOBSTR) NULL))))) {
local1 = self->hsize;
local2 = (self->asize);
local3 = (c_INT_minus_INT_INT_chk(local2,1));
local0 = (local1<(c_INT_div_INT_INT_chk(local3,4)));
} else {
local0 = FALSE;
}
if (!(local0)) {
fprintf(stderr,"Violation of precondition ../Library/fmap.sa:209:21\n");
exit(16);
}
local4 = (self->asize);
local5 = (c_INT_minus_INT_INT_chk(local4,1));
local6 = (c_INT_div_INT_INT_chk(local5,2));
ns = (c_INT_plus_INT_INT_chk(local6,1));
r_4981 = FMAPOBSTR_alloca(self, ns);
{
struct FMAPOBSTR_pairs__frame_struct temp4983_0;
FMAPOBSTR_pairs__frame
noname4984 = &temp4983_0;
noname4984->state = 0;
while (1) {
if (noname4984->state == 0) {
noname4982 = self;
noname4984->arg0 = noname4982;
}
local7 = FMAPOBSTR_pairs_(noname4984);
if (noname4984->state == -1) goto after_loop;
r_4981 = FMAPOBSTR_insert(r_4981, local7);
}
}
after_loop: ;
return r_4981;
}
FMAPOBSTR FMAPOBSTR_delete(FMAPOBSTR self, OB k) {
FMAPOBSTR noname4985;
INT h = ((INT) 0);
OB tk;
INT i = ((INT) 0);
OB tk_4986;
INT hsh = ((INT) 0);
INT local0;
INT local1;
INT local2;
TUPOBSTR local3;
OB local4;
INT local5;
INT local6;
INT local7;
BOOL local8;
TUPOBSTR local9;
OB local10;
BOOL local11;
TUPOBSTR local12;
OB local13;
BOOL local14;
INT local15;
INT local16;
INT local17;
INT local18;
if ((self==((FMAPOBSTR) NULL))) {
return ((FMAPOBSTR) NULL);
}
local0 = FMAPOBSTR_key_ha(self, k);
local1 = (self->asize);
h = (local0&(c_INT_minus_INT_INT_chk(local1,2)));
while (1) {
tk = (TUPOBSTR_blob=FMAPOBSTR_aget_I(self, h)).t1;
if (FMAPOBSTR_key_eq(self, tk, FMAPOBSTR_key_nil_OB(self))) {
return self;
}
else {
if (FMAPOBSTR_key_eq(self, tk, k)) {
goto after_loop;
}
}
local2 = (self->asize);
if ((h==(c_INT_minus_INT_INT_chk(local2,2)))) {
h = 0;
}
else {
h = (c_INT_plus_INT_INT_chk(h,1));
}
}
after_loop: ;
local3 = TUPOBSTR_zero;
local4 = FMAPOBSTR_key_nil_OB(self);
FMAPOBSTR_aset_I(self, h, TUPOBSTR_create_(local3, local4, ((STR) NULL)));
self->hsize = (c_INT_minus_INT_INT_chk(self->hsize,1));
i = h;
while (1) {
local5 = (self->asize);
if ((i==(c_INT_minus_INT_INT_chk(local5,2)))) {
i = 0;
}
else {
i = (c_INT_plus_INT_INT_chk(i,1));
}
tk_4986 = (TUPOBSTR_blob=FMAPOBSTR_aget_I(self, i)).t1;
if (FMAPOBSTR_key_eq(self, tk_4986, FMAPOBSTR_key_nil_OB(self))) {
goto after_loop_4988;
}
local6 = FMAPOBSTR_key_ha(self, tk_4986);
local7 = (self->asize);
hsh = (local6&(c_INT_minus_INT_INT_chk(local7,2)));
if ((hsh<=i)) {
if ((h<i)) {
local8 = (h>=hsh);
} else {
local8 = FALSE;
}
if (local8) {
FMAPOBSTR_aset_I(self, h, FMAPOBSTR_aget_I(self, i));
h = i;
local9 = TUPOBSTR_zero;
local10 = FMAPOBSTR_key_nil_OB(self);
FMAPOBSTR_aset_I(self, i, TUPOBSTR_create_(local9, local10, ((STR) NULL)));
}
}
else {
if ((h>=hsh)) {
local11 = TRUE;
} else {
local11 = (h<i);
}
if (local11) {
FMAPOBSTR_aset_I(self, h, FMAPOBSTR_aget_I(self, i));
h = i;
local12 = TUPOBSTR_zero;
local13 = FMAPOBSTR_key_nil_OB(self);
FMAPOBSTR_aset_I(self, i, TUPOBSTR_create_(local12, local13, ((STR) NULL)));
}
}
}
after_loop_4988: ;
local15 = (self->asize);
if ((local15>=33)) {
local16 = self->hsize;
local17 = (self->asize);
local18 = (c_INT_minus_INT_INT_chk(local17,1));
local14 = (local16<(c_INT_div_INT_INT_chk(local18,4)));
} else {
local14 = FALSE;
}
if (local14) {
return FMAPOBSTR_halve_(self);
}
return self;
if (!FMAPOBSTR_invari(self)) {
fprintf(stderr,"Failed invariant FMAP{$OB,STR}::invariant:BOOL ../Library/fmap.sa:217:9\n");
exit(16);
}
}
FSETSTR FSETSTR_halve_si(FSETSTR self) {
FSETSTR noname4990;
FSETSTR r_4991;
FSETSTR noname4992;
BOOL local0;
INT local1;
INT local2;
INT local3;
INT local4;
INT local5;
INT local6;
STR local7;
if ((!((self==((FSETSTR) NULL))))) {
local1 = self->hsize;
local2 = (self->asize);
local3 = (c_INT_minus_INT_INT_chk(local2,1));
local0 = (local1<(c_INT_div_INT_INT_chk(local3,4)));
} else {
local0 = FALSE;
}
if (!(local0)) {
fprintf(stderr,"Violation of precondition ../Library/fset.sa:180:21\n");
exit(16);
}
local4 = (self->asize);
local5 = (c_INT_minus_INT_INT_chk(local4,1));
local6 = (c_INT_div_INT_INT_chk(local5,2));
r_4991 = FSETSTR_allocate(self, (c_INT_plus_INT_INT_chk(local6,1)));
{
struct FSETSTR_elt_STR_frame_struct temp4993_0;
FSETSTR_elt_STR_frame
noname4994 = &temp4993_0;
noname4994->state = 0;
while (1) {
if (noname4994->state == 0) {
noname4992 = self;
noname4994->arg0 = noname4992;
}
local7 = FSETSTR_elt_STR(noname4994);
if (noname4994->state == -1) goto after_loop;
r_4991 = FSETSTR_insert_S(r_4991, local7);
}
}
after_loop: ;
return r_4991;
}
FSETSTR FSETSTR_delete_S(FSETSTR self, STR e_4995) {
FSETSTR noname4996;
INT h = ((INT) 0);
STR te;
INT i = ((INT) 0);
STR te_4997;
INT hsh = ((INT) 0);
INT local0;
INT local1;
INT local2;
INT local3;
INT local4;
INT local5;
BOOL local6;
BOOL local7;
BOOL local8;
INT local9;
INT local10;
INT local11;
INT local12;
if ((self==((FSETSTR) NULL))) {
return ((FSETSTR) NULL);
}
local0 = FSETSTR_elt_hash(self, e_4995);
local1 = (self->asize);
h = (local0&(c_INT_minus_INT_INT_chk(local1,2)));
while (1) {
te = FSETSTR_aget_INT_STR(self, h);
if (FSETSTR_elt_eq_S(self, te, FSETSTR_elt_nil_STR(self))) {
return self;
}
else {
if (FSETSTR_elt_eq_S(self, te, e_4995)) {
goto after_loop;
}
}
local2 = (self->asize);
if ((h==(c_INT_minus_INT_INT_chk(local2,2)))) {
h = 0;
}
else {
h = (c_INT_plus_INT_INT_chk(h,1));
}
}
after_loop: ;
FSETSTR_aset_INT_STR(self, h, FSETSTR_elt_nil_STR(self));
self->hsize = (c_INT_minus_INT_INT_chk(self->hsize,1));
i = h;
while (1) {
local3 = (self->asize);
if ((i==(c_INT_minus_INT_INT_chk(local3,2)))) {
i = 0;
}
else {
i = (c_INT_plus_INT_INT_chk(i,1));
}
te_4997 = FSETSTR_aget_INT_STR(self, i);
if (FSETSTR_elt_eq_S(self, te_4997, FSETSTR_elt_nil_STR(self))) {
goto after_loop_4999;
}
local4 = FSETSTR_elt_hash(self, te_4997);
local5 = (self->asize);
hsh = (local4&(c_INT_minus_INT_INT_chk(local5,2)));
if ((hsh<=i)) {
if ((h<i)) {
local6 = (h>=hsh);
} else {
local6 = FALSE;
}
if (local6) {
FSETSTR_aset_INT_STR(self, h, FSETSTR_aget_INT_STR(self, i));
h = i;
FSETSTR_aset_INT_STR(self, i, FSETSTR_elt_nil_STR(self));
}
}
else {
if ((h>=hsh)) {
local7 = TRUE;
} else {
local7 = (h<i);
}
if (local7) {
FSETSTR_aset_INT_STR(self, h, FSETSTR_aget_INT_STR(self, i));
h = i;
FSETSTR_aset_INT_STR(self, i, FSETSTR_elt_nil_STR(self));
}
}
}
after_loop_4999: ;
local9 = (self->asize);
if ((local9>=33)) {
local10 = self->hsize;
local11 = (self->asize);
local12 = (c_INT_minus_INT_INT_chk(local11,1));
local8 = (local10<(c_INT_div_INT_INT_chk(local12,4)));
} else {
local8 = FALSE;
}
if (local8) {
return FSETSTR_halve_si(self);
}
return self;
if (!FSETSTR_invarian(self)) {
fprintf(stderr,"Failed invariant FSET{STR}::invariant:BOOL ../Library/fset.sa:188:9\n");
exit(16);
}
}
void BE_unmangle_OB(BE self, OB ob_5001) {
STR s_5002;
s_5002 = FMAPOBSTR_get_OB_STR(self->manglemap, ob_5001);
if ((!((s_5002==((STR) NULL))))) {
self->manglemap = FMAPOBSTR_delete(self->manglemap, ob_5001);
self->mangleset = FSETSTR_delete_S(self->mangleset, s_5002);
}
}
void BE_emit_epilogue(BE self, AM_ROUT_DEF f_5003) {
FLISTAM_LOCAL_EXPR noname5004;
AM_ROUT_DEF noname5005;
BOOL local0;
BOOL local1;
BOOL local2;
BOOL local3;
AM_LOCAL_EXPR local4;
AM_LOCAL_EXPR local5;
if (self->chk_return) {
local2 = (!(self->saw_outer_return));
} else {
local2 = FALSE;
}
if (local2) {
local1 = (!(AM_ROUT_DEF_is_i(f_5003)));
} else {
local1 = FALSE;
}
if (local1) {
local0 = (!((f_5003->sig_6->ret==((TP) NULL))));
} else {
local0 = FALSE;
}
if (local0) {
BE_runtime_error(self, ((STR) &Laststatementwas), ((PROG_ERR) f_5003));
}
FILE_plus_FSTR(self->code_c, self->routine_code);
if (AM_ROUT_DEF_is_i(f_5003)) {
BE_newline(self);
(fwrite(((STR) &framestate1_5006)->arr_part,((STR) &framestate1_5006)->asize,1,self->code_c->fp));
if ((!((f_5003->sig_6->ret==((TP) NULL))))) {
BE_newline(self);
(fwrite(((STR) &returndummy)->arr_part,((STR) &returndummy)->asize,1,self->code_c->fp));
}
else {
BE_newline(self);
(fwrite(((STR) &return_5007)->arr_part,((STR) &return_5007)->asize,1,self->code_c->fp));
}
}
BE_out(self);
BE_newline(self);
(fwrite(((STR) &name_5008)->arr_part,((STR) &name_5008)->asize,1,self->code_c->fp));
if ((!((f_5003->locals_57==((FLISTAM_LOCAL_EXPR) NULL))))) {
local3 = (!(AM_ROUT_DEF_is_i(f_5003)));
} else {
local3 = FALSE;
}
if (local3) {
{
struct FLISTAM_LOCAL_EX_4237_frame_struct temp5009_0;
FLISTAM_LOCAL_EX_4237_frame
noname5010 = &temp5009_0;
noname5010->state = 0;
while (1) {
if (noname5010->state == 0) {
noname5004 = f_5003->locals_57;
noname5010->arg0 = noname5004;
}
local4 = FLISTAM_LOCAL_EX_4237(noname5010);
if (noname5010->state == -1) goto after_loop;
BE_unmangle_OB(self, ((OB) local4));
}
}
after_loop: ;
}
{
struct AM_ROUT_DEF_elt__frame_struct temp5012_0;
AM_ROUT_DEF_elt__frame
noname5013 = &temp5012_0;
noname5013->state = 0;
while (1) {
if (noname5013->state == 0) {
noname5005 = f_5003;
noname5013->arg0 = noname5005;
}
local5 = AM_ROUT_DEF_elt_(noname5013);
if (noname5013->state == -1) goto after_loop_5011;
BE_unmangle_OB(self, ((OB) local5));
}
}
after_loop_5011: ;
}
void BE_emit_typedef_(BE self, AM_ROUT_DEF f_5014) {
AM_ROUT_DEF noname5015;
AM_LOCAL_EXPR fi;
INT noname5016 = ((INT) 0);
FLISTAM_LOCAL_EXPR noname5017;
AM_LOCAL_EXPR fli;
STR name_5018;
FLISTAM_ITER_CAL noname5019;
AM_ITER_CALL_EXPR ni;
STR name_5020;
FILE_20 local0;
FILE_20 local1;
STR local2;
AM_LOCAL_EXPR local3;
FILE_20 local4;
FILE_20 local5;
FILE_20 local6;
FILE_20 local7;
INT local8;
FILE_20 local9;
FILE_20 local10;
AM_LOCAL_EXPR local11;
INT local12;
FILE_20 local13;
FILE_20 local14;
FILE_20 local15;
FILE_20 local16;
AM_ITER_CALL_EXPR local17;
FILE_20 local18;
FILE_20 local19;
INT local20;
FILE_20 local21;
FILE_20 local22;
FILE_20 local23;
STR local24;
local0 = FILE_plus_STR_FILE(self->typedefs_h, ((STR) &typedefstruct_5021));
local1 = FILE_plus_STR_FILE(local0, BE_mangle_OB_STR(self, ((OB) f_5014->sig_6)));
(fwrite(((STR) &S_frame_struct_5022)->arr_part,((STR) &S_frame_struct_5022)->asize,1,local1->fp));
local2 = BE_mangle_OB_STR(self, ((OB) f_5014->sig_6));
BE_forbid_STR(self, STR_plus_STR_STR(local2, ((STR) &S_frame_struct_5023)));
{
struct AM_ROUT_DEF_elt__frame_struct temp5024_0;
AM_ROUT_DEF_elt__frame
noname5025 = &temp5024_0;
struct INT_up_INT_frame_struct temp5024_1;
INT_up_INT_frame
noname5026 = &temp5024_1;
noname5025->state = 0;
noname5026->state = 0;
while (1) {
if (noname5025->state == 0) {
noname5015 = f_5014;
noname5025->arg0 = noname5015;
}
local3 = AM_ROUT_DEF_elt_(noname5025);
if (noname5025->state == -1) goto after_loop;
fi = local3;
local4 = FILE_plus_CHAR_FILE(self->typedefs_h, ' ');
local5 = FILE_plus_STR_FILE(local4, BE_mangle_OB_STR(self, ((OB) fi->tp_at)));
local6 = FILE_plus_CHAR_FILE(local5, ' ');
local7 = FILE_plus_STR_FILE(local6, ((STR) &arg_5027));
if (noname5026->state == 0) {
noname5016 = 0;
noname5026->arg0 = noname5016;
}
local8 = INT_up_INT(noname5026);
if (noname5026->state == -1) goto after_loop;
local9 = FILE_plus_INT_FILE(local7, local8);
FILE_plus_CHAR(local9, ';');
local10 = self->typedefs_h;
BE_comment_FILE_STR(self, local10, STR_plus_STR_STR(((STR) &Formalargument), fi->name_19.str_4));
FILE_plus_CHAR(self->typedefs_h, '\n');
}
}
after_loop: ;
if ((!((f_5014->locals_57==((FLISTAM_LOCAL_EXPR) NULL))))) {
{
struct FLISTAM_LOCAL_EX_4237_frame_struct temp5029_0;
FLISTAM_LOCAL_EX_4237_frame
noname5030 = &temp5029_0;
noname5030->state = 0;
while (1) {
if (noname5030->state == 0) {
noname5017 = f_5014->locals_57;
noname5030->arg0 = noname5017;
}
local11 = FLISTAM_LOCAL_EX_4237(noname5030);
if (noname5030->state == -1) goto after_loop_5028;
fli = local11;
name_5018 = BE_mangle_OB_STR(self, ((OB) fli));
local12 = STR_length_INT(name_5018);
name_5018 = STR_tail_INT_STR(name_5018, (c_INT_minus_INT_INT_chk(local12,7)));
local13 = FILE_plus_CHAR_FILE(self->typedefs_h, ' ');
local14 = FILE_plus_STR_FILE(local13, BE_mangle_OB_STR(self, ((OB) fli->tp_at)));
local15 = FILE_plus_CHAR_FILE(local14, ' ');
local16 = FILE_plus_STR_FILE(local15, name_5018);
FILE_plus_CHAR(local16, ';');
BE_comment_FILE_STR(self, self->typedefs_h, ((STR) &local_5031));
FILE_plus_CHAR(self->typedefs_h, '\n');
}
}
after_loop_5028: ;
}
{
struct FLISTAM_ITER_CAL_4815_frame_struct temp5033_0;
FLISTAM_ITER_CAL_4815_frame
noname5034 = &temp5033_0;
noname5034->state = 0;
while (1) {
if (noname5034->state == 0) {
noname5019 = self->nested_its;
noname5034->arg0 = noname5019;
}
local17 = FLISTAM_ITER_CAL_4815(noname5034);
if (noname5034->state == -1) goto after_loop_5032;
ni = local17;
local18 = FILE_plus_STR_FILE(self->typedefs_h, ((STR) &struct_5035));
local19 = FILE_plus_STR_FILE(local18, BE_mangle_OB_STR(self, ((OB) ni->fun)));
(fwrite(((STR) &S_frame_struct_5036)->arr_part,((STR) &S_frame_struct_5036)->asize,1,local19->fp));
name_5020 = BE_mangle_OB_STR(self, ((OB) ni));
local20 = STR_length_INT(name_5020);
name_5020 = STR_tail_INT_STR(name_5020, (c_INT_minus_INT_INT_chk(local20,7)));
local21 = FILE_plus_STR_FILE(self->typedefs_h, name_5020);
(fwrite(((STR) &nestediterframe)->arr_part,((STR) &nestediterframe)->asize,1,local21->fp));
}
}
after_loop_5032: ;
(fwrite(((STR) &INTstate)->arr_part,((STR) &INTstate)->asize,1,self->typedefs_h->fp));
local22 = FILE_plus_STR_FILE(self->typedefs_h, ((STR) &name_5037));
local23 = FILE_plus_STR_FILE(local22, BE_mangle_OB_STR(self, ((OB) f_5014->sig_6)));
(fwrite(((STR) &S_frame_5038)->arr_part,((STR) &S_frame_5038)->asize,1,local23->fp));
local24 = BE_mangle_OB_STR(self, ((OB) f_5014->sig_6));
BE_forbid_STR(self, STR_plus_STR_STR(local24, ((STR) &S_frame_5039)));
}
void BE_emit_header_A(BE self, AM_ROUT_DEF f_5040) {
SIG sig_5041;
ARRAYTP noname5042;
BOOL flag_5043 = ((BOOL) 0);
AM_ROUT_DEF noname5044;
STR s_5045;
STR noname5046;
AM_ROUT_DEF noname5047;
STR noname5048;
FILE_20 local0;
FILE_20 local1;
FILE_20 local2;
FILE_20 local3;
FILE_20 local4;
FILE_20 local5;
FILE_20 local6;
FILE_20 local7;
TP local8;
AM_LOCAL_EXPR local9;
FILE_20 local10;
STR local11;
FILE_20 local12;
STR local13;
AM_LOCAL_EXPR local14;
sig_5041 = f_5040->sig_6;
if (AM_ROUT_DEF_is_i(f_5040)) {
BE_emit_typedef_(self, f_5040);
}
if ((!((sig_5041->ret==((TP) NULL))))) {
local0 = self->decs_h;
local1 = FILE_plus_STR_FILE(local0, BE_mangle_OB_STR(self, ((OB) sig_5041->ret)));
FILE_plus_CHAR(local1, ' ');
}
else {
(fwrite(((STR) &void_5049)->arr_part,((STR) &void_5049)->asize,1,self->decs_h->fp));
}
local2 = self->decs_h;
local3 = FILE_plus_STR_FILE(local2, BE_mangle_OB_STR(self, ((OB) f_5040->sig_6)));
FILE_plus_CHAR(local3, '(');
if (AM_ROUT_DEF_is_i(f_5040)) {
local4 = self->decs_h;
local5 = FILE_plus_STR_FILE(local4, BE_mangle_OB_STR(self, ((OB) f_5040->sig_6)));
(fwrite(((STR) &S_frame_5050)->arr_part,((STR) &S_frame_5050)->asize,1,local5->fp));
}
else {
if (f_5040->is_abstract) {
local6 = self->decs_h;
(fwrite(BE_mangle_OB_STR(self, ((OB) f_5040->sig_6->tp))->arr_part,BE_mangle_OB_STR(self, ((OB) f_5040->sig_6->tp))->asize,1,local6->fp));
if ((!((f_5040->sig_6->args_7==((ARRAYTP) NULL))))) {
{
struct ARRAYTP_elt_TP_frame_struct temp5051_0;
ARRAYTP_elt_TP_frame
noname5052 = &temp5051_0;
noname5052->state = 0;
while (1) {
local7 = FILE_plus_STR_FILE(self->decs_h, ((STR) &name_5053));
if (noname5052->state == 0) {
noname5042 = f_5040->sig_6->args_7;
noname5052->arg0 = noname5042;
}
local8 = ARRAYTP_elt_TP(noname5052);
if (noname5052->state == -1) goto after_loop;
(fwrite(BE_mangle_OB_STR(self, ((OB) local8))->arr_part,BE_mangle_OB_STR(self, ((OB) local8))->asize,1,local7->fp));
}
}
after_loop: ;
}
}
else {
if (f_5040->is_external) {
flag_5043 = FALSE;
{
struct AM_ROUT_DEF_elt__frame_struct temp5055_0;
AM_ROUT_DEF_elt__frame
noname5056 = &temp5055_0;
struct STR_separate_STR_STR_frame_struct temp5055_1;
STR_separate_STR_STR_frame
noname5057 = &temp5055_1;
noname5056->state = 0;
noname5057->state = 0;
while (1) {
if (noname5056->state == 0) {
noname5044 = f_5040;
noname5056->arg0 = noname5044;
}
local9 = AM_ROUT_DEF_elt_(noname5056);
if (noname5056->state == -1) goto after_loop_5054;
s_5045 = BE_mangle_OB_STR(self, ((OB) local9->tp_at));
if (flag_5043) {
local10 = self->decs_h;
if (noname5057->state == 0) {
noname5046 = ((STR) &name_5058);
noname5057->arg0 = noname5046;
}
noname5057->arg1 = s_5045;
local11 = STR_separate_STR_STR(noname5057);
if (noname5057->state == -1) goto after_loop_5054;
(fwrite(local11->arr_part,local11->asize,1,local10->fp));
}
flag_5043 = TRUE;
}
}
after_loop_5054: ;
}
else {
{
struct AM_ROUT_DEF_elt__frame_struct temp5060_0;
AM_ROUT_DEF_elt__frame
noname5061 = &temp5060_0;
struct STR_separate_STR_STR_frame_struct temp5060_1;
STR_separate_STR_STR_frame
noname5062 = &temp5060_1;
noname5061->state = 0;
noname5062->state = 0;
while (1) {
local12 = self->decs_h;
if (noname5062->state == 0) {
noname5048 = ((STR) &name_5063);
noname5062->arg0 = noname5048;
}
if (noname5061->state == 0) {
noname5047 = f_5040;
noname5061->arg0 = noname5047;
}
local14 = AM_ROUT_DEF_elt_(noname5061);
if (noname5061->state == -1) goto after_loop_5059;
noname5062->arg1 = BE_mangle_OB_STR(self, ((OB) local14->tp_at));
local13 = STR_separate_STR_STR(noname5062);
if (noname5062->state == -1) goto after_loop_5059;
(fwrite(local13->arr_part,local13->asize,1,local12->fp));
}
}
after_loop_5059: ;
}
}
}
(fwrite(((STR) &name_5064)->arr_part,((STR) &name_5064)->asize,1,self->decs_h->fp));
}
void BE_emit_routine_(BE self, AM_ROUT_DEF func) {
BOOL local0;
self->routine_count = (c_INT_plus_INT_INT_chk(self->routine_count,1));
if ((self->routine_count>300)) {
self->routine_count = 0;
BE_new_c_file(self);
}
BE_setup_routine(self, func);
BE_emit_prologue(self, func);
if (BE_is_asize_SIG_BOOL(self, func->sig_6)) {
if (self->chk_void) {
local0 = (!(self->prog->options_55->null_segfaults));
} else {
local0 = FALSE;
}
if (local0) {
BE_ndefer_STR(self, ((STR) &ifselfNULL));
BE_in(self);
BE_runtime_error(self, ((STR) &asizeaccessofvoid), ((PROG_ERR) func));
BE_out(self);
BE_ndefer_STR(self, ((STR) &name_5065));
}
BE_ndefer_STR(self, ((STR) &returnselfasize));
}
else {
BE_emit_code_AM_STMT(self, func->code_56);
}
BE_emit_epilogue(self, func);
BE_emit_header_A(self, func);
func->calls_58 = ((FLISTAM_EXPR) NULL);
func->locals_57 = ((FLISTAM_LOCAL_EXPR) NULL);
func->code_56 = ((AM_STMT) NULL);
}
void BE_end_mangling(BE self) {
FSETOB noname5066;
OB local0;
{
struct FSETOB_elt_OB_frame_struct temp5067_0;
FSETOB_elt_OB_frame
noname5068 = &temp5067_0;
noname5068->state = 0;
while (1) {
if (noname5068->state == 0) {
noname5066 = self->thisrout;
noname5068->arg0 = noname5066;
}
local0 = FSETOB_elt_OB(noname5068);
if (noname5068->state == -1) goto after_loop;
BE_unmangle_OB(self, local0);
}
}
after_loop: ;
self->thisrout = ((FSETOB) NULL);
}
void BE_output_am_rou(BE self, AM_ROUT_DEF func) {
OUT local0;
OUT local1;
OUT local2;
if (self->prog->show_am) {
local0 = OUT_create_OUT(((OUT) NULL));
local1 = OUT_plus_STR_OUT(local0, ((STR) &GeneratingCfor));
local2 = OUT_plus_STR_OUT(local1, SIG_str_STR(func->sig_6));
OUT_plus_CHAR(local2, '\n');
}
if (SIG_is_eq_SIG_BOOL(func->sig_6, self->main_sig)) {
BE_force_mangle_(self, ((OB) func->sig_6), ((STR) &sather_main_5069));
}
if (func->is_abstract) {
self->abstract_routs = FLISTAM_ROUT_DEF_4097(self->abstract_routs, func);
}
else {
if (BE_inlined_SIG_BOOL(self, func->sig_6)) {
self->inlined_sigs = FMAPSIGAM_ROUT_D_4138(self->inlined_sigs, func->sig_6, func);
}
else {
BE_start_mangling(self);
BE_emit_routine_(self, func);
BE_end_mangling(self);
}
}
}
void PROG_output_am_r(PROG self, AM_ROUT_DEF a_5070) {
BOOL local0;
if ((!(self->all_reached))) {
local0 = (!(self->options_55->only_check));
} else {
local0 = FALSE;
}
if (local0) {
BE_output_am_rou(self->back_end, a_5070);
}
}
void PROG_AM_GENERATE_5071(PROG_AM_GENERATE self, SIG s_5072) {
AM_ROUT_DEF am_5073;
TP_CLASS stp = ((TP_CLASS) NULL);
TP ostp;
FSETTP noname5074;
TP tp_5075;
IFC ifc_5076;
SIG cs;
AM_ROUT_DEF local0;
INT local1;
INT local2;
TP local3;
OUT local4;
OUT local5;
OUT local6;
OUT local7;
if (!((!((s_5072==((SIG) NULL)))))) {
fprintf(stderr,"Violation of precondition ./prog.sa:773:17\n");
exit(16);
}
if ((!((SIG_TBL_sig_eq_t(self->sig_tbl, s_5072)==((SIG) NULL))))) {
return;
}
self->sig_tbl = SIG_TBL_insert_S(self->sig_tbl, s_5072);
local0 = ((AM_ROUT_DEF) NULL);
local1 = 1;
local2 = (c_INT_plus_INT_INT_chk(local1,ARRAYTP_size_INT(s_5072->args_7)));
am_5073 = AM_ROUT_DEF_crea(local0, local2, SFILE_ID_zero);
am_5073->sig_6 = s_5072;
am_5073->is_abstract = TRUE;
ostp = s_5072->tp;
if (ostp==NULL) {
} else
switch (ostp->header.tag) {
case TP_CLASS_tag:
stp = ((TP_CLASS) ostp); break;
default: ;
fprintf(stderr,"No applicable type in typecase ./prog.sa:781:14\n");
exit(16);
}
{
struct FSETTP_elt_TP_frame_struct temp5077_0;
FSETTP_elt_TP_frame
noname5078 = &temp5077_0;
noname5078->state = 0;
while (1) {
if (noname5078->state == 0) {
noname5074 = PROG_descendants(self->prog, stp);
noname5078->arg0 = noname5074;
}
local3 = FSETTP_elt_TP(noname5078);
if (noname5078->state == -1) goto after_loop;
tp_5075 = local3;
ifc_5076 = IFC_TBL_ifc_of_T(self->prog->ifc_tbl, tp_5075);
cs = IFC_sig_conformi(ifc_5076, s_5072);
self->sig_list = FLISTSIG_push_SI(self->sig_list, cs);
}
}
after_loop: ;
if (self->prog->show_am) {
local4 = OUT_create_OUT(((OUT) NULL));
local5 = OUT_plus_STR_OUT(local4, ((STR) &AMfor));
local6 = OUT_plus_STR_OUT(local5, SIG_str_STR(am_5073->sig_6));
OUT_plus_STR(local6, ((STR) &name_5079));
AM_OUT_AM_ROUT_D(((AM_OUT) NULL), am_5073);
local7 = OUT_create_OUT(((OUT) NULL));
OUT_plus_STR(local7, ((STR) &name_5080));
}
if ((!(self->prog->err_seen))) {
PROG_output_am_r(self->prog, am_5073);
}
}
ELT ELT_TBL_elt_with(ELT_TBL self, SIG s_5081) {
ELT noname5082;
ELT_TBL noname5083;
IDENT noname5084 = IDENT_zero;
ELT r_5085;
ELT local0;
if (!((!((s_5081==((SIG) NULL)))))) {
fprintf(stderr,"Violation of precondition ./elt.sa:209:15\n");
exit(16);
}
{
struct ELT_TBL_get_quer_frame_struct temp5086_0;
ELT_TBL_get_quer_frame
noname5087 = &temp5086_0;
noname5087->state = 0;
while (1) {
if (noname5087->state == 0) {
noname5083 = self;
noname5084 = s_5081->name_19;
noname5087->arg0 = noname5083;
noname5087->arg1 = noname5084;
}
local0 = ELT_TBL_get_quer(noname5087);
if (noname5087->state == -1) goto after_loop;
r_5085 = local0;
if (SIG_is_eq_SIG_BOOL(s_5081, r_5085->sig_6)) {
return r_5085;
}
}
}
after_loop: ;
return ((ELT) NULL);
if (!ELT_TBL_invarian(self)) {
fprintf(stderr,"Failed invariant ELT_TBL::invariant:BOOL ./elt.sa:209:15\n");
exit(16);
}
}
PROG ELT_prog_PROG(ELT self) {
PROG noname5088;
if (!((!((self==((ELT) NULL)))))) {
fprintf(stderr,"Violation of precondition ./elt.sa:43:7\n");
exit(16);
}
return self->con->prog;
}
TP ELT_tp_TP(ELT self) {
TP noname5089;
BOOL local0;
if ((!((self==((ELT) NULL))))) {
local0 = (!((self->sig_6==((SIG) NULL))));
} else {
local0 = FALSE;
}
if (!(local0)) {
fprintf(stderr,"Violation of precondition ./elt.sa:58:5\n");
exit(16);
}
return self->sig_6->tp;
}
IMPL ELT_impl_IMPL(ELT self) {
IMPL noname5090;
IMPL r_5091;
IMPL_TBL local0;
OUT local1;
OUT local2;
OUT local3;
if (!((!((self==((ELT) NULL)))))) {
fprintf(stderr,"Violation of precondition ./elt.sa:63:7\n");
exit(16);
}
local0 = ELT_prog_PROG(self)->impl_tbl;
r_5091 = IMPL_TBL_impl_of(local0, ELT_tp_TP(self));
if ((r_5091==((IMPL) NULL))) {
local1 = OUT_create_OUT(((OUT) NULL));
local2 = OUT_plus_STR_OUT(local1, ((STR) &CompilererrorELT));
local3 = OUT_plus_STR_OUT(local2, SIG_str_STR(self->sig_6));
OUT_plus_STR(local3, ((STR) &returnsvoid));
return ((IMPL) NULL);
}
return r_5091;
}
TRANS TRANS_create_ELT(TRANS self, ELT e_5092) {
TRANS noname5093;
TRANS r_5094;
TRANS local0;
BOOL local1;
if (!((!((e_5092==((ELT) NULL)))))) {
fprintf(stderr,"Violation of precondition ./trans.sa:35:9\n");
exit(16);
}
local0 = ((TRANS) sbi_alloc(sizeof(struct TRANS_struct), TRANS_tag));
r_5094 = local0;
r_5094->prog = ELT_prog_PROG(e_5092);
r_5094->impl = ELT_impl_IMPL(e_5092);
r_5094->tp_con = e_5092->con;
if ((r_5094->impl==((IMPL) NULL))) {
local1 = TRUE;
} else {
local1 = (r_5094->tp_con==((TP_CONTEXT) NULL));
}
if (local1) {
return ((TRANS) NULL);
}
return r_5094;
}
AM_LOCAL_EXPR AM_LOCAL_EXPR_cr(AM_LOCAL_EXPR self, SFILE_ID src_5095, IDENT name_5096, TP tp_5097) {
AM_LOCAL_EXPR noname5098;
AM_LOCAL_EXPR r_5099;
AM_LOCAL_EXPR local0;
local0 = ((AM_LOCAL_EXPR) sbi_alloc(sizeof(struct AM_LOCAL_EXPR_struct), AM_LOCAL_EXPR_tag));
r_5099 = local0;
r_5099->source_38 = src_5095;
r_5099->name_19 = name_5096;
r_5099->tp_at = tp_5097;
return r_5099;
}
void AM_ROUT_DEF_aset(AM_ROUT_DEF self, INT ind_5100, AM_LOCAL_EXPR val_5101) {
BOOL local0;
INT local1;
INT local2;
if ((!((self==((AM_ROUT_DEF) NULL))))) {
local1 = 0;
local2 = (self->asize);
local0 = INT_is_bet_INT_I(ind_5100, local1, (c_INT_minus_INT_INT_chk(local2,1)));
} else {
local0 = FALSE;
}
if (!(local0)) {
fprintf(stderr,"Violation of precondition ../Library/aref.sa:38:7\n");
exit(16);
}
if (ind_5100<0||ind_5100>=self->asize) {
fprintf(stderr,"Index out of bounds ../Library/aref.sa:38:7\n");
exit(16);
}
self->arr_part[ind_5100] = val_5101;
}
INT FMAPTPFMAPIDENTA_5102(FMAPTPFMAPIDENTA self, TP k) {
INT noname5103 = ((INT) 0);
HASH local0;
if (k==NULL) {
} else
switch (k->header.tag) {
case TUPIMPL_INCLUDEI_tag:
case TUPAM_BND_CREATE_tag:
case TUPIFCIFC_tag:
case TUPSTRITER_INLINE_tag:
case TUPAM_GLOBAL_EXP_tag:
case FSTR_tag:
case TUPSIGSIG_tag:
case CHAR_tag:
case INT_tag:
case TUPTP_CLASSFSETTP_tag:
case TUPSTRSTR_tag:
case TUPINTINTINT_tag:
case STR_tag:
case TUPSFILE_IDSFILE_ID_tag:
case TUPAM_ITER_CALL__tag:
case TUPTR_EXPRTR_EXPR_tag:
case TUPTPFMAPIDENTAM_tag:
case TUPARRAYTPTP_tag:
case TUPAM_CONSTAM_CONST_tag:
case TUPSTRTUPSTRSTR_tag:
case TUPTPIMPL_tag:
case TUPSIGAM_ROUT_DEF_tag:
case TUPARRAYTPARRAYB_tag:
case TUPIDENTAM_GLOBA_tag:
case TUPAM_BND_ITER_C_tag:
case TUPAM_LOCAL_EXPR_tag:
case TUPSTRFSETSTR_tag:
case TUPAM_ROUT_DEFAM_tag:
case TUPTPTP_tag:
case IDENT_tag:
case TUPTPINT_tag:
case TUPIDENTINT_tag:
case TUPIDENTIDENT_tag:
case TUPTP_CLASSFSETT_tag:
case TUPCHARCHAR_tag:
case TUPIDENTTP_tag:
case TUPIDENTARRAYTP_tag:
case TUPAM_EXPRAM_EXPR_tag:
case TUPTPIFC_tag:
case TUPTP_CLASSTP_CLASS_tag:
case TUPAM_STMTAM_STMT_tag:
case TUPINTINT_tag:
case TUPOBSTR_tag:
case TUPFLISTAM_CONST_tag:
case TUPAM_EXPRTP_tag:
case TUPBOOLINTIINTBOOL_tag:
local0 = ((HASH) k);
return (*HASH_hash_INT[local0->header.tag+HASH_hash_INT_offset])(local0); break;
default: ;
}
return (c_SYS_id_OB_INT(((SYS) NULL),((OB) k)));
if (!FMAPTPFMAPIDENTA_5104(self)) {
fprintf(stderr,"Failed invariant FMAP{$TP,FMAP{IDENT,AM_GLOBAL_EXPR}}::invariant:BOOL ../Library/fmap.sa:64:11\n");
exit(16);
}
}
INT FMAPTPFMAPIDENTA_5105(FMAPTPFMAPIDENTA self) {
INT noname5106 = ((INT) 0);
return self->asize;
fprintf(stderr,"Last statement wasn't return ../Library/aref.sa:20:8\n");
exit(16);
}
TUPTPFMAPIDENTAM FMAPTPFMAPIDENTA_5107(FMAPTPFMAPIDENTA self, INT ind_5108) {
TUPTPFMAPIDENTAM noname5109 = TUPTPFMAPIDENTAM_zero;
BOOL local0;
INT local1;
INT local2;
if ((!((self==((FMAPTPFMAPIDENTA) NULL))))) {
local1 = 0;
local2 = (self->asize);
local0 = INT_is_bet_INT_I(ind_5108, local1, (c_INT_minus_INT_INT_chk(local2,1)));
} else {
local0 = FALSE;
}
if (!(local0)) {
fprintf(stderr,"Violation of precondition ../Library/aref.sa:33:7\n");
exit(16);
}
if (ind_5108<0||ind_5108>=self->asize) {
fprintf(stderr,"Index out of bounds ../Library/aref.sa:33:7\n");
exit(16);
}
return self->arr_part[ind_5108];
}
BOOL FMAPTPFMAPIDENTA_5110(FMAPTPFMAPIDENTA self, TP k1, TP k2) {
BOOL noname5111 = ((BOOL) 0);
if (k1==NULL) {
} else
switch (k1->header.tag) {
default: ;
}
return c_SYS_ob_eq_OB_OB_BOOL(((OB) k1),((OB) k2));
if (!FMAPTPFMAPIDENTA_5104(self)) {
fprintf(stderr,"Failed invariant FMAP{$TP,FMAP{IDENT,AM_GLOBAL_EXPR}}::invariant:BOOL ../Library/fmap.sa:44:9\n");
exit(16);
}
}
TP FMAPTPFMAPIDENTA_5112(FMAPTPFMAPIDENTA self) {
TP noname5113;
TP k = ((TP) NULL);
if (k==NULL) {
} else
switch (k->header.tag) {
default: ;
}
return ((TP) NULL);
if (!FMAPTPFMAPIDENTA_5104(self)) {
fprintf(stderr,"Failed invariant FMAP{$TP,FMAP{IDENT,AM_GLOBAL_EXPR}}::invariant:BOOL ../Library/fmap.sa:54:10\n");
exit(16);
}
}
FMAPIDENTAM_GLOB FMAPTPFMAPIDENTA_5114(FMAPTPFMAPIDENTA self, TP k) {
FMAPIDENTAM_GLOB noname5115;
INT h = ((INT) 0);
TP tk;
TP tk_5116;
INT local0;
INT local1;
INT local2;
INT local3;
if ((self==((FMAPTPFMAPIDENTA) NULL))) {
return ((FMAPIDENTAM_GLOB) NULL);
}
local0 = FMAPTPFMAPIDENTA_5102(self, k);
local1 = (self->asize);
h = (local0&(c_INT_minus_INT_INT_chk(local1,2)));
while (1) {
tk = (TUPTPFMAPIDENTAM_blob=FMAPTPFMAPIDENTA_5107(self, h)).t1;
if (FMAPTPFMAPIDENTA_5110(self, tk, k)) {
return (TUPTPFMAPIDENTAM_blob=FMAPTPFMAPIDENTA_5107(self, h)).t2;
}
else {
if (FMAPTPFMAPIDENTA_5110(self, tk, FMAPTPFMAPIDENTA_5112(self))) {
goto after_loop;
}
}
h = (c_INT_plus_INT_INT_chk(h,1));
}
after_loop: ;
local2 = (self->asize);
if ((h==(c_INT_minus_INT_INT_chk(local2,1)))) {
h = 0;
while (1) {
tk_5116 = (TUPTPFMAPIDENTAM_blob=FMAPTPFMAPIDENTA_5107(self, h)).t1;
if (FMAPTPFMAPIDENTA_5110(self, tk_5116, k)) {
return (TUPTPFMAPIDENTAM_blob=FMAPTPFMAPIDENTA_5107(self, h)).t2;
}
else {
if (FMAPTPFMAPIDENTA_5110(self, tk_5116, FMAPTPFMAPIDENTA_5112(self))) {
goto after_loop_5118;
}
}
h = (c_INT_plus_INT_INT_chk(h,1));
}
after_loop_5118: ;
local3 = (self->asize);
if (!((h!=(c_INT_minus_INT_INT_chk(local3,1))))) {
fprintf(stderr,"Violation of assertion ../Library/fmap.sa:150:15\n");
exit(16);
}
}
return ((FMAPIDENTAM_GLOB) NULL);
if (!FMAPTPFMAPIDENTA_5104(self)) {
fprintf(stderr,"Failed invariant FMAP{$TP,FMAP{IDENT,AM_GLOBAL_EXPR}}::invariant:BOOL ../Library/fmap.sa:136:6\n");
exit(16);
}
}
INT FMAPIDENTAM_GLOB_5120(FMAPIDENTAM_GLOB self, IDENT k) {
INT noname5121 = ((INT) 0);
OB local0;
return IDENT_hash_INT(k);
local0 = (OB)((IDENT_boxed) sbi_alloc(sizeof(struct IDENT_boxed_struct), IDENT_tag));
((IDENT_boxed) local0)->value_part = k;
return (c_SYS_id_OB_INT(((SYS) NULL),local0));
if (!FMAPIDENTAM_GLOB_5122(self)) {
fprintf(stderr,"Failed invariant FMAP{IDENT,AM_GLOBAL_EXPR}::invariant:BOOL ../Library/fmap.sa:64:11\n");
exit(16);
}
}
INT FMAPIDENTAM_GLOB_5123(FMAPIDENTAM_GLOB self) {
INT noname5124 = ((INT) 0);
return self->asize;
fprintf(stderr,"Last statement wasn't return ../Library/aref.sa:20:8\n");
exit(16);
}
TUPIDENTAM_GLOBA FMAPIDENTAM_GLOB_5125(FMAPIDENTAM_GLOB self, INT ind_5126) {
TUPIDENTAM_GLOBA noname5127 = TUPIDENTAM_GLOBA_zero;
BOOL local0;
INT local1;
INT local2;
if ((!((self==((FMAPIDENTAM_GLOB) NULL))))) {
local1 = 0;
local2 = (self->asize);
local0 = INT_is_bet_INT_I(ind_5126, local1, (c_INT_minus_INT_INT_chk(local2,1)));
} else {
local0 = FALSE;
}
if (!(local0)) {
fprintf(stderr,"Violation of precondition ../Library/aref.sa:33:7\n");
exit(16);
}
if (ind_5126<0||ind_5126>=self->asize) {
fprintf(stderr,"Index out of bounds ../Library/aref.sa:33:7\n");
exit(16);
}
return self->arr_part[ind_5126];
}
BOOL FMAPIDENTAM_GLOB_5128(FMAPIDENTAM_GLOB self, IDENT k1, IDENT k2) {
BOOL noname5129 = ((BOOL) 0);
OB local0;
OB local1;
return IDENT_is_eq_IDEN(k1, k2);
local0 = (OB)((IDENT_boxed) sbi_alloc(sizeof(struct IDENT_boxed_struct), IDENT_tag));
((IDENT_boxed) local0)->value_part = k1;
local1 = (OB)((IDENT_boxed) sbi_alloc(sizeof(struct IDENT_boxed_struct), IDENT_tag));
((IDENT_boxed) local1)->value_part = k2;
return c_SYS_ob_eq_OB_OB_BOOL(local0,local1);
if (!FMAPIDENTAM_GLOB_5122(self)) {
fprintf(stderr,"Failed invariant FMAP{IDENT,AM_GLOBAL_EXPR}::invariant:BOOL ../Library/fmap.sa:44:9\n");
exit(16);
}
}
IDENT FMAPIDENTAM_GLOB_5130(FMAPIDENTAM_GLOB self) {
IDENT noname5131 = IDENT_zero;
IDENT k = IDENT_zero;
return IDENT_zero;
if (!FMAPIDENTAM_GLOB_5122(self)) {
fprintf(stderr,"Failed invariant FMAP{IDENT,AM_GLOBAL_EXPR}::invariant:BOOL ../Library/fmap.sa:54:10\n");
exit(16);
}
}
AM_GLOBAL_EXPR FMAPIDENTAM_GLOB_5132(FMAPIDENTAM_GLOB self, IDENT k) {
AM_GLOBAL_EXPR noname5133;
INT h = ((INT) 0);
IDENT tk = IDENT_zero;
IDENT tk_5134 = IDENT_zero;
INT local0;
INT local1;
INT local2;
INT local3;
if ((self==((FMAPIDENTAM_GLOB) NULL))) {
return ((AM_GLOBAL_EXPR) NULL);
}
local0 = FMAPIDENTAM_GLOB_5120(self, k);
local1 = (self->asize);
h = (local0&(c_INT_minus_INT_INT_chk(local1,2)));
while (1) {
tk = (TUPIDENTAM_GLOBA_blob=FMAPIDENTAM_GLOB_5125(self, h)).t1;
if (FMAPIDENTAM_GLOB_5128(self, tk, k)) {
return (TUPIDENTAM_GLOBA_blob=FMAPIDENTAM_GLOB_5125(self, h)).t2;
}
else {
if (FMAPIDENTAM_GLOB_5128(self, tk, FMAPIDENTAM_GLOB_5130(self))) {
goto after_loop;
}
}
h = (c_INT_plus_INT_INT_chk(h,1));
}
after_loop: ;
local2 = (self->asize);
if ((h==(c_INT_minus_INT_INT_chk(local2,1)))) {
h = 0;
while (1) {
tk_5134 = (TUPIDENTAM_GLOBA_blob=FMAPIDENTAM_GLOB_5125(self, h)).t1;
if (FMAPIDENTAM_GLOB_5128(self, tk_5134, k)) {
return (TUPIDENTAM_GLOBA_blob=FMAPIDENTAM_GLOB_5125(self, h)).t2;
}
else {
if (FMAPIDENTAM_GLOB_5128(self, tk_5134, FMAPIDENTAM_GLOB_5130(self))) {
goto after_loop_5136;
}
}
h = (c_INT_plus_INT_INT_chk(h,1));
}
after_loop_5136: ;
local3 = (self->asize);
if (!((h!=(c_INT_minus_INT_INT_chk(local3,1))))) {
fprintf(stderr,"Violation of assertion ../Library/fmap.sa:150:15\n");
exit(16);
}
}
return ((AM_GLOBAL_EXPR) NULL);
if (!FMAPIDENTAM_GLOB_5122(self)) {
fprintf(stderr,"Failed invariant FMAP{IDENT,AM_GLOBAL_EXPR}::invariant:BOOL ../Library/fmap.sa:136:6\n");
exit(16);
}
}
AM_GLOBAL_EXPR GLOBAL_TBL_get_I(GLOBAL_TBL self, IDENT name_5138, TP tp_5139) {
AM_GLOBAL_EXPR noname5140;
FMAPIDENTAM_GLOB m;
m = FMAPTPFMAPIDENTA_5114(self->tbl, tp_5139);
if ((!((m==((FMAPIDENTAM_GLOB) NULL))))) {
return FMAPIDENTAM_GLOB_5132(m, name_5138);
}
return ((AM_GLOBAL_EXPR) NULL);
}
AM_GLOBAL_EXPR AM_GLOBAL_EXPR_c(AM_GLOBAL_EXPR self, SFILE_ID source_5141) {
AM_GLOBAL_EXPR noname5142;
AM_GLOBAL_EXPR r_5143;
AM_GLOBAL_EXPR local0;
local0 = ((AM_GLOBAL_EXPR) sbi_alloc(sizeof(struct AM_GLOBAL_EXPR_struct), AM_GLOBAL_EXPR_tag));
r_5143 = local0;
r_5143->source_38 = source_5141;
return r_5143;
}
TP ELT_ret_TP(ELT self) {
TP noname5144;
if (!((!((self==((ELT) NULL)))))) {
fprintf(stderr,"Violation of precondition ./elt.sa:53:6\n");
exit(16);
}
return self->sig_6->ret;
}
void TRANS_self_const(TRANS self, TR_SELF_EXPR e_5145) {
PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5145));
PROG_err_STR(self->prog, ((STR) &selfmaynotappear));
}
AM_LOCAL_EXPR AM_ROUT_DEF_self(AM_ROUT_DEF self) {
AM_LOCAL_EXPR noname5146;
return AM_ROUT_DEF_aget(self, 0);
}
void TRANS_self_conte(TRANS self, TR_SELF_EXPR e_5147, TP stp, TP tp_5148) {
PROG local0;
STR local1;
TP local2;
STR local3;
STR local4;
TP local5;
STR local6;
PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5147));
local0 = self->prog;
local1 = ((STR) &Thetypeofself);
local2 = stp;
local3 = STR_plus_STR_STR(local1, (*TP_str_STR[local2->header.tag+TP_str_STR_offset])(local2));
local4 = STR_plus_STR_STR(local3, ((STR) &isnotasubtypeof));
local5 = tp_5148;
local6 = STR_plus_STR_STR(local4, (*TP_str_STR[local5->header.tag+TP_str_STR_offset])(local5));
PROG_err_STR(local0, STR_plus_STR_STR(local6, ((STR) &name_5149)));
}
AM_EXPR TRANS_transform_(TRANS self, TR_SELF_EXPR e_5150, TP tp_5151) {
AM_EXPR noname5152;
AM_LOCAL_EXPR sl;
TP local0;
if (self->in_constant) {
TRANS_self_const(self, e_5150);
return ((AM_EXPR) NULL);
}
sl = AM_ROUT_DEF_self(self->cur_rout);
if ((!((tp_5151==((TP) NULL))))) {
local0 = sl->tp_at;
if ((!((*TP_is_subtype_TP[local0->header.tag+TP_is_subtype_TP_offset])(local0, tp_5151)))) {
TRANS_self_conte(self, e_5150, sl->tp_at, tp_5151);
return ((AM_EXPR) NULL);
}
}
return ((AM_EXPR) sl);
}
AM_LOCAL_EXPR TRANS_local_with(TRANS self, IDENT n_5153) {
AM_LOCAL_EXPR noname5154;
AM_ROUT_DEF noname5155;
AM_LOCAL_EXPR r_5156;
FLISTAM_LOCAL_EXPR noname5157;
AM_LOCAL_EXPR r_5158;
AM_LOCAL_EXPR local0;
OUT local1;
AM_LOCAL_EXPR local2;
OUT local3;
if (!((!((self->cur_rout==((AM_ROUT_DEF) NULL)))))) {
fprintf(stderr,"Violation of precondition ./trans.sa:48:18\n");
exit(16);
}
{
struct AM_ROUT_DEF_elt__frame_struct temp5159_0;
AM_ROUT_DEF_elt__frame
noname5160 = &temp5159_0;
noname5160->state = 0;
while (1) {
if (noname5160->state == 0) {
noname5155 = self->cur_rout;
noname5160->arg0 = noname5155;
}
local0 = AM_ROUT_DEF_elt_(noname5160);
if (noname5160->state == -1) goto after_loop;
r_5156 = local0;
if ((r_5156==((AM_LOCAL_EXPR) NULL))) {
local1 = OUT_create_OUT(((OUT) NULL));
OUT_plus_STR(local1, ((STR) &CompilererrorTRA));
return ((AM_LOCAL_EXPR) NULL);
}
if (IDENT_is_eq_IDEN(r_5156->name_19, n_5153)) {
return r_5156;
}
}
}
after_loop: ;
{
struct FLISTAM_LOCAL_EX_4237_frame_struct temp5162_0;
FLISTAM_LOCAL_EX_4237_frame
noname5163 = &temp5162_0;
noname5163->state = 0;
while (1) {
if (noname5163->state == 0) {
noname5157 = self->active_locals;
noname5163->arg0 = noname5157;
}
local2 = FLISTAM_LOCAL_EX_4237(noname5163);
if (noname5163->state == -1) goto after_loop_5161;
r_5158 = local2;
if ((r_5158==((AM_LOCAL_EXPR) NULL))) {
local3 = OUT_create_OUT(((OUT) NULL));
OUT_plus_STR(local3, ((STR) &CompilererrorTRA_5164));
return ((AM_LOCAL_EXPR) NULL);
}
if (IDENT_is_eq_IDEN(r_5158->name_19, n_5153)) {
return r_5158;
}
}
}
after_loop_5161: ;
return ((AM_LOCAL_EXPR) NULL);
}
void TRANS_call_local(TRANS self, TR_CALL_EXPR e_5165, TP stp, TP tp_5166) {
PROG local0;
STR local1;
TP local2;
STR local3;
STR local4;
TP local5;
STR local6;
PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5165));
local0 = self->prog;
local1 = ((STR) &Thetypeofthisloc);
local2 = stp;
local3 = STR_plus_STR_STR(local1, (*TP_str_STR[local2->header.tag+TP_str_STR_offset])(local2));
local4 = STR_plus_STR_STR(local3, ((STR) &isnotasubtypeof_5167));
local5 = tp_5166;
local6 = STR_plus_STR_STR(local4, (*TP_str_STR[local5->header.tag+TP_str_STR_offset])(local5));
PROG_err_STR(local0, STR_plus_STR_STR(local6, ((STR) &name_5168)));
}
AM_LOCAL_EXPR TRANS_call_expr_(TRANS self, TR_CALL_EXPR e_5169, TP tp_5170) {
AM_LOCAL_EXPR noname5171;
TR_EXPR self_tr;
AM_LOCAL_EXPR r_5172 = ((AM_LOCAL_EXPR) NULL);
BOOL local0;
BOOL local1;
BOOL local2;
TP local3;
if (self->in_constant) {
return ((AM_LOCAL_EXPR) NULL);
}
if ((e_5169==((TR_CALL_EXPR) NULL))) {
PROG_err_STR(self->prog, ((STR) &CompilererrorTRA_5173));
return ((AM_LOCAL_EXPR) NULL);
}
self_tr = e_5169->ob;
if ((self_tr==((TR_EXPR) NULL))) {
local2 = (e_5169->tp==((TR_TYPE_SPEC) NULL));
} else {
local2 = FALSE;
}
if (local2) {
local1 = (e_5169->args_7==((TR_EXPR) NULL));
} else {
local1 = FALSE;
}
if (local1) {
local0 = ((e_5169->is_array)==(FALSE));
} else {
local0 = FALSE;
}
if (local0) {
r_5172 = TRANS_local_with(self, e_5169->name_19);
if ((!((r_5172==((AM_LOCAL_EXPR) NULL))))) {
if ((!((tp_5170==((TP) NULL))))) {
local3 = r_5172->tp_at;
if ((!((*TP_is_subtype_TP[local3->header.tag+TP_is_subtype_TP_offset])(local3, tp_5170)))) {
TRANS_call_local(self, e_5169, r_5172->tp_at, tp_5170);
return ((AM_LOCAL_EXPR) NULL);
}
}
}
}
return r_5172;
}
void TRANS_call_self_(TRANS self, TR_CALL_EXPR e_5174) {
PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5174));
PROG_err_STR(self->prog, ((STR) &Callsmaynotbemad));
}
void TRANS_call_self__5175(TRANS self, TR_CALL_EXPR e_5176) {
PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5176));
PROG_err_STR(self->prog, ((STR) &Callsmaynotbemad_5177));
}
TUPAM_EXPRTP TUPAM_EXPRTP_t1_(TUPAM_EXPRTP self, AM_EXPR t1_5178) {
TUPAM_EXPRTP local0;
local0 = self;
local0.t1 = t1_5178;
return local0;
}
TUPAM_EXPRTP TUPAM_EXPRTP_t2_(TUPAM_EXPRTP self, TP t2_5179) {
TUPAM_EXPRTP local0;
local0 = self;
local0.t2 = t2_5179;
return local0;
}
TUPAM_EXPRTP TUPAM_EXPRTP_cre(TUPAM_EXPRTP self, AM_EXPR at1, TP at2) {
TUPAM_EXPRTP noname5180 = TUPAM_EXPRTP_zero;
TUPAM_EXPRTP local0;
local0 = TUPAM_EXPRTP_t1_(self, at1);
return TUPAM_EXPRTP_t2_(local0, at2);
}
void TRANS_call_self__5181(TRANS self, TR_CALL_EXPR e_5182) {
PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5182));
PROG_err_STR(self->prog, ((STR) &Callsmaynotbemad_5183));
}
void TRANS_call_self__5184(TRANS self, TR_CALL_EXPR e_5185) {
PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5185));
PROG_err_STR(self->prog, ((STR) &Underscoreargume));
}
AM_VOID_CONST AM_VOID_CONST_cr(AM_VOID_CONST self, SFILE_ID source_5186) {
AM_VOID_CONST noname5187;
AM_VOID_CONST r_5188;
AM_VOID_CONST local0;
local0 = ((AM_VOID_CONST) sbi_alloc(sizeof(struct AM_VOID_CONST_struct), AM_VOID_CONST_tag));
r_5188 = local0;
r_5188->source_38 = source_5186;
return r_5188;
}
TP TRANS_tp_of_TR_T(TRANS self, TR_TYPE_SPEC t_5189) {
TP noname5190;
if (!((!((t_5189==((TR_TYPE_SPEC) NULL)))))) {
fprintf(stderr,"Violation of precondition ./trans.sa:71:8\n");
exit(16);
}
return TP_CONTEXT_tp_of(self->tp_con, t_5189);
}
TUPAM_EXPRTP TRANS_call_self__5191(TRANS self, TR_CALL_EXPR e_5192) {
TUPAM_EXPRTP noname5193 = TUPAM_EXPRTP_zero;
TR_EXPR self_tr;
AM_EXPR self_val;
AM_EXPR self_val_5194;
AM_EXPR self_val_5195;
AM_VOID_CONST av;
AM_EXPR self_val_5196 = ((AM_EXPR) NULL);
AM_VOID_CONST av_5197;
TUPAM_EXPRTP local0;
AM_EXPR local1;
TUPAM_EXPRTP local2;
AM_EXPR local3;
TUPAM_EXPRTP local4;
AM_EXPR local5;
OUT local6;
TUPAM_EXPRTP local7;
AM_EXPR local8;
if (!((!((e_5192==((TR_CALL_EXPR) NULL)))))) {
fprintf(stderr,"Violation of precondition ./trans.sa:1163:12\n");
exit(16);
}
self_tr = e_5192->ob;
if ((!((self_tr==((TR_EXPR) NULL))))) {
if (self_tr==NULL) {
self_val_5195 = TRANS_transform__5198(self, self_tr, ((TP) NULL));
if ((self_val_5195==((AM_EXPR) NULL))) {
return TUPAM_EXPRTP_zero;
}
local0 = TUPAM_EXPRTP_zero;
local1 = self_val_5195;
return TUPAM_EXPRTP_cre(local0, self_val_5195, (*AM_EXPR_tp_TP[local1->header.tag+AM_EXPR_tp_TP_offset])(local1));
} else
switch (self_tr->header.tag) {
case TR_VOID_EXPR_tag:
TRANS_call_self_(self, e_5192);
return TUPAM_EXPRTP_zero; break;
case TR_CREATE_EXPR_tag:
if ((((TR_CREATE_EXPR) self_tr)->tp==((TR_TYPE_SPEC) NULL))) {
TRANS_call_self__5175(self, e_5192);
return TUPAM_EXPRTP_zero;
}
else {
self_val = TRANS_transform__5198(self, self_tr, ((TP) NULL));
if ((self_val==((AM_EXPR) NULL))) {
return TUPAM_EXPRTP_zero;
}
local2 = TUPAM_EXPRTP_zero;
local3 = self_val;
return TUPAM_EXPRTP_cre(local2, self_val, (*AM_EXPR_tp_TP[local3->header.tag+AM_EXPR_tp_TP_offset])(local3));
} break;
case TR_ARRAY_EXPR_tag:
TRANS_call_self__5181(self, e_5192);
return TUPAM_EXPRTP_zero; break;
case TR_UNDERSCORE_ARG_tag:
TRANS_call_self__5184(self, e_5192);
return TUPAM_EXPRTP_zero; break;
default: ;
self_val_5194 = TRANS_transform__5198(self, self_tr, ((TP) NULL));
if ((self_val_5194==((AM_EXPR) NULL))) {
return TUPAM_EXPRTP_zero;
}
local4 = TUPAM_EXPRTP_zero;
local5 = self_val_5194;
return TUPAM_EXPRTP_cre(local4, self_val_5194, (*AM_EXPR_tp_TP[local5->header.tag+AM_EXPR_tp_TP_offset])(local5));
}
}
else {
if ((!((e_5192->tp==((TR_TYPE_SPEC) NULL))))) {
av = AM_VOID_CONST_cr(((AM_VOID_CONST) NULL), e_5192->source_38);
av->tp_at = TRANS_tp_of_TR_T(self, e_5192->tp);
return TUPAM_EXPRTP_cre(TUPAM_EXPRTP_zero, ((AM_EXPR) av), av->tp_at);
}
}
if (self->in_constant) {
av_5197 = AM_VOID_CONST_cr(((AM_VOID_CONST) NULL), e_5192->source_38);
av_5197->tp_at = ((TP) self->tp_con->same_34);
self_val_5196 = ((AM_EXPR) av_5197);
}
else {
self_val_5196 = ((AM_EXPR) AM_ROUT_DEF_self(self->cur_rout));
}
if ((self_val_5196==((AM_EXPR) NULL))) {
local6 = OUT_create_OUT(((OUT) NULL));
OUT_plus_STR(local6, ((STR) &CompilererrorTRA_5199));
return TUPAM_EXPRTP_zero;
}
local7 = TUPAM_EXPRTP_zero;
local8 = self_val_5196;
return TUPAM_EXPRTP_cre(local7, self_val_5196, (*AM_EXPR_tp_TP[local8->header.tag+AM_EXPR_tp_TP_offset])(local8));
}
CALL_SIG CALL_SIG_create_(CALL_SIG self) {
CALL_SIG noname5200;
CALL_SIG local0;
local0 = ((CALL_SIG) sbi_alloc(sizeof(struct CALL_SIG_struct), CALL_SIG_tag));
return local0;
}
IDENT TRANS_call_expr__5201(TRANS self, TR_CALL_EXPR e_5202) {
IDENT noname5203 = IDENT_zero;
if (!((!((e_5202==((TR_CALL_EXPR) NULL)))))) {
fprintf(stderr,"Violation of precondition ./trans.sa:1268:22\n");
exit(16);
}
if (e_5202->is_array) {
return self->prog->ident_builtin->aget_ident;
}
return e_5202->name_19;
}
INT TR_CALL_EXPR_arg(TR_CALL_EXPR self) {
INT noname5204 = ((INT) 0);
TR_EXPR local0;
if ((self->args_7==((TR_EXPR) NULL))) {
return 0;
}
local0 = self->args_7;
return (*TR_EXPR_size_INT[local0->header.tag+TR_EXPR_size_INT_offset])(local0);
}
ARRAYAM_EXPR ARRAYAM_EXPR_cre(ARRAYAM_EXPR self, INT n_5205) {
ARRAYAM_EXPR noname5206;
ARRAYAM_EXPR local0;
if (!((n_5205>=0))) {
fprintf(stderr,"Violation of precondition ../Library/array.sa:56:9\n");
exit(16);
}
local0 = ((ARRAYAM_EXPR) sbi_arr_alloc(sizeof(struct ARRAYAM_EXPR_struct), ARRAYAM_EXPR_tag, sizeof(AM_EXPR) , n_5205));
local0->asize = n_5205;
return local0;
}
ARRAYCALL_TP ARRAYCALL_TP_cre(ARRAYCALL_TP self, INT n_5207) {
ARRAYCALL_TP noname5208;
ARRAYCALL_TP local0;
if (!((n_5207>=0))) {
fprintf(stderr,"Violation of precondition ../Library/array.sa:56:9\n");
exit(16);
}
local0 = ((ARRAYCALL_TP) sbi_arr_alloc(sizeof(struct ARRAYCALL_TP_struct), ARRAYCALL_TP_tag, sizeof(CALL_TP) , n_5207));
local0->asize = n_5207;
return local0;
}
INT ARRAYAM_EXPR_asi(ARRAYAM_EXPR self) {
INT noname5209 = ((INT) 0);
return self->asize;
fprintf(stderr,"Last statement wasn't return ../Library/aref.sa:20:8\n");
exit(16);
}
INT ARRAYAM_EXPR_siz(ARRAYAM_EXPR self) {
INT noname5210 = ((INT) 0);
if ((self==((ARRAYAM_EXPR) NULL))) {
return 0;
}
return (self->asize);
}
INT ARRAYCALL_TP_asi(ARRAYCALL_TP self) {
INT noname5211 = ((INT) 0);
return self->asize;
fprintf(stderr,"Last statement wasn't return ../Library/aref.sa:20:8\n");
exit(16);
}
INT ARRAYCALL_TP_siz(ARRAYCALL_TP self) {
INT noname5212 = ((INT) 0);
if ((self==((ARRAYCALL_TP) NULL))) {
return 0;
}
return (self->asize);
}
void CALL_TP_VOID_cac(CALL_TP_VOID self, CALL_TP_VOID cache_5213) {
shared_CALL_TP_V = cache_5213;
}
CALL_TP_VOID CALL_TP_VOID_cre(CALL_TP_VOID self) {
CALL_TP_VOID noname5214;
CALL_TP_VOID local0;
if ((shared_CALL_TP_V==((CALL_TP_VOID) NULL))) {
local0 = ((CALL_TP_VOID) sbi_alloc_atomic(sizeof(struct CALL_TP_VOID_struct), CALL_TP_VOID_tag));
CALL_TP_VOID_cac(self, local0);
}
return shared_CALL_TP_V;
}
void CALL_TP_CREATE_c(CALL_TP_CREATE self, CALL_TP_CREATE cache_5215) {
shared_CALL_TP_C = cache_5215;
}
CALL_TP_CREATE CALL_TP_CREATE_c_5216(CALL_TP_CREATE self) {
CALL_TP_CREATE noname5217;
CALL_TP_CREATE local0;
if ((shared_CALL_TP_C==((CALL_TP_CREATE) NULL))) {
local0 = ((CALL_TP_CREATE) sbi_alloc_atomic(sizeof(struct CALL_TP_CREATE_struct), CALL_TP_CREATE_tag));
CALL_TP_CREATE_c(self, local0);
}
return shared_CALL_TP_C;
}
void CALL_TP_ARRAY_ca(CALL_TP_ARRAY self, CALL_TP_ARRAY cache_5218) {
shared_CALL_TP_A = cache_5218;
}
CALL_TP_ARRAY CALL_TP_ARRAY_cr(CALL_TP_ARRAY self) {
CALL_TP_ARRAY noname5219;
CALL_TP_ARRAY local0;
if ((shared_CALL_TP_A==((CALL_TP_ARRAY) NULL))) {
local0 = ((CALL_TP_ARRAY) sbi_alloc_atomic(sizeof(struct CALL_TP_ARRAY_struct), CALL_TP_ARRAY_tag));
CALL_TP_ARRAY_ca(self, local0);
}
return shared_CALL_TP_A;
}
CALL_TP_UNDERSCORE CALL_TP_UNDERSCO(CALL_TP_UNDERSCORE self) {
CALL_TP_UNDERSCORE noname5220;
CALL_TP_UNDERSCORE local0;
local0 = ((CALL_TP_UNDERSCORE) sbi_alloc(sizeof(struct CALL_TP_UNDERSCORE_struct), CALL_TP_UNDERSCORE_tag));
return local0;
}
CALL_TP TRANS_call_tp_of(TRANS self, TR_EXPR e_5221) {
CALL_TP noname5222;
CALL_TP_UNDERSCORE tua;
OUT local0;
if ((e_5221==((TR_EXPR) NULL))) {
local0 = OUT_create_OUT(((OUT) NULL));
OUT_plus_STR(local0, ((STR) &CompilererrorTRA_5223));
return ((CALL_TP) NULL);
}
if (e_5221==NULL) {
} else
switch (e_5221->header.tag) {
case TR_VOID_EXPR_tag:
return ((CALL_TP) CALL_TP_VOID_cre(((CALL_TP_VOID) NULL))); break;
case TR_CREATE_EXPR_tag:
if ((((TR_CREATE_EXPR) e_5221)->tp==((TR_TYPE_SPEC) NULL))) {
return ((CALL_TP) CALL_TP_CREATE_c_5216(((CALL_TP_CREATE) NULL)));
}
else {
return ((CALL_TP) NULL);
} break;
case TR_ARRAY_EXPR_tag:
return ((CALL_TP) CALL_TP_ARRAY_cr(((CALL_TP_ARRAY) NULL))); break;
case TR_UNDERSCORE_ARG_tag:
tua = CALL_TP_UNDERSCO(((CALL_TP_UNDERSCORE) NULL));
if ((!((((TR_UNDERSCORE_ARG) e_5221)->tp==((TR_TYPE_SPEC) NULL))))) {
tua->tp = TRANS_tp_of_TR_T(self, ((TR_UNDERSCORE_ARG) e_5221)->tp);
}
return ((CALL_TP) tua); break;
default: ;
}
return ((CALL_TP) NULL);
}
void ARRAYCALL_TP_ase(ARRAYCALL_TP self, INT ind_5224, CALL_TP val_5225) {
BOOL local0;
INT local1;
INT local2;
if ((!((self==((ARRAYCALL_TP) NULL))))) {
local1 = 0;
local2 = (self->asize);
local0 = INT_is_bet_INT_I(ind_5224, local1, (c_INT_minus_INT_INT_chk(local2,1)));
} else {
local0 = FALSE;
}
if (!(local0)) {
fprintf(stderr,"Violation of precondition ../Library/aref.sa:38:7\n");
exit(16);
}
if (ind_5224<0||ind_5224>=self->asize) {
fprintf(stderr,"Index out of bounds ../Library/aref.sa:38:7\n");
exit(16);
}
self->arr_part[ind_5224] = val_5225;
}
void ARRAYAM_EXPR_ase(ARRAYAM_EXPR self, INT ind_5226, AM_EXPR val_5227) {
BOOL local0;
INT local1;
INT local2;
if ((!((self==((ARRAYAM_EXPR) NULL))))) {
local1 = 0;
local2 = (self->asize);
local0 = INT_is_bet_INT_I(ind_5226, local1, (c_INT_minus_INT_INT_chk(local2,1)));
} else {
local0 = FALSE;
}
if (!(local0)) {
fprintf(stderr,"Violation of precondition ../Library/aref.sa:38:7\n");
exit(16);
}
if (ind_5226<0||ind_5226>=self->asize) {
fprintf(stderr,"Index out of bounds ../Library/aref.sa:38:7\n");
exit(16);
}
self->arr_part[ind_5226] = val_5227;
}
PROG CALL_SIG_prog_PROG(CALL_SIG self) {
PROG noname5228;
TP local0;
local0 = self->tp;
return (*TP_prog_PROG[local0->header.tag+TP_prog_PROG_offset])(local0);
}
BOOL CALL_SIG_conform(CALL_SIG self, SIG s_5229) {
BOOL noname5230 = ((BOOL) 0);
ARRAYCALL_TP noname5231;
CALL_TP ca;
ARRAYTP noname5232;
TP sa_5233;
BOOL local0;
TP local1;
INT local2;
CALL_TP local3;
TP local4;
CALL_TP local5;
if ((self==((CALL_SIG) NULL))) {
local0 = TRUE;
} else {
local0 = (s_5229==((SIG) NULL));
}
if (local0) {
return FALSE;
}
local1 = self->tp;
if ((*TP_is_neq_TP_BOOL[local1->header.tag+TP_is_neq_TP_BOOL_offset])(local1, s_5229->tp)) {
return FALSE;
}
if (IDENT_is_neq_IDE(self->name_19, s_5229->name_19)) {
return FALSE;
}
if ((!(self->unknown_ret))) {
if (self->has_ret) {
if ((s_5229->ret==((TP) NULL))) {
return FALSE;
}
}
else {
if ((!((s_5229->ret==((TP) NULL))))) {
return FALSE;
}
}
}
local2 = ARRAYCALL_TP_siz(self->args_7);
if ((local2!=ARRAYTP_size_INT(s_5229->args_7))) {
return FALSE;
}
{
struct ARRAYCALL_TP_elt_frame_struct temp5234_0;
ARRAYCALL_TP_elt_frame
noname5235 = &temp5234_0;
struct ARRAYTP_elt_TP_frame_struct temp5234_1;
ARRAYTP_elt_TP_frame
noname5236 = &temp5234_1;
noname5235->state = 0;
noname5236->state = 0;
while (1) {
if (noname5235->state == 0) {
noname5231 = self->args_7;
noname5235->arg0 = noname5231;
}
local3 = ARRAYCALL_TP_elt(noname5235);
if (noname5235->state == -1) goto after_loop;
ca = local3;
if (noname5236->state == 0) {
noname5232 = s_5229->args_7;
noname5236->arg0 = noname5232;
}
local4 = ARRAYTP_elt_TP(noname5236);
if (noname5236->state == -1) goto after_loop;
sa_5233 = local4;
local5 = ca;
if ((!((*CALL_TP_is_subty[local5->header.tag+CALL_TP_is_subty_offset])(local5, sa_5233)))) {
return FALSE;
}
}
}
after_loop: ;
return TRUE;
}
STR CALL_SIG_str_STR(CALL_SIG self) {
STR noname5237;
FSTR s_5238;
ARRAYCALL_TP noname5239;
STR noname5240;
FSTR local0;
TP local1;
FSTR local2;
FSTR local3;
STR local4;
CALL_TP local5;
CALL_TP local6;
if ((self==((CALL_SIG) NULL))) {
return ((STR) &void_5241);
}
local0 = FSTR_create_FSTR(((FSTR) NULL));
local1 = self->tp;
local2 = FSTR_plus_STR_FSTR(local0, (*TP_str_STR[local1->header.tag+TP_str_STR_offset])(local1));
local3 = FSTR_plus_STR_FSTR(local2, ((STR) &name_5242));
s_5238 = FSTR_plus_STR_FSTR(local3, self->name_19.str_4);
if ((!((self->args_7==((ARRAYCALL_TP) NULL))))) {
s_5238 = FSTR_plus_CHAR_FSTR(s_5238, '(');
{
struct ARRAYCALL_TP_elt_frame_struct temp5243_0;
ARRAYCALL_TP_elt_frame
noname5244 = &temp5243_0;
struct STR_separate_STR_STR_frame_struct temp5243_1;
STR_separate_STR_STR_frame
noname5245 = &temp5243_1;
noname5244->state = 0;
noname5245->state = 0;
while (1) {
if (noname5245->state == 0) {
noname5240 = ((STR) &name_5246);
noname5245->arg0 = noname5240;
}
if (noname5244->state == 0) {
noname5239 = self->args_7;
noname5244->arg0 = noname5239;
}
local5 = ARRAYCALL_TP_elt(noname5244);
if (noname5244->state == -1) goto after_loop;
local6 = local5;
noname5245->arg1 = (*CALL_TP_str_STR[local6->header.tag+CALL_TP_str_STR_offset])(local6);
local4 = STR_separate_STR_STR(noname5245);
if (noname5245->state == -1) goto after_loop;
s_5238 = FSTR_plus_STR_FSTR(s_5238, local4);
}
}
after_loop: ;
s_5238 = FSTR_plus_CHAR_FSTR(s_5238, ')');
}
if (self->unknown_ret) {
s_5238 = FSTR_plus_STR_FSTR(s_5238, ((STR) &name_5247));
}
else {
if (self->has_ret) {
s_5238 = FSTR_plus_STR_FSTR(s_5238, ((STR) &S__5248));
}
}
return FSTR_str_STR(s_5238);
}
SIG IMPL_sig_for_int(IMPL self, CALL_SIG c_5249) {
SIG noname5250;
SIG r_5251 = ((SIG) NULL);
ELT_TBL noname5252;
IDENT noname5253 = IDENT_zero;
SIG s_5254;
ELT local0;
PROG local1;
STR local2;
STR local3;
STR local4;
STR local5;
STR local6;
STR local7;
PROG local8;
STR local9;
STR local10;
if (!((!((c_5249==((CALL_SIG) NULL)))))) {
fprintf(stderr,"Violation of precondition ./impl.sa:48:24\n");
exit(16);
}
{
struct ELT_TBL_get_quer_frame_struct temp5255_0;
ELT_TBL_get_quer_frame
noname5256 = &temp5255_0;
noname5256->state = 0;
while (1) {
if (noname5256->state == 0) {
noname5252 = self->elts;
noname5253 = c_5249->name_19;
noname5256->arg0 = noname5252;
noname5256->arg1 = noname5253;
}
local0 = ELT_TBL_get_quer(noname5256);
if (noname5256->state == -1) goto after_loop;
s_5254 = local0->sig_6;
if (CALL_SIG_conform(c_5249, s_5254)) {
if ((r_5251==((SIG) NULL))) {
r_5251 = s_5254;
}
else {
local1 = CALL_SIG_prog_PROG(c_5249);
local2 = ((STR) &Theinternalcall);
local3 = STR_plus_STR_STR(local2, CALL_SIG_str_STR(c_5249));
local4 = STR_plus_STR_STR(local3, ((STR) &matchesboththefe));
local5 = STR_plus_STR_STR(local4, SIG_str_STR(r_5251));
local6 = STR_plus_STR_STR(local5, ((STR) &and_5257));
local7 = STR_plus_STR_STR(local6, SIG_str_STR(s_5254));
PROG_err_STR(local1, STR_plus_STR_STR(local7, ((STR) &name_5258)));
}
}
}
}
after_loop: ;
if ((r_5251==((SIG) NULL))) {
local8 = CALL_SIG_prog_PROG(c_5249);
local9 = ((STR) &Nomatchfortheint);
local10 = STR_plus_STR_STR(local9, CALL_SIG_str_STR(c_5249));
PROG_err_STR(local8, STR_plus_STR_STR(local10, ((STR) &name_5259)));
}
return r_5251;
}
SIG IFC_sig_for_call(IFC self, CALL_SIG c_5260) {
SIG noname5261;
SIG r_5262 = ((SIG) NULL);
SIG_TBL noname5263;
IDENT noname5264 = IDENT_zero;
SIG s_5265;
BOOL local0;
SIG local1;
BOOL local2;
BOOL local3;
BOOL local4;
BOOL local5;
PROG local6;
STR local7;
STR local8;
STR local9;
STR local10;
STR local11;
STR local12;
PROG local13;
STR local14;
STR local15;
if ((!((self==((IFC) NULL))))) {
local0 = (!((c_5260==((CALL_SIG) NULL))));
} else {
local0 = FALSE;
}
if (!(local0)) {
fprintf(stderr,"Violation of precondition ./ifc.sa:74:15\n");
exit(16);
}
{
struct SIG_TBL_get_quer_frame_struct temp5266_0;
SIG_TBL_get_quer_frame
noname5267 = &temp5266_0;
noname5267->state = 0;
while (1) {
if (noname5267->state == 0) {
noname5263 = self->sigs;
noname5264 = c_5260->name_19;
noname5267->arg0 = noname5263;
noname5267->arg1 = noname5264;
}
local1 = SIG_TBL_get_quer(noname5267);
if (noname5267->state == -1) goto after_loop;
s_5265 = local1;
if (CALL_SIG_conform(c_5260, s_5265)) {
if ((r_5262==((SIG) NULL))) {
r_5262 = s_5265;
}
else {
if (c_5260->unknown_ret) {
local3 = (r_5262->ret==((TP) NULL));
} else {
local3 = FALSE;
}
if (local3) {
local2 = (!((s_5265->ret==((TP) NULL))));
} else {
local2 = FALSE;
}
if (local2) {
}
else {
if (c_5260->unknown_ret) {
local5 = (!((r_5262->ret==((TP) NULL))));
} else {
local5 = FALSE;
}
if (local5) {
local4 = (s_5265->ret==((TP) NULL));
} else {
local4 = FALSE;
}
if (local4) {
r_5262 = s_5265;
}
else {
local6 = CALL_SIG_prog_PROG(c_5260);
local7 = ((STR) &Thecall);
local8 = STR_plus_STR_STR(local7, CALL_SIG_str_STR(c_5260));
local9 = STR_plus_STR_STR(local8, ((STR) &matchesboththefe_5268));
local10 = STR_plus_STR_STR(local9, SIG_str_STR(r_5262));
local11 = STR_plus_STR_STR(local10, ((STR) &and_5269));
local12 = STR_plus_STR_STR(local11, SIG_str_STR(s_5265));
PROG_err_STR(local6, STR_plus_STR_STR(local12, ((STR) &name_5270)));
return ((SIG) NULL);
}
}
}
}
}
}
after_loop: ;
if ((r_5262==((SIG) NULL))) {
local13 = CALL_SIG_prog_PROG(c_5260);
local14 = ((STR) &Nomatchforthecall);
local15 = STR_plus_STR_STR(local14, CALL_SIG_str_STR(c_5260));
PROG_err_STR(local13, STR_plus_STR_STR(local15, ((STR) &name_5271)));
}
return r_5262;
}
SIG CALL_SIG_lookup_(CALL_SIG self, BOOL in_class) {
SIG noname5272;
TP st;
ARRAYCALL_TP noname5273;
CALL_TP at_5274;
ARRAYTP noname5275;
TP brat;
ARRAYCALL_TP noname5276;
CALL_TP at_5277;
ARRAYTP noname5278;
TP brat_5279;
IMPL local0;
IFC local1;
PROG local2;
BOOL local3;
PROG local4;
STR local5;
STR local6;
BOOL local7;
PROG local8;
STR local9;
STR local10;
INT local11;
PROG local12;
STR local13;
STR local14;
STR local15;
STR local16;
CALL_TP local17;
TP local18;
CALL_TP local19;
PROG local20;
STR local21;
CALL_TP local22;
STR local23;
STR local24;
STR local25;
STR local26;
TP local27;
STR local28;
STR local29;
STR local30;
PROG local31;
BOOL local32;
PROG local33;
STR local34;
STR local35;
BOOL local36;
PROG local37;
STR local38;
STR local39;
INT local40;
PROG local41;
STR local42;
STR local43;
STR local44;
STR local45;
CALL_TP local46;
TP local47;
CALL_TP local48;
PROG local49;
STR local50;
CALL_TP local51;
STR local52;
STR local53;
STR local54;
STR local55;
TP local56;
STR local57;
STR local58;
STR local59;
st = self->tp;
if (st==NULL) {
} else
switch (st->header.tag) {
case TP_CLASS_tag:
if (in_class) {
local0 = IMPL_TBL_impl_of(CALL_SIG_prog_PROG(self)->impl_tbl, self->tp);
return IMPL_sig_for_int(local0, self);
}
else {
local1 = IFC_TBL_ifc_of_T(CALL_SIG_prog_PROG(self)->ifc_tbl, self->tp);
return IFC_sig_for_call(local1, self);
} break;
case TP_ROUT_tag:
if (IDENT_is_neq_IDE(self->name_19, CALL_SIG_prog_PROG(self)->ident_builtin->call_ident)) {
local2 = CALL_SIG_prog_PROG(self);
PROG_err_STR(local2, ((STR) &Onlycallmaybeapp));
return ((SIG) NULL);
}
if ((!(self->unknown_ret))) {
if (self->has_ret) {
local3 = (((TP_ROUT) st)->ret==((TP) NULL));
} else {
local3 = FALSE;
}
if (local3) {
local4 = CALL_SIG_prog_PROG(self);
local5 = ((STR) &Theboundroutine);
local6 = STR_plus_STR_STR(local5, TP_ROUT_str_STR(((TP_ROUT) st)));
PROG_err_STR(local4, STR_plus_STR_STR(local6, ((STR) &hasnoreturnvalue)));
return ((SIG) NULL);
}
else {
if ((!(self->has_ret))) {
local7 = (!((((TP_ROUT) st)->ret==((TP) NULL))));
} else {
local7 = FALSE;
}
if (local7) {
local8 = CALL_SIG_prog_PROG(self);
local9 = ((STR) &Theboundroutine_5280);
local10 = STR_plus_STR_STR(local9, TP_ROUT_str_STR(((TP_ROUT) st)));
PROG_err_STR(local8, STR_plus_STR_STR(local10, ((STR) &hasareturnvalueb)));
return ((SIG) NULL);
}
}
}
local11 = ARRAYTP_size_INT(((TP_ROUT) st)->args_7);
if ((local11!=ARRAYCALL_TP_siz(self->args_7))) {
local12 = CALL_SIG_prog_PROG(self);
local13 = ((STR) &Thecall_5281);
local14 = STR_plus_STR_STR(local13, CALL_SIG_str_STR(self));
local15 = STR_plus_STR_STR(local14, ((STR) &hasthewrongnumbe));
local16 = STR_plus_STR_STR(local15, TP_ROUT_str_STR(((TP_ROUT) st)));
PROG_err_STR(local12, STR_plus_STR_STR(local16, ((STR) &name_5282)));
return ((SIG) NULL);
}
{
struct ARRAYCALL_TP_elt_frame_struct temp5283_0;
ARRAYCALL_TP_elt_frame
noname5284 = &temp5283_0;
struct ARRAYTP_elt_TP_frame_struct temp5283_1;
ARRAYTP_elt_TP_frame
noname5285 = &temp5283_1;
noname5284->state = 0;
noname5285->state = 0;
while (1) {
if (noname5284->state == 0) {
noname5273 = self->args_7;
noname5284->arg0 = noname5273;
}
local17 = ARRAYCALL_TP_elt(noname5284);
if (noname5284->state == -1) goto after_loop;
at_5274 = local17;
if (noname5285->state == 0) {
noname5275 = ((TP_ROUT) st)->args_7;
noname5285->arg0 = noname5275;
}
local18 = ARRAYTP_elt_TP(noname5285);
if (noname5285->state == -1) goto after_loop;
brat = local18;
local19 = at_5274;
if ((!((*CALL_TP_is_subty[local19->header.tag+CALL_TP_is_subty_offset])(local19, brat)))) {
local20 = CALL_SIG_prog_PROG(self);
local21 = ((STR) &Theargumenttype);
local22 = at_5274;
local23 = STR_plus_STR_STR(local21, (*CALL_TP_str_STR[local22->header.tag+CALL_TP_str_STR_offset])(local22));
local24 = STR_plus_STR_STR(local23, ((STR) &inthecall));
local25 = STR_plus_STR_STR(local24, CALL_SIG_str_STR(self));
local26 = STR_plus_STR_STR(local25, ((STR) &doesntconformto));
local27 = brat;
local28 = STR_plus_STR_STR(local26, (*TP_str_STR[local27->header.tag+TP_str_STR_offset])(local27));
local29 = STR_plus_STR_STR(local28, ((STR) &intheboundroutine));
local30 = STR_plus_STR_STR(local29, TP_ROUT_str_STR(((TP_ROUT) st)));
PROG_err_STR(local20, STR_plus_STR_STR(local30, ((STR) &name_5286)));
return ((SIG) NULL);
}
}
}
after_loop: ;
return SIG_bound_routin(((SIG) NULL), ((TP_ROUT) st)); break;
case TP_ITER_tag:
if (IDENT_is_neq_IDE(self->name_19, CALL_SIG_prog_PROG(self)->ident_builtin->call_bang_ident)) {
local31 = CALL_SIG_prog_PROG(self);
PROG_err_STR(local31, ((STR) &Onlycallmaybeapp_5287));
return ((SIG) NULL);
}
if ((!(self->unknown_ret))) {
if (self->has_ret) {
local32 = (((TP_ITER) st)->ret==((TP) NULL));
} else {
local32 = FALSE;
}
if (local32) {
local33 = CALL_SIG_prog_PROG(self);
local34 = ((STR) &Thebounditer);
local35 = STR_plus_STR_STR(local34, TP_ITER_str_STR(((TP_ITER) st)));
PROG_err_STR(local33, STR_plus_STR_STR(local35, ((STR) &hasnoreturnvalue_5288)));
return ((SIG) NULL);
}
else {
if ((!(self->has_ret))) {
local36 = (!((((TP_ITER) st)->ret==((TP) NULL))));
} else {
local36 = FALSE;
}
if (local36) {
local37 = CALL_SIG_prog_PROG(self);
local38 = ((STR) &Thebounditer_5289);
local39 = STR_plus_STR_STR(local38, TP_ITER_str_STR(((TP_ITER) st)));
PROG_err_STR(local37, STR_plus_STR_STR(local39, ((STR) &hasareturnvalueb_5290)));
return ((SIG) NULL);
}
}
}
local40 = ARRAYTP_size_INT(((TP_ITER) st)->args_7);
if ((local40!=ARRAYCALL_TP_siz(self->args_7))) {
local41 = CALL_SIG_prog_PROG(self);
local42 = ((STR) &Thecall_5291);
local43 = STR_plus_STR_STR(local42, CALL_SIG_str_STR(self));
local44 = STR_plus_STR_STR(local43, ((STR) &hasthewrongnumbe_5292));
local45 = STR_plus_STR_STR(local44, TP_ITER_str_STR(((TP_ITER) st)));
PROG_err_STR(local41, STR_plus_STR_STR(local45, ((STR) &name_5293)));
return ((SIG) NULL);
}
{
struct ARRAYCALL_TP_elt_frame_struct temp5295_0;
ARRAYCALL_TP_elt_frame
noname5296 = &temp5295_0;
struct ARRAYTP_elt_TP_frame_struct temp5295_1;
ARRAYTP_elt_TP_frame
noname5297 = &temp5295_1;
noname5296->state = 0;
noname5297->state = 0;
while (1) {
if (noname5296->state == 0) {
noname5276 = self->args_7;
noname5296->arg0 = noname5276;
}
local46 = ARRAYCALL_TP_elt(noname5296);
if (noname5296->state == -1) goto after_loop_5294;
at_5277 = local46;
if (noname5297->state == 0) {
noname5278 = ((TP_ITER) st)->args_7;
noname5297->arg0 = noname5278;
}
local47 = ARRAYTP_elt_TP(noname5297);
if (noname5297->state == -1) goto after_loop_5294;
brat_5279 = local47;
local48 = at_5277;
if ((!((*CALL_TP_is_subty[local48->header.tag+CALL_TP_is_subty_offset])(local48, brat_5279)))) {
local49 = CALL_SIG_prog_PROG(self);
local50 = ((STR) &Theargumenttype_5298);
local51 = at_5277;
local52 = STR_plus_STR_STR(local50, (*CALL_TP_str_STR[local51->header.tag+CALL_TP_str_STR_offset])(local51));
local53 = STR_plus_STR_STR(local52, ((STR) &inthecall_5299));
local54 = STR_plus_STR_STR(local53, CALL_SIG_str_STR(self));
local55 = STR_plus_STR_STR(local54, ((STR) &doesntconformto_5300));
local56 = brat_5279;
local57 = STR_plus_STR_STR(local55, (*TP_str_STR[local56->header.tag+TP_str_STR_offset])(local56));
local58 = STR_plus_STR_STR(local57, ((STR) &intheboundroutin_5301));
local59 = STR_plus_STR_STR(local58, TP_ITER_str_STR(((TP_ITER) st)));
PROG_err_STR(local49, STR_plus_STR_STR(local59, ((STR) &name_5302)));
return ((SIG) NULL);
}
}
}
after_loop_5294: ;
return SIG_bound_iter_c(((SIG) NULL), ((TP_ITER) st)); break;
default: ;
fprintf(stderr,"No applicable type in typecase ./call.sa:201:14\n");
exit(16);
}
return ((SIG) NULL);
}
AM_EXPR ARRAYAM_EXPR_age(ARRAYAM_EXPR self, INT ind_5303) {
AM_EXPR noname5304;
BOOL local0;
INT local1;
INT local2;
if ((!((self==((ARRAYAM_EXPR) NULL))))) {
local1 = 0;
local2 = (self->asize);
local0 = INT_is_bet_INT_I(ind_5303, local1, (c_INT_minus_INT_INT_chk(local2,1)));
} else {
local0 = FALSE;
}
if (!(local0)) {
fprintf(stderr,"Violation of precondition ../Library/aref.sa:33:7\n");
exit(16);
}
if (ind_5303<0||ind_5303>=self->asize) {
fprintf(stderr,"Index out of bounds ../Library/aref.sa:33:7\n");
exit(16);
}
return self->arr_part[ind_5303];
}
SIG TRANS_call_expr__5305(TRANS self, TR_CALL_EXPR e_5306, CALL_SIG call_sig, ARRAYAM_EXPR args_5307, BOOL in_class) {
SIG noname5308;
TR_EXPR a_5309;
INT i = ((INT) 0);
AM_EXPR ce = ((AM_EXPR) NULL);
CALL_TP ct;
SIG r_5310;
TP at_5311;
BOOL local0;
INT local1;
INT local2;
AM_EXPR local3;
TR_EXPR local4;
INT local5;
TR_EXPR local6;
if ((args_5307==((ARRAYAM_EXPR) NULL))) {
if ((!((e_5306->args_7==((TR_EXPR) NULL))))) {
PROG_err_STR(self->prog, ((STR) &CompilererrorTRA_5312));
return ((SIG) NULL);
}
}
else {
local1 = ARRAYAM_EXPR_siz(args_5307);
if ((local1!=TR_CALL_EXPR_arg(e_5306))) {
local0 = TRUE;
} else {
local2 = ARRAYCALL_TP_siz(call_sig->args_7);
local0 = (local2!=TR_CALL_EXPR_arg(e_5306));
}
if (local0) {
PROG_err_STR(self->prog, ((STR) &CompilererrorTRA_5313));
return ((SIG) NULL);
}
}
a_5309 = e_5306->args_7;
i = 0;
while (1) {
if ((!((a_5309==((TR_EXPR) NULL))))) {
}
else {
goto after_loop;
}
ct = TRANS_call_tp_of(self, a_5309);
if ((ct==((CALL_TP) NULL))) {
ce = TRANS_transform__5198(self, a_5309, ((TP) NULL));
if ((ce==((AM_EXPR) NULL))) {
return ((SIG) NULL);
}
else {
local3 = ce;
ct = ((CALL_TP) (*AM_EXPR_tp_TP[local3->header.tag+AM_EXPR_tp_TP_offset])(local3));
}
}
else {
ce = ((AM_EXPR) NULL);
}
ARRAYCALL_TP_ase(call_sig->args_7, i, ct);
ARRAYAM_EXPR_ase(args_5307, i, ce);
local4 = a_5309;
a_5309 = (*TR_EXPR_next_TR_EXPR[local4->header.tag+TR_EXPR_next_TR_EXPR_offset])(local4);
i = (c_INT_plus_INT_INT_chk(i,1));
}
after_loop: ;
PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5306));
r_5310 = CALL_SIG_lookup_(call_sig, in_class);
if ((r_5310==((SIG) NULL))) {
return ((SIG) NULL);
}
local5 = ARRAYTP_size_INT(r_5310->args_7);
if ((local5!=TR_CALL_EXPR_arg(e_5306))) {
PROG_err_STR(self->prog, ((STR) &CompilererrorTRA_5315));
return ((SIG) NULL);
}
a_5309 = e_5306->args_7;
i = 0;
while (1) {
if ((!((a_5309==((TR_EXPR) NULL))))) {
}
else {
goto after_loop_5316;
}
ce = ARRAYAM_EXPR_age(args_5307, i);
at_5311 = ARRAYTP_aget_INT_TP(r_5310->args_7, i);
if ((ce==((AM_EXPR) NULL))) {
ce = TRANS_transform__5198(self, a_5309, at_5311);
}
if ((ce==((AM_EXPR) NULL))) {
return ((SIG) NULL);
}
ARRAYAM_EXPR_ase(args_5307, i, ce);
local6 = a_5309;
a_5309 = (*TR_EXPR_next_TR_EXPR[local6->header.tag+TR_EXPR_next_TR_EXPR_offset])(local6);
i = (c_INT_plus_INT_INT_chk(i,1));
}
after_loop_5316: ;
return r_5310;
}
void TRANS_ext_call_c(TRANS self, TR_CALL_EXPR e_5318) {
PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5318));
PROG_err_STR(self->prog, ((STR) &Externalcallsmay));
}
ELT IMPL_elt_with_si(IMPL self, SIG s_5319) {
ELT noname5320;
return ELT_TBL_elt_with(self->elts, s_5319);
}
IDENT TRANS_name_for_e(TRANS self, ELT el) {
IDENT noname5321 = IDENT_zero;
PROG local0;
TP local1;
STR local2;
STR local3;
if (ELT_is_abstract_BOOL(el)) {
return el->sig_6->name_19;
}
local0 = self->prog;
local1 = ELT_tp_TP(el);
local2 = (*TP_str_STR[local1->header.tag+TP_str_STR_offset])(local1);
local3 = STR_plus_CHAR_STR(local2, '_');
return PROG_ident_for_S(local0, STR_plus_STR_STR(local3, el->sig_6->name_19.str_4));
}
AM_EXT_CALL_EXPR AM_EXT_CALL_EXPR_5322(AM_EXT_CALL_EXPR self, INT nargs, SFILE_ID source_5323) {
AM_EXT_CALL_EXPR noname5324;
AM_EXT_CALL_EXPR r_5325;
AM_EXT_CALL_EXPR local0;
local0 = ((AM_EXT_CALL_EXPR) sbi_arr_alloc(sizeof(struct AM_EXT_CALL_EXPR_struct), AM_EXT_CALL_EXPR_tag, sizeof(AM_EXPR) , nargs));
local0->asize = nargs;
r_5325 = local0;
r_5325->source_38 = source_5323;
return r_5325;
}
AM_EXT_CALL_EXPR AM_EXT_CALL_EXPR_5326(AM_EXT_CALL_EXPR self, INT nargs, SFILE_ID source_5327, IDENT nm_5328) {
AM_EXT_CALL_EXPR noname5329;
AM_EXT_CALL_EXPR r_5330;
r_5330 = AM_EXT_CALL_EXPR_5322(self, nargs, source_5327);
r_5330->nm = nm_5328;
return r_5330;
}
void AM_EXT_CALL_EXPR_5331(AM_EXT_CALL_EXPR self, INT ind_5332, AM_EXPR val_5333) {
BOOL local0;
INT local1;
INT local2;
if ((!((self==((AM_EXT_CALL_EXPR) NULL))))) {
local1 = 0;
local2 = (self->asize);
local0 = INT_is_bet_INT_I(ind_5332, local1, (c_INT_minus_INT_INT_chk(local2,1)));
} else {
local0 = FALSE;
}
if (!(local0)) {
fprintf(stderr,"Violation of precondition ../Library/aref.sa:38:7\n");
exit(16);
}
if (ind_5332<0||ind_5332>=self->asize) {
fprintf(stderr,"Index out of bounds ../Library/aref.sa:38:7\n");
exit(16);
}
self->arr_part[ind_5332] = val_5333;
}
AM_ITER_CALL_EXPR AM_ITER_CALL_EXP_5334(AM_ITER_CALL_EXPR self, INT nargs, SFILE_ID source_5335) {
AM_ITER_CALL_EXPR noname5336;
AM_ITER_CALL_EXPR r_5337;
AM_ITER_CALL_EXPR local0;
local0 = ((AM_ITER_CALL_EXPR) sbi_arr_alloc(sizeof(struct AM_ITER_CALL_EXPR_struct), AM_ITER_CALL_EXPR_tag, sizeof(AM_EXPR) , nargs));
local0->asize = nargs;
r_5337 = local0;
r_5337->source_38 = source_5335;
return r_5337;
}
void AM_ITER_CALL_EXP_5338(AM_ITER_CALL_EXPR self, INT ind_5339, AM_EXPR val_5340) {
BOOL local0;
INT local1;
INT local2;
if ((!((self==((AM_ITER_CALL_EXPR) NULL))))) {
local1 = 0;
local2 = (self->asize);
local0 = INT_is_bet_INT_I(ind_5339, local1, (c_INT_minus_INT_INT_chk(local2,1)));
} else {
local0 = FALSE;
}
if (!(local0)) {
fprintf(stderr,"Violation of precondition ../Library/aref.sa:38:7\n");
exit(16);
}
if (ind_5339<0||ind_5339>=self->asize) {
fprintf(stderr,"Index out of bounds ../Library/aref.sa:38:7\n");
exit(16);
}
self->arr_part[ind_5339] = val_5340;
}
void TRANS_iter_call_(TRANS self) {
PROG_err_STR(self->prog, ((STR) &Itercallsmaynota));
}
void TRANS_iter_call__5341(TRANS self) {
PROG_err_STR(self->prog, ((STR) &Itersmayonlybeca));
}
BOOL TRANS_contains_i(TRANS self, AM_EXPR e_5342) {
BOOL noname5343 = ((BOOL) 0);
AM_ROUT_CALL_EXPR noname5344;
AM_ARRAY_EXPR noname5345;
AM_BND_CREATE_EXPR noname5346;
AM_BND_ROUT_CALL noname5347;
AM_EXT_CALL_EXPR noname5348;
AM_EXPR local0;
AM_EXPR local1;
AM_EXPR local2;
AM_EXPR local3;
BOOL local4;
BOOL local5;
BOOL local6;
AM_EXPR local7;
if ((e_5342==((AM_EXPR) NULL))) {
return ((BOOL) 0);
}
if (e_5342==NULL) {
} else
switch (e_5342->header.tag) {
case AM_ROUT_CALL_EXPR_tag:
{
struct AM_ROUT_CALL_EXP_frame_struct temp5349_0;
AM_ROUT_CALL_EXP_frame
noname5350 = &temp5349_0;
noname5350->state = 0;
while (1) {
if (noname5350->state == 0) {
noname5344 = ((AM_ROUT_CALL_EXPR) e_5342);
noname5350->arg0 = noname5344;
}
local0 = AM_ROUT_CALL_EXP(noname5350);
if (noname5350->state == -1) goto after_loop;
if (TRANS_contains_i(self, local0)) {
return TRUE;
}
}
}
after_loop: ; break;
case AM_ITER_CALL_EXPR_tag:
return TRUE; break;
case AM_ARRAY_EXPR_tag:
{
struct AM_ARRAY_EXPR_el_frame_struct temp5352_0;
AM_ARRAY_EXPR_el_frame
noname5353 = &temp5352_0;
noname5353->state = 0;
while (1) {
if (noname5353->state == 0) {
noname5345 = ((AM_ARRAY_EXPR) e_5342);
noname5353->arg0 = noname5345;
}
local1 = AM_ARRAY_EXPR_el(noname5353);
if (noname5353->state == -1) goto after_loop_5351;
if (TRANS_contains_i(self, local1)) {
return TRUE;
}
}
}
after_loop_5351: ; break;
case AM_BND_CREATE_EXPR_tag:
{
struct AM_BND_CREATE_EX_5356_frame_struct temp5355_0;
AM_BND_CREATE_EX_5356_frame
noname5357 = &temp5355_0;
noname5357->state = 0;
while (1) {
if (noname5357->state == 0) {
noname5346 = ((AM_BND_CREATE_EXPR) e_5342);
noname5357->arg0 = noname5346;
}
local2 = AM_BND_CREATE_EX_5356(noname5357);
if (noname5357->state == -1) goto after_loop_5354;
if (TRANS_contains_i(self, local2)) {
return TRUE;
}
}
}
after_loop_5354: ; break;
case AM_BND_ROUT_CALL_tag:
{
struct AM_BND_ROUT_CALL_3884_frame_struct temp5359_0;
AM_BND_ROUT_CALL_3884_frame
noname5360 = &temp5359_0;
noname5360->state = 0;
while (1) {
if (noname5360->state == 0) {
noname5347 = ((AM_BND_ROUT_CALL) e_5342);
noname5360->arg0 = noname5347;
}
local3 = AM_BND_ROUT_CALL_3884(noname5360);
if (noname5360->state == -1) goto after_loop_5358;
if (TRANS_contains_i(self, local3)) {
return TRUE;
}
}
}
after_loop_5358: ; break;
case AM_BND_ITER_CALL_tag:
return TRUE; break;
case AM_IF_EXPR_tag:
if (TRANS_contains_i(self, ((AM_IF_EXPR) e_5342)->test_40)) {
local5 = TRUE;
} else {
local5 = TRANS_contains_i(self, ((AM_IF_EXPR) e_5342)->if_true);
}
if (local5) {
local4 = TRUE;
} else {
local4 = TRANS_contains_i(self, ((AM_IF_EXPR) e_5342)->if_false);
}
if (local4) {
return TRUE;
} break;
case AM_IS_VOID_EXPR_tag:
if (TRANS_contains_i(self, ((AM_IS_VOID_EXPR) e_5342)->arg_51)) {
return TRUE;
} break;
case AM_NEW_EXPR_tag:
if (TRANS_contains_i(self, ((AM_NEW_EXPR) e_5342)->asz)) {
return TRUE;
} break;
case AM_ATTR_EXPR_tag:
if (TRANS_contains_i(self, ((AM_ATTR_EXPR) e_5342)->ob)) {
return TRUE;
} break;
case AM_ARR_EXPR_tag:
if (TRANS_contains_i(self, ((AM_ARR_EXPR) e_5342)->ob)) {
local6 = TRUE;
} else {
local6 = TRANS_contains_i(self, ((AM_ARR_EXPR) e_5342)->ind);
}
if (local6) {
return TRUE;
} break;
case AM_EXT_CALL_EXPR_tag:
{
struct AM_EXT_CALL_EXPR_3901_frame_struct temp5362_0;
AM_EXT_CALL_EXPR_3901_frame
noname5363 = &temp5362_0;
noname5363->state = 0;
while (1) {
if (noname5363->state == 0) {
noname5348 = ((AM_EXT_CALL_EXPR) e_5342);
noname5363->arg0 = noname5348;
}
local7 = AM_EXT_CALL_EXPR_3901(noname5363);
if (noname5363->state == -1) goto after_loop_5361;
if (TRANS_contains_i(self, local7)) {
return TRUE;
}
}
}
after_loop_5361: ; break;
default: ;
}
return FALSE;
}
void TRANS_iter_call__5364(TRANS self, INT i) {
PROG local0;
STR local1;
if ((i==0)) {
PROG_err_STR(self->prog, ((STR) &Theexpressionspe));
}
else {
local0 = self->prog;
local1 = STR_plus_INT_STR(((STR) &Theexpressionfor), i);
PROG_err_STR(local0, STR_plus_STR_STR(local1, ((STR) &inthisitercallit)));
}
}
BOOL FLISTAM_LOCAL_EX_5365(FLISTAM_LOCAL_EXPR self) {
BOOL noname5366 = ((BOOL) 0);
INT local0;
local0 = FLISTAM_LOCAL_EX(self);
return (local0==0);
if (!FLISTAM_LOCAL_EX_3769(self)) {
fprintf(stderr,"Failed invariant FLIST{AM_LOCAL_EXPR}::invariant:BOOL ../Library/flist.sa:113:11\n");
exit(16);
}
}
void FLISTAM_LOCAL_EX_5367(FLISTAM_LOCAL_EXPR self) {
AM_LOCAL_EXPR nil = ((AM_LOCAL_EXPR) NULL);
FLISTAM_LOCAL_EXPR noname5368;
if (!((!((self==((FLISTAM_LOCAL_EXPR) NULL)))))) {
fprintf(stderr,"Violation of precondition ../Library/aref.sa:43:9\n");
exit(16);
}
{
struct FLISTAM_LOCAL_EX_5370_frame_struct temp5369_0;
FLISTAM_LOCAL_EX_5370_frame
noname5371 = &temp5369_0;
noname5371->state = 0;
while (1) {
if (noname5371->state == 0) {
noname5368 = self;
noname5371->arg0 = noname5368;
}
noname5371->arg1 = nil;
FLISTAM_LOCAL_EX_5370(noname5371);
if (noname5371->state == -1) goto after_loop;
0 /* No return value from iter call */;
}
}
after_loop: ;
}
void FLISTAM_LOCAL_EX_5372(FLISTAM_LOCAL_EXPR self) {
if (FLISTAM_LOCAL_EX_5365(self)) {
return;
}
else {
FLISTAM_LOCAL_EX_5367(self);
self->loc_17 = 0;
}
if (!FLISTAM_LOCAL_EX_3769(self)) {
fprintf(stderr,"Failed invariant FLIST{AM_LOCAL_EXPR}::invariant:BOOL ../Library/flist.sa:117:8\n");
exit(16);
}
}
void FLISTAM_LOCAL_EX_5373(FLISTAM_LOCAL_EXPR self, INT ind_5374, AM_LOCAL_EXPR val_5375) {
BOOL local0;
INT local1;
INT local2;
if ((!((self==((FLISTAM_LOCAL_EXPR) NULL))))) {
local1 = 0;
local2 = (self->asize);
local0 = INT_is_bet_INT_I(ind_5374, local1, (c_INT_minus_INT_INT_chk(local2,1)));
} else {
local0 = FALSE;
}
if (!(local0)) {
fprintf(stderr,"Violation of precondition ../Library/aref.sa:38:7\n");
exit(16);
}
if (ind_5374<0||ind_5374>=self->asize) {
fprintf(stderr,"Index out of bounds ../Library/aref.sa:38:7\n");
exit(16);
}
self->arr_part[ind_5374] = val_5375;
}
void FLISTAM_LOCAL_EX_5376(FLISTAM_LOCAL_EXPR self, INT ind_5377, AM_LOCAL_EXPR val_5378) {
BOOL local0;
INT local1;
if ((!((self==((FLISTAM_LOCAL_EXPR) NULL))))) {
local1 = 0;
local0 = INT_is_bet_INT_I(ind_5377, local1, (c_INT_minus_INT_INT_chk(self->loc_17,1)));
} else {
local0 = FALSE;
}
if (!(local0)) {
fprintf(stderr,"Violation of precondition ../Library/flist.sa:73:7\n");
exit(16);
}
FLISTAM_LOCAL_EX_5373(self, ind_5377, val_5378);
if (!FLISTAM_LOCAL_EX_3769(self)) {
fprintf(stderr,"Failed invariant FLIST{AM_LOCAL_EXPR}::invariant:BOOL ../Library/flist.sa:73:7\n");
exit(16);
}
}
FLISTAM_LOCAL_EXPR FLISTAM_LOCAL_EX_5379(FLISTAM_LOCAL_EXPR self, AM_LOCAL_EXPR e_5380) {
FLISTAM_LOCAL_EXPR noname5381;
FLISTAM_LOCAL_EXPR r_5382 = ((FLISTAM_LOCAL_EXPR) NULL);
FLISTAM_LOCAL_EXPR noname5383;
FLISTAM_LOCAL_EXPR noname5384;
FLISTAM_LOCAL_EXPR local0;
INT local1;
FLISTAM_LOCAL_EXPR local2;
INT local3;
AM_LOCAL_EXPR local4;
INT local5;
if ((self==((FLISTAM_LOCAL_EXPR) NULL))) {
local0 = ((FLISTAM_LOCAL_EXPR) sbi_arr_alloc(sizeof(struct FLISTAM_LOCAL_EXPR_struct), FLISTAM_LOCAL_EXPR_tag, sizeof(AM_LOCAL_EXPR) , 5));
local0->asize = 5;
r_5382 = local0;
}
else {
local1 = self->loc_17;
if ((local1<(self->asize))) {
r_5382 = self;
}
else {
local3 = 2;
local2 = ((FLISTAM_LOCAL_EXPR) sbi_arr_alloc(sizeof(struct FLISTAM_LOCAL_EXPR_struct), FLISTAM_LOCAL_EXPR_tag, sizeof(AM_LOCAL_EXPR) , (c_INT_times_INT_INT_chk(local3,(self->asize)))));
local2->asize = (c_INT_times_INT_INT_chk(local3,(self->asize)));
r_5382 = local2;
r_5382->loc_17 = self->loc_17;
{
struct FLISTAM_LOCAL_EX_4237_frame_struct temp5385_0;
FLISTAM_LOCAL_EX_4237_frame
noname5386 = &temp5385_0;
struct FLISTAM_LOCAL_EX_5370_frame_struct temp5385_1;
FLISTAM_LOCAL_EX_5370_frame
noname5387 = &temp5385_1;
noname5386->state = 0;
noname5387->state = 0;
while (1) {
if (noname5387->state == 0) {
noname5384 = r_5382;
noname5387->arg0 = noname5384;
}
if (noname5386->state == 0) {
noname5383 = self;
noname5386->arg0 = noname5383;
}
local4 = FLISTAM_LOCAL_EX_4237(noname5386);
if (noname5386->state == -1) goto after_loop;
noname5387->arg1 = local4;
FLISTAM_LOCAL_EX_5370(noname5387);
if (noname5387->state == -1) goto after_loop;
0 /* No return value from iter call */;
}
}
after_loop: ;
FLISTAM_LOCAL_EX_5372(self);
}
}
r_5382->loc_17 = (c_INT_plus_INT_INT_chk(r_5382->loc_17,1));
local5 = (c_INT_minus_INT_INT_chk(r_5382->loc_17,1));
FLISTAM_LOCAL_EX_5376(r_5382, local5, e_5380);
return r_5382;
if (!FLISTAM_LOCAL_EX_3769(self)) {
fprintf(stderr,"Failed invariant FLIST{AM_LOCAL_EXPR}::invariant:BOOL ../Library/flist.sa:79:7\n");
exit(16);
}
}
void TRANS_add_local_(TRANS self, AM_LOCAL_EXPR l) {
OUT local0;
if ((self->cur_rout==((AM_ROUT_DEF) NULL))) {
local0 = OUT_create_OUT(((OUT) NULL));
OUT_plus_STR(local0, ((STR) &CompilererrorTRA_5388));
return;
}
self->cur_rout->locals_57 = FLISTAM_LOCAL_EX_5379(self->cur_rout->locals_57, l);
if ((!((l->name_19.str_4==(STR)0)))) {
self->active_locals = FLISTAM_LOCAL_EX_5379(self->active_locals, l);
}
}
AM_ASSIGN_STMT AM_ASSIGN_STMT_c(AM_ASSIGN_STMT self, SFILE_ID source_5389) {
AM_ASSIGN_STMT noname5390;
AM_ASSIGN_STMT r_5391;
AM_ASSIGN_STMT local0;
local0 = ((AM_ASSIGN_STMT) sbi_alloc(sizeof(struct AM_ASSIGN_STMT_struct), AM_ASSIGN_STMT_tag));
r_5391 = local0;
r_5391->source_38 = source_5389;
return r_5391;
}
OUT OUT_plus_INT_OUT(OUT self, INT i) {
OUT noname5392;
c_out_str(((INT_str_STR(i)==NULL)?NULL:INT_str_STR(i)->arr_part));
return self;
}
AM_ITER_CALL_EXPR TRANS_call_fix_i(TRANS self, AM_ITER_CALL_EXPR ir) {
AM_ITER_CALL_EXPR noname5393;
AM_LOCAL_EXPR nl_5394;
AM_ASSIGN_STMT ass;
INT i = ((INT) 0);
BOOL once = ((BOOL) 0);
OUT local0;
OUT local1;
AM_LOCAL_EXPR local2;
SFILE_ID local3;
IDENT local4;
AM_EXPR local5;
INT local6;
OUT local7;
OUT local8;
OUT local9;
AM_LOCAL_EXPR local10;
SFILE_ID local11;
IDENT local12;
AM_EXPR local13;
INT local14;
AM_STMT local15;
if (!((!((ir==((AM_ITER_CALL_EXPR) NULL)))))) {
fprintf(stderr,"Violation of precondition ./trans.sa:1275:16\n");
exit(16);
}
if (self->in_constant) {
TRANS_iter_call_(self);
return ((AM_ITER_CALL_EXPR) NULL);
}
if ((self->cur_loop==((AM_LOOP_STMT) NULL))) {
TRANS_iter_call__5341(self);
return ((AM_ITER_CALL_EXPR) NULL);
}
ir->lp = self->cur_loop;
if ((AM_ITER_CALL_EXP_4468(ir, 0)==((AM_EXPR) NULL))) {
local0 = OUT_create_OUT(((OUT) NULL));
OUT_plus_STR(local0, ((STR) &CompilererrorTRA_5395));
return ((AM_ITER_CALL_EXPR) NULL);
}
if ((ir->fun==((SIG) NULL))) {
local1 = OUT_create_OUT(((OUT) NULL));
OUT_plus_STR(local1, ((STR) &CompilererrorTRA_5396));
return ((AM_ITER_CALL_EXPR) NULL);
}
if (TRANS_contains_i(self, AM_ITER_CALL_EXP_4468(ir, 0))) {
TRANS_iter_call__5364(self, 0);
return ((AM_ITER_CALL_EXPR) NULL);
}
local2 = ((AM_LOCAL_EXPR) NULL);
local3 = ir->source_38;
local4 = IDENT_zero;
local5 = AM_ITER_CALL_EXP_4468(ir, 0);
nl_5394 = AM_LOCAL_EXPR_cr(local2, local3, local4, (*AM_EXPR_tp_TP[local5->header.tag+AM_EXPR_tp_TP_offset])(local5));
TRANS_add_local_(self, nl_5394);
ass = AM_ASSIGN_STMT_c(((AM_ASSIGN_STMT) NULL), ir->source_38);
ass->dest = ((AM_EXPR) nl_5394);
ass->src_42 = AM_ITER_CALL_EXP_4468(ir, 0);
AM_ITER_CALL_EXP_5338(ir, 0, ((AM_EXPR) nl_5394));
ir->init = ((AM_STMT) ass);
i = 0;
while (1) {
local6 = AM_ITER_CALL_EXP_4466(ir);
if ((i<(c_INT_minus_INT_INT_chk(local6,1)))) {
}
else {
goto after_loop;
}
if ((AM_ITER_CALL_EXP_4468(ir, (c_INT_plus_INT_INT_chk(i,1)))==((AM_EXPR) NULL))) {
local7 = OUT_create_OUT(((OUT) NULL));
local8 = OUT_plus_STR_OUT(local7, ((STR) &CompilererrorTRA_5398));
local9 = OUT_plus_INT_OUT(local8, (c_INT_plus_INT_INT_chk(i,1)));
OUT_plus_STR(local9, ((STR) &void_5399));
return ((AM_ITER_CALL_EXPR) NULL);
}
once = FALSE;
if ((ir->fun->hot==((ARRAYBOOL) NULL))) {
once = TRUE;
}
else {
if ((!(ARRAYBOOL_aget_I(ir->fun->hot, i)))) {
once = TRUE;
}
}
if (once) {
if (TRANS_contains_i(self, AM_ITER_CALL_EXP_4468(ir, (c_INT_plus_INT_INT_chk(i,1))))) {
TRANS_iter_call__5364(self, (c_INT_plus_INT_INT_chk(i,1)));
return ((AM_ITER_CALL_EXPR) NULL);
}
local10 = ((AM_LOCAL_EXPR) NULL);
local11 = ir->source_38;
local12 = IDENT_zero;
local13 = AM_ITER_CALL_EXP_4468(ir, (c_INT_plus_INT_INT_chk(i,1)));
nl_5394 = AM_LOCAL_EXPR_cr(local10, local11, local12, (*AM_EXPR_tp_TP[local13->header.tag+AM_EXPR_tp_TP_offset])(local13));
TRANS_add_local_(self, nl_5394);
ass = AM_ASSIGN_STMT_c(((AM_ASSIGN_STMT) NULL), ir->source_38);
ass->dest = ((AM_EXPR) nl_5394);
ass->src_42 = AM_ITER_CALL_EXP_4468(ir, (c_INT_plus_INT_INT_chk(i,1)));
local14 = (c_INT_plus_INT_INT_chk(i,1));
AM_ITER_CALL_EXP_5338(ir, local14, ((AM_EXPR) nl_5394));
if ((ir->init==((AM_STMT) NULL))) {
ir->init = ((AM_STMT) ass);
}
else {
local15 = ir->init;
(*AM_STMT_append_A[local15->header.tag+AM_STMT_append_A_offset])(local15, ((AM_STMT) ass));
}
}
i = (c_INT_plus_INT_INT_chk(i,1));
}
after_loop: ;
self->cur_loop->its_60 = FLISTAM_ITER_CAL_4835(self->cur_loop->its_60, ir);
return ir;
}
AM_ROUT_CALL_EXPR AM_ROUT_CALL_EXP_5400(AM_ROUT_CALL_EXPR self, INT nargs, SFILE_ID source_5401) {
AM_ROUT_CALL_EXPR noname5402;
AM_ROUT_CALL_EXPR r_5403;
AM_ROUT_CALL_EXPR local0;
local0 = ((AM_ROUT_CALL_EXPR) sbi_arr_alloc(sizeof(struct AM_ROUT_CALL_EXPR_struct), AM_ROUT_CALL_EXPR_tag, sizeof(AM_EXPR) , nargs));
local0->asize = nargs;
r_5403 = local0;
r_5403->source_38 = source_5401;
return r_5403;
}
void AM_ROUT_CALL_EXP_5404(AM_ROUT_CALL_EXPR self, INT ind_5405, AM_EXPR val_5406) {
BOOL local0;
INT local1;
INT local2;
if ((!((self==((AM_ROUT_CALL_EXPR) NULL))))) {
local1 = 0;
local2 = (self->asize);
local0 = INT_is_bet_INT_I(ind_5405, local1, (c_INT_minus_INT_INT_chk(local2,1)));
} else {
local0 = FALSE;
}
if (!(local0)) {
fprintf(stderr,"Violation of precondition ../Library/aref.sa:38:7\n");
exit(16);
}
if (ind_5405<0||ind_5405>=self->asize) {
fprintf(stderr,"Index out of bounds ../Library/aref.sa:38:7\n");
exit(16);
}
self->arr_part[ind_5405] = val_5406;
}
void TRANS_bnd_rout_c(TRANS self) {
PROG_err_STR(self->prog, ((STR) &Boundroutinecall));
}
AM_BND_ROUT_CALL AM_BND_ROUT_CALL_5407(AM_BND_ROUT_CALL self, INT nargs, SFILE_ID source_5408) {
AM_BND_ROUT_CALL noname5409;
AM_BND_ROUT_CALL r_5410;
AM_BND_ROUT_CALL local0;
local0 = ((AM_BND_ROUT_CALL) sbi_arr_alloc(sizeof(struct AM_BND_ROUT_CALL_struct), AM_BND_ROUT_CALL_tag, sizeof(AM_EXPR) , nargs));
local0->asize = nargs;
r_5410 = local0;
r_5410->source_38 = source_5408;
return r_5410;
}
void AM_BND_ROUT_CALL_5411(AM_BND_ROUT_CALL self, INT ind_5412, AM_EXPR val_5413) {
BOOL local0;
INT local1;
INT local2;
if ((!((self==((AM_BND_ROUT_CALL) NULL))))) {
local1 = 0;
local2 = (self->asize);
local0 = INT_is_bet_INT_I(ind_5412, local1, (c_INT_minus_INT_INT_chk(local2,1)));
} else {
local0 = FALSE;
}
if (!(local0)) {
fprintf(stderr,"Violation of precondition ../Library/aref.sa:38:7\n");
exit(16);
}
if (ind_5412<0||ind_5412>=self->asize) {
fprintf(stderr,"Index out of bounds ../Library/aref.sa:38:7\n");
exit(16);
}
self->arr_part[ind_5412] = val_5413;
}
AM_BND_ITER_CALL AM_BND_ITER_CALL_5414(AM_BND_ITER_CALL self, INT nargs, SFILE_ID source_5415) {
AM_BND_ITER_CALL noname5416;
AM_BND_ITER_CALL r_5417;
AM_BND_ITER_CALL local0;
local0 = ((AM_BND_ITER_CALL) sbi_arr_alloc(sizeof(struct AM_BND_ITER_CALL_struct), AM_BND_ITER_CALL_tag, sizeof(AM_EXPR) , nargs));
local0->asize = nargs;
r_5417 = local0;
r_5417->source_38 = source_5415;
return r_5417;
}
INT AM_BND_ITER_CALL_5418(AM_BND_ITER_CALL self) {
INT noname5419 = ((INT) 0);
return self->asize;
fprintf(stderr,"Last statement wasn't return ../Library/aref.sa:20:8\n");
exit(16);
}
void AM_BND_ITER_CALL_5420(AM_BND_ITER_CALL self, INT ind_5421, AM_EXPR val_5422) {
BOOL local0;
INT local1;
INT local2;
if ((!((self==((AM_BND_ITER_CALL) NULL))))) {
local1 = 0;
local2 = (self->asize);
local0 = INT_is_bet_INT_I(ind_5421, local1, (c_INT_minus_INT_INT_chk(local2,1)));
} else {
local0 = FALSE;
}
if (!(local0)) {
fprintf(stderr,"Violation of precondition ../Library/aref.sa:38:7\n");
exit(16);
}
if (ind_5421<0||ind_5421>=self->asize) {
fprintf(stderr,"Index out of bounds ../Library/aref.sa:38:7\n");
exit(16);
}
self->arr_part[ind_5421] = val_5422;
}
void TRANS_bnd_iter_c(TRANS self) {
PROG_err_STR(self->prog, ((STR) &Bounditercallsma));
}
void TRANS_bnd_iter_c_5423(TRANS self) {
PROG_err_STR(self->prog, ((STR) &Bounditersmayonl));
}
INT AM_BND_ITER_CALL_5424(AM_BND_ITER_CALL self) {
INT noname5425 = ((INT) 0);
if ((self==((AM_BND_ITER_CALL) NULL))) {
return 0;
}
return (self->asize);
}
AM_EXPR AM_BND_ITER_CALL_5426(AM_BND_ITER_CALL self, INT ind_5427) {
AM_EXPR noname5428;
BOOL local0;
INT local1;
INT local2;
if ((!((self==((AM_BND_ITER_CALL) NULL))))) {
local1 = 0;
local2 = (self->asize);
local0 = INT_is_bet_INT_I(ind_5427, local1, (c_INT_minus_INT_INT_chk(local2,1)));
} else {
local0 = FALSE;
}
if (!(local0)) {
fprintf(stderr,"Violation of precondition ../Library/aref.sa:33:7\n");
exit(16);
}
if (ind_5427<0||ind_5427>=self->asize) {
fprintf(stderr,"Index out of bounds ../Library/aref.sa:33:7\n");
exit(16);
}
return self->arr_part[ind_5427];
}
void TRANS_bnd_iter_c_5429(TRANS self, INT i) {
PROG local0;
STR local1;
STR local2;
local0 = self->prog;
local1 = STR_plus_INT_STR(((STR) &Argument), i);
local2 = STR_plus_STR_STR(local1, ((STR) &ofthisbounditerc));
PROG_err_STR(local0, STR_plus_STR_STR(local2, ((STR) &aonceargumentbut)));
}
INT FLISTAM_BND_ITER_5430(FLISTAM_BND_ITER self) {
INT noname5431 = ((INT) 0);
return self->asize;
fprintf(stderr,"Last statement wasn't return ../Library/aref.sa:20:8\n");
exit(16);
}
INT FLISTAM_BND_ITER_5432(FLISTAM_BND_ITER self) {
INT noname5433 = ((INT) 0);
if ((self==((FLISTAM_BND_ITER) NULL))) {
return 0;
}
return self->loc_17;
if (!FLISTAM_BND_ITER_5434(self)) {
fprintf(stderr,"Failed invariant FLIST{AM_BND_ITER_CALL_EXPR}::invariant:BOOL ../Library/flist.sa:50:7\n");
exit(16);
}
}
BOOL FLISTAM_BND_ITER_5435(FLISTAM_BND_ITER self) {
BOOL noname5436 = ((BOOL) 0);
INT local0;
local0 = FLISTAM_BND_ITER_5432(self);
return (local0==0);
if (!FLISTAM_BND_ITER_5434(self)) {
fprintf(stderr,"Failed invariant FLIST{AM_BND_ITER_CALL_EXPR}::invariant:BOOL ../Library/flist.sa:113:11\n");
exit(16);
}
}
void FLISTAM_BND_ITER_5437(FLISTAM_BND_ITER self) {
AM_BND_ITER_CALL nil = ((AM_BND_ITER_CALL) NULL);
FLISTAM_BND_ITER noname5438;
if (!((!((self==((FLISTAM_BND_ITER) NULL)))))) {
fprintf(stderr,"Violation of precondition ../Library/aref.sa:43:9\n");
exit(16);
}
{
struct FLISTAM_BND_ITER_5440_frame_struct temp5439_0;
FLISTAM_BND_ITER_5440_frame
noname5441 = &temp5439_0;
noname5441->state = 0;
while (1) {
if (noname5441->state == 0) {
noname5438 = self;
noname5441->arg0 = noname5438;
}
noname5441->arg1 = nil;
FLISTAM_BND_ITER_5440(noname5441);
if (noname5441->state == -1) goto after_loop;
0 /* No return value from iter call */;
}
}
after_loop: ;
}
void FLISTAM_BND_ITER_5442(FLISTAM_BND_ITER self) {
if (FLISTAM_BND_ITER_5435(self)) {
return;
}
else {
FLISTAM_BND_ITER_5437(self);
self->loc_17 = 0;
}
if (!FLISTAM_BND_ITER_5434(self)) {
fprintf(stderr,"Failed invariant FLIST{AM_BND_ITER_CALL_EXPR}::invariant:BOOL ../Library/flist.sa:117:8\n");
exit(16);
}
}
void FLISTAM_BND_ITER_5443(FLISTAM_BND_ITER self, INT ind_5444, AM_BND_ITER_CALL val_5445) {
BOOL local0;
INT local1;
INT local2;
if ((!((self==((FLISTAM_BND_ITER) NULL))))) {
local1 = 0;
local2 = (self->asize);
local0 = INT_is_bet_INT_I(ind_5444, local1, (c_INT_minus_INT_INT_chk(local2,1)));
} else {
local0 = FALSE;
}
if (!(local0)) {
fprintf(stderr,"Violation of precondition ../Library/aref.sa:38:7\n");
exit(16);
}
if (ind_5444<0||ind_5444>=self->asize) {
fprintf(stderr,"Index out of bounds ../Library/aref.sa:38:7\n");
exit(16);
}
self->arr_part[ind_5444] = val_5445;
}
void FLISTAM_BND_ITER_5446(FLISTAM_BND_ITER self, INT ind_5447, AM_BND_ITER_CALL val_5448) {
BOOL local0;
INT local1;
if ((!((self==((FLISTAM_BND_ITER) NULL))))) {
local1 = 0;
local0 = INT_is_bet_INT_I(ind_5447, local1, (c_INT_minus_INT_INT_chk(self->loc_17,1)));
} else {
local0 = FALSE;
}
if (!(local0)) {
fprintf(stderr,"Violation of precondition ../Library/flist.sa:73:7\n");
exit(16);
}
FLISTAM_BND_ITER_5443(self, ind_5447, val_5448);
if (!FLISTAM_BND_ITER_5434(self)) {
fprintf(stderr,"Failed invariant FLIST{AM_BND_ITER_CALL_EXPR}::invariant:BOOL ../Library/flist.sa:73:7\n");
exit(16);
}
}
FLISTAM_BND_ITER FLISTAM_BND_ITER_5449(FLISTAM_BND_ITER self, AM_BND_ITER_CALL e_5450) {
FLISTAM_BND_ITER noname5451;
FLISTAM_BND_ITER r_5452 = ((FLISTAM_BND_ITER) NULL);
FLISTAM_BND_ITER noname5453;
FLISTAM_BND_ITER noname5454;
FLISTAM_BND_ITER local0;
INT local1;
FLISTAM_BND_ITER local2;
INT local3;
AM_BND_ITER_CALL local4;
INT local5;
if ((self==((FLISTAM_BND_ITER) NULL))) {
local0 = ((FLISTAM_BND_ITER) sbi_arr_alloc(sizeof(struct FLISTAM_BND_ITER_struct), FLISTAM_BND_ITER_tag, sizeof(AM_BND_ITER_CALL) , 5));
local0->asize = 5;
r_5452 = local0;
}
else {
local1 = self->loc_17;
if ((local1<(self->asize))) {
r_5452 = self;
}
else {
local3 = 2;
local2 = ((FLISTAM_BND_ITER) sbi_arr_alloc(sizeof(struct FLISTAM_BND_ITER_struct), FLISTAM_BND_ITER_tag, sizeof(AM_BND_ITER_CALL) , (c_INT_times_INT_INT_chk(local3,(self->asize)))));
local2->asize = (c_INT_times_INT_INT_chk(local3,(self->asize)));
r_5452 = local2;
r_5452->loc_17 = self->loc_17;
{
struct FLISTAM_BND_ITER_5456_frame_struct temp5455_0;
FLISTAM_BND_ITER_5456_frame
noname5457 = &temp5455_0;
struct FLISTAM_BND_ITER_5440_frame_struct temp5455_1;
FLISTAM_BND_ITER_5440_frame
noname5458 = &temp5455_1;
noname5457->state = 0;
noname5458->state = 0;
while (1) {
if (noname5458->state == 0) {
noname5454 = r_5452;
noname5458->arg0 = noname5454;
}
if (noname5457->state == 0) {
noname5453 = self;
noname5457->arg0 = noname5453;
}
local4 = FLISTAM_BND_ITER_5456(noname5457);
if (noname5457->state == -1) goto after_loop;
noname5458->arg1 = local4;
FLISTAM_BND_ITER_5440(noname5458);
if (noname5458->state == -1) goto after_loop;
0 /* No return value from iter call */;
}
}
after_loop: ;
FLISTAM_BND_ITER_5442(self);
}
}
r_5452->loc_17 = (c_INT_plus_INT_INT_chk(r_5452->loc_17,1));
local5 = (c_INT_minus_INT_INT_chk(r_5452->loc_17,1));
FLISTAM_BND_ITER_5446(r_5452, local5, e_5450);
return r_5452;
if (!FLISTAM_BND_ITER_5434(self)) {
fprintf(stderr,"Failed invariant FLIST{AM_BND_ITER_CALL_EXPR}::invariant:BOOL ../Library/flist.sa:79:7\n");
exit(16);
}
}
AM_BND_ITER_CALL TRANS_call_fix_b(TRANS self, AM_BND_ITER_CALL bir, SIG sig_5459) {
AM_BND_ITER_CALL noname5460;
INT i = ((INT) 0);
BOOL once = ((BOOL) 0);
AM_LOCAL_EXPR nl_5461;
AM_ASSIGN_STMT ass;
BOOL local0;
PROG local1;
STR local2;
AM_LOCAL_EXPR local3;
SFILE_ID local4;
IDENT local5;
AM_EXPR local6;
AM_STMT local7;
if ((bir==((AM_BND_ITER_CALL) NULL))) {
local0 = TRUE;
} else {
local0 = (sig_5459==((SIG) NULL));
}
if (local0) {
return ((AM_BND_ITER_CALL) NULL);
}
if (self->in_constant) {
TRANS_bnd_iter_c(self);
return ((AM_BND_ITER_CALL) NULL);
}
if ((self->cur_loop==((AM_LOOP_STMT) NULL))) {
TRANS_bnd_iter_c_5423(self);
return ((AM_BND_ITER_CALL) NULL);
}
bir->lp = self->cur_loop;
i = 0;
while (1) {
if ((i<AM_BND_ITER_CALL_5424(bir))) {
}
else {
goto after_loop;
}
if ((AM_BND_ITER_CALL_5426(bir, i)==((AM_EXPR) NULL))) {
PROG_err_loc_PRO(self->prog, ((PROG_ERR) bir));
local1 = self->prog;
local2 = STR_plus_INT_STR(((STR) &CompilererrorTRA_5463), i);
PROG_err_STR(local1, STR_plus_STR_STR(local2, ((STR) &void_5464)));
return ((AM_BND_ITER_CALL) NULL);
}
once = FALSE;
if ((sig_5459->hot==((ARRAYBOOL) NULL))) {
once = TRUE;
}
else {
if ((!(ARRAYBOOL_aget_I(sig_5459->hot, i)))) {
once = TRUE;
}
}
if (once) {
if (TRANS_contains_i(self, AM_BND_ITER_CALL_5426(bir, i))) {
TRANS_bnd_iter_c_5429(self, i);
return ((AM_BND_ITER_CALL) NULL);
}
local3 = ((AM_LOCAL_EXPR) NULL);
local4 = bir->source_38;
local5 = IDENT_zero;
local6 = AM_BND_ITER_CALL_5426(bir, i);
nl_5461 = AM_LOCAL_EXPR_cr(local3, local4, local5, (*AM_EXPR_tp_TP[local6->header.tag+AM_EXPR_tp_TP_offset])(local6));
TRANS_add_local_(self, nl_5461);
ass = AM_ASSIGN_STMT_c(((AM_ASSIGN_STMT) NULL), bir->source_38);
ass->dest = ((AM_EXPR) nl_5461);
ass->src_42 = AM_BND_ITER_CALL_5426(bir, i);
AM_BND_ITER_CALL_5420(bir, i, ((AM_EXPR) nl_5461));
if ((bir->init==((AM_STMT) NULL))) {
bir->init = ((AM_STMT) ass);
}
else {
local7 = bir->init;
(*AM_STMT_append_A[local7->header.tag+AM_STMT_append_A_offset])(local7, ((AM_STMT) ass));
}
}
i = (c_INT_plus_INT_INT_chk(i,1));
}
after_loop: ;
self->cur_loop->bits_59 = FLISTAM_BND_ITER_5449(self->cur_loop->bits_59, bir);
return bir;
}
void TRANS_call_conte(TRANS self, TR_CALL_EXPR e_5465, TP stp, TP tp_5466) {
PROG local0;
STR local1;
TP local2;
STR local3;
STR local4;
TP local5;
STR local6;
PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5465));
local0 = self->prog;
local1 = ((STR) &Thetypeofthecall);
local2 = stp;
local3 = STR_plus_STR_STR(local1, (*TP_str_STR[local2->header.tag+TP_str_STR_offset])(local2));
local4 = STR_plus_STR_STR(local3, ((STR) &isnotasubtypeof_5467));
local5 = tp_5466;
local6 = STR_plus_STR_STR(local4, (*TP_str_STR[local5->header.tag+TP_str_STR_offset])(local5));
PROG_err_STR(local0, STR_plus_STR_STR(local6, ((STR) &name_5468)));
}
AM_EXPR TRANS_inline_AM_(TRANS self, AM_ROUT_CALL_EXPR call_5469) {
AM_EXPR noname5470;
INLINE_TBL itbl;
INLINE in_5471;
INLINE local0;
PROG_AM_GENERATE_5472(self->prog->prog_am_generate, call_5469->fun);
itbl = self->prog->prog_am_generate->inline_tbl;
in_5471 = INLINE_TBL_get_q(itbl, call_5469->fun);
if ((in_5471==((INLINE) NULL))) {
return ((AM_EXPR) call_5469);
}
local0 = in_5471;
return (*INLINE_inline_AM[local0->header.tag+INLINE_inline_AM_offset])(local0, call_5469, self);
}
INT FLISTAM_EXPR_asi(FLISTAM_EXPR self) {
INT noname5473 = ((INT) 0);
return self->asize;
fprintf(stderr,"Last statement wasn't return ../Library/aref.sa:20:8\n");
exit(16);
}
INT FLISTAM_EXPR_siz(FLISTAM_EXPR self) {
INT noname5474 = ((INT) 0);
if ((self==((FLISTAM_EXPR) NULL))) {
return 0;
}
return self->loc_17;
if (!FLISTAM_EXPR_inv(self)) {
fprintf(stderr,"Failed invariant FLIST{$AM_EXPR}::invariant:BOOL ../Library/flist.sa:50:7\n");
exit(16);
}
}
BOOL FLISTAM_EXPR_is_(FLISTAM_EXPR self) {
BOOL noname5475 = ((BOOL) 0);
INT local0;
local0 = FLISTAM_EXPR_siz(self);
return (local0==0);
if (!FLISTAM_EXPR_inv(self)) {
fprintf(stderr,"Failed invariant FLIST{$AM_EXPR}::invariant:BOOL ../Library/flist.sa:113:11\n");
exit(16);
}
}
void FLISTAM_EXPR_aclear(FLISTAM_EXPR self) {
AM_EXPR nil = ((AM_EXPR) NULL);
FLISTAM_EXPR noname5476;
if (!((!((self==((FLISTAM_EXPR) NULL)))))) {
fprintf(stderr,"Violation of precondition ../Library/aref.sa:43:9\n");
exit(16);
}
{
struct FLISTAM_EXPR_ase_frame_struct temp5477_0;
FLISTAM_EXPR_ase_frame
noname5478 = &temp5477_0;
noname5478->state = 0;
while (1) {
if (noname5478->state == 0) {
noname5476 = self;
noname5478->arg0 = noname5476;
}
noname5478->arg1 = nil;
FLISTAM_EXPR_ase(noname5478);
if (noname5478->state == -1) goto after_loop;
0 /* No return value from iter call */;
}
}
after_loop: ;
}
void FLISTAM_EXPR_clear(FLISTAM_EXPR self) {
if (FLISTAM_EXPR_is_(self)) {
return;
}
else {
FLISTAM_EXPR_aclear(self);
self->loc_17 = 0;
}
if (!FLISTAM_EXPR_inv(self)) {
fprintf(stderr,"Failed invariant FLIST{$AM_EXPR}::invariant:BOOL ../Library/flist.sa:117:8\n");
exit(16);
}
}
void FLISTAM_EXPR_are(FLISTAM_EXPR self, INT ind_5479, AM_EXPR val_5480) {
BOOL local0;
INT local1;
INT local2;
if ((!((self==((FLISTAM_EXPR) NULL))))) {
local1 = 0;
local2 = (self->asize);
local0 = INT_is_bet_INT_I(ind_5479, local1, (c_INT_minus_INT_INT_chk(local2,1)));
} else {
local0 = FALSE;
}
if (!(local0)) {
fprintf(stderr,"Violation of precondition ../Library/aref.sa:38:7\n");
exit(16);
}
if (ind_5479<0||ind_5479>=self->asize) {
fprintf(stderr,"Index out of bounds ../Library/aref.sa:38:7\n");
exit(16);
}
self->arr_part[ind_5479] = val_5480;
}
void FLISTAM_EXPR_ase_5481(FLISTAM_EXPR self, INT ind_5482, AM_EXPR val_5483) {
BOOL local0;
INT local1;
if ((!((self==((FLISTAM_EXPR) NULL))))) {
local1 = 0;
local0 = INT_is_bet_INT_I(ind_5482, local1, (c_INT_minus_INT_INT_chk(self->loc_17,1)));
} else {
local0 = FALSE;
}
if (!(local0)) {
fprintf(stderr,"Violation of precondition ../Library/flist.sa:73:7\n");
exit(16);
}
FLISTAM_EXPR_are(self, ind_5482, val_5483);
if (!FLISTAM_EXPR_inv(self)) {
fprintf(stderr,"Failed invariant FLIST{$AM_EXPR}::invariant:BOOL ../Library/flist.sa:73:7\n");
exit(16);
}
}
FLISTAM_EXPR FLISTAM_EXPR_pus(FLISTAM_EXPR self, AM_EXPR e_5484) {
FLISTAM_EXPR noname5485;
FLISTAM_EXPR r_5486 = ((FLISTAM_EXPR) NULL);
FLISTAM_EXPR noname5487;
FLISTAM_EXPR noname5488;
FLISTAM_EXPR local0;
INT local1;
FLISTAM_EXPR local2;
INT local3;
AM_EXPR local4;
INT local5;
if ((self==((FLISTAM_EXPR) NULL))) {
local0 = ((FLISTAM_EXPR) sbi_arr_alloc(sizeof(struct FLISTAM_EXPR_struct), FLISTAM_EXPR_tag, sizeof(AM_EXPR) , 5));
local0->asize = 5;
r_5486 = local0;
}
else {
local1 = self->loc_17;
if ((local1<(self->asize))) {
r_5486 = self;
}
else {
local3 = 2;
local2 = ((FLISTAM_EXPR) sbi_arr_alloc(sizeof(struct FLISTAM_EXPR_struct), FLISTAM_EXPR_tag, sizeof(AM_EXPR) , (c_INT_times_INT_INT_chk(local3,(self->asize)))));
local2->asize = (c_INT_times_INT_INT_chk(local3,(self->asize)));
r_5486 = local2;
r_5486->loc_17 = self->loc_17;
{
struct FLISTAM_EXPR_elt_frame_struct temp5489_0;
FLISTAM_EXPR_elt_frame
noname5490 = &temp5489_0;
struct FLISTAM_EXPR_ase_frame_struct temp5489_1;
FLISTAM_EXPR_ase_frame
noname5491 = &temp5489_1;
noname5490->state = 0;
noname5491->state = 0;
while (1) {
if (noname5491->state == 0) {
noname5488 = r_5486;
noname5491->arg0 = noname5488;
}
if (noname5490->state == 0) {
noname5487 = self;
noname5490->arg0 = noname5487;
}
local4 = FLISTAM_EXPR_elt(noname5490);
if (noname5490->state == -1) goto after_loop;
noname5491->arg1 = local4;
FLISTAM_EXPR_ase(noname5491);
if (noname5491->state == -1) goto after_loop;
0 /* No return value from iter call */;
}
}
after_loop: ;
FLISTAM_EXPR_clear(self);
}
}
r_5486->loc_17 = (c_INT_plus_INT_INT_chk(r_5486->loc_17,1));
local5 = (c_INT_minus_INT_INT_chk(r_5486->loc_17,1));
FLISTAM_EXPR_ase_5481(r_5486, local5, e_5484);
return r_5486;
if (!FLISTAM_EXPR_inv(self)) {
fprintf(stderr,"Failed invariant FLIST{$AM_EXPR}::invariant:BOOL ../Library/flist.sa:79:7\n");
exit(16);
}
}
AM_EXPR TRANS_transform__5492(TRANS self, TR_CALL_EXPR e_5493, TP tp_5494, BOOL has_ret_5495) {
AM_EXPR noname5496;
AM_EXPR r_5497 = ((AM_EXPR) NULL);
TUPAM_EXPRTP stup = TUPAM_EXPRTP_zero;
AM_EXPR self_val;
TP self_tp_5498;
BOOL in_class = ((BOOL) 0);
CALL_SIG call_sig;
ARRAYAM_EXPR args_5499 = ((ARRAYAM_EXPR) NULL);
INT nargs = ((INT) 0);
SIG sig_5500;
AM_CALL_EXPR cr = ((AM_CALL_EXPR) NULL);
AM_EXT_CALL_EXPR er = ((AM_EXT_CALL_EXPR) NULL);
AM_ITER_CALL_EXPR ir = ((AM_ITER_CALL_EXPR) NULL);
AM_ROUT_CALL_EXPR rr = ((AM_ROUT_CALL_EXPR) NULL);
AM_BND_ROUT_CALL brr = ((AM_BND_ROUT_CALL) NULL);
AM_BND_ITER_CALL bir = ((AM_BND_ITER_CALL) NULL);
IMPL im;
ELT el;
INT i = ((INT) 0);
INT i_5501 = ((INT) 0);
INT i_5502 = ((INT) 0);
INT i_5503 = ((INT) 0);
INT i_5504 = ((INT) 0);
AM_EXPR ncr;
BOOL local0;
OUT local1;
TP local2;
INT local3;
OUT local4;
OUT local5;
AM_EXT_CALL_EXPR local6;
INT local7;
SFILE_ID local8;
INT local9;
AM_ITER_CALL_EXPR local10;
INT local11;
INT local12;
AM_ROUT_CALL_EXPR local13;
INT local14;
INT local15;
BOOL local16;
AM_CALL_EXPR local17;
AM_CALL_EXPR local18;
TP local19;
TP local20;
AM_CALL_EXPR local21;
TP local22;
if ((self->cur_rout==((AM_ROUT_DEF) NULL))) {
local0 = (!(self->in_constant));
} else {
local0 = FALSE;
}
if (local0) {
local1 = OUT_create_OUT(((OUT) NULL));
OUT_plus_STR(local1, ((STR) &CompilererrorTRA_5505));
return ((AM_EXPR) NULL);
}
if ((e_5493==((TR_CALL_EXPR) NULL))) {
return ((AM_EXPR) NULL);
}
PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5493));
r_5497 = ((AM_EXPR) TRANS_call_expr_(self, e_5493, tp_5494));
if ((!((r_5497==((AM_EXPR) NULL))))) {
return r_5497;
}
stup = TRANS_call_self__5191(self, e_5493);
if ((stup.t1==(AM_EXPR)0)&&(stup.t2==(TP)0)) {
return ((AM_EXPR) NULL);
}
self_val = stup.t1;
self_tp_5498 = stup.t2;
if ((self_tp_5498==((TP) NULL))) {
return ((AM_EXPR) NULL);
}
local2 = self_tp_5498;
if ((*TP_is_eq_TP_BOOL[local2->header.tag+TP_is_eq_TP_BOOL_offset])(local2, ((TP) self->tp_con->same_34))) {
in_class = TRUE;
}
call_sig = CALL_SIG_create_(((CALL_SIG) NULL));
call_sig->has_ret = has_ret_5495;
call_sig->name_19 = TRANS_call_expr__5201(self, e_5493);
call_sig->tp = self_tp_5498;
nargs = TR_CALL_EXPR_arg(e_5493);
if ((!((e_5493->args_7==((TR_EXPR) NULL))))) {
args_5499 = ARRAYAM_EXPR_cre(((ARRAYAM_EXPR) NULL), nargs);
call_sig->args_7 = ARRAYCALL_TP_cre(((ARRAYCALL_TP) NULL), nargs);
}
sig_5500 = TRANS_call_expr__5305(self, e_5493, call_sig, args_5499, in_class);
if ((sig_5500==((SIG) NULL))) {
return ((AM_EXPR) NULL);
}
if (self_tp_5498==NULL) {
} else
switch (self_tp_5498->header.tag) {
case TP_CLASS_tag:
local3 = PROG_tp_kind_TP_INT(self->prog, self_tp_5498);
if ((local3==shared_TP_KIND_e)) {
if (self->in_constant) {
TRANS_ext_call_c(self, e_5493);
return ((AM_EXPR) NULL);
}
im = IMPL_TBL_impl_of(self->prog->impl_tbl, self_tp_5498);
if ((im==((IMPL) NULL))) {
local4 = OUT_create_OUT(((OUT) NULL));
OUT_plus_STR(local4, ((STR) &CompilererrTRANS));
return ((AM_EXPR) NULL);
}
el = IMPL_elt_with_si(im, sig_5500);
if ((el==((ELT) NULL))) {
local5 = OUT_create_OUT(((OUT) NULL));
OUT_plus_STR(local5, ((STR) &CompilererrTRANS_5506));
return ((AM_EXPR) NULL);
}
local6 = ((AM_EXT_CALL_EXPR) NULL);
local7 = (c_INT_plus_INT_INT_chk(nargs,1));
local8 = e_5493->source_38;
er = AM_EXT_CALL_EXPR_5326(local6, local7, local8, TRANS_name_for_e(self, el));
AM_EXT_CALL_EXPR_5331(er, 0, self_val);
er->fun = sig_5500;
if ((!((args_5499==((ARRAYAM_EXPR) NULL))))) {
i = 0;
while (1) {
if ((i<nargs)) {
}
else {
goto after_loop;
}
local9 = (c_INT_plus_INT_INT_chk(i,1));
AM_EXT_CALL_EXPR_5331(er, local9, ARRAYAM_EXPR_age(args_5499, i));
i = (c_INT_plus_INT_INT_chk(i,1));
}
after_loop: ;
}
cr = ((AM_CALL_EXPR) er);
}
else {
if (IDENT_is_iter_BOOL(e_5493->name_19)) {
local10 = ((AM_ITER_CALL_EXPR) NULL);
local11 = (c_INT_plus_INT_INT_chk(nargs,1));
ir = AM_ITER_CALL_EXP_5334(local10, local11, e_5493->source_38);
AM_ITER_CALL_EXP_5338(ir, 0, self_val);
ir->fun = sig_5500;
if ((!((args_5499==((ARRAYAM_EXPR) NULL))))) {
i_5501 = 0;
while (1) {
if ((i_5501<nargs)) {
}
else {
goto after_loop_5508;
}
local12 = (c_INT_plus_INT_INT_chk(i_5501,1));
AM_ITER_CALL_EXP_5338(ir, local12, ARRAYAM_EXPR_age(args_5499, i_5501));
i_5501 = (c_INT_plus_INT_INT_chk(i_5501,1));
}
after_loop_5508: ;
}
cr = ((AM_CALL_EXPR) TRANS_call_fix_i(self, ir));
}
else {
local13 = ((AM_ROUT_CALL_EXPR) NULL);
local14 = (c_INT_plus_INT_INT_chk(nargs,1));
rr = AM_ROUT_CALL_EXP_5400(local13, local14, e_5493->source_38);
AM_ROUT_CALL_EXP_5404(rr, 0, self_val);
rr->fun = sig_5500;
if ((!((args_5499==((ARRAYAM_EXPR) NULL))))) {
i_5502 = 0;
while (1) {
if ((i_5502<nargs)) {
}
else {
goto after_loop_5510;
}
local15 = (c_INT_plus_INT_INT_chk(i_5502,1));
AM_ROUT_CALL_EXP_5404(rr, local15, ARRAYAM_EXPR_age(args_5499, i_5502));
i_5502 = (c_INT_plus_INT_INT_chk(i_5502,1));
}
after_loop_5510: ;
}
cr = ((AM_CALL_EXPR) rr);
}
} break;
case TP_ROUT_tag:
if (self->in_constant) {
TRANS_bnd_rout_c(self);
return ((AM_EXPR) NULL);
}
brr = AM_BND_ROUT_CALL_5407(((AM_BND_ROUT_CALL) NULL), nargs, e_5493->source_38);
brr->br = self_val;
if ((!((args_5499==((ARRAYAM_EXPR) NULL))))) {
i_5503 = 0;
while (1) {
if ((i_5503<nargs)) {
}
else {
goto after_loop_5512;
}
AM_BND_ROUT_CALL_5411(brr, i_5503, ARRAYAM_EXPR_age(args_5499, i_5503));
i_5503 = (c_INT_plus_INT_INT_chk(i_5503,1));
}
after_loop_5512: ;
}
cr = ((AM_CALL_EXPR) brr); break;
case TP_ITER_tag:
bir = AM_BND_ITER_CALL_5414(((AM_BND_ITER_CALL) NULL), nargs, e_5493->source_38);
bir->bi = self_val;
if ((!((args_5499==((ARRAYAM_EXPR) NULL))))) {
i_5504 = 0;
while (1) {
if ((i_5504<nargs)) {
}
else {
goto after_loop_5514;
}
AM_BND_ITER_CALL_5420(bir, i_5504, ARRAYAM_EXPR_age(args_5499, i_5504));
i_5504 = (c_INT_plus_INT_INT_chk(i_5504,1));
}
after_loop_5514: ;
}
cr = ((AM_CALL_EXPR) TRANS_call_fix_b(self, bir, sig_5500)); break;
default: ;
fprintf(stderr,"No applicable type in typecase ./trans.sa:1057:14\n");
exit(16);
}
if ((cr==((AM_CALL_EXPR) NULL))) {
return ((AM_EXPR) NULL);
}
if ((!((tp_5494==((TP) NULL))))) {
local17 = cr;
local16 = (!(((*AM_CALL_EXPR_tp_TP[local17->header.tag+AM_CALL_EXPR_tp_TP_offset])(local17)==((TP) NULL))));
} else {
local16 = FALSE;
}
if (local16) {
local18 = cr;
local19 = (*AM_CALL_EXPR_tp_TP[local18->header.tag+AM_CALL_EXPR_tp_TP_offset])(local18);
local20 = local19;
if ((!((*TP_is_subtype_TP[local20->header.tag+TP_is_subtype_TP_offset])(local20, tp_5494)))) {
local21 = cr;
local22 = (*AM_CALL_EXPR_tp_TP[local21->header.tag+AM_CALL_EXPR_tp_TP_offset])(local21);
TRANS_call_conte(self, e_5493, local22, tp_5494);
return ((AM_EXPR) NULL);
}
}
ncr = ((AM_EXPR) cr);
if (cr==NULL) {
} else
switch (cr->header.tag) {
case AM_ROUT_CALL_EXPR_tag:
ncr = TRANS_inline_AM_(self, ((AM_ROUT_CALL_EXPR) cr)); break;
default: ;
}
if ((!((self->cur_rout==((AM_ROUT_DEF) NULL))))) {
if (ncr==NULL) {
} else
switch (ncr->header.tag) {
case AM_ITER_CALL_EXPR_tag:
case AM_BND_ROUT_CALL_tag:
case AM_EXT_CALL_EXPR_tag:
case AM_BND_ITER_CALL_tag:
case AM_ROUT_CALL_EXPR_tag:
self->cur_rout->calls_58 = FLISTAM_EXPR_pus(self->cur_rout->calls_58, ncr); break;
default: ;
}
}
return ncr;
}
AM_EXPR TRANS_transform__5516(TRANS self, TR_VOID_EXPR e_5517, TP tp_5518) {
AM_EXPR noname5519;
AM_VOID_CONST r_5520;
r_5520 = AM_VOID_CONST_cr(((AM_VOID_CONST) NULL), e_5517->source_38);
if ((tp_5518==((TP) NULL))) {
PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5517));
PROG_err_STR(self->prog, ((STR) &Compilererrornot));
return ((AM_EXPR) NULL);
}
r_5520->tp_at = tp_5518;
return ((AM_EXPR) r_5520);
}
BOOL FSETTP_CLASS_tes(FSETTP_CLASS self, TP_CLASS e_5521) {
BOOL noname5522 = ((BOOL) 0);
INT h = ((INT) 0);
TP_CLASS te;
TP_CLASS te_5523;
INT local0;
INT local1;
INT local2;
INT local3;
if ((self==((FSETTP_CLASS) NULL))) {
return FALSE;
}
local0 = FSETTP_CLASS_elt_3008(self, e_5521);
local1 = (self->asize);
h = (local0&(c_INT_minus_INT_INT_chk(local1,2)));
while (1) {
te = FSETTP_CLASS_age(self, h);
if (FSETTP_CLASS_elt_3013(self, te, e_5521)) {
return TRUE;
}
else {
if (FSETTP_CLASS_elt_3013(self, te, FSETTP_CLASS_elt(self))) {
goto after_loop;
}
}
h = (c_INT_plus_INT_INT_chk(h,1));
}
after_loop: ;
local2 = (self->asize);
if ((h==(c_INT_minus_INT_INT_chk(local2,1)))) {
h = 0;
while (1) {
te_5523 = FSETTP_CLASS_age(self, h);
if (FSETTP_CLASS_elt_3013(self, te_5523, e_5521)) {
return TRUE;
}
else {
if (FSETTP_CLASS_elt_3013(self, te_5523, FSETTP_CLASS_elt(self))) {
goto after_loop_5525;
}
}
h = (c_INT_plus_INT_INT_chk(h,1));
}
after_loop_5525: ;
local3 = (self->asize);
if (!((h!=(c_INT_minus_INT_INT_chk(local3,1))))) {
fprintf(stderr,"Violation of assertion ../Library/fset.sa:127:15\n");
exit(16);
}
}
return FALSE;
if (!FSETTP_CLASS_inv(self)) {
fprintf(stderr,"Failed invariant FSET{TP_CLASS}::invariant:BOOL ../Library/fset.sa:112:7\n");
exit(16);
}
}
BOOL TP_GRAPH_abs_sub(TP_GRAPH self, TP t_5527, TP_CLASS at_5528) {
BOOL noname5529 = ((BOOL) 0);
BOOL local0;
TP local1;
FSETTP_CLASS local2;
FSETTP local3;
if (!(TP_CLASS_is_abst(at_5528))) {
fprintf(stderr,"Violation of precondition ./tp.sa:665:19\n");
exit(16);
}
local1 = t_5527;
if ((*TP_is_eq_TP_BOOL[local1->header.tag+TP_is_eq_TP_BOOL_offset])(local1, ((TP) at_5528))) {
local0 = TRUE;
} else {
local0 = TP_CLASS_is_eq_T(at_5528, ((TP) self->prog->tp_builtin->dollar_ob));
}
if (local0) {
return TRUE;
}
if (t_5527==NULL) {
} else
switch (t_5527->header.tag) {
case TP_CLASS_tag:
local2 = TP_GRAPH_ANC_get_3088(self->anc, ((TP_CLASS) t_5527));
if (FSETTP_CLASS_tes(local2, at_5528)) {
return TRUE;
} break;
default: ;
}
local3 = TP_GRAPH_DES_get_3183(self->des_15, at_5528);
if (FSETTP_test_TP_BOOL(local3, t_5527)) {
return TRUE;
}
return FALSE;
}
BOOL PROG_abs_subtype(PROG self, TP t_5530, TP_CLASS at_5531) {
BOOL noname5532 = ((BOOL) 0);
if (!(TP_CLASS_is_abst(at_5531))) {
fprintf(stderr,"Violation of precondition ./prog.sa:122:19\n");
exit(16);
}
return TP_GRAPH_abs_sub(self->tp_graph, t_5530, at_5531);
}
BOOL TP_CLASS_is_subt(TP_CLASS self, TP t_5533) {
BOOL noname5534 = ((BOOL) 0);
if ((self==((TP_CLASS) NULL))) {
return FALSE;
}
if (TP_CLASS_is_eq_T(self, t_5533)) {
return TRUE;
}
else {
if (t_5533==NULL) {
} else
switch (t_5533->header.tag) {
case TP_CLASS_tag:
if (TP_CLASS_is_abst(((TP_CLASS) t_5533))) {
return PROG_abs_subtype(self->prog, ((TP) self), ((TP_CLASS) t_5533));
}
else {
return FALSE;
} break;
default: ;
}
}
return FALSE;
}
AM_IS_VOID_EXPR AM_IS_VOID_EXPR_(AM_IS_VOID_EXPR self, SFILE_ID source_5535) {
AM_IS_VOID_EXPR noname5536;
AM_IS_VOID_EXPR r_5537;
AM_IS_VOID_EXPR local0;
local0 = ((AM_IS_VOID_EXPR) sbi_alloc(sizeof(struct AM_IS_VOID_EXPR_struct), AM_IS_VOID_EXPR_tag));
r_5537 = local0;
r_5537->source_38 = source_5535;
return r_5537;
}
AM_EXPR TRANS_transform__5538(TRANS self, TR_IS_VOID_EXPR e_5539, TP tp_5540) {
AM_EXPR noname5541;
AM_IS_VOID_EXPR r_5542;
TR_EXPR earg;
PROG local0;
STR local1;
TP local2;
STR local3;
if ((!((tp_5540==((TP) NULL))))) {
if ((!(TP_CLASS_is_subt(self->prog->tp_builtin->bool_2, tp_5540)))) {
PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5539));
local0 = self->prog;
local1 = ((STR) &Voidtestexpressi);
local2 = tp_5540;
local3 = STR_plus_STR_STR(local1, (*TP_str_STR[local2->header.tag+TP_str_STR_offset])(local2));
PROG_err_STR(local0, STR_plus_STR_STR(local3, ((STR) &name_5543)));
return ((AM_EXPR) NULL);
}
}
r_5542 = AM_IS_VOID_EXPR_(((AM_IS_VOID_EXPR) NULL), e_5539->source_38);
r_5542->tp_at = ((TP) self->prog->tp_builtin->bool_2);
PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5539->arg_51));
earg = e_5539->arg_51;
if (earg==NULL) {
} else
switch (earg->header.tag) {
case TR_VOID_EXPR_tag:
PROG_err_STR(self->prog, ((STR) &voidvoidisnotallowed));
return ((AM_EXPR) NULL); break;
case TR_CREATE_EXPR_tag:
if ((((TR_CREATE_EXPR) earg)->tp==((TR_TYPE_SPEC) NULL))) {
PROG_err_STR(self->prog, ((STR) &voidoncreateexpr));
return ((AM_EXPR) NULL);
} break;
case TR_ARRAY_EXPR_tag:
PROG_err_STR(self->prog, ((STR) &voidonarraycreat));
return ((AM_EXPR) NULL); break;
case TR_UNDERSCORE_ARG_tag:
PROG_err_STR(self->prog, ((STR) &void_isillegal));
return ((AM_EXPR) NULL); break;
default: ;
}
r_5542->arg_51 = TRANS_transform__5198(self, e_5539->arg_51, ((TP) NULL));
if ((r_5542->arg_51==((AM_EXPR) NULL))) {
return ((AM_EXPR) NULL);
}
return ((AM_EXPR) r_5542);
}
void TRANS_array_tp_v(TRANS self, TR_ARRAY_EXPR e_5544) {
PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5544));
PROG_err_STR(self->prog, ((STR) &Thetypeofthisarr));
}
void TRANS_array_wron(TRANS self, TR_ARRAY_EXPR e_5545, TP tp_5546) {
PROG local0;
STR local1;
TP local2;
STR local3;
STR local4;
PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5545));
local0 = self->prog;
local1 = ((STR) &Theinferredtype);
local2 = tp_5546;
local3 = STR_plus_STR_STR(local1, (*TP_str_STR[local2->header.tag+TP_str_STR_offset])(local2));
local4 = STR_plus_STR_STR(local3, ((STR) &forthisarray));
PROG_err_STR(local0, STR_plus_STR_STR(local4, ((STR) &creationexpressi)));
}
INT TR_ARRAY_EXPR_el(TR_ARRAY_EXPR self) {
INT noname5547 = ((INT) 0);
TR_EXPR local0;
if ((self->elts==((TR_EXPR) NULL))) {
return 0;
}
local0 = self->elts;
return (*TR_EXPR_size_INT[local0->header.tag+TR_EXPR_size_INT_offset])(local0);
}
AM_ARRAY_EXPR AM_ARRAY_EXPR_cr(AM_ARRAY_EXPR self, INT nargs, SFILE_ID source_5548) {
AM_ARRAY_EXPR noname5549;
AM_ARRAY_EXPR r_5550;
AM_ARRAY_EXPR local0;
local0 = ((AM_ARRAY_EXPR) sbi_arr_alloc(sizeof(struct AM_ARRAY_EXPR_struct), AM_ARRAY_EXPR_tag, sizeof(AM_EXPR) , nargs));
local0->asize = nargs;
r_5550 = local0;
r_5550->source_38 = source_5548;
return r_5550;
}
void AM_ARRAY_EXPR_as_5551(AM_ARRAY_EXPR self, INT ind_5552, AM_EXPR val_5553) {
BOOL local0;
INT local1;
INT local2;
if ((!((self==((AM_ARRAY_EXPR) NULL))))) {
local1 = 0;
local2 = (self->asize);
local0 = INT_is_bet_INT_I(ind_5552, local1, (c_INT_minus_INT_INT_chk(local2,1)));
} else {
local0 = FALSE;
}
if (!(local0)) {
fprintf(stderr,"Violation of precondition ../Library/aref.sa:38:7\n");
exit(16);
}
if (ind_5552<0||ind_5552>=self->asize) {
fprintf(stderr,"Index out of bounds ../Library/aref.sa:38:7\n");
exit(16);
}
self->arr_part[ind_5552] = val_5553;
}
AM_EXPR TRANS_transform__5554(TRANS self, TR_ARRAY_EXPR e_5555, TP tp_5556) {
AM_EXPR noname5557;
TP pt = ((TP) NULL);
AM_ARRAY_EXPR r_5558;
TR_EXPR ae;
INT i = ((INT) 0);
AM_EXPR tae;
BOOL local0;
INT local1;
AM_ARRAY_EXPR local2;
INT local3;
TR_EXPR local4;
if ((tp_5556==((TP) NULL))) {
TRANS_array_tp_v(self, e_5555);
return ((AM_EXPR) NULL);
}
if (tp_5556==NULL) {
TRANS_array_wron(self, e_5555, tp_5556);
return ((AM_EXPR) NULL);
} else
switch (tp_5556->header.tag) {
case TP_CLASS_tag:
if (IDENT_is_neq_IDE(((TP_CLASS) tp_5556)->name_19, self->prog->ident_builtin->ARRAY_ident)) {
local0 = TRUE;
} else {
local1 = ARRAYTP_size_INT(((TP_CLASS) tp_5556)->params);
local0 = (local1!=1);
}
if (local0) {
TRANS_array_wron(self, e_5555, tp_5556);
return ((AM_EXPR) NULL);
}
pt = ARRAYTP_aget_INT_TP(((TP_CLASS) tp_5556)->params, 0); break;
default: ;
TRANS_array_wron(self, e_5555, tp_5556);
return ((AM_EXPR) NULL);
}
local2 = ((AM_ARRAY_EXPR) NULL);
local3 = TR_ARRAY_EXPR_el(e_5555);
r_5558 = AM_ARRAY_EXPR_cr(local2, local3, e_5555->source_38);
r_5558->tp_at = tp_5556;
ae = e_5555->elts;
i = 0;
while (1) {
if ((!((ae==((TR_EXPR) NULL))))) {
}
else {
goto after_loop;
}
tae = TRANS_transform__5198(self, ae, pt);
if ((tae==((AM_EXPR) NULL))) {
return ((AM_EXPR) NULL);
}
AM_ARRAY_EXPR_as_5551(r_5558, i, tae);
local4 = ae;
ae = (*TR_EXPR_next_TR_EXPR[local4->header.tag+TR_EXPR_next_TR_EXPR_offset])(local4);
i = (c_INT_plus_INT_INT_chk(i,1));
}
after_loop: ;
return ((AM_EXPR) r_5558);
}
void TRANS_create_con(TRANS self, TR_CREATE_EXPR e_5560) {
PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5560));
PROG_err_STR(self->prog, ((STR) &Creationexpressi));
}
void TRANS_create_con_5561(TRANS self, TR_CREATE_EXPR e_5562, TP stp, TP tp_5563) {
PROG local0;
STR local1;
TP local2;
STR local3;
STR local4;
TP local5;
STR local6;
PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5562));
local0 = self->prog;
local1 = ((STR) &Thetypeofthecrea);
local2 = stp;
local3 = STR_plus_STR_STR(local1, (*TP_str_STR[local2->header.tag+TP_str_STR_offset])(local2));
local4 = STR_plus_STR_STR(local3, ((STR) &isnotasubtypeof_5564));
local5 = tp_5563;
local6 = STR_plus_STR_STR(local4, (*TP_str_STR[local5->header.tag+TP_str_STR_offset])(local5));
PROG_err_STR(local0, STR_plus_STR_STR(local6, ((STR) &name_5565)));
}
void TRANS_create_tp_(TRANS self, TR_CREATE_EXPR e_5566) {
PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5566));
PROG_err_STR(self->prog, ((STR) &Thiscreationexpr));
}
INT TR_CREATE_EXPR_e(TR_CREATE_EXPR self) {
INT noname5567 = ((INT) 0);
TR_EXPR local0;
if ((self->elts==((TR_EXPR) NULL))) {
return 0;
}
local0 = self->elts;
return (*TR_EXPR_size_INT[local0->header.tag+TR_EXPR_size_INT_offset])(local0);
}
CALL_TP ARRAYCALL_TP_age(ARRAYCALL_TP self, INT ind_5568) {
CALL_TP noname5569;
BOOL local0;
INT local1;
INT local2;
if ((!((self==((ARRAYCALL_TP) NULL))))) {
local1 = 0;
local2 = (self->asize);
local0 = INT_is_bet_INT_I(ind_5568, local1, (c_INT_minus_INT_INT_chk(local2,1)));
} else {
local0 = FALSE;
}
if (!(local0)) {
fprintf(stderr,"Violation of precondition ../Library/aref.sa:33:7\n");
exit(16);
}
if (ind_5568<0||ind_5568>=self->asize) {
fprintf(stderr,"Index out of bounds ../Library/aref.sa:33:7\n");
exit(16);
}
return self->arr_part[ind_5568];
}
void TRANS_create_bad(TRANS self, TR_CREATE_EXPR e_5570, TP rt, TP at_5571) {
PROG local0;
STR local1;
TP local2;
STR local3;
STR local4;
TP local5;
STR local6;
PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5570));
local0 = self->prog;
local1 = ((STR) &Thiscreationexpr_5572);
local2 = rt;
local3 = STR_plus_STR_STR(local1, (*TP_str_STR[local2->header.tag+TP_str_STR_offset])(local2));
local4 = STR_plus_STR_STR(local3, ((STR) &ratherthan));
local5 = at_5571;
local6 = STR_plus_STR_STR(local4, (*TP_str_STR[local5->header.tag+TP_str_STR_offset])(local5));
PROG_err_STR(local0, STR_plus_STR_STR(local6, ((STR) &asitmust)));
}
AM_EXPR TRANS_transform__5573(TRANS self, TR_CREATE_EXPR e_5574, TP tp_5575) {
AM_EXPR noname5576;
TP at_5577 = ((TP) NULL);
INT na = ((INT) 0);
AM_ROUT_CALL_EXPR r_5578;
AM_VOID_CONST av;
CALL_SIG cs;
TR_EXPR ce;
INT i = ((INT) 0);
TP local0;
TP local1;
AM_ROUT_CALL_EXPR local2;
INT local3;
ARRAYCALL_TP local4;
INT local5;
ARRAYCALL_TP local6;
AM_EXPR local7;
TR_EXPR local8;
TP local9;
IMPL local10;
IFC local11;
INT local12;
TR_EXPR local13;
TP local14;
if (self->in_constant) {
TRANS_create_con(self, e_5574);
return ((AM_EXPR) NULL);
}
if ((!((e_5574->tp==((TR_TYPE_SPEC) NULL))))) {
at_5577 = TRANS_tp_of_TR_T(self, e_5574->tp);
if ((!((tp_5575==((TP) NULL))))) {
local0 = at_5577;
if ((!((*TP_is_subtype_TP[local0->header.tag+TP_is_subtype_TP_offset])(local0, tp_5575)))) {
TRANS_create_con_5561(self, e_5574, at_5577, tp_5575);
return ((AM_EXPR) NULL);
}
}
}
else {
if ((tp_5575==((TP) NULL))) {
TRANS_create_tp_(self, e_5574);
return ((AM_EXPR) NULL);
}
else {
at_5577 = tp_5575;
}
}
local1 = at_5577;
if ((*TP_is_abstract_BOOL[local1->header.tag+TP_is_abstract_BOOL_offset])(local1)) {
PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5574));
PROG_err_STR(self->prog, ((STR) &Creationexpressi_5579));
return ((AM_EXPR) NULL);
}
na = TR_CREATE_EXPR_e(e_5574);
local2 = ((AM_ROUT_CALL_EXPR) NULL);
local3 = (c_INT_plus_INT_INT_chk(na,1));
r_5578 = AM_ROUT_CALL_EXP_5400(local2, local3, e_5574->source_38);
av = AM_VOID_CONST_cr(((AM_VOID_CONST) NULL), e_5574->source_38);
av->tp_at = at_5577;
AM_ROUT_CALL_EXP_5404(r_5578, 0, ((AM_EXPR) av));
cs = CALL_SIG_create_(((CALL_SIG) NULL));
if ((na>0)) {
cs->args_7 = ARRAYCALL_TP_cre(((ARRAYCALL_TP) NULL), na);
}
cs->tp = at_5577;
cs->name_19 = self->prog->ident_builtin->create_ident;
cs->has_ret = TRUE;
ce = e_5574->elts;
i = 0;
while (1) {
if ((!((ce==((TR_EXPR) NULL))))) {
}
else {
goto after_loop;
}
local4 = cs->args_7;
ARRAYCALL_TP_ase(local4, i, TRANS_call_tp_of(self, ce));
if ((ARRAYCALL_TP_age(cs->args_7, i)==((CALL_TP) NULL))) {
local5 = (c_INT_plus_INT_INT_chk(i,1));
AM_ROUT_CALL_EXP_5404(r_5578, local5, TRANS_transform__5198(self, ce, ((TP) NULL)));
if ((AM_ROUT_CALL_EXP_4316(r_5578, (c_INT_plus_INT_INT_chk(i,1)))==((AM_EXPR) NULL))) {
return ((AM_EXPR) NULL);
}
local6 = cs->args_7;
local7 = AM_ROUT_CALL_EXP_4316(r_5578, (c_INT_plus_INT_INT_chk(i,1)));
ARRAYCALL_TP_ase(local6, i, ((CALL_TP) (*AM_EXPR_tp_TP[local7->header.tag+AM_EXPR_tp_TP_offset])(local7)));
}
local8 = ce;
ce = (*TR_EXPR_next_TR_EXPR[local8->header.tag+TR_EXPR_next_TR_EXPR_offset])(local8);
i = (c_INT_plus_INT_INT_chk(i,1));
}
after_loop: ;
PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5574));
local9 = at_5577;
if ((*TP_is_eq_TP_BOOL[local9->header.tag+TP_is_eq_TP_BOOL_offset])(local9, ((TP) self->tp_con->same_34))) {
local10 = IMPL_TBL_impl_of(self->prog->impl_tbl, at_5577);
r_5578->fun = IMPL_sig_for_int(local10, cs);
}
else {
local11 = IFC_TBL_ifc_of_T(self->prog->ifc_tbl, at_5577);
r_5578->fun = IFC_sig_for_call(local11, cs);
}
if ((r_5578->fun==((SIG) NULL))) {
return ((AM_EXPR) NULL);
}
ce = e_5574->elts;
i = 0;
while (1) {
if ((!((ce==((TR_EXPR) NULL))))) {
}
else {
goto after_loop_5581;
}
if ((AM_ROUT_CALL_EXP_4316(r_5578, (c_INT_plus_INT_INT_chk(i,1)))==((AM_EXPR) NULL))) {
local12 = (c_INT_plus_INT_INT_chk(i,1));
AM_ROUT_CALL_EXP_5404(r_5578, local12, TRANS_transform__5198(self, ce, ARRAYTP_aget_INT_TP(r_5578->fun->args_7, i)));
if ((AM_ROUT_CALL_EXP_4316(r_5578, (c_INT_plus_INT_INT_chk(i,1)))==((AM_EXPR) NULL))) {
return ((AM_EXPR) NULL);
}
}
local13 = ce;
ce = (*TR_EXPR_next_TR_EXPR[local13->header.tag+TR_EXPR_next_TR_EXPR_offset])(local13);
i = (c_INT_plus_INT_INT_chk(i,1));
}
after_loop_5581: ;
local14 = r_5578->fun->ret;
if ((*TP_is_neq_TP_BOOL[local14->header.tag+TP_is_neq_TP_BOOL_offset])(local14, at_5577)) {
TRANS_create_bad(self, e_5574, r_5578->fun->ret, at_5577);
return ((AM_EXPR) NULL);
}
self->cur_rout->calls_58 = FLISTAM_EXPR_pus(self->cur_rout->calls_58, ((AM_EXPR) r_5578));
return TRANS_inline_AM_(self, r_5578);
}
void TRANS_bound_crea(TRANS self, TR_BOUND_CREATE_EXPR e_5583) {
PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5583));
PROG_err_STR(self->prog, ((STR) &Boundcreationexp));
}
void TRANS_bound_crea_5584(TRANS self, TR_BOUND_CREATE_EXPR e_5585) {
PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5585));
PROG_err_STR(self->prog, ((STR) &Boundcreationcal));
}
void TRANS_bound_crea_5586(TRANS self, TR_BOUND_CREATE_EXPR e_5587) {
PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5587));
PROG_err_STR(self->prog, ((STR) &Boundcreationcal_5588));
}
void TRANS_bound_crea_5589(TRANS self, TR_BOUND_CREATE_EXPR e_5590) {
PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5590));
PROG_err_STR(self->prog, ((STR) &Boundcreationcal_5591));
}
void TRANS_bound_crea_5592(TRANS self, TR_BOUND_CREATE_EXPR e_5593) {
PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5593));
PROG_err_STR(self->prog, ((STR) &Boundcreationcal_5594));
}
TUPAM_EXPRTP TRANS_bound_crea_5595(TRANS self, TR_BOUND_CREATE_EXPR e_5596) {
TUPAM_EXPRTP noname5597 = TUPAM_EXPRTP_zero;
TR_CALL_EXPR call_5598;
TR_EXPR self_tr;
AM_EXPR self_val = ((AM_EXPR) NULL);
AM_VOID_CONST res;
AM_LOCAL_EXPR l;
TUPAM_EXPRTP local0;
AM_EXPR local1;
TUPAM_EXPRTP local2;
AM_EXPR local3;
TUPAM_EXPRTP local4;
AM_EXPR local5;
TUPAM_EXPRTP local6;
AM_EXPR local7;
TUPAM_EXPRTP local8;
AM_EXPR local9;
call_5598 = e_5596->call_43;
self_tr = call_5598->ob;
if ((!((self_tr==((TR_EXPR) NULL))))) {
if (self_tr==NULL) {
self_val = TRANS_transform__5198(self, self_tr, ((TP) NULL));
local0 = TUPAM_EXPRTP_zero;
local1 = self_val;
return TUPAM_EXPRTP_cre(local0, self_val, (*AM_EXPR_tp_TP[local1->header.tag+AM_EXPR_tp_TP_offset])(local1));
} else
switch (self_tr->header.tag) {
case TR_VOID_EXPR_tag:
TRANS_bound_crea_5584(self, e_5596);
return TUPAM_EXPRTP_cre(TUPAM_EXPRTP_zero, ((AM_EXPR) NULL), ((TP) NULL)); break;
case TR_CREATE_EXPR_tag:
if ((((TR_CREATE_EXPR) self_tr)->tp==((TR_TYPE_SPEC) NULL))) {
TRANS_bound_crea_5586(self, e_5596);
return TUPAM_EXPRTP_cre(TUPAM_EXPRTP_zero, ((AM_EXPR) NULL), ((TP) NULL));
}
else {
self_val = TRANS_transform__5198(self, self_tr, ((TP) NULL));
local2 = TUPAM_EXPRTP_zero;
local3 = self_val;
return TUPAM_EXPRTP_cre(local2, self_val, (*AM_EXPR_tp_TP[local3->header.tag+AM_EXPR_tp_TP_offset])(local3));
} break;
case TR_ARRAY_EXPR_tag:
TRANS_bound_crea_5589(self, e_5596);
return TUPAM_EXPRTP_cre(TUPAM_EXPRTP_zero, ((AM_EXPR) NULL), ((TP) NULL)); break;
case TR_UNDERSCORE_ARG_tag:
if ((((TR_UNDERSCORE_ARG) self_tr)->tp==((TR_TYPE_SPEC) NULL))) {
return TUPAM_EXPRTP_cre(TUPAM_EXPRTP_zero, ((AM_EXPR) NULL), self->impl->tp);
}
else {
local4 = TUPAM_EXPRTP_zero;
local5 = ((AM_EXPR) NULL);
return TUPAM_EXPRTP_cre(local4, local5, TRANS_tp_of_TR_T(self, ((TR_UNDERSCORE_ARG) self_tr)->tp));
} break;
default: ;
self_val = TRANS_transform__5198(self, self_tr, ((TP) NULL));
local6 = TUPAM_EXPRTP_zero;
local7 = self_val;
return TUPAM_EXPRTP_cre(local6, self_val, (*AM_EXPR_tp_TP[local7->header.tag+AM_EXPR_tp_TP_offset])(local7));
}
}
else {
if ((!((call_5598->tp==((TR_TYPE_SPEC) NULL))))) {
res = AM_VOID_CONST_cr(((AM_VOID_CONST) NULL), call_5598->source_38);
res->tp_at = TRANS_tp_of_TR_T(self, call_5598->tp);
return TUPAM_EXPRTP_cre(TUPAM_EXPRTP_zero, ((AM_EXPR) res), res->tp_at);
}
else {
if ((call_5598->args_7==((TR_EXPR) NULL))) {
l = TRANS_local_with(self, call_5598->name_19);
if ((!((l==((AM_LOCAL_EXPR) NULL))))) {
TRANS_bound_crea_5592(self, e_5596);
return TUPAM_EXPRTP_cre(TUPAM_EXPRTP_zero, ((AM_EXPR) NULL), ((TP) NULL));
}
}
self_val = ((AM_EXPR) AM_ROUT_DEF_self(self->cur_rout));
}
}
local8 = TUPAM_EXPRTP_zero;
local9 = self_val;
return TUPAM_EXPRTP_cre(local8, self_val, (*AM_EXPR_tp_TP[local9->header.tag+AM_EXPR_tp_TP_offset])(local9));
}
INT TRANS_bound_crea_5599(TRANS self, AM_EXPR self_val, TR_BOUND_CREATE_EXPR e_5600) {
INT noname5601 = ((INT) 0);
INT r_5602 = ((INT) 0);
TR_EXPR a_5603;
TR_EXPR local0;
if ((self_val==((AM_EXPR) NULL))) {
r_5602 = 0;
}
else {
r_5602 = 1;
}
a_5603 = e_5600->call_43->args_7;
while (1) {
if ((!((a_5603==((TR_EXPR) NULL))))) {
}
else {
goto after_loop;
}
if (a_5603==NULL) {
r_5602 = (c_INT_plus_INT_INT_chk(r_5602,1));
} else
switch (a_5603->header.tag) {
case TR_UNDERSCORE_ARG_tag: break;
default: ;
r_5602 = (c_INT_plus_INT_INT_chk(r_5602,1));
}
local0 = a_5603;
a_5603 = (*TR_EXPR_next_TR_EXPR[local0->header.tag+TR_EXPR_next_TR_EXPR_offset])(local0);
}
after_loop: ;
return r_5602;
}
AM_BND_CREATE_EXPR AM_BND_CREATE_EX_5605(AM_BND_CREATE_EXPR self, INT n_5606) {
AM_BND_CREATE_EXPR noname5607;
AM_BND_CREATE_EXPR local0;
if (!((n_5606>=0))) {
fprintf(stderr,"Violation of precondition ../Library/array.sa:56:9\n");
exit(16);
}
local0 = ((AM_BND_CREATE_EXPR) sbi_arr_alloc(sizeof(struct AM_BND_CREATE_EXPR_struct), AM_BND_CREATE_EXPR_tag, sizeof(AM_EXPR) , n_5606));
local0->asize = n_5606;
return local0;
}
SIG TRANS_bound_crea_5608(TRANS self, TR_BOUND_CREATE_EXPR e_5609, TP self_tp_5610) {
SIG noname5611;
CALL_SIG call_sig;
TR_EXPR ca;
CALL_TP atp;
ARRAYCALL_TP noname5612;
ARRAYCALL_TP local0;
AM_EXPR local1;
TR_EXPR local2;
TP local3;
call_sig = CALL_SIG_create_(((CALL_SIG) NULL));
call_sig->tp = self_tp_5610;
call_sig->name_19 = e_5609->call_43->name_19;
local0 = ((ARRAYCALL_TP) NULL);
call_sig->args_7 = ARRAYCALL_TP_cre(local0, TR_CALL_EXPR_arg(e_5609->call_43));
if ((!((e_5609->ret==((TR_TYPE_SPEC) NULL))))) {
call_sig->has_ret = TRUE;
}
else {
call_sig->unknown_ret = TRUE;
}
ca = e_5609->call_43->args_7;
{
struct ARRAYCALL_TP_set_frame_struct temp5613_0;
ARRAYCALL_TP_set_frame
noname5614 = &temp5613_0;
noname5614->state = 0;
while (1) {
if ((!((ca==((TR_EXPR) NULL))))) {
}
else {
goto after_loop;
}
atp = TRANS_call_tp_of(self, ca);
if ((atp==((CALL_TP) NULL))) {
local1 = TRANS_transform__5198(self, ca, ((TP) NULL));
atp = ((CALL_TP) (*AM_EXPR_tp_TP[local1->header.tag+AM_EXPR_tp_TP_offset])(local1));
}
if (noname5614->state == 0) {
noname5612 = call_sig->args_7;
noname5614->arg0 = noname5612;
}
noname5614->arg1 = atp;
ARRAYCALL_TP_set(noname5614);
if (noname5614->state == -1) goto after_loop;
0 /* No return value from iter call */;
local2 = ca;
ca = (*TR_EXPR_next_TR_EXPR[local2->header.tag+TR_EXPR_next_TR_EXPR_offset])(local2);
}
}
after_loop: ;
PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5609));
local3 = self_tp_5610;
return CALL_SIG_lookup_(call_sig, (*TP_is_eq_TP_BOOL[local3->header.tag+TP_is_eq_TP_BOOL_offset])(local3, ((TP) self->tp_con->same_34)));
}
void TRANS_bound_crea_5615(TRANS self, TR_BOUND_CREATE_EXPR e_5616) {
PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5616));
PROG_err_STR(self->prog, ((STR) &Bounditersmustbe));
}
void TRANS_bound_crea_5617(TRANS self, TR_BOUND_CREATE_EXPR e_5618) {
PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5618));
PROG_err_STR(self->prog, ((STR) &Boundroutinesmus));
}
ARRAYINT ARRAYINT_create_(ARRAYINT self, INT n_5619) {
ARRAYINT noname5620;
ARRAYINT local0;
if (!((n_5619>=0))) {
fprintf(stderr,"Violation of precondition ../Library/array.sa:56:9\n");
exit(16);
}
local0 = ((ARRAYINT) sbi_arr_alloc_atomic(sizeof(struct ARRAYINT_struct), ARRAYINT_tag, sizeof(INT) , n_5619));
local0->asize = n_5619;
return local0;
}
void ARRAYINT_aset_IN(ARRAYINT self, INT ind_5621, INT val_5622) {
BOOL local0;
INT local1;
INT local2;
if ((!((self==((ARRAYINT) NULL))))) {
local1 = 0;
local2 = (self->asize);
local0 = INT_is_bet_INT_I(ind_5621, local1, (c_INT_minus_INT_INT_chk(local2,1)));
} else {
local0 = FALSE;
}
if (!(local0)) {
fprintf(stderr,"Violation of precondition ../Library/aref.sa:38:7\n");
exit(16);
}
if (ind_5621<0||ind_5621>=self->asize) {
fprintf(stderr,"Index out of bounds ../Library/aref.sa:38:7\n");
exit(16);
}
self->arr_part[ind_5621] = val_5622;
}
ARRAYINT TRANS_bound_crea_5623(TRANS self, INT nbnd, TR_BOUND_CREATE_EXPR e_5624) {
ARRAYINT noname5625;
ARRAYINT r_5626;
INT rind = ((INT) 0);
TR_EXPR st;
INT aind = ((INT) 0);
TR_EXPR a_5627;
TR_EXPR local0;
r_5626 = ARRAYINT_create_(((ARRAYINT) NULL), nbnd);
rind = 0;
st = e_5624->call_43->ob;
if (st==NULL) {
ARRAYINT_aset_IN(r_5626, rind, 0);
rind = (c_INT_plus_INT_INT_chk(rind,1));
} else
switch (st->header.tag) {
case TR_UNDERSCORE_ARG_tag: break;
default: ;
ARRAYINT_aset_IN(r_5626, rind, 0);
rind = (c_INT_plus_INT_INT_chk(rind,1));
}
aind = 0;
a_5627 = e_5624->call_43->args_7;
while (1) {
if ((!((a_5627==((TR_EXPR) NULL))))) {
}
else {
goto after_loop;
}
aind = (c_INT_plus_INT_INT_chk(aind,1));
if (a_5627==NULL) {
ARRAYINT_aset_IN(r_5626, rind, aind);
rind = (c_INT_plus_INT_INT_chk(rind,1));
} else
switch (a_5627->header.tag) {
case TR_UNDERSCORE_ARG_tag: break;
default: ;
ARRAYINT_aset_IN(r_5626, rind, aind);
rind = (c_INT_plus_INT_INT_chk(rind,1));
}
local0 = a_5627;
a_5627 = (*TR_EXPR_next_TR_EXPR[local0->header.tag+TR_EXPR_next_TR_EXPR_offset])(local0);
}
after_loop: ;
return r_5626;
}
ARRAYINT TRANS_bound_crea_5629(TRANS self, INT nbnd, TR_BOUND_CREATE_EXPR e_5630) {
ARRAYINT noname5631;
ARRAYINT r_5632;
INT rind = ((INT) 0);
TR_EXPR st;
INT aind = ((INT) 0);
TR_EXPR a_5633;
ARRAYINT local0;
INT local1;
INT local2;
TR_EXPR local3;
local0 = ((ARRAYINT) NULL);
local1 = 1;
local2 = (c_INT_plus_INT_INT_chk(local1,TR_CALL_EXPR_arg(e_5630->call_43)));
r_5632 = ARRAYINT_create_(local0, (c_INT_minus_INT_INT_chk(local2,nbnd)));
rind = 0;
st = e_5630->call_43->ob;
if (st==NULL) {
} else
switch (st->header.tag) {
case TR_UNDERSCORE_ARG_tag:
ARRAYINT_aset_IN(r_5632, rind, 0);
rind = (c_INT_plus_INT_INT_chk(rind,1)); break;
default: ;
}
aind = 0;
a_5633 = e_5630->call_43->args_7;
while (1) {
if ((!((a_5633==((TR_EXPR) NULL))))) {
}
else {
goto after_loop;
}
aind = (c_INT_plus_INT_INT_chk(aind,1));
if (a_5633==NULL) {
} else
switch (a_5633->header.tag) {
case TR_UNDERSCORE_ARG_tag:
ARRAYINT_aset_IN(r_5632, rind, aind);
rind = (c_INT_plus_INT_INT_chk(rind,1)); break;
default: ;
}
local3 = a_5633;
a_5633 = (*TR_EXPR_next_TR_EXPR[local3->header.tag+TR_EXPR_next_TR_EXPR_offset])(local3);
}
after_loop: ;
return r_5632;
}
void AM_BND_CREATE_EX_5635(AM_BND_CREATE_EXPR self, INT ind_5636, AM_EXPR val_5637) {
BOOL local0;
INT local1;
INT local2;
if ((!((self==((AM_BND_CREATE_EXPR) NULL))))) {
local1 = 0;
local2 = (self->asize);
local0 = INT_is_bet_INT_I(ind_5636, local1, (c_INT_minus_INT_INT_chk(local2,1)));
} else {
local0 = FALSE;
}
if (!(local0)) {
fprintf(stderr,"Violation of precondition ../Library/aref.sa:38:7\n");
exit(16);
}
if (ind_5636<0||ind_5636>=self->asize) {
fprintf(stderr,"Index out of bounds ../Library/aref.sa:38:7\n");
exit(16);
}
self->arr_part[ind_5636] = val_5637;
}
void TRANS_bound_crea_5638(TRANS self, TR_BOUND_CREATE_EXPR e_5639) {
PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5639));
PROG_err_STR(self->prog, ((STR) &Theexpressionfor_5640));
}
void TRANS_bound_crea_5641(TRANS self, TR_EXPR a_5642) {
PROG_err_loc_PRO(self->prog, ((PROG_ERR) a_5642));
PROG_err_STR(self->prog, ((STR) &Onceargumentsofi));
}
INT ARRAYINT_size_INT(ARRAYINT self) {
INT noname5643 = ((INT) 0);
if ((self==((ARRAYINT) NULL))) {
return 0;
}
return (self->asize);
}
void TRANS_bound_crea_5644(TRANS self, AM_BND_CREATE_EXPR r_5645) {
SIG fun_5646;
ARRAYTP args_5647;
TP t_5648 = ((TP) NULL);
BOOL h = ((BOOL) 0);
ARRAYBOOL hot_5649;
ARRAYINT noname5650;
INT i = ((INT) 0);
ARRAYTP noname5651;
ARRAYBOOL noname5652;
ARRAYINT noname5653;
INT i_5654 = ((INT) 0);
ARRAYTP noname5655;
ARRAYTP local0;
ARRAYBOOL local1;
INT local2;
ARRAYTP local3;
BOOL local4;
ARRAYBOOL local5;
INT local6;
ARRAYTP local7;
fun_5646 = r_5645->fun;
local0 = ((ARRAYTP) NULL);
args_5647 = ARRAYTP_create_I(local0, ARRAYINT_size_INT(r_5645->unbnd_args));
if (SIG_is_iter_BOOL(fun_5646)) {
local1 = ((ARRAYBOOL) NULL);
hot_5649 = ARRAYBOOL_create(local1, ARRAYINT_size_INT(r_5645->unbnd_args));
{
struct ARRAYINT_elt_INT_frame_struct temp5656_0;
ARRAYINT_elt_INT_frame
noname5657 = &temp5656_0;
struct ARRAYTP_set_TP_frame_struct temp5656_1;
ARRAYTP_set_TP_frame
noname5658 = &temp5656_1;
struct ARRAYBOOL_set_BOOL_frame_struct temp5656_2;
ARRAYBOOL_set_BOOL_frame
noname5659 = &temp5656_2;
noname5657->state = 0;
noname5658->state = 0;
noname5659->state = 0;
while (1) {
if (noname5657->state == 0) {
noname5650 = r_5645->unbnd_args;
noname5657->arg0 = noname5650;
}
local2 = ARRAYINT_elt_INT(noname5657);
if (noname5657->state == -1) goto after_loop;
i = local2;
if ((i==0)) {
t_5648 = fun_5646->tp;
}
else {
local3 = fun_5646->args_7;
t_5648 = ARRAYTP_aget_INT_TP(local3, (c_INT_minus_INT_INT_chk(i,1)));
}
if (noname5658->state == 0) {
noname5651 = args_5647;
noname5658->arg0 = noname5651;
}
noname5658->arg1 = t_5648;
ARRAYTP_set_TP(noname5658);
if (noname5658->state == -1) goto after_loop;
0 /* No return value from iter call */;
if ((i==0)) {
local4 = TRUE;
} else {
local4 = (fun_5646->hot==((ARRAYBOOL) NULL));
}
if (local4) {
h = FALSE;
}
else {
local5 = fun_5646->hot;
h = ARRAYBOOL_aget_I(local5, (c_INT_minus_INT_INT_chk(i,1)));
}
if (noname5659->state == 0) {
noname5652 = hot_5649;
noname5659->arg0 = noname5652;
}
noname5659->arg1 = h;
ARRAYBOOL_set_BOOL(noname5659);
if (noname5659->state == -1) goto after_loop;
0 /* No return value from iter call */;
}
}
after_loop: ;
r_5645->tp_at = ((TP) TP_TBL_tp_iter_f(self->prog->tp_tbl, args_5647, hot_5649, fun_5646->ret));
}
else {
{
struct ARRAYINT_elt_INT_frame_struct temp5661_0;
ARRAYINT_elt_INT_frame
noname5662 = &temp5661_0;
struct ARRAYTP_set_TP_frame_struct temp5661_1;
ARRAYTP_set_TP_frame
noname5663 = &temp5661_1;
noname5662->state = 0;
noname5663->state = 0;
while (1) {
if (noname5662->state == 0) {
noname5653 = r_5645->unbnd_args;
noname5662->arg0 = noname5653;
}
local6 = ARRAYINT_elt_INT(noname5662);
if (noname5662->state == -1) goto after_loop_5660;
i_5654 = local6;
if ((i_5654==0)) {
t_5648 = fun_5646->tp;
}
else {
local7 = fun_5646->args_7;
t_5648 = ARRAYTP_aget_INT_TP(local7, (c_INT_minus_INT_INT_chk(i_5654,1)));
}
if (noname5663->state == 0) {
noname5655 = args_5647;
noname5663->arg0 = noname5655;
}
noname5663->arg1 = t_5648;
ARRAYTP_set_TP(noname5663);
if (noname5663->state == -1) goto after_loop_5660;
0 /* No return value from iter call */;
}
}
after_loop_5660: ;
r_5645->tp_at = ((TP) TP_TBL_tp_rout_f(self->prog->tp_tbl, args_5647, fun_5646->ret));
}
}
void TRANS_bound_crea_5664(TRANS self, TR_BOUND_CREATE_EXPR e_5665, TP stp, TP tp_5666) {
PROG local0;
STR local1;
TP local2;
STR local3;
STR local4;
TP local5;
STR local6;
PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5665));
local0 = self->prog;
local1 = ((STR) &Thetypeoftheboun);
local2 = stp;
local3 = STR_plus_STR_STR(local1, (*TP_str_STR[local2->header.tag+TP_str_STR_offset])(local2));
local4 = STR_plus_STR_STR(local3, ((STR) &isnotasubtypeof_5667));
local5 = tp_5666;
local6 = STR_plus_STR_STR(local4, (*TP_str_STR[local5->header.tag+TP_str_STR_offset])(local5));
PROG_err_STR(local0, STR_plus_STR_STR(local6, ((STR) &name_5668)));
}
AM_EXPR TRANS_transform__5669(TRANS self, TR_BOUND_CREATE_EXPR e_5670, TP tp_5671) {
AM_EXPR noname5672;
TUPAM_EXPRTP st = TUPAM_EXPRTP_zero;
AM_EXPR self_val;
TP self_tp_5673;
INT nbnd = ((INT) 0);
AM_BND_CREATE_EXPR r_5674;
INT bind_5675 = ((INT) 0);
BOOL hot_5676 = ((BOOL) 0);
TR_EXPR a_5677;
ARRAYTP noname5678;
TP atp;
ARRAYBOOL noname5679;
BOOL local0;
BOOL local1;
BOOL local2;
TP local3;
BOOL local4;
BOOL local5;
BOOL local6;
BOOL local7;
BOOL local8;
TR_EXPR local9;
BOOL local10;
TP local11;
if (self->in_constant) {
TRANS_bound_crea(self, e_5670);
return ((AM_EXPR) NULL);
}
st = TRANS_bound_crea_5595(self, e_5670);
self_val = st.t1;
self_tp_5673 = st.t2;
if ((self_tp_5673==((TP) NULL))) {
return ((AM_EXPR) NULL);
}
nbnd = TRANS_bound_crea_5599(self, self_val, e_5670);
r_5674 = AM_BND_CREATE_EX_5605(((AM_BND_CREATE_EXPR) NULL), nbnd);
r_5674->fun = TRANS_bound_crea_5608(self, e_5670, self_tp_5673);
if ((r_5674->fun==((SIG) NULL))) {
return ((AM_EXPR) NULL);
}
if (e_5670->is_iter) {
local0 = (!(SIG_is_iter_BOOL(r_5674->fun)));
} else {
local0 = FALSE;
}
if (local0) {
TRANS_bound_crea_5615(self, e_5670);
return ((AM_EXPR) NULL);
}
else {
if ((!(e_5670->is_iter))) {
local1 = SIG_is_iter_BOOL(r_5674->fun);
} else {
local1 = FALSE;
}
if (local1) {
TRANS_bound_crea_5617(self, e_5670);
return ((AM_EXPR) NULL);
}
}
r_5674->bnd_args = TRANS_bound_crea_5623(self, nbnd, e_5670);
r_5674->unbnd_args = TRANS_bound_crea_5629(self, nbnd, e_5670);
bind_5675 = 0;
if ((!((self_val==((AM_EXPR) NULL))))) {
AM_BND_CREATE_EX_5635(r_5674, bind_5675, self_val);
bind_5675 = (c_INT_plus_INT_INT_chk(bind_5675,1));
if (e_5670->is_iter) {
local2 = TRANS_contains_i(self, self_val);
} else {
local2 = FALSE;
}
if (local2) {
TRANS_bound_crea_5638(self, e_5670);
return ((AM_EXPR) NULL);
}
a_5677 = e_5670->call_43->args_7;
{
struct ARRAYTP_elt_TP_frame_struct temp5680_0;
ARRAYTP_elt_TP_frame
noname5681 = &temp5680_0;
struct ARRAYBOOL_elt_BOOL_frame_struct temp5680_1;
ARRAYBOOL_elt_BOOL_frame
noname5682 = &temp5680_1;
noname5681->state = 0;
noname5682->state = 0;
while (1) {
if ((!((a_5677==((TR_EXPR) NULL))))) {
}
else {
goto after_loop;
}
if (noname5681->state == 0) {
noname5678 = r_5674->fun->args_7;
noname5681->arg0 = noname5678;
}
local3 = ARRAYTP_elt_TP(noname5681);
if (noname5681->state == -1) goto after_loop;
atp = local3;
if ((!((r_5674->fun->hot==((ARRAYBOOL) NULL))))) {
if (noname5682->state == 0) {
noname5679 = r_5674->fun->hot;
noname5682->arg0 = noname5679;
}
local4 = ARRAYBOOL_elt_BOOL(noname5682);
if (noname5682->state == -1) goto after_loop;
hot_5676 = local4;
}
if (a_5677==NULL) {
AM_BND_CREATE_EX_5635(r_5674, bind_5675, TRANS_transform__5198(self, a_5677, atp));
if ((AM_BND_CREATE_EX_3787(r_5674, bind_5675)==((AM_EXPR) NULL))) {
return ((AM_EXPR) NULL);
}
if (e_5670->is_iter) {
local6 = (!(hot_5676));
} else {
local6 = FALSE;
}
if (local6) {
local5 = TRANS_contains_i(self, AM_BND_CREATE_EX_3787(r_5674, bind_5675));
} else {
local5 = FALSE;
}
if (local5) {
TRANS_bound_crea_5641(self, a_5677);
return ((AM_EXPR) NULL);
}
bind_5675 = (c_INT_plus_INT_INT_chk(bind_5675,1));
} else
switch (a_5677->header.tag) {
case TR_UNDERSCORE_ARG_tag: break;
default: ;
AM_BND_CREATE_EX_5635(r_5674, bind_5675, TRANS_transform__5198(self, a_5677, atp));
if ((AM_BND_CREATE_EX_3787(r_5674, bind_5675)==((AM_EXPR) NULL))) {
return ((AM_EXPR) NULL);
}
if (e_5670->is_iter) {
local8 = (!(hot_5676));
} else {
local8 = FALSE;
}
if (local8) {
local7 = TRANS_contains_i(self, AM_BND_CREATE_EX_3787(r_5674, bind_5675));
} else {
local7 = FALSE;
}
if (local7) {
TRANS_bound_crea_5641(self, a_5677);
return ((AM_EXPR) NULL);
}
bind_5675 = (c_INT_plus_INT_INT_chk(bind_5675,1));
}
local9 = a_5677;
a_5677 = (*TR_EXPR_next_TR_EXPR[local9->header.tag+TR_EXPR_next_TR_EXPR_offset])(local9);
}
}
after_loop: ;
}
TRANS_bound_crea_5644(self, r_5674);
if ((!((tp_5671==((TP) NULL))))) {
local11 = r_5674->tp_at;
local10 = (!((*TP_is_subtype_TP[local11->header.tag+TP_is_subtype_TP_offset])(local11, tp_5671)));
} else {
local10 = FALSE;
}
if (local10) {
TRANS_bound_crea_5664(self, e_5670, r_5674->tp_at, tp_5671);
return ((AM_EXPR) NULL);
}
self->cur_rout->calls_58 = FLISTAM_EXPR_pus(self->cur_rout->calls_58, ((AM_EXPR) r_5674));
return ((AM_EXPR) r_5674);
}
void TRANS_and_contex(TRANS self, TR_AND_EXPR e_5683, TP tp_5684) {
PROG local0;
STR local1;
TP local2;
STR local3;
PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5683));
local0 = self->prog;
local1 = STR_plus_STR_STR(((STR) &Andexpressionsre), ((STR) ¬subtypesof));
local2 = tp_5684;
local3 = STR_plus_STR_STR(local1, (*TP_str_STR[local2->header.tag+TP_str_STR_offset])(local2));
PROG_err_STR(local0, STR_plus_STR_STR(local3, ((STR) &name_5685)));
}
AM_IF_EXPR AM_IF_EXPR_creat(AM_IF_EXPR self, SFILE_ID source_5686) {
AM_IF_EXPR noname5687;
AM_IF_EXPR r_5688;
AM_IF_EXPR local0;
local0 = ((AM_IF_EXPR) sbi_alloc(sizeof(struct AM_IF_EXPR_struct), AM_IF_EXPR_tag));
r_5688 = local0;
r_5688->source_38 = source_5686;
return r_5688;
}
AM_BOOL_CONST AM_BOOL_CONST_cr(AM_BOOL_CONST self, SFILE_ID src_5689) {
AM_BOOL_CONST noname5690;
AM_BOOL_CONST r_5691;
AM_BOOL_CONST local0;
local0 = ((AM_BOOL_CONST) sbi_alloc(sizeof(struct AM_BOOL_CONST_struct), AM_BOOL_CONST_tag));
r_5691 = local0;
r_5691->source_38 = src_5689;
return r_5691;
}
AM_EXPR TRANS_transform__5692(TRANS self, TR_AND_EXPR e_5693, TP tp_5694) {
AM_EXPR noname5695;
AM_EXPR e1_5696;
AM_EXPR e2_5697;
AM_IF_EXPR r_5698;
AM_BOOL_CONST abc;
BOOL local0;
if ((!((tp_5694==((TP) NULL))))) {
if ((!(TP_CLASS_is_subt(self->prog->tp_builtin->bool_2, tp_5694)))) {
TRANS_and_contex(self, e_5693, tp_5694);
return ((AM_EXPR) NULL);
}
}
e1_5696 = TRANS_transform__5198(self, e_5693->e1, ((TP) self->prog->tp_builtin->bool_2));
e2_5697 = TRANS_transform__5198(self, e_5693->e2, ((TP) self->prog->tp_builtin->bool_2));
if ((e1_5696==((AM_EXPR) NULL))) {
local0 = TRUE;
} else {
local0 = (e2_5697==((AM_EXPR) NULL));
}
if (local0) {
return ((AM_EXPR) NULL);
}
r_5698 = AM_IF_EXPR_creat(((AM_IF_EXPR) NULL), e_5693->source_38);
r_5698->test_40 = e1_5696;
r_5698->if_true = e2_5697;
abc = AM_BOOL_CONST_cr(((AM_BOOL_CONST) NULL), e_5693->source_38);
abc->val_16 = FALSE;
r_5698->if_false = ((AM_EXPR) abc);
r_5698->tp_at = ((TP) self->prog->tp_builtin->bool_2);
return ((AM_EXPR) r_5698);
}
void TRANS_or_context(TRANS self, TR_OR_EXPR e_5699, TP tp_5700) {
PROG local0;
STR local1;
TP local2;
STR local3;
PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5699));
local0 = self->prog;
local1 = STR_plus_STR_STR(((STR) &Orexpressionsret), ((STR) ¬subtypesof_5701));
local2 = tp_5700;
local3 = STR_plus_STR_STR(local1, (*TP_str_STR[local2->header.tag+TP_str_STR_offset])(local2));
PROG_err_STR(local0, STR_plus_STR_STR(local3, ((STR) &name_5702)));
}
AM_EXPR TRANS_transform__5703(TRANS self, TR_OR_EXPR e_5704, TP tp_5705) {
AM_EXPR noname5706;
AM_EXPR e1_5707;
AM_EXPR e2_5708;
AM_IF_EXPR r_5709;
AM_BOOL_CONST abc;
BOOL local0;
if ((!((tp_5705==((TP) NULL))))) {
if ((!(TP_CLASS_is_subt(self->prog->tp_builtin->bool_2, tp_5705)))) {
TRANS_or_context(self, e_5704, tp_5705);
return ((AM_EXPR) NULL);
}
}
e1_5707 = TRANS_transform__5198(self, e_5704->e1, ((TP) self->prog->tp_builtin->bool_2));
e2_5708 = TRANS_transform__5198(self, e_5704->e2, ((TP) self->prog->tp_builtin->bool_2));
if ((e1_5707==((AM_EXPR) NULL))) {
local0 = TRUE;
} else {
local0 = (e2_5708==((AM_EXPR) NULL));
}
if (local0) {
return ((AM_EXPR) NULL);
}
r_5709 = AM_IF_EXPR_creat(((AM_IF_EXPR) NULL), e_5704->source_38);
r_5709->test_40 = e1_5707;
r_5709->if_false = e2_5708;
abc = AM_BOOL_CONST_cr(((AM_BOOL_CONST) NULL), e_5704->source_38);
abc->val_16 = TRUE;
r_5709->if_true = ((AM_EXPR) abc);
r_5709->tp_at = ((TP) self->prog->tp_builtin->bool_2);
return ((AM_EXPR) r_5709);
}
void TRANS_except_con(TRANS self, TR_EXCEPT_EXPR e_5710) {
PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5710));
PROG_err_STR(self->prog, ((STR) &exceptionexpress));
}
void TRANS_except_loc(TRANS self, TR_EXCEPT_EXPR e_5711) {
PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5711));
PROG_err_STR(self->prog, ((STR) &exceptionexpress_5712));
}
AM_EXCEPT_EXPR AM_EXCEPT_EXPR_c(AM_EXCEPT_EXPR self, TP tp_5713) {
AM_EXCEPT_EXPR noname5714;
AM_EXCEPT_EXPR r_5715;
AM_EXCEPT_EXPR local0;
local0 = ((AM_EXCEPT_EXPR) sbi_alloc(sizeof(struct AM_EXCEPT_EXPR_struct), AM_EXCEPT_EXPR_tag));
r_5715 = local0;
r_5715->tp_at = tp_5713;
return r_5715;
}
void TRANS_except_con_5716(TRANS self, TR_EXCEPT_EXPR e_5717, TP stp, TP tp_5718) {
PROG local0;
STR local1;
TP local2;
STR local3;
STR local4;
TP local5;
STR local6;
PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5717));
local0 = self->prog;
local1 = ((STR) &Thetypeoftheexce);
local2 = stp;
local3 = STR_plus_STR_STR(local1, (*TP_str_STR[local2->header.tag+TP_str_STR_offset])(local2));
local4 = STR_plus_STR_STR(local3, ((STR) &isnotasubtypeof_5719));
local5 = tp_5718;
local6 = STR_plus_STR_STR(local4, (*TP_str_STR[local5->header.tag+TP_str_STR_offset])(local5));
PROG_err_STR(local0, STR_plus_STR_STR(local6, ((STR) &name_5720)));
}
AM_EXPR TRANS_transform__5721(TRANS self, TR_EXCEPT_EXPR e_5722, TP tp_5723) {
AM_EXPR noname5724;
AM_EXCEPT_EXPR r_5725;
TP local0;
if (self->in_constant) {
TRANS_except_con(self, e_5722);
return ((AM_EXPR) NULL);
}
if (((self->in_protect_then)==(FALSE))) {
TRANS_except_loc(self, e_5722);
return ((AM_EXPR) NULL);
}
r_5725 = AM_EXCEPT_EXPR_c(((AM_EXCEPT_EXPR) NULL), self->ex_tp);
if ((!((tp_5723==((TP) NULL))))) {
local0 = r_5725->tp_at;
if ((!((*TP_is_subtype_TP[local0->header.tag+TP_is_subtype_TP_offset])(local0, tp_5723)))) {
TRANS_except_con_5716(self, e_5722, r_5725->tp_at, tp_5723);
return ((AM_EXPR) NULL);
}
}
return ((AM_EXPR) r_5725);
}
void TRANS_new_const_(TRANS self, TR_NEW_EXPR e_5726) {
PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5726));
PROG_err_STR(self->prog, ((STR) &newexpressionsma));
}
void TRANS_new_in_non(TRANS self, TR_NEW_EXPR e_5727) {
PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5727));
PROG_err_STR(self->prog, ((STR) &newexpressionsma_5728));
}
void TRANS_new_contex(TRANS self, TR_NEW_EXPR e_5729, TP stp, TP tp_5730) {
PROG local0;
STR local1;
TP local2;
STR local3;
STR local4;
TP local5;
STR local6;
PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5729));
local0 = self->prog;
local1 = ((STR) &Thetypeofthenewe);
local2 = stp;
local3 = STR_plus_STR_STR(local1, (*TP_str_STR[local2->header.tag+TP_str_STR_offset])(local2));
local4 = STR_plus_STR_STR(local3, ((STR) &isnotasubtypeof_5731));
local5 = tp_5730;
local6 = STR_plus_STR_STR(local4, (*TP_str_STR[local5->header.tag+TP_str_STR_offset])(local5));
PROG_err_STR(local0, STR_plus_STR_STR(local6, ((STR) &name_5732)));
}
void TRANS_new_arg_no(TRANS self, TR_NEW_EXPR e_5733) {
PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5733));
PROG_err_STR(self->prog, ((STR) &newexpressionson));
}
AM_NEW_EXPR AM_NEW_EXPR_crea(AM_NEW_EXPR self, SFILE_ID source_5734) {
AM_NEW_EXPR noname5735;
AM_NEW_EXPR r_5736;
AM_NEW_EXPR local0;
local0 = ((AM_NEW_EXPR) sbi_alloc(sizeof(struct AM_NEW_EXPR_struct), AM_NEW_EXPR_tag));
r_5736 = local0;
r_5736->source_38 = source_5734;
return r_5736;
}
void TRANS_new_no_arg(TRANS self, TR_NEW_EXPR e_5737) {
PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5737));
PROG_err_STR(self->prog, ((STR) &newexpressionsmu));
}
AM_EXPR TRANS_transform__5738(TRANS self, TR_NEW_EXPR e_5739, TP tp_5740) {
AM_EXPR noname5741;
TP t_5742;
INT k = ((INT) 0);
AM_NEW_EXPR r_5743 = ((AM_NEW_EXPR) NULL);
TP local0;
if (self->in_constant) {
TRANS_new_const_(self, e_5739);
return ((AM_EXPR) NULL);
}
t_5742 = self->impl->tp;
k = PROG_tp_kind_TP_INT(self->prog, t_5742);
if ((k!=shared_TP_KIND_r_2617)) {
TRANS_new_in_non(self, e_5739);
return ((AM_EXPR) NULL);
}
if ((!((tp_5740==((TP) NULL))))) {
local0 = t_5742;
if ((!((*TP_is_subtype_TP[local0->header.tag+TP_is_subtype_TP_offset])(local0, tp_5740)))) {
TRANS_new_contex(self, e_5739, t_5742, tp_5740);
return ((AM_EXPR) NULL);
}
}
if ((!((e_5739->arg_51==((TR_EXPR) NULL))))) {
if ((self->impl->arr==((TP_CLASS) NULL))) {
TRANS_new_arg_no(self, e_5739);
return ((AM_EXPR) NULL);
}
r_5743 = AM_NEW_EXPR_crea(((AM_NEW_EXPR) NULL), e_5739->source_38);
r_5743->tp_at = t_5742;
r_5743->asz = TRANS_transform__5198(self, e_5739->arg_51, ((TP) self->prog->tp_builtin->int_1));
if ((r_5743->asz==((AM_EXPR) NULL))) {
return ((AM_EXPR) NULL);
}
}
else {
if ((!((self->impl->arr==((TP_CLASS) NULL))))) {
TRANS_new_no_arg(self, e_5739);
return ((AM_EXPR) NULL);
}
r_5743 = AM_NEW_EXPR_crea(((AM_NEW_EXPR) NULL), e_5739->source_38);
r_5743->tp_at = t_5742;
}
return ((AM_EXPR) r_5743);
}
void TRANS_initial_ou(TRANS self, TR_INITIAL_EXPR e_5744) {
PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5744));
PROG_err_STR(self->prog, ((STR) &initialexpressio));
}
void TRANS_nested_ini(TRANS self, TR_INITIAL_EXPR e_5745) {
PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5745));
PROG_err_STR(self->prog, ((STR) &initialexpressio_5746));
}
AM_INITIAL_STMT AM_INITIAL_STMT_(AM_INITIAL_STMT self, SFILE_ID source_5747) {
AM_INITIAL_STMT noname5748;
AM_INITIAL_STMT r_5749;
AM_INITIAL_STMT local0;
local0 = ((AM_INITIAL_STMT) sbi_alloc(sizeof(struct AM_INITIAL_STMT_struct), AM_INITIAL_STMT_tag));
r_5749 = local0;
r_5749->source_38 = source_5747;
return r_5749;
}
AM_EXPR TRANS_transform__5750(TRANS self, TR_INITIAL_EXPR e_5751, TP tp_5752) {
AM_EXPR noname5753;
AM_EXPR te;
AM_LOCAL_EXPR v_5754;
AM_ASSIGN_STMT as_5755;
AM_INITIAL_STMT inst;
AM_LOCAL_EXPR local0;
SFILE_ID local1;
IDENT local2;
AM_EXPR local3;
AM_STMT local4;
if ((!(self->in_post))) {
TRANS_initial_ou(self, e_5751);
return ((AM_EXPR) NULL);
}
if (self->in_initial) {
TRANS_nested_ini(self, e_5751);
return ((AM_EXPR) NULL);
}
self->in_initial = TRUE;
te = TRANS_transform__5198(self, e_5751->e, tp_5752);
self->in_initial = FALSE;
if ((te==((AM_EXPR) NULL))) {
return ((AM_EXPR) NULL);
}
local0 = ((AM_LOCAL_EXPR) NULL);
local1 = e_5751->source_38;
local2 = IDENT_zero;
local3 = te;
v_5754 = AM_LOCAL_EXPR_cr(local0, local1, local2, (*AM_EXPR_tp_TP[local3->header.tag+AM_EXPR_tp_TP_offset])(local3));
self->cur_rout->locals_57 = FLISTAM_LOCAL_EX_5379(self->cur_rout->locals_57, v_5754);
as_5755 = AM_ASSIGN_STMT_c(((AM_ASSIGN_STMT) NULL), e_5751->source_38);
as_5755->src_42 = te;
as_5755->dest = ((AM_EXPR) v_5754);
inst = AM_INITIAL_STMT_(((AM_INITIAL_STMT) NULL), e_5751->source_38);
inst->tp = self->impl->tp;
inst->stmts = ((AM_STMT) as_5755);
if ((self->init_stmts==((AM_STMT) NULL))) {
self->init_stmts = ((AM_STMT) inst);
}
else {
local4 = self->init_stmts;
(*AM_STMT_append_A[local4->header.tag+AM_STMT_append_A_offset])(local4, ((AM_STMT) inst));
}
return ((AM_EXPR) v_5754);
}
AM_EXPR TRANS_transform__5756(TRANS self, TR_BREAK_EXPR e_5757, TP tp_5758) {
AM_EXPR noname5759;
PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5757));
PROG_err_STR(self->prog, ((STR) &breakmaynotappea));
return ((AM_EXPR) NULL);
}
void TRANS_result_out(TRANS self, TR_RESULT_EXPR e_5760) {
PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5760));
PROG_err_STR(self->prog, ((STR) &resultexpression));
}
void TRANS_result_in_(TRANS self, TR_RESULT_EXPR e_5761) {
PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5761));
PROG_err_STR(self->prog, ((STR) &resultexpression_5762));
}
void TRANS_result_and(TRANS self, TR_RESULT_EXPR e_5763) {
PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5763));
PROG_err_STR(self->prog, ((STR) &resultexpression_5764));
}
void TRANS_result_con(TRANS self, TR_RESULT_EXPR e_5765, TP stp, TP tp_5766) {
PROG local0;
STR local1;
TP local2;
STR local3;
STR local4;
TP local5;
STR local6;
PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5765));
local0 = self->prog;
local1 = ((STR) &Thetypeoftheresu);
local2 = stp;
local3 = STR_plus_STR_STR(local1, (*TP_str_STR[local2->header.tag+TP_str_STR_offset])(local2));
local4 = STR_plus_STR_STR(local3, ((STR) &isnotasubtypeof_5767));
local5 = tp_5766;
local6 = STR_plus_STR_STR(local4, (*TP_str_STR[local5->header.tag+TP_str_STR_offset])(local5));
PROG_err_STR(local0, STR_plus_STR_STR(local6, ((STR) &name_5768)));
}
AM_EXPR TRANS_transform__5769(TRANS self, TR_RESULT_EXPR e_5770, TP tp_5771) {
AM_EXPR noname5772;
TP local0;
if (((self->in_post)==(FALSE))) {
TRANS_result_out(self, e_5770);
return ((AM_EXPR) NULL);
}
if (((self->in_initial)==(TRUE))) {
TRANS_result_in_(self, e_5770);
return ((AM_EXPR) NULL);
}
if ((self->cur_rout->rres==((AM_LOCAL_EXPR) NULL))) {
if ((self->cur_rout->sig_6->ret==((TP) NULL))) {
TRANS_result_and(self, e_5770);
return ((AM_EXPR) NULL);
}
self->cur_rout->rres = AM_LOCAL_EXPR_cr(((AM_LOCAL_EXPR) NULL), e_5770->source_38, IDENT_zero, self->cur_rout->sig_6->ret);
}
if ((!((tp_5771==((TP) NULL))))) {
local0 = self->cur_rout->rres->tp_at;
if ((!((*TP_is_subtype_TP[local0->header.tag+TP_is_subtype_TP_offset])(local0, tp_5771)))) {
TRANS_result_con(self, e_5770, self->cur_rout->rres->tp_at, tp_5771);
return ((AM_EXPR) NULL);
}
}
return ((AM_EXPR) self->cur_rout->rres);
}
void TRANS_bool_lit_c(TRANS self, TR_BOOL_LIT_EXPR e_5773, TP tp_5774) {
PROG local0;
STR local1;
TP local2;
STR local3;
PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5773));
local0 = self->prog;
local1 = ((STR) &Booleanliteralsa);
local2 = tp_5774;
local3 = STR_plus_STR_STR(local1, (*TP_str_STR[local2->header.tag+TP_str_STR_offset])(local2));
PROG_err_STR(local0, STR_plus_STR_STR(local3, ((STR) &name_5775)));
}
AM_EXPR TRANS_transform__5776(TRANS self, TR_BOOL_LIT_EXPR e_5777, TP tp_5778) {
AM_EXPR noname5779;
AM_BOOL_CONST r_5780;
if ((!((tp_5778==((TP) NULL))))) {
if ((!(TP_CLASS_is_subt(self->prog->tp_builtin->bool_2, tp_5778)))) {
TRANS_bool_lit_c(self, e_5777, tp_5778);
return ((AM_EXPR) NULL);
}
}
r_5780 = AM_BOOL_CONST_cr(((AM_BOOL_CONST) NULL), e_5777->source_38);
r_5780->tp_at = ((TP) self->prog->tp_builtin->bool_2);
r_5780->val_16 = e_5777->val_16;
return ((AM_EXPR) r_5780);
}
void TRANS_char_lit_c(TRANS self, TR_CHAR_LIT_EXPR e_5781, TP tp_5782) {
PROG local0;
STR local1;
TP local2;
STR local3;
PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5781));
local0 = self->prog;
local1 = ((STR) &Characterliteral);
local2 = tp_5782;
local3 = STR_plus_STR_STR(local1, (*TP_str_STR[local2->header.tag+TP_str_STR_offset])(local2));
PROG_err_STR(local0, STR_plus_STR_STR(local3, ((STR) &name_5783)));
}
AM_CHAR_CONST AM_CHAR_CONST_cr(AM_CHAR_CONST self, TR_CHAR_LIT_EXPR t_5784) {
AM_CHAR_CONST noname5785;
AM_CHAR_CONST r_5786;
AM_CHAR_CONST local0;
local0 = ((AM_CHAR_CONST) sbi_alloc(sizeof(struct AM_CHAR_CONST_struct), AM_CHAR_CONST_tag));
r_5786 = local0;
r_5786->source_38 = t_5784->source_38;
r_5786->bval = ((CHAR)t_5784->val_16);
return r_5786;
}
AM_EXPR TRANS_transform__5787(TRANS self, TR_CHAR_LIT_EXPR e_5788, TP tp_5789) {
AM_EXPR noname5790;
AM_CHAR_CONST r_5791;
if ((!((tp_5789==((TP) NULL))))) {
if ((!(TP_CLASS_is_subt(self->prog->tp_builtin->char_5, tp_5789)))) {
TRANS_char_lit_c(self, e_5788, tp_5789);
return ((AM_EXPR) NULL);
}
}
r_5791 = AM_CHAR_CONST_cr(((AM_CHAR_CONST) NULL), e_5788);
r_5791->tp_at = ((TP) self->prog->tp_builtin->char_5);
return ((AM_EXPR) r_5791);
}
void TRANS_str_lit_co(TRANS self, TR_STR_LIT_EXPR e_5792, TP tp_5793) {
PROG local0;
STR local1;
TP local2;
STR local3;
PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5792));
local0 = self->prog;
local1 = ((STR) &Stringliteralsar);
local2 = tp_5793;
local3 = STR_plus_STR_STR(local1, (*TP_str_STR[local2->header.tag+TP_str_STR_offset])(local2));
PROG_err_STR(local0, STR_plus_STR_STR(local3, ((STR) &name_5794)));
}
AM_STR_CONST AM_STR_CONST_cre(AM_STR_CONST self, TR_STR_LIT_EXPR t_5795) {
AM_STR_CONST noname5796;
AM_STR_CONST r_5797;
AM_STR_CONST local0;
local0 = ((AM_STR_CONST) sbi_alloc(sizeof(struct AM_STR_CONST_struct), AM_STR_CONST_tag));
r_5797 = local0;
r_5797->source_38 = t_5795->source_38;
r_5797->bval = t_5795->s;
return r_5797;
}
AM_EXPR TRANS_transform__5798(TRANS self, TR_STR_LIT_EXPR e_5799, TP tp_5800) {
AM_EXPR noname5801;
AM_STR_CONST r_5802;
if ((!((tp_5800==((TP) NULL))))) {
if ((!(TP_CLASS_is_subt(self->prog->tp_builtin->str_4, tp_5800)))) {
TRANS_str_lit_co(self, e_5799, tp_5800);
return ((AM_EXPR) NULL);
}
}
r_5802 = AM_STR_CONST_cre(((AM_STR_CONST) NULL), e_5799);
r_5802->tp_at = ((TP) self->prog->tp_builtin->str_4);
return ((AM_EXPR) r_5802);
}
AM_INTI_CONST AM_INTI_CONST_cr(AM_INTI_CONST self, TR_INT_LIT_EXPR t_5803) {
AM_INTI_CONST noname5804;
AM_INTI_CONST r_5805;
AM_INTI_CONST local0;
local0 = ((AM_INTI_CONST) sbi_alloc(sizeof(struct AM_INTI_CONST_struct), AM_INTI_CONST_tag));
r_5805 = local0;
r_5805->source_38 = t_5803->source_38;
r_5805->val_16 = t_5803->val_16;
return r_5805;
}
AM_INT_CONST AM_INT_CONST_cre(AM_INT_CONST self, TR_INT_LIT_EXPR t_5806) {
AM_INT_CONST noname5807;
AM_INT_CONST r_5808;
AM_INT_CONST local0;
local0 = ((AM_INT_CONST) sbi_alloc(sizeof(struct AM_INT_CONST_struct), AM_INT_CONST_tag));
r_5808 = local0;
r_5808->source_38 = t_5806->source_38;
r_5808->val_16 = t_5806->val_16;
return r_5808;
}
AM_EXPR TRANS_transform__5809(TRANS self, TR_INT_LIT_EXPR e_5810, TP tp_5811) {
AM_EXPR noname5812;
AM_INTI_CONST ri;
AM_INT_CONST r_5813;
TP local0;
PROG local1;
STR local2;
TP local3;
STR local4;
TP local5;
PROG local6;
STR local7;
TP local8;
STR local9;
if (e_5810->is_inti) {
ri = AM_INTI_CONST_cr(((AM_INTI_CONST) NULL), e_5810);
ri->tp_at = ((TP) self->prog->tp_builtin->inti);
if ((tp_5811==((TP) NULL))) {
return ((AM_EXPR) ri);
}
else {
local0 = ri->tp_at;
if ((!((*TP_is_subtype_TP[local0->header.tag+TP_is_subtype_TP_offset])(local0, tp_5811)))) {
PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5810));
local1 = self->prog;
local2 = ((STR) &Thetypeofthedest);
local3 = tp_5811;
local4 = STR_plus_STR_STR(local2, (*TP_str_STR[local3->header.tag+TP_str_STR_offset])(local3));
PROG_err_STR(local1, STR_plus_STR_STR(local4, ((STR) &isnotasupertypeo)));
return ((AM_EXPR) NULL);
}
else {
return ((AM_EXPR) ri);
}
}
}
r_5813 = AM_INT_CONST_cre(((AM_INT_CONST) NULL), e_5810);
r_5813->tp_at = ((TP) self->prog->tp_builtin->int_1);
if ((tp_5811==((TP) NULL))) {
return ((AM_EXPR) r_5813);
}
else {
local5 = r_5813->tp_at;
if ((!((*TP_is_subtype_TP[local5->header.tag+TP_is_subtype_TP_offset])(local5, tp_5811)))) {
PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5810));
local6 = self->prog;
local7 = ((STR) &Thetypeofthedest_5814);
local8 = tp_5811;
local9 = STR_plus_STR_STR(local7, (*TP_str_STR[local8->header.tag+TP_str_STR_offset])(local8));
PROG_err_STR(local6, STR_plus_STR_STR(local9, ((STR) &isnotasupertypeofINT)));
return ((AM_EXPR) NULL);
}
}
return ((AM_EXPR) r_5813);
}
AM_FLT_CONST AM_FLT_CONST_cre(AM_FLT_CONST self, TR_FLT_LIT_EXPR t_5815) {
AM_FLT_CONST noname5816;
AM_FLT_CONST r_5817;
AM_FLT_CONST local0;
local0 = ((AM_FLT_CONST) sbi_alloc(sizeof(struct AM_FLT_CONST_struct), AM_FLT_CONST_tag));
r_5817 = local0;
r_5817->source_38 = t_5815->source_38;
r_5817->val_16 = t_5815->val_16;
return r_5817;
}
AM_FLTD_CONST AM_FLTD_CONST_cr(AM_FLTD_CONST self, TR_FLT_LIT_EXPR t_5818) {
AM_FLTD_CONST noname5819;
AM_FLTD_CONST r_5820;
AM_FLTD_CONST local0;
local0 = ((AM_FLTD_CONST) sbi_alloc(sizeof(struct AM_FLTD_CONST_struct), AM_FLTD_CONST_tag));
r_5820 = local0;
r_5820->source_38 = t_5818->source_38;
r_5820->val_16 = t_5818->val_16;
return r_5820;
}
AM_FLTX_CONST AM_FLTX_CONST_cr(AM_FLTX_CONST self, TR_FLT_LIT_EXPR t_5821) {
AM_FLTX_CONST noname5822;
AM_FLTX_CONST r_5823;
AM_FLTX_CONST local0;
local0 = ((AM_FLTX_CONST) sbi_alloc(sizeof(struct AM_FLTX_CONST_struct), AM_FLTX_CONST_tag));
r_5823 = local0;
r_5823->source_38 = t_5821->source_38;
r_5823->val_16 = t_5821->val_16;
return r_5823;
}
AM_FLTDX_CONST AM_FLTDX_CONST_c(AM_FLTDX_CONST self, TR_FLT_LIT_EXPR t_5824) {
AM_FLTDX_CONST noname5825;
AM_FLTDX_CONST r_5826;
AM_FLTDX_CONST local0;
local0 = ((AM_FLTDX_CONST) sbi_alloc(sizeof(struct AM_FLTDX_CONST_struct), AM_FLTDX_CONST_tag));
r_5826 = local0;
r_5826->source_38 = t_5824->source_38;
r_5826->val_16 = t_5824->val_16;
return r_5826;
}
AM_FLTI_CONST AM_FLTI_CONST_cr(AM_FLTI_CONST self, TR_FLT_LIT_EXPR t_5827) {
AM_FLTI_CONST noname5828;
AM_FLTI_CONST r_5829;
AM_FLTI_CONST local0;
local0 = ((AM_FLTI_CONST) sbi_alloc(sizeof(struct AM_FLTI_CONST_struct), AM_FLTI_CONST_tag));
r_5829 = local0;
r_5829->source_38 = t_5827->source_38;
r_5829->val_16 = t_5827->val_16;
return r_5829;
}
AM_EXPR TRANS_transform__5830(TRANS self, TR_FLT_LIT_EXPR e_5831, TP tp_5832) {
AM_EXPR noname5833;
INT noname5834 = ((INT) 0);
AM_FLT_CONST rf;
AM_FLTD_CONST rfd;
AM_FLTX_CONST rfx;
AM_FLTDX_CONST rfdx;
AM_FLTI_CONST rfi;
TP local0;
PROG local1;
STR local2;
TP local3;
STR local4;
TP local5;
PROG local6;
STR local7;
TP local8;
STR local9;
TP local10;
PROG local11;
STR local12;
TP local13;
STR local14;
TP local15;
PROG local16;
STR local17;
TP local18;
STR local19;
TP local20;
PROG local21;
STR local22;
TP local23;
STR local24;
noname5834 = e_5831->tp;
switch (noname5834) {
case 0:
rf = AM_FLT_CONST_cre(((AM_FLT_CONST) NULL), e_5831);
rf->tp_at = ((TP) self->prog->tp_builtin->flt);
if ((tp_5832==((TP) NULL))) {
return ((AM_EXPR) rf);
}
else {
local0 = rf->tp_at;
if ((!((*TP_is_subtype_TP[local0->header.tag+TP_is_subtype_TP_offset])(local0, tp_5832)))) {
PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5831));
local1 = self->prog;
local2 = ((STR) &Thetypeofthedest_5835);
local3 = tp_5832;
local4 = STR_plus_STR_STR(local2, (*TP_str_STR[local3->header.tag+TP_str_STR_offset])(local3));
PROG_err_STR(local1, STR_plus_STR_STR(local4, ((STR) &isnotasupertypeofFLT)));
return ((AM_EXPR) NULL);
}
else {
return ((AM_EXPR) rf);
}
}
break;
case 1:
rfd = AM_FLTD_CONST_cr(((AM_FLTD_CONST) NULL), e_5831);
rfd->tp_at = ((TP) self->prog->tp_builtin->fltd);
if ((tp_5832==((TP) NULL))) {
return ((AM_EXPR) rfd);
}
else {
local5 = rfd->tp_at;
if ((!((*TP_is_subtype_TP[local5->header.tag+TP_is_subtype_TP_offset])(local5, tp_5832)))) {
PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5831));
local6 = self->prog;
local7 = ((STR) &Thetypeofthedest_5836);
local8 = tp_5832;
local9 = STR_plus_STR_STR(local7, (*TP_str_STR[local8->header.tag+TP_str_STR_offset])(local8));
PROG_err_STR(local6, STR_plus_STR_STR(local9, ((STR) &isnotasupertypeo_5837)));
return ((AM_EXPR) NULL);
}
else {
return ((AM_EXPR) rfd);
}
}
break;
case 2:
rfx = AM_FLTX_CONST_cr(((AM_FLTX_CONST) NULL), e_5831);
rfx->tp_at = ((TP) self->prog->tp_builtin->fltx);
if ((tp_5832==((TP) NULL))) {
return ((AM_EXPR) rfx);
}
else {
local10 = rfx->tp_at;
if ((!((*TP_is_subtype_TP[local10->header.tag+TP_is_subtype_TP_offset])(local10, tp_5832)))) {
PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5831));
local11 = self->prog;
local12 = ((STR) &Thetypeofthedest_5838);
local13 = tp_5832;
local14 = STR_plus_STR_STR(local12, (*TP_str_STR[local13->header.tag+TP_str_STR_offset])(local13));
PROG_err_STR(local11, STR_plus_STR_STR(local14, ((STR) &isnotasupertypeo_5839)));
return ((AM_EXPR) NULL);
}
else {
return ((AM_EXPR) rfx);
}
}
break;
case 3:
rfdx = AM_FLTDX_CONST_c(((AM_FLTDX_CONST) NULL), e_5831);
rfdx->tp_at = ((TP) self->prog->tp_builtin->fltdx);
if ((tp_5832==((TP) NULL))) {
return ((AM_EXPR) rfdx);
}
else {
local15 = rfdx->tp_at;
if ((!((*TP_is_subtype_TP[local15->header.tag+TP_is_subtype_TP_offset])(local15, tp_5832)))) {
PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5831));
local16 = self->prog;
local17 = ((STR) &Thetypeofthedest_5840);
local18 = tp_5832;
local19 = STR_plus_STR_STR(local17, (*TP_str_STR[local18->header.tag+TP_str_STR_offset])(local18));
PROG_err_STR(local16, STR_plus_STR_STR(local19, ((STR) &isnotasupertypeo_5841)));
return ((AM_EXPR) NULL);
}
else {
return ((AM_EXPR) rfdx);
}
}
break;
case 4:
rfi = AM_FLTI_CONST_cr(((AM_FLTI_CONST) NULL), e_5831);
rfi->tp_at = ((TP) self->prog->tp_builtin->flti);
if ((tp_5832==((TP) NULL))) {
return ((AM_EXPR) rfi);
}
else {
local20 = rfi->tp_at;
if ((!((*TP_is_subtype_TP[local20->header.tag+TP_is_subtype_TP_offset])(local20, tp_5832)))) {
PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5831));
local21 = self->prog;
local22 = ((STR) &Thetypeofthedest_5842);
local23 = tp_5832;
local24 = STR_plus_STR_STR(local22, (*TP_str_STR[local23->header.tag+TP_str_STR_offset])(local23));
PROG_err_STR(local21, STR_plus_STR_STR(local24, ((STR) &isnotasupertypeo_5843)));
return ((AM_EXPR) NULL);
}
else {
return ((AM_EXPR) rfi);
}
}
break;
default: ;
fprintf(stderr,"No applicable target in case statement ./trans.sa:2022:26\n");
exit(16);
}
return ((AM_EXPR) NULL);
}
AM_EXPR TRANS_transform__5198(TRANS self, TR_EXPR e_5844, TP tp_5845) {
AM_EXPR noname5846;
if ((e_5844==((TR_EXPR) NULL))) {
return ((AM_EXPR) NULL);
}
if (e_5844==NULL) {
} else
switch (e_5844->header.tag) {
case TR_SELF_EXPR_tag:
return TRANS_transform_(self, ((TR_SELF_EXPR) e_5844), tp_5845); break;
case TR_CALL_EXPR_tag:
return TRANS_transform__5492(self, ((TR_CALL_EXPR) e_5844), tp_5845, TRUE); break;
case TR_VOID_EXPR_tag:
return TRANS_transform__5516(self, ((TR_VOID_EXPR) e_5844), tp_5845); break;
case TR_IS_VOID_EXPR_tag:
return TRANS_transform__5538(self, ((TR_IS_VOID_EXPR) e_5844), tp_5845); break;
case TR_ARRAY_EXPR_tag:
return TRANS_transform__5554(self, ((TR_ARRAY_EXPR) e_5844), tp_5845); break;
case TR_CREATE_EXPR_tag:
return TRANS_transform__5573(self, ((TR_CREATE_EXPR) e_5844), tp_5845); break;
case TR_BOUND_CREATE_EXPR_tag:
return TRANS_transform__5669(self, ((TR_BOUND_CREATE_EXPR) e_5844), tp_5845); break;
case TR_AND_EXPR_tag:
return TRANS_transform__5692(self, ((TR_AND_EXPR) e_5844), tp_5845); break;
case TR_OR_EXPR_tag:
return TRANS_transform__5703(self, ((TR_OR_EXPR) e_5844), tp_5845); break;
case TR_EXCEPT_EXPR_tag:
return TRANS_transform__5721(self, ((TR_EXCEPT_EXPR) e_5844), tp_5845); break;
case TR_NEW_EXPR_tag:
return TRANS_transform__5738(self, ((TR_NEW_EXPR) e_5844), tp_5845); break;
case TR_INITIAL_EXPR_tag:
return TRANS_transform__5750(self, ((TR_INITIAL_EXPR) e_5844), tp_5845); break;
case TR_BREAK_EXPR_tag:
return TRANS_transform__5756(self, ((TR_BREAK_EXPR) e_5844), tp_5845); break;
case TR_RESULT_EXPR_tag:
return TRANS_transform__5769(self, ((TR_RESULT_EXPR) e_5844), tp_5845); break;
case TR_BOOL_LIT_EXPR_tag:
return TRANS_transform__5776(self, ((TR_BOOL_LIT_EXPR) e_5844), tp_5845); break;
case TR_CHAR_LIT_EXPR_tag:
return TRANS_transform__5787(self, ((TR_CHAR_LIT_EXPR) e_5844), tp_5845); break;
case TR_STR_LIT_EXPR_tag:
return TRANS_transform__5798(self, ((TR_STR_LIT_EXPR) e_5844), tp_5845); break;
case TR_INT_LIT_EXPR_tag:
return TRANS_transform__5809(self, ((TR_INT_LIT_EXPR) e_5844), tp_5845); break;
case TR_FLT_LIT_EXPR_tag:
return TRANS_transform__5830(self, ((TR_FLT_LIT_EXPR) e_5844), tp_5845); break;
default: ;
fprintf(stderr,"No applicable type in typecase ./trans.sa:984:14\n");
exit(16);
}
return ((AM_EXPR) NULL);
}
TUPIDENTAM_GLOBA TUPIDENTAM_GLOBA_5847(TUPIDENTAM_GLOBA self, IDENT t1_5848) {
TUPIDENTAM_GLOBA local0;
local0 = self;
local0.t1 = t1_5848;
return local0;
}
TUPIDENTAM_GLOBA TUPIDENTAM_GLOBA_5849(TUPIDENTAM_GLOBA self, AM_GLOBAL_EXPR t2_5850) {
TUPIDENTAM_GLOBA local0;
local0 = self;
local0.t2 = t2_5850;
return local0;
}
TUPIDENTAM_GLOBA TUPIDENTAM_GLOBA_5851(TUPIDENTAM_GLOBA self, IDENT at1, AM_GLOBAL_EXPR at2) {
TUPIDENTAM_GLOBA noname5852 = TUPIDENTAM_GLOBA_zero;
TUPIDENTAM_GLOBA local0;
local0 = TUPIDENTAM_GLOBA_5847(self, at1);
return TUPIDENTAM_GLOBA_5849(local0, at2);
}
FMAPIDENTAM_GLOB FMAPIDENTAM_GLOB_5853(FMAPIDENTAM_GLOB self, INT n_5854) {
FMAPIDENTAM_GLOB noname5855;
FMAPIDENTAM_GLOB r_5856;
FMAPIDENTAM_GLOB noname5857;
FMAPIDENTAM_GLOB local0;
TUPIDENTAM_GLOBA local1;
IDENT local2;
local0 = ((FMAPIDENTAM_GLOB) sbi_arr_alloc(sizeof(struct FMAPIDENTAM_GLOB_struct), FMAPIDENTAM_GLOB_tag, sizeof(TUPIDENTAM_GLOBA) , n_5854));
local0->asize = n_5854;
r_5856 = local0;
if ((!(((IDENT_blob=FMAPIDENTAM_GLOB_5130(self)).str_4==(STR)0)))) {
{
struct FMAPIDENTAM_GLOB_5859_frame_struct temp5858_0;
FMAPIDENTAM_GLOB_5859_frame
noname5860 = &temp5858_0;
noname5860->state = 0;
while (1) {
if (noname5860->state == 0) {
noname5857 = r_5856;
noname5860->arg0 = noname5857;
}
local1 = TUPIDENTAM_GLOBA_zero;
local2 = FMAPIDENTAM_GLOB_5130(self);
noname5860->arg1 = TUPIDENTAM_GLOBA_5851(local1, local2, ((AM_GLOBAL_EXPR) NULL));
FMAPIDENTAM_GLOB_5859(noname5860);
if (noname5860->state == -1) goto after_loop;
0 /* No return value from iter call */;
}
}
after_loop: ;
}
return r_5856;
}
FMAPIDENTAM_GLOB FMAPIDENTAM_GLOB_5861(FMAPIDENTAM_GLOB self, TUPIDENTAM_GLOBA p) {
FMAPIDENTAM_GLOB noname5862;
return FMAPIDENTAM_GLOB_5863(self, p.t1, p.t2);
if (!FMAPIDENTAM_GLOB_5122(self)) {
fprintf(stderr,"Failed invariant FMAP{IDENT,AM_GLOBAL_EXPR}::invariant:BOOL ../Library/fmap.sa:202:14\n");
exit(16);
}
}
FMAPIDENTAM_GLOB FMAPIDENTAM_GLOB_5864(FMAPIDENTAM_GLOB self) {
FMAPIDENTAM_GLOB noname5865;
INT ns = ((INT) 0);
FMAPIDENTAM_GLOB r_5866;
FMAPIDENTAM_GLOB noname5867;
INT local0;
INT local1;
INT local2;
TUPIDENTAM_GLOBA local3;
if (!((!((self==((FMAPIDENTAM_GLOB) NULL)))))) {
fprintf(stderr,"Violation of precondition ../Library/fmap.sa:172:22\n");
exit(16);
}
local0 = (self->asize);
local1 = (c_INT_minus_INT_INT_chk(local0,1));
local2 = (c_INT_times_INT_INT_chk(local1,2));
ns = (c_INT_plus_INT_INT_chk(local2,1));
r_5866 = FMAPIDENTAM_GLOB_5853(self, ns);
{
struct FMAPIDENTAM_GLOB_5869_frame_struct temp5868_0;
FMAPIDENTAM_GLOB_5869_frame
noname5870 = &temp5868_0;
noname5870->state = 0;
while (1) {
if (noname5870->state == 0) {
noname5867 = self;
noname5870->arg0 = noname5867;
}
local3 = FMAPIDENTAM_GLOB_5869(noname5870);
if (noname5870->state == -1) goto after_loop;
r_5866 = FMAPIDENTAM_GLOB_5861(r_5866, local3);
}
}
after_loop: ;
return r_5866;
}
void FMAPIDENTAM_GLOB_5871(FMAPIDENTAM_GLOB self, INT ind_5872, TUPIDENTAM_GLOBA val_5873) {
BOOL local0;
INT local1;
INT local2;
if ((!((self==((FMAPIDENTAM_GLOB) NULL))))) {
local1 = 0;
local2 = (self->asize);
local0 = INT_is_bet_INT_I(ind_5872, local1, (c_INT_minus_INT_INT_chk(local2,1)));
} else {
local0 = FALSE;
}
if (!(local0)) {
fprintf(stderr,"Violation of precondition ../Library/aref.sa:38:7\n");
exit(16);
}
if (ind_5872<0||ind_5872>=self->asize) {
fprintf(stderr,"Index out of bounds ../Library/aref.sa:38:7\n");
exit(16);
}
self->arr_part[ind_5872] = val_5873;
}
FMAPIDENTAM_GLOB FMAPIDENTAM_GLOB_5863(FMAPIDENTAM_GLOB self, IDENT k, AM_GLOBAL_EXPR t_5874) {
FMAPIDENTAM_GLOB noname5875;
FMAPIDENTAM_GLOB r_5876;
INT h = ((INT) 0);
INT asm_5877 = ((INT) 0);
IDENT tk = IDENT_zero;
IDENT tk_5878 = IDENT_zero;
INT local0;
INT local1;
INT local2;
INT local3;
INT local4;
r_5876 = self;
if ((r_5876==((FMAPIDENTAM_GLOB) NULL))) {
r_5876 = FMAPIDENTAM_GLOB_5853(self, 5);
}
else {
local0 = (c_INT_plus_INT_INT_chk(self->hsize,1));
local1 = (c_INT_times_INT_INT_chk(local0,2));
if ((local1>(self->asize))) {
r_5876 = FMAPIDENTAM_GLOB_5864(self);
}
}
local2 = FMAPIDENTAM_GLOB_5120(r_5876, k);
local3 = (r_5876->asize);
h = (local2&(c_INT_minus_INT_INT_chk(local3,2)));
local4 = (r_5876->asize);
asm_5877 = (c_INT_minus_INT_INT_chk(local4,1));
while (1) {
tk = (TUPIDENTAM_GLOBA_blob=FMAPIDENTAM_GLOB_5125(r_5876, h)).t1;
if (FMAPIDENTAM_GLOB_5128(self, tk, FMAPIDENTAM_GLOB_5130(self))) {
goto after_loop;
}
if (FMAPIDENTAM_GLOB_5128(self, tk, k)) {
FMAPIDENTAM_GLOB_5871(r_5876, h, TUPIDENTAM_GLOBA_5851(TUPIDENTAM_GLOBA_zero, k, t_5874));
return r_5876;
}
h = (c_INT_plus_INT_INT_chk(h,1));
}
after_loop: ;
if ((h==asm_5877)) {
h = 0;
while (1) {
tk_5878 = (TUPIDENTAM_GLOBA_blob=FMAPIDENTAM_GLOB_5125(r_5876, h)).t1;
if (FMAPIDENTAM_GLOB_5128(self, tk_5878, FMAPIDENTAM_GLOB_5130(self))) {
goto after_loop_5880;
}
if (FMAPIDENTAM_GLOB_5128(self, tk_5878, k)) {
FMAPIDENTAM_GLOB_5871(r_5876, h, TUPIDENTAM_GLOBA_5851(TUPIDENTAM_GLOBA_zero, k, t_5874));
return r_5876;
}
h = (c_INT_plus_INT_INT_chk(h,1));
}
after_loop_5880: ;
if (!((h!=asm_5877))) {
fprintf(stderr,"Violation of assertion ../Library/fmap.sa:199:15\n");
exit(16);
}
}
FMAPIDENTAM_GLOB_5871(r_5876, h, TUPIDENTAM_GLOBA_5851(TUPIDENTAM_GLOBA_zero, k, t_5874));
r_5876->hsize = (c_INT_plus_INT_INT_chk(r_5876->hsize,1));
return r_5876;
if (!FMAPIDENTAM_GLOB_5122(self)) {
fprintf(stderr,"Failed invariant FMAP{IDENT,AM_GLOBAL_EXPR}::invariant:BOOL ../Library/fmap.sa:180:9\n");
exit(16);
}
}
TUPTPFMAPIDENTAM TUPTPFMAPIDENTAM_5882(TUPTPFMAPIDENTAM self, TP t1_5883) {
TUPTPFMAPIDENTAM local0;
local0 = self;
local0.t1 = t1_5883;
return local0;
}
TUPTPFMAPIDENTAM TUPTPFMAPIDENTAM_5884(TUPTPFMAPIDENTAM self, FMAPIDENTAM_GLOB t2_5885) {
TUPTPFMAPIDENTAM local0;
local0 = self;
local0.t2 = t2_5885;
return local0;
}
TUPTPFMAPIDENTAM TUPTPFMAPIDENTAM_5886(TUPTPFMAPIDENTAM self, TP at1, FMAPIDENTAM_GLOB at2) {
TUPTPFMAPIDENTAM noname5887 = TUPTPFMAPIDENTAM_zero;
TUPTPFMAPIDENTAM local0;
local0 = TUPTPFMAPIDENTAM_5882(self, at1);
return TUPTPFMAPIDENTAM_5884(local0, at2);
}
FMAPTPFMAPIDENTA FMAPTPFMAPIDENTA_5888(FMAPTPFMAPIDENTA self, INT n_5889) {
FMAPTPFMAPIDENTA noname5890;
FMAPTPFMAPIDENTA r_5891;
FMAPTPFMAPIDENTA noname5892;
FMAPTPFMAPIDENTA local0;
TUPTPFMAPIDENTAM local1;
TP local2;
local0 = ((FMAPTPFMAPIDENTA) sbi_arr_alloc(sizeof(struct FMAPTPFMAPIDENTA_struct), FMAPTPFMAPIDENTA_tag, sizeof(TUPTPFMAPIDENTAM) , n_5889));
local0->asize = n_5889;
r_5891 = local0;
if ((!((FMAPTPFMAPIDENTA_5112(self)==((TP) NULL))))) {
{
struct FMAPTPFMAPIDENTA_5894_frame_struct temp5893_0;
FMAPTPFMAPIDENTA_5894_frame
noname5895 = &temp5893_0;
noname5895->state = 0;
while (1) {
if (noname5895->state == 0) {
noname5892 = r_5891;
noname5895->arg0 = noname5892;
}
local1 = TUPTPFMAPIDENTAM_zero;
local2 = FMAPTPFMAPIDENTA_5112(self);
noname5895->arg1 = TUPTPFMAPIDENTAM_5886(local1, local2, ((FMAPIDENTAM_GLOB) NULL));
FMAPTPFMAPIDENTA_5894(noname5895);
if (noname5895->state == -1) goto after_loop;
0 /* No return value from iter call */;
}
}
after_loop: ;
}
return r_5891;
}
FMAPTPFMAPIDENTA FMAPTPFMAPIDENTA_5896(FMAPTPFMAPIDENTA self, TUPTPFMAPIDENTAM p) {
FMAPTPFMAPIDENTA noname5897;
return FMAPTPFMAPIDENTA_5898(self, p.t1, p.t2);
if (!FMAPTPFMAPIDENTA_5104(self)) {
fprintf(stderr,"Failed invariant FMAP{$TP,FMAP{IDENT,AM_GLOBAL_EXPR}}::invariant:BOOL ../Library/fmap.sa:202:14\n");
exit(16);
}
}
FMAPTPFMAPIDENTA FMAPTPFMAPIDENTA_5899(FMAPTPFMAPIDENTA self) {
FMAPTPFMAPIDENTA noname5900;
INT ns = ((INT) 0);
FMAPTPFMAPIDENTA r_5901;
FMAPTPFMAPIDENTA noname5902;
INT local0;
INT local1;
INT local2;
TUPTPFMAPIDENTAM local3;
if (!((!((self==((FMAPTPFMAPIDENTA) NULL)))))) {
fprintf(stderr,"Violation of precondition ../Library/fmap.sa:172:22\n");
exit(16);
}
local0 = (self->asize);
local1 = (c_INT_minus_INT_INT_chk(local0,1));
local2 = (c_INT_times_INT_INT_chk(local1,2));
ns = (c_INT_plus_INT_INT_chk(local2,1));
r_5901 = FMAPTPFMAPIDENTA_5888(self, ns);
{
struct FMAPTPFMAPIDENTA_5904_frame_struct temp5903_0;
FMAPTPFMAPIDENTA_5904_frame
noname5905 = &temp5903_0;
noname5905->state = 0;
while (1) {
if (noname5905->state == 0) {
noname5902 = self;
noname5905->arg0 = noname5902;
}
local3 = FMAPTPFMAPIDENTA_5904(noname5905);
if (noname5905->state == -1) goto after_loop;
r_5901 = FMAPTPFMAPIDENTA_5896(r_5901, local3);
}
}
after_loop: ;
return r_5901;
}
void FMAPTPFMAPIDENTA_5906(FMAPTPFMAPIDENTA self, INT ind_5907, TUPTPFMAPIDENTAM val_5908) {
BOOL local0;
INT local1;
INT local2;
if ((!((self==((FMAPTPFMAPIDENTA) NULL))))) {
local1 = 0;
local2 = (self->asize);
local0 = INT_is_bet_INT_I(ind_5907, local1, (c_INT_minus_INT_INT_chk(local2,1)));
} else {
local0 = FALSE;
}
if (!(local0)) {
fprintf(stderr,"Violation of precondition ../Library/aref.sa:38:7\n");
exit(16);
}
if (ind_5907<0||ind_5907>=self->asize) {
fprintf(stderr,"Index out of bounds ../Library/aref.sa:38:7\n");
exit(16);
}
self->arr_part[ind_5907] = val_5908;
}
FMAPTPFMAPIDENTA FMAPTPFMAPIDENTA_5898(FMAPTPFMAPIDENTA self, TP k, FMAPIDENTAM_GLOB t_5909) {
FMAPTPFMAPIDENTA noname5910;
FMAPTPFMAPIDENTA r_5911;
INT h = ((INT) 0);
INT asm_5912 = ((INT) 0);
TP tk;
TP tk_5913;
INT local0;
INT local1;
INT local2;
INT local3;
INT local4;
r_5911 = self;
if ((r_5911==((FMAPTPFMAPIDENTA) NULL))) {
r_5911 = FMAPTPFMAPIDENTA_5888(self, 5);
}
else {
local0 = (c_INT_plus_INT_INT_chk(self->hsize,1));
local1 = (c_INT_times_INT_INT_chk(local0,2));
if ((local1>(self->asize))) {
r_5911 = FMAPTPFMAPIDENTA_5899(self);
}
}
local2 = FMAPTPFMAPIDENTA_5102(r_5911, k);
local3 = (r_5911->asize);
h = (local2&(c_INT_minus_INT_INT_chk(local3,2)));
local4 = (r_5911->asize);
asm_5912 = (c_INT_minus_INT_INT_chk(local4,1));
while (1) {
tk = (TUPTPFMAPIDENTAM_blob=FMAPTPFMAPIDENTA_5107(r_5911, h)).t1;
if (FMAPTPFMAPIDENTA_5110(self, tk, FMAPTPFMAPIDENTA_5112(self))) {
goto after_loop;
}
if (FMAPTPFMAPIDENTA_5110(self, tk, k)) {
FMAPTPFMAPIDENTA_5906(r_5911, h, TUPTPFMAPIDENTAM_5886(TUPTPFMAPIDENTAM_zero, k, t_5909));
return r_5911;
}
h = (c_INT_plus_INT_INT_chk(h,1));
}
after_loop: ;
if ((h==asm_5912)) {
h = 0;
while (1) {
tk_5913 = (TUPTPFMAPIDENTAM_blob=FMAPTPFMAPIDENTA_5107(r_5911, h)).t1;
if (FMAPTPFMAPIDENTA_5110(self, tk_5913, FMAPTPFMAPIDENTA_5112(self))) {
goto after_loop_5915;
}
if (FMAPTPFMAPIDENTA_5110(self, tk_5913, k)) {
FMAPTPFMAPIDENTA_5906(r_5911, h, TUPTPFMAPIDENTAM_5886(TUPTPFMAPIDENTAM_zero, k, t_5909));
return r_5911;
}
h = (c_INT_plus_INT_INT_chk(h,1));
}
after_loop_5915: ;
if (!((h!=asm_5912))) {
fprintf(stderr,"Violation of assertion ../Library/fmap.sa:199:15\n");
exit(16);
}
}
FMAPTPFMAPIDENTA_5906(r_5911, h, TUPTPFMAPIDENTAM_5886(TUPTPFMAPIDENTAM_zero, k, t_5909));
r_5911->hsize = (c_INT_plus_INT_INT_chk(r_5911->hsize,1));
return r_5911;
if (!FMAPTPFMAPIDENTA_5104(self)) {
fprintf(stderr,"Failed invariant FMAP{$TP,FMAP{IDENT,AM_GLOBAL_EXPR}}::invariant:BOOL ../Library/fmap.sa:180:9\n");
exit(16);
}
}
INT FLISTAM_GLOBAL_E(FLISTAM_GLOBAL_EXPR self) {
INT noname5917 = ((INT) 0);
return self->asize;
fprintf(stderr,"Last statement wasn't return ../Library/aref.sa:20:8\n");
exit(16);
}
INT FLISTAM_GLOBAL_E_5918(FLISTAM_GLOBAL_EXPR self) {
INT noname5919 = ((INT) 0);
if ((self==((FLISTAM_GLOBAL_EXPR) NULL))) {
return 0;
}
return self->loc_17;
if (!FLISTAM_GLOBAL_E_5920(self)) {
fprintf(stderr,"Failed invariant FLIST{AM_GLOBAL_EXPR}::invariant:BOOL ../Library/flist.sa:50:7\n");
exit(16);
}
}
BOOL FLISTAM_GLOBAL_E_5921(FLISTAM_GLOBAL_EXPR self) {
BOOL noname5922 = ((BOOL) 0);
INT local0;
local0 = FLISTAM_GLOBAL_E_5918(self);
return (local0==0);
if (!FLISTAM_GLOBAL_E_5920(self)) {
fprintf(stderr,"Failed invariant FLIST{AM_GLOBAL_EXPR}::invariant:BOOL ../Library/flist.sa:113:11\n");
exit(16);
}
}
void FLISTAM_GLOBAL_E_5923(FLISTAM_GLOBAL_EXPR self) {
AM_GLOBAL_EXPR nil = ((AM_GLOBAL_EXPR) NULL);
FLISTAM_GLOBAL_EXPR noname5924;
if (!((!((self==((FLISTAM_GLOBAL_EXPR) NULL)))))) {
fprintf(stderr,"Violation of precondition ../Library/aref.sa:43:9\n");
exit(16);
}
{
struct FLISTAM_GLOBAL_E_5926_frame_struct temp5925_0;
FLISTAM_GLOBAL_E_5926_frame
noname5927 = &temp5925_0;
noname5927->state = 0;
while (1) {
if (noname5927->state == 0) {
noname5924 = self;
noname5927->arg0 = noname5924;
}
noname5927->arg1 = nil;
FLISTAM_GLOBAL_E_5926(noname5927);
if (noname5927->state == -1) goto after_loop;
0 /* No return value from iter call */;
}
}
after_loop: ;
}
void FLISTAM_GLOBAL_E_5928(FLISTAM_GLOBAL_EXPR self) {
if (FLISTAM_GLOBAL_E_5921(self)) {
return;
}
else {
FLISTAM_GLOBAL_E_5923(self);
self->loc_17 = 0;
}
if (!FLISTAM_GLOBAL_E_5920(self)) {
fprintf(stderr,"Failed invariant FLIST{AM_GLOBAL_EXPR}::invariant:BOOL ../Library/flist.sa:117:8\n");
exit(16);
}
}
void FLISTAM_GLOBAL_E_5929(FLISTAM_GLOBAL_EXPR self, INT ind_5930, AM_GLOBAL_EXPR val_5931) {
BOOL local0;
INT local1;
INT local2;
if ((!((self==((FLISTAM_GLOBAL_EXPR) NULL))))) {
local1 = 0;
local2 = (self->asize);
local0 = INT_is_bet_INT_I(ind_5930, local1, (c_INT_minus_INT_INT_chk(local2,1)));
} else {
local0 = FALSE;
}
if (!(local0)) {
fprintf(stderr,"Violation of precondition ../Library/aref.sa:38:7\n");
exit(16);
}
if (ind_5930<0||ind_5930>=self->asize) {
fprintf(stderr,"Index out of bounds ../Library/aref.sa:38:7\n");
exit(16);
}
self->arr_part[ind_5930] = val_5931;
}
void FLISTAM_GLOBAL_E_5932(FLISTAM_GLOBAL_EXPR self, INT ind_5933, AM_GLOBAL_EXPR val_5934) {
BOOL local0;
INT local1;
if ((!((self==((FLISTAM_GLOBAL_EXPR) NULL))))) {
local1 = 0;
local0 = INT_is_bet_INT_I(ind_5933, local1, (c_INT_minus_INT_INT_chk(self->loc_17,1)));
} else {
local0 = FALSE;
}
if (!(local0)) {
fprintf(stderr,"Violation of precondition ../Library/flist.sa:73:7\n");
exit(16);
}
FLISTAM_GLOBAL_E_5929(self, ind_5933, val_5934);
if (!FLISTAM_GLOBAL_E_5920(self)) {
fprintf(stderr,"Failed invariant FLIST{AM_GLOBAL_EXPR}::invariant:BOOL ../Library/flist.sa:73:7\n");
exit(16);
}
}
FLISTAM_GLOBAL_EXPR FLISTAM_GLOBAL_E_5935(FLISTAM_GLOBAL_EXPR self, AM_GLOBAL_EXPR e_5936) {
FLISTAM_GLOBAL_EXPR noname5937;
FLISTAM_GLOBAL_EXPR r_5938 = ((FLISTAM_GLOBAL_EXPR) NULL);
FLISTAM_GLOBAL_EXPR noname5939;
FLISTAM_GLOBAL_EXPR noname5940;
FLISTAM_GLOBAL_EXPR local0;
INT local1;
FLISTAM_GLOBAL_EXPR local2;
INT local3;
AM_GLOBAL_EXPR local4;
INT local5;
if ((self==((FLISTAM_GLOBAL_EXPR) NULL))) {
local0 = ((FLISTAM_GLOBAL_EXPR) sbi_arr_alloc(sizeof(struct FLISTAM_GLOBAL_EXPR_struct), FLISTAM_GLOBAL_EXPR_tag, sizeof(AM_GLOBAL_EXPR) , 5));
local0->asize = 5;
r_5938 = local0;
}
else {
local1 = self->loc_17;
if ((local1<(self->asize))) {
r_5938 = self;
}
else {
local3 = 2;
local2 = ((FLISTAM_GLOBAL_EXPR) sbi_arr_alloc(sizeof(struct FLISTAM_GLOBAL_EXPR_struct), FLISTAM_GLOBAL_EXPR_tag, sizeof(AM_GLOBAL_EXPR) , (c_INT_times_INT_INT_chk(local3,(self->asize)))));
local2->asize = (c_INT_times_INT_INT_chk(local3,(self->asize)));
r_5938 = local2;
r_5938->loc_17 = self->loc_17;
{
struct FLISTAM_GLOBAL_E_5942_frame_struct temp5941_0;
FLISTAM_GLOBAL_E_5942_frame
noname5943 = &temp5941_0;
struct FLISTAM_GLOBAL_E_5926_frame_struct temp5941_1;
FLISTAM_GLOBAL_E_5926_frame
noname5944 = &temp5941_1;
noname5943->state = 0;
noname5944->state = 0;
while (1) {
if (noname5944->state == 0) {
noname5940 = r_5938;
noname5944->arg0 = noname5940;
}
if (noname5943->state == 0) {
noname5939 = self;
noname5943->arg0 = noname5939;
}
local4 = FLISTAM_GLOBAL_E_5942(noname5943);
if (noname5943->state == -1) goto after_loop;
noname5944->arg1 = local4;
FLISTAM_GLOBAL_E_5926(noname5944);
if (noname5944->state == -1) goto after_loop;
0 /* No return value from iter call */;
}
}
after_loop: ;
FLISTAM_GLOBAL_E_5928(self);
}
}
r_5938->loc_17 = (c_INT_plus_INT_INT_chk(r_5938->loc_17,1));
local5 = (c_INT_minus_INT_INT_chk(r_5938->loc_17,1));
FLISTAM_GLOBAL_E_5932(r_5938, local5, e_5936);
return r_5938;
if (!FLISTAM_GLOBAL_E_5920(self)) {
fprintf(stderr,"Failed invariant FLIST{AM_GLOBAL_EXPR}::invariant:BOOL ../Library/flist.sa:79:7\n");
exit(16);
}
}
void GLOBAL_TBL_inser(GLOBAL_TBL self, AM_GLOBAL_EXPR g_5945) {
FMAPIDENTAM_GLOB m;
m = FMAPTPFMAPIDENTA_5114(self->tbl, g_5945->class_tp);
m = FMAPIDENTAM_GLOB_5863(m, g_5945->name_19, g_5945);
self->tbl = FMAPTPFMAPIDENTA_5898(self->tbl, g_5945->class_tp, m);
self->top_sort = FLISTAM_GLOBAL_E_5935(self->top_sort, g_5945);
}
AM_RETURN_STMT AM_RETURN_STMT_c(AM_RETURN_STMT self, SFILE_ID source_5946) {
AM_RETURN_STMT noname5947;
AM_RETURN_STMT r_5948;
AM_RETURN_STMT local0;
local0 = ((AM_RETURN_STMT) sbi_alloc(sizeof(struct AM_RETURN_STMT_struct), AM_RETURN_STMT_tag));
r_5948 = local0;
r_5948->source_38 = source_5946;
return r_5948;
}
AM_ROUT_DEF TRANS_transform__5949(TRANS self, ELT e_5950, TR_CONST_DEF tr_5951) {
AM_ROUT_DEF noname5952;
AM_ROUT_DEF r_5953;
AM_GLOBAL_EXPR g_5954;
AM_RETURN_STMT ar;
INT local0;
AM_LOCAL_EXPR local1;
SFILE_ID local2;
IDENT local3;
GLOBAL_TBL local4;
IDENT local5;
r_5953 = AM_ROUT_DEF_crea(((AM_ROUT_DEF) NULL), 1, tr_5951->source_38);
self->cur_rout = r_5953;
r_5953->srcsig = e_5950->srcsig;
local0 = 0;
local1 = ((AM_LOCAL_EXPR) NULL);
local2 = tr_5951->source_38;
local3 = self->prog->ident_builtin->self_ident;
AM_ROUT_DEF_aset(r_5953, local0, AM_LOCAL_EXPR_cr(local1, local2, local3, ELT_tp_TP(e_5950)));
r_5953->sig_6 = e_5950->sig_6;
local4 = self->prog->global_tbl;
local5 = ELT_name_IDENT(e_5950);
g_5954 = GLOBAL_TBL_get_I(local4, local5, self->impl->tp);
if ((g_5954==((AM_GLOBAL_EXPR) NULL))) {
g_5954 = AM_GLOBAL_EXPR_c(((AM_GLOBAL_EXPR) NULL), tr_5951->source_38);
g_5954->name_19 = ELT_name_IDENT(e_5950);
g_5954->tp_at = ELT_ret_TP(e_5950);
g_5954->class_tp = self->impl->tp;
g_5954->is_const = TRUE;
self->in_constant = TRUE;
g_5954->init = TRANS_transform__5198(self, tr_5951->init, g_5954->tp_at);
self->in_constant = FALSE;
GLOBAL_TBL_inser(self->prog->global_tbl, g_5954);
}
ar = AM_RETURN_STMT_c(((AM_RETURN_STMT) NULL), tr_5951->source_38);
ar->val_16 = ((AM_EXPR) g_5954);
r_5953->code_56 = ((AM_STMT) ar);
r_5953->is_clean = TRUE;
return r_5953;
}
BOOL ELT_is_shared_re(ELT self) {
BOOL noname5955 = ((BOOL) 0);
TR_CLASS_ELT ltr;
if ((!(SIG_is_reader_si(self->sig_6)))) {
return FALSE;
}
ltr = self->tr;
if (ltr==NULL) {
} else
switch (ltr->header.tag) {
case TR_SHARED_DEF_tag:
return TRUE; break;
default: ;
}
return FALSE;
}
BOOL SIG_is_invariant(SIG self) {
BOOL noname5956 = ((BOOL) 0);
BOOL local0;
BOOL local1;
BOOL local2;
if ((self->args_7==((ARRAYTP) NULL))) {
local2 = (!((self->ret==((TP) NULL))));
} else {
local2 = FALSE;
}
if (local2) {
local1 = TP_CLASS_is_eq_T(SIG_prog_PROG(self)->tp_builtin->bool_2, self->ret);
} else {
local1 = FALSE;
}
if (local1) {
local0 = IDENT_is_eq_IDEN(self->name_19, SIG_prog_PROG(self)->ident_builtin->invariant_ident);
} else {
local0 = FALSE;
}
return local0;
}
BOOL ELT_is_invariant(ELT self) {
BOOL noname5957 = ((BOOL) 0);
return SIG_is_invariant(self->sig_6);
}
SIG IMPL_invariant_s(IMPL self) {
SIG noname5958;
ELT_TBL noname5959;
IDENT noname5960 = IDENT_zero;
ELT e_5961;
ELT local0;
{
struct ELT_TBL_get_quer_frame_struct temp5962_0;
ELT_TBL_get_quer_frame
noname5963 = &temp5962_0;
noname5963->state = 0;
while (1) {
if (noname5963->state == 0) {
noname5959 = self->elts;
noname5960 = IMPL_prog_PROG(self)->ident_builtin->invariant_ident;
noname5963->arg0 = noname5959;
noname5963->arg1 = noname5960;
}
local0 = ELT_TBL_get_quer(noname5963);
if (noname5963->state == -1) goto after_loop;
e_5961 = local0;
if (ELT_is_invariant(e_5961)) {
return e_5961->sig_6;
}
}
}
after_loop: ;
return ((SIG) NULL);
}
AM_INVARIANT_STMT AM_INVARIANT_STM(AM_INVARIANT_STMT self, SFILE_ID source_5964) {
AM_INVARIANT_STMT noname5965;
AM_INVARIANT_STMT r_5966;
AM_INVARIANT_STMT local0;
local0 = ((AM_INVARIANT_STMT) sbi_alloc(sizeof(struct AM_INVARIANT_STMT_struct), AM_INVARIANT_STMT_tag));
r_5966 = local0;
r_5966->source_38 = source_5964;
return r_5966;
}
AM_ROUT_DEF TRANS_transform__5967(TRANS self, ELT e_5968, TR_SHARED_DEF tr_5969) {
AM_ROUT_DEF noname5970;
AM_ROUT_DEF r_5971;
AM_GLOBAL_EXPR g_5972;
AM_RETURN_STMT ar;
AM_ROUT_DEF r_5973;
AM_GLOBAL_EXPR g_5974;
AM_ASSIGN_STMT ar_5975;
AM_INVARIANT_STMT inv = ((AM_INVARIANT_STMT) NULL);
SIG isig;
AM_ROUT_CALL_EXPR icall;
INT local0;
AM_LOCAL_EXPR local1;
SFILE_ID local2;
IDENT local3;
GLOBAL_TBL local4;
IDENT local5;
INT local6;
AM_LOCAL_EXPR local7;
SFILE_ID local8;
IDENT local9;
INT local10;
AM_LOCAL_EXPR local11;
SFILE_ID local12;
IDENT local13;
GLOBAL_TBL local14;
IDENT local15;
BOOL local16;
AM_STMT local17;
if (ELT_is_shared_re(e_5968)) {
r_5971 = AM_ROUT_DEF_crea(((AM_ROUT_DEF) NULL), 1, tr_5969->source_38);
self->cur_rout = r_5971;
r_5971->srcsig = e_5968->srcsig;
local0 = 0;
local1 = ((AM_LOCAL_EXPR) NULL);
local2 = tr_5969->source_38;
local3 = self->prog->ident_builtin->self_ident;
AM_ROUT_DEF_aset(r_5971, local0, AM_LOCAL_EXPR_cr(local1, local2, local3, ELT_tp_TP(e_5968)));
r_5971->sig_6 = e_5968->sig_6;
local4 = self->prog->global_tbl;
local5 = ELT_name_IDENT(e_5968);
g_5972 = GLOBAL_TBL_get_I(local4, local5, self->impl->tp);
if ((g_5972==((AM_GLOBAL_EXPR) NULL))) {
g_5972 = AM_GLOBAL_EXPR_c(((AM_GLOBAL_EXPR) NULL), tr_5969->source_38);
g_5972->name_19 = ELT_name_IDENT(e_5968);
g_5972->tp_at = ELT_ret_TP(e_5968);
g_5972->class_tp = self->impl->tp;
self->in_constant = TRUE;
g_5972->init = TRANS_transform__5198(self, tr_5969->init, g_5972->tp_at);
self->in_constant = FALSE;
GLOBAL_TBL_inser(self->prog->global_tbl, g_5972);
}
g_5972->tp_at = e_5968->sig_6->ret;
ar = AM_RETURN_STMT_c(((AM_RETURN_STMT) NULL), tr_5969->source_38);
ar->val_16 = ((AM_EXPR) g_5972);
r_5971->code_56 = ((AM_STMT) ar);
r_5971->is_clean = TRUE;
return r_5971;
}
r_5973 = AM_ROUT_DEF_crea(((AM_ROUT_DEF) NULL), 2, tr_5969->source_38);
self->cur_rout = r_5973;
r_5973->srcsig = e_5968->srcsig;
local6 = 0;
local7 = ((AM_LOCAL_EXPR) NULL);
local8 = tr_5969->source_38;
local9 = self->prog->ident_builtin->self_ident;
AM_ROUT_DEF_aset(r_5973, local6, AM_LOCAL_EXPR_cr(local7, local8, local9, ELT_tp_TP(e_5968)));
if ((e_5968->sig_6->args_7==((ARRAYTP) NULL))) {
PROG_err_STR(self->prog, ((STR) &CompilererrorTRA_5976));
return ((AM_ROUT_DEF) NULL);
}
local10 = 1;
local11 = ((AM_LOCAL_EXPR) NULL);
local12 = tr_5969->source_38;
local13 = ELT_name_IDENT(e_5968);
AM_ROUT_DEF_aset(r_5973, local10, AM_LOCAL_EXPR_cr(local11, local12, local13, ARRAYTP_aget_INT_TP(e_5968->sig_6->args_7, 0)));
r_5973->sig_6 = e_5968->sig_6;
local14 = self->prog->global_tbl;
local15 = ELT_name_IDENT(e_5968);
g_5974 = GLOBAL_TBL_get_I(local14, local15, self->impl->tp);
if ((g_5974==((AM_GLOBAL_EXPR) NULL))) {
g_5974 = AM_GLOBAL_EXPR_c(((AM_GLOBAL_EXPR) NULL), tr_5969->source_38);
g_5974->name_19 = ELT_name_IDENT(e_5968);
g_5974->class_tp = self->impl->tp;
self->in_constant = TRUE;
g_5974->init = TRANS_transform__5198(self, tr_5969->init, g_5974->tp_at);
self->in_constant = FALSE;
GLOBAL_TBL_inser(self->prog->global_tbl, g_5974);
}
g_5974->tp_at = ARRAYTP_aget_INT_TP(e_5968->sig_6->args_7, 0);
ar_5975 = AM_ASSIGN_STMT_c(((AM_ASSIGN_STMT) NULL), tr_5969->source_38);
ar_5975->dest = ((AM_EXPR) g_5974);
ar_5975->src_42 = ((AM_EXPR) AM_ROUT_DEF_aget(r_5973, 1));
if ((!(e_5968->is_private))) {
local16 = (!(self->in_invariant));
} else {
local16 = FALSE;
}
if (local16) {
isig = IMPL_invariant_s(self->impl);
if ((!((isig==((SIG) NULL))))) {
inv = AM_INVARIANT_STM(((AM_INVARIANT_STMT) NULL), tr_5969->source_38);
inv->sig_6 = isig;
icall = AM_ROUT_CALL_EXP_5400(((AM_ROUT_CALL_EXPR) NULL), 1, tr_5969->source_38);
icall->fun = isig;
r_5973->calls_58 = FLISTAM_EXPR_pus(r_5973->calls_58, ((AM_EXPR) icall));
}
}
r_5973->code_56 = ((AM_STMT) ar_5975);
if ((r_5973->code_56==((AM_STMT) NULL))) {
r_5973->code_56 = ((AM_STMT) inv);
}
else {
local17 = r_5973->code_56;
(*AM_STMT_append_A[local17->header.tag+AM_STMT_append_A_offset])(local17, ((AM_STMT) inv));
}
r_5973->is_clean = FALSE;
return r_5973;
}
AM_ATTR_EXPR AM_ATTR_EXPR_cre(AM_ATTR_EXPR self, SFILE_ID source_5977) {
AM_ATTR_EXPR noname5978;
AM_ATTR_EXPR r_5979;
AM_ATTR_EXPR local0;
local0 = ((AM_ATTR_EXPR) sbi_alloc(sizeof(struct AM_ATTR_EXPR_struct), AM_ATTR_EXPR_tag));
r_5979 = local0;
r_5979->source_38 = source_5977;
return r_5979;
}
AM_VATTR_ASSIGN_EXPR AM_VATTR_ASSIGN__5980(AM_VATTR_ASSIGN_EXPR self, SFILE_ID source_5981) {
AM_VATTR_ASSIGN_EXPR noname5982;
AM_VATTR_ASSIGN_EXPR r_5983;
AM_VATTR_ASSIGN_EXPR local0;
local0 = ((AM_VATTR_ASSIGN_EXPR) sbi_alloc(sizeof(struct AM_VATTR_ASSIGN_EXPR_struct), AM_VATTR_ASSIGN_EXPR_tag));
r_5983 = local0;
r_5983->source_38 = source_5981;
return r_5983;
}
AM_ROUT_DEF TRANS_transform__5984(TRANS self, ELT e_5985, TR_ATTR_DEF tr_5986) {
AM_ROUT_DEF noname5987;
AM_ROUT_DEF r_5988 = ((AM_ROUT_DEF) NULL);
AM_ATTR_EXPR ae;
AM_RETURN_STMT ar;
AM_VATTR_ASSIGN_EXPR av;
AM_RETURN_STMT ar_5989;
AM_ATTR_EXPR ae_5990;
AM_ASSIGN_STMT ar_5991;
AM_INVARIANT_STMT inv = ((AM_INVARIANT_STMT) NULL);
SIG isig;
AM_ROUT_CALL_EXPR icall;
INT local0;
AM_LOCAL_EXPR local1;
SFILE_ID local2;
IDENT local3;
AM_EXPR local4;
INT local5;
AM_LOCAL_EXPR local6;
SFILE_ID local7;
IDENT local8;
INT local9;
AM_LOCAL_EXPR local10;
SFILE_ID local11;
IDENT local12;
INT local13;
AM_EXPR local14;
BOOL local15;
AM_STMT local16;
if (ELT_is_attr_read(e_5985)) {
r_5988 = AM_ROUT_DEF_crea(((AM_ROUT_DEF) NULL), 1, tr_5986->source_38);
r_5988->srcsig = e_5985->srcsig;
local0 = 0;
local1 = ((AM_LOCAL_EXPR) NULL);
local2 = tr_5986->source_38;
local3 = self->prog->ident_builtin->self_ident;
AM_ROUT_DEF_aset(r_5988, local0, AM_LOCAL_EXPR_cr(local1, local2, local3, ELT_tp_TP(e_5985)));
r_5988->sig_6 = e_5985->sig_6;
ae = AM_ATTR_EXPR_cre(((AM_ATTR_EXPR) NULL), tr_5986->source_38);
ae->ob = ((AM_EXPR) AM_ROUT_DEF_aget(r_5988, 0));
local4 = ae->ob;
ae->self_tp = (*AM_EXPR_tp_TP[local4->header.tag+AM_EXPR_tp_TP_offset])(local4);
ae->at = ELT_name_IDENT(e_5985);
ae->tp_at = TRANS_tp_of_TR_T(self, tr_5986->tp);
if ((ae->tp_at==((TP) NULL))) {
PROG_err_loc_PRO(self->prog, ((PROG_ERR) tr_5986->tp));
PROG_err_STR(self->prog, ((STR) &Cannottranslatetype));
return ((AM_ROUT_DEF) NULL);
}
ar = AM_RETURN_STMT_c(((AM_RETURN_STMT) NULL), tr_5986->source_38);
ar->val_16 = ((AM_EXPR) ae);
r_5988->code_56 = ((AM_STMT) ar);
r_5988->is_clean = TRUE;
}
else {
r_5988 = AM_ROUT_DEF_crea(((AM_ROUT_DEF) NULL), 2, tr_5986->source_38);
r_5988->srcsig = e_5985->srcsig;
local5 = 0;
local6 = ((AM_LOCAL_EXPR) NULL);
local7 = tr_5986->source_38;
local8 = self->prog->ident_builtin->self_ident;
AM_ROUT_DEF_aset(r_5988, local5, AM_LOCAL_EXPR_cr(local6, local7, local8, ELT_tp_TP(e_5985)));
if ((e_5985->sig_6->args_7==((ARRAYTP) NULL))) {
PROG_err_STR(self->prog, ((STR) &CompilererrorTRA_5992));
return ((AM_ROUT_DEF) NULL);
}
local9 = 1;
local10 = ((AM_LOCAL_EXPR) NULL);
local11 = tr_5986->source_38;
local12 = ELT_name_IDENT(e_5985);
AM_ROUT_DEF_aset(r_5988, local9, AM_LOCAL_EXPR_cr(local10, local11, local12, ARRAYTP_aget_INT_TP(e_5985->sig_6->args_7, 0)));
r_5988->sig_6 = e_5985->sig_6;
local13 = PROG_tp_kind_TP_INT(self->prog, ((TP) self->tp_con->same_34));
if ((local13==shared_TP_KIND_v)) {
av = AM_VATTR_ASSIGN__5980(((AM_VATTR_ASSIGN_EXPR) NULL), tr_5986->source_38);
av->ob = ((AM_EXPR) AM_ROUT_DEF_aget(r_5988, 0));
av->at = ELT_name_IDENT(e_5985);
av->val_16 = ((AM_EXPR) AM_ROUT_DEF_aget(r_5988, 1));
ar_5989 = AM_RETURN_STMT_c(((AM_RETURN_STMT) NULL), tr_5986->source_38);
ar_5989->val_16 = ((AM_EXPR) av);
r_5988->code_56 = ((AM_STMT) ar_5989);
}
else {
ae_5990 = AM_ATTR_EXPR_cre(((AM_ATTR_EXPR) NULL), tr_5986->source_38);
ae_5990->ob = ((AM_EXPR) AM_ROUT_DEF_aget(r_5988, 0));
local14 = ae_5990->ob;
ae_5990->self_tp = (*AM_EXPR_tp_TP[local14->header.tag+AM_EXPR_tp_TP_offset])(local14);
ae_5990->at = ELT_name_IDENT(e_5985);
ae_5990->tp_at = TRANS_tp_of_TR_T(self, tr_5986->tp);
if ((ae_5990->tp_at==((TP) NULL))) {
PROG_err_loc_PRO(self->prog, ((PROG_ERR) tr_5986->tp));
PROG_err_STR(self->prog, ((STR) &Cannottranslatet_5993));
return ((AM_ROUT_DEF) NULL);
}
ar_5991 = AM_ASSIGN_STMT_c(((AM_ASSIGN_STMT) NULL), tr_5986->source_38);
ar_5991->dest = ((AM_EXPR) ae_5990);
ar_5991->src_42 = ((AM_EXPR) AM_ROUT_DEF_aget(r_5988, 1));
r_5988->code_56 = ((AM_STMT) ar_5991);
}
if ((!(e_5985->is_private))) {
local15 = (!(self->in_invariant));
} else {
local15 = FALSE;
}
if (local15) {
isig = IMPL_invariant_s(self->impl);
if ((!((isig==((SIG) NULL))))) {
inv = AM_INVARIANT_STM(((AM_INVARIANT_STMT) NULL), tr_5986->source_38);
inv->sig_6 = isig;
icall = AM_ROUT_CALL_EXP_5400(((AM_ROUT_CALL_EXPR) NULL), 1, tr_5986->source_38);
icall->fun = isig;
r_5988->calls_58 = FLISTAM_EXPR_pus(r_5988->calls_58, ((AM_EXPR) icall));
}
}
if ((r_5988->code_56==((AM_STMT) NULL))) {
r_5988->code_56 = ((AM_STMT) inv);
}
else {
local16 = r_5988->code_56;
(*AM_STMT_append_A[local16->header.tag+AM_STMT_append_A_offset])(local16, ((AM_STMT) inv));
}
r_5988->is_clean = FALSE;
}
return r_5988;
}
BOOL BE_built_in_whic(BE self, SIG s_5994) {
BOOL noname5995 = ((BOOL) 0);
TUPSTRSTR tuple = TUPSTRSTR_zero;
BOOL local0;
BOOL local1;
BOOL local2;
FMAPSTRTUPSTRSTR local3;
if ((!((self->prog->options_55->bounds_in==((FSETSTR) NULL))))) {
local2 = TRUE;
} else {
local2 = self->prog->options_55->bounds_all;
}
if (local2) {
local1 = TRUE;
} else {
local1 = (!((self->prog->options_55->arith_in==((FSETSTR) NULL))));
}
if (local1) {
local0 = TRUE;
} else {
local0 = self->prog->options_55->arith_all;
}
if (local0) {
local3 = self->built_in_routines;
tuple = FMAPSTRTUPSTRSTR_4411(local3, SIG_str_STR(s_5994));
if ((tuple.t1==(STR)0)&&(tuple.t2==(STR)0)) {
return FALSE;
}
else {
if (STR_is_eq_STR_BOOL(tuple.t2, ((STR) &nomacro_5996))) {
return TRUE;
}
else {
return FALSE;
}
}
}
return FALSE;
}
void TRANS_return_err(TRANS self) {
PROG_err_STR(self->prog, ((STR) &Routinemusttermi));
}
void TRANS_check_stmt(TRANS self, TR_STMT t_5997) {
TR_STMT s_5998;
TR_CASE_WHEN wp;
TR_TYPECASE_WHEN wp_5999;
TR_PROTECT_WHEN wp_6000;
TR_STMT local0;
TR_STMT local1;
OUT local2;
OUT local3;
if ((t_5997==((TR_STMT) NULL))) {
TRANS_return_err(self);
return;
}
s_5998 = t_5997;
while (1) {
local0 = s_5998;
if (((*TR_STMT_next_TR_STMT[local0->header.tag+TR_STMT_next_TR_STMT_offset])(local0)==((TR_STMT) NULL))) {
goto after_loop;
}
local1 = s_5998;
s_5998 = (*TR_STMT_next_TR_STMT[local1->header.tag+TR_STMT_next_TR_STMT_offset])(local1);
}
after_loop: ;
PROG_err_loc_PRO(self->prog, ((PROG_ERR) s_5998));
if (s_5998==NULL) {
local2 = OUT_create_OUT(((OUT) NULL));
OUT_plus_STR(local2, ((STR) &CompilererrorTRA_6002));
} else
switch (s_5998->header.tag) {
case TR_DEC_STMT_tag:
TRANS_return_err(self); break;
case TR_ASSIGN_STMT_tag:
TRANS_return_err(self); break;
case TR_IF_STMT_tag:
TRANS_check_stmt(self, ((TR_IF_STMT) s_5998)->then_part);
TRANS_check_stmt(self, ((TR_IF_STMT) s_5998)->else_part); break;
case TR_LOOP_STMT_tag: break;
case TR_RETURN_STMT_tag: break;
case TR_YIELD_STMT_tag:
TRANS_return_err(self); break;
case TR_QUIT_STMT_tag:
TRANS_return_err(self); break;
case TR_CASE_STMT_tag:
if ((!(((TR_CASE_STMT) s_5998)->no_else))) {
TRANS_check_stmt(self, ((TR_CASE_STMT) s_5998)->else_part);
}
wp = ((TR_CASE_STMT) s_5998)->when_part;
while (1) {
if ((!((wp==((TR_CASE_WHEN) NULL))))) {
}
else {
goto after_loop_6003;
}
TRANS_check_stmt(self, wp->then_part);
wp = wp->next_8;
}
after_loop_6003: ; break;
case TR_TYPECASE_STMT_tag:
if ((!(((TR_TYPECASE_STMT) s_5998)->no_else))) {
TRANS_check_stmt(self, ((TR_TYPECASE_STMT) s_5998)->else_part);
}
wp_5999 = ((TR_TYPECASE_STMT) s_5998)->when_part;
while (1) {
if ((!((wp_5999==((TR_TYPECASE_WHEN) NULL))))) {
}
else {
goto after_loop_6005;
}
TRANS_check_stmt(self, wp_5999->then_part);
wp_5999 = wp_5999->next_8;
}
after_loop_6005: ; break;
case TR_ASSERT_STMT_tag:
TRANS_return_err(self); break;
case TR_PROTECT_STMT_tag:
if ((!(((TR_PROTECT_STMT) s_5998)->no_else))) {
TRANS_check_stmt(self, ((TR_PROTECT_STMT) s_5998)->else_part);
}
wp_6000 = ((TR_PROTECT_STMT) s_5998)->when_part;
while (1) {
if ((!((wp_6000==((TR_PROTECT_WHEN) NULL))))) {
}
else {
goto after_loop_6007;
}
TRANS_check_stmt(self, wp_6000->then_part);
wp_6000 = wp_6000->next_8;
}
after_loop_6007: ; break;
case TR_RAISE_STMT_tag: break;
case TR_EXPR_STMT_tag:
TRANS_return_err(self); break;
default: ;
local3 = OUT_create_OUT(((OUT) NULL));
OUT_plus_STR(local3, ((STR) &CompilererrorTRA_6009));
}
}
void TRANS_check_retu(TRANS self, TR_ROUT_DEF t_6010) {
if ((t_6010==((TR_ROUT_DEF) NULL))) {
return;
}
if ((t_6010->ret_dec==((TR_TYPE_SPEC) NULL))) {
return;
}
if (IDENT_is_iter_BOOL(t_6010->name_19)) {
return;
}
PROG_err_loc_PRO(self->prog, ((PROG_ERR) t_6010));
TRANS_check_stmt(self, t_6010->stmts);
}
AM_PRE_STMT AM_PRE_STMT_crea(AM_PRE_STMT self, SFILE_ID source_6011) {
AM_PRE_STMT noname6012;
AM_PRE_STMT r_6013;
AM_PRE_STMT local0;
local0 = ((AM_PRE_STMT) sbi_alloc(sizeof(struct AM_PRE_STMT_struct), AM_PRE_STMT_tag));
r_6013 = local0;
r_6013->source_38 = source_6011;
return r_6013;
}
AM_POST_STMT AM_POST_STMT_cre(AM_POST_STMT self, SFILE_ID source_6014) {
AM_POST_STMT noname6015;
AM_POST_STMT r_6016;
AM_POST_STMT local0;
local0 = ((AM_POST_STMT) sbi_alloc(sizeof(struct AM_POST_STMT_struct), AM_POST_STMT_tag));
r_6016 = local0;
r_6016->source_38 = source_6014;
return r_6016;
}