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 >
C/C++ Source or Header  |  1995-02-15  |  299KB  |  9,788 lines

  1. /* C code generated by Sather 1.0 compiler */
  2.  
  3. #include "sather.h"
  4.  
  5. #include "strings.h"
  6.  
  7.  
  8.  
  9.  
  10. TP AM_VARR_ASSIGN_E(AM_VARR_ASSIGN_EXPR self) {
  11.  TP noname4605;
  12.  AM_EXPR local0;
  13.  local0 = self->ob;
  14.  return (*AM_EXPR_tp_TP[local0->header.tag+AM_EXPR_tp_TP_offset])(local0);
  15. }
  16.  
  17.  
  18. TP AM_EXT_CALL_EXPR_4606(AM_EXT_CALL_EXPR self) {
  19.  TP noname4607;
  20.  return self->fun->ret;
  21. }
  22.  
  23.  
  24. INT AM_EXT_CALL_EXPR_4608(AM_EXT_CALL_EXPR self) {
  25.  INT noname4609 = ((INT) 0);
  26.   return self->asize;
  27.  fprintf(stderr,"Last statement wasn't return ../Library/aref.sa:20:8\n");
  28.  exit(16);
  29. }
  30.  
  31.  
  32. AM_EXPR AM_EXT_CALL_EXPR_4610(AM_EXT_CALL_EXPR self, INT ind_4611) {
  33.  AM_EXPR noname4612;
  34.  BOOL local0;
  35.  INT local1;
  36.  INT local2;
  37.  if ((!((self==((AM_EXT_CALL_EXPR) NULL))))) {
  38.   local1 = 0;
  39.   local2 = (self->asize);
  40.   local0 = INT_is_bet_INT_I(ind_4611, local1, (c_INT_minus_INT_INT_chk(local2,1)));
  41.  } else {
  42.   local0 = FALSE;
  43.  }
  44.  if (!(local0)) {
  45.   fprintf(stderr,"Violation of precondition ../Library/aref.sa:33:7\n");
  46.   exit(16);
  47.  }
  48.  if (ind_4611<0||ind_4611>=self->asize) {
  49.   fprintf(stderr,"Index out of bounds ../Library/aref.sa:33:7\n");
  50.   exit(16);
  51.  }
  52.  return self->arr_part[ind_4611];
  53. }
  54.  
  55.  
  56. INT AM_ARRAY_EXPR_as(AM_ARRAY_EXPR self) {
  57.  INT noname4613 = ((INT) 0);
  58.   return self->asize;
  59.  fprintf(stderr,"Last statement wasn't return ../Library/aref.sa:20:8\n");
  60.  exit(16);
  61. }
  62.  
  63.  
  64. AM_EXPR AM_ARRAY_EXPR_ag(AM_ARRAY_EXPR self, INT ind_4614) {
  65.  AM_EXPR noname4615;
  66.  BOOL local0;
  67.  INT local1;
  68.  INT local2;
  69.  if ((!((self==((AM_ARRAY_EXPR) NULL))))) {
  70.   local1 = 0;
  71.   local2 = (self->asize);
  72.   local0 = INT_is_bet_INT_I(ind_4614, local1, (c_INT_minus_INT_INT_chk(local2,1)));
  73.  } else {
  74.   local0 = FALSE;
  75.  }
  76.  if (!(local0)) {
  77.   fprintf(stderr,"Violation of precondition ../Library/aref.sa:33:7\n");
  78.   exit(16);
  79.  }
  80.  if (ind_4614<0||ind_4614>=self->asize) {
  81.   fprintf(stderr,"Index out of bounds ../Library/aref.sa:33:7\n");
  82.   exit(16);
  83.  }
  84.  return self->arr_part[ind_4614];
  85. }
  86.  
  87.  
  88. STR BE_value_void_TP(BE self, TP tp_4616, STR e_4617) {
  89.  STR noname4618;
  90.  AM_OB_DEF aod;
  91.  BOOL after_first = ((BOOL) 0);
  92.  STR res;
  93.  FMAPIDENTTP noname4619;
  94.  TUPIDENTTP p = TUPIDENTTP_zero;
  95.  STR key_4620;
  96.  INT noname4621 = ((INT) 0);
  97.  INT noname4622 = ((INT) 0);
  98.  INT i = ((INT) 0);
  99.  TP local0;
  100.  STR local1;
  101.  STR local2;
  102.  STR local3;
  103.  TUPIDENTTP local4;
  104.  OB local5;
  105.  TP local6;
  106.  STR local7;
  107.  TP local8;
  108.  STR local9;
  109.  STR local10;
  110.  STR local11;
  111.  STR local12;
  112.  STR local13;
  113.  TP local14;
  114.  STR local15;
  115.  STR local16;
  116.  STR local17;
  117.  STR local18;
  118.  STR local19;
  119.  STR local20;
  120.  STR local21;
  121.  STR local22;
  122.  STR local23;
  123.  STR local24;
  124.  STR local25;
  125.  STR local26;
  126.  STR local27;
  127.  STR local28;
  128.  STR local29;
  129.  STR local30;
  130.  INT local31;
  131.  INT local32;
  132.  INT local33;
  133.  INT local31e;
  134.  STR local34;
  135.  STR local35;
  136.  STR local36;
  137.  STR local37;
  138.  STR local38;
  139.  STR local39;
  140.  local0 = tp_4616;
  141.  if (!((*TP_is_value_BOOL[local0->header.tag+TP_is_value_BOOL_offset])(local0))) {
  142.   fprintf(stderr,"Violation of precondition ./be.sa:2425:14\n");
  143.   exit(16);
  144.  }
  145.  if (BE_is_built_in_t(self, tp_4616)) {
  146.   local1 = STR_plus_STR_STR(((STR) &name_4623), e_4617);
  147.   local2 = STR_plus_STR_STR(local1, ((STR) &name_4624));
  148.   local3 = STR_plus_STR_STR(local2, BE_mangle_OB_STR(self, ((OB) tp_4616)));
  149.   return STR_plus_STR_STR(local3, ((STR) &S0_4625));
  150.  }
  151.  aod = PROG_am_ob_def_f(self->prog, tp_4616);
  152.  after_first = FALSE;
  153.  res = ((STR) &name_4626);
  154.  if ((!((aod->at==((FMAPIDENTTP) NULL))))) {
  155.   {
  156.    struct FMAPIDENTTP_pair_frame_struct temp4627_0;
  157.    FMAPIDENTTP_pair_frame 
  158.    noname4628 = &temp4627_0;
  159.    noname4628->state = 0;
  160.    while (1) {
  161.     if (noname4628->state == 0) {
  162.      noname4619 = aod->at;
  163.      noname4628->arg0 = noname4619;
  164.     }
  165.     local4 = FMAPIDENTTP_pair(noname4628);
  166.     if (noname4628->state == -1) goto after_loop;
  167.     p = local4;
  168.     local5 = (OB)((IDENT_boxed) sbi_alloc(sizeof(struct IDENT_boxed_struct), IDENT_tag));
  169.     ((IDENT_boxed) local5)->value_part = p.t1;
  170.     key_4620 = BE_mangle_OB_STR(self, local5);
  171.     if (after_first) {
  172.      res = STR_plus_STR_STR(res, ((STR) &name_4629));
  173.     }
  174.     local6 = p.t2;
  175.     if ((*TP_is_value_BOOL[local6->header.tag+TP_is_value_BOOL_offset])(local6)) {
  176.      local7 = STR_tail_INT_STR(e_4617, 1);
  177.      if (STR_is_eq_STR_BOOL(local7, ((STR) &name_4630))) {
  178.       local8 = p.t2;
  179.       local9 = ((STR) &name_4631);
  180.       local10 = STR_plus_STR_STR(local9, BE_mangle_OB_STR(self, ((OB) tp_4616)));
  181.       local11 = STR_plus_STR_STR(local10, ((STR) &S_blob_4632));
  182.       local12 = STR_plus_STR_STR(local11, e_4617);
  183.       local13 = STR_plus_STR_STR(local12, ((STR) &name_4633));
  184.       res = STR_plus_STR_STR(res, BE_value_void_TP(self, local8, STR_plus_STR_STR(local13, key_4620)));
  185.      }
  186.      else {
  187.       local14 = p.t2;
  188.       local15 = STR_plus_CHAR_STR(e_4617, '.');
  189.       res = STR_plus_STR_STR(res, BE_value_void_TP(self, local14, STR_plus_STR_STR(local15, key_4620)));
  190.      }
  191.     }
  192.     else {
  193.      local16 = STR_tail_INT_STR(e_4617, 1);
  194.      if (STR_is_eq_STR_BOOL(local16, ((STR) &name_4634))) {
  195.       local17 = STR_plus_STR_STR(res, ((STR) &name_4635));
  196.       local18 = STR_plus_STR_STR(local17, BE_mangle_OB_STR(self, ((OB) tp_4616)));
  197.       local19 = STR_plus_STR_STR(local18, ((STR) &S_blob_4636));
  198.       local20 = STR_plus_STR_STR(local19, e_4617);
  199.       local21 = STR_plus_STR_STR(local20, ((STR) &name_4637));
  200.       local22 = STR_plus_STR_STR(local21, key_4620);
  201.       local23 = STR_plus_STR_STR(local22, ((STR) &name_4638));
  202.       local24 = STR_plus_STR_STR(local23, BE_mangle_OB_STR(self, ((OB) p.t2)));
  203.       res = STR_plus_STR_STR(local24, ((STR) &S0_4639));
  204.      }
  205.      else {
  206.       local25 = STR_plus_CHAR_STR(res, '(');
  207.       local26 = STR_plus_STR_STR(local25, e_4617);
  208.       local27 = STR_plus_CHAR_STR(local26, '.');
  209.       local28 = STR_plus_STR_STR(local27, key_4620);
  210.       local29 = STR_plus_STR_STR(local28, ((STR) &name_4640));
  211.       local30 = STR_plus_STR_STR(local29, BE_mangle_OB_STR(self, ((OB) p.t2)));
  212.       res = STR_plus_STR_STR(local30, ((STR) &S0_4641));
  213.      }
  214.     }
  215.     after_first = TRUE;
  216.    }
  217.   }
  218.   after_loop: ;
  219.  }
  220.  if ((!((aod->arr==((TP) NULL))))) {
  221.   {
  222.    BOOL noname4644 = TRUE;
  223.    while (1) {
  224.     if (noname4644) {
  225.      noname4644 = FALSE;
  226.      noname4621 = 0;
  227.      noname4622 = aod->asize;
  228.      local32 = noname4621;
  229.      local33 = noname4622;
  230.      local31 = local32; local31e = local32+local33;
  231.     } else {
  232.      local31++;
  233.     }
  234.     if (local31>=local31e) goto after_loop_4642;
  235.     i = local31;
  236.     if (after_first) {
  237.      res = STR_plus_STR_STR(res, ((STR) &name_4645));
  238.     }
  239.     local34 = STR_plus_CHAR_STR(res, '(');
  240.     local35 = STR_plus_STR_STR(local34, e_4617);
  241.     local36 = STR_plus_STR_STR(local35, ((STR) &arr_part_4646));
  242.     local37 = STR_plus_INT_STR(local36, i);
  243.     local38 = STR_plus_STR_STR(local37, ((STR) &name_4647));
  244.     local39 = STR_plus_STR_STR(local38, BE_mangle_OB_STR(self, ((OB) aod->arr)));
  245.     res = STR_plus_STR_STR(local39, ((STR) &S0_4648));
  246.     after_first = TRUE;
  247.    }
  248.   }
  249.   after_loop_4642: ;
  250.  }
  251.  return res;
  252. }
  253.  
  254.  
  255. INT FLISTAM_BND_CREA_4649(FLISTAM_BND_CREA self) {
  256.  INT noname4650 = ((INT) 0);
  257.   return self->asize;
  258.  fprintf(stderr,"Last statement wasn't return ../Library/aref.sa:20:8\n");
  259.  exit(16);
  260. }
  261.  
  262.  
  263. INT FLISTAM_BND_CREA_4651(FLISTAM_BND_CREA self) {
  264.  INT noname4652 = ((INT) 0);
  265.  if ((self==((FLISTAM_BND_CREA) NULL))) {
  266.   return 0;
  267.  }
  268.  return self->loc_17;
  269.  if (!FLISTAM_BND_CREA_1044(self)) {
  270.   fprintf(stderr,"Failed invariant FLIST{AM_BND_CREATE_EXPR}::invariant:BOOL ../Library/flist.sa:50:7\n");
  271.   exit(16);
  272.  }
  273. }
  274.  
  275.  
  276. BOOL FLISTAM_BND_CREA_4653(FLISTAM_BND_CREA self) {
  277.  BOOL noname4654 = ((BOOL) 0);
  278.  INT local0;
  279.  local0 = FLISTAM_BND_CREA_4651(self);
  280.  return (local0==0);
  281.  if (!FLISTAM_BND_CREA_1044(self)) {
  282.   fprintf(stderr,"Failed invariant FLIST{AM_BND_CREATE_EXPR}::invariant:BOOL ../Library/flist.sa:113:11\n");
  283.   exit(16);
  284.  }
  285. }
  286.  
  287.  
  288. void FLISTAM_BND_CREA_4655(FLISTAM_BND_CREA self) {
  289.  AM_BND_CREATE_EXPR nil = ((AM_BND_CREATE_EXPR) NULL);
  290.  FLISTAM_BND_CREA noname4656;
  291.  if (!((!((self==((FLISTAM_BND_CREA) NULL)))))) {
  292.   fprintf(stderr,"Violation of precondition ../Library/aref.sa:43:9\n");
  293.   exit(16);
  294.  }
  295.  {
  296.   struct FLISTAM_BND_CREA_4658_frame_struct temp4657_0;
  297.   FLISTAM_BND_CREA_4658_frame 
  298.   noname4659 = &temp4657_0;
  299.   noname4659->state = 0;
  300.   while (1) {
  301.    if (noname4659->state == 0) {
  302.     noname4656 = self;
  303.     noname4659->arg0 = noname4656;
  304.    }
  305.    noname4659->arg1 = nil;
  306.    FLISTAM_BND_CREA_4658(noname4659);
  307.    if (noname4659->state == -1) goto after_loop;
  308.    0 /* No return value from iter call */;
  309.   }
  310.  }
  311.  after_loop: ;
  312. }
  313.  
  314.  
  315. void FLISTAM_BND_CREA_4660(FLISTAM_BND_CREA self) {
  316.  if (FLISTAM_BND_CREA_4653(self)) {
  317.   return;
  318.  }
  319.  else {
  320.   FLISTAM_BND_CREA_4655(self);
  321.   self->loc_17 = 0;
  322.  }
  323.  if (!FLISTAM_BND_CREA_1044(self)) {
  324.   fprintf(stderr,"Failed invariant FLIST{AM_BND_CREATE_EXPR}::invariant:BOOL ../Library/flist.sa:117:8\n");
  325.   exit(16);
  326.  }
  327. }
  328.  
  329.  
  330. void FLISTAM_BND_CREA_4661(FLISTAM_BND_CREA self, INT ind_4662, AM_BND_CREATE_EXPR val_4663) {
  331.  BOOL local0;
  332.  INT local1;
  333.  INT local2;
  334.  if ((!((self==((FLISTAM_BND_CREA) NULL))))) {
  335.   local1 = 0;
  336.   local2 = (self->asize);
  337.   local0 = INT_is_bet_INT_I(ind_4662, local1, (c_INT_minus_INT_INT_chk(local2,1)));
  338.  } else {
  339.   local0 = FALSE;
  340.  }
  341.  if (!(local0)) {
  342.   fprintf(stderr,"Violation of precondition ../Library/aref.sa:38:7\n");
  343.   exit(16);
  344.  }
  345.  if (ind_4662<0||ind_4662>=self->asize) {
  346.   fprintf(stderr,"Index out of bounds ../Library/aref.sa:38:7\n");
  347.   exit(16);
  348.  }
  349.  self->arr_part[ind_4662] = val_4663;
  350. }
  351.  
  352.  
  353. void FLISTAM_BND_CREA_4664(FLISTAM_BND_CREA self, INT ind_4665, AM_BND_CREATE_EXPR val_4666) {
  354.  BOOL local0;
  355.  INT local1;
  356.  if ((!((self==((FLISTAM_BND_CREA) NULL))))) {
  357.   local1 = 0;
  358.   local0 = INT_is_bet_INT_I(ind_4665, local1, (c_INT_minus_INT_INT_chk(self->loc_17,1)));
  359.  } else {
  360.   local0 = FALSE;
  361.  }
  362.  if (!(local0)) {
  363.   fprintf(stderr,"Violation of precondition ../Library/flist.sa:73:7\n");
  364.   exit(16);
  365.  }
  366.  FLISTAM_BND_CREA_4661(self, ind_4665, val_4666);
  367.  if (!FLISTAM_BND_CREA_1044(self)) {
  368.   fprintf(stderr,"Failed invariant FLIST{AM_BND_CREATE_EXPR}::invariant:BOOL ../Library/flist.sa:73:7\n");
  369.   exit(16);
  370.  }
  371. }
  372.  
  373.  
  374. FLISTAM_BND_CREA FLISTAM_BND_CREA_4667(FLISTAM_BND_CREA self, AM_BND_CREATE_EXPR e_4668) {
  375.  FLISTAM_BND_CREA noname4669;
  376.  FLISTAM_BND_CREA r_4670 = ((FLISTAM_BND_CREA) NULL);
  377.  FLISTAM_BND_CREA noname4671;
  378.  FLISTAM_BND_CREA noname4672;
  379.  FLISTAM_BND_CREA local0;
  380.  INT local1;
  381.  FLISTAM_BND_CREA local2;
  382.  INT local3;
  383.  AM_BND_CREATE_EXPR local4;
  384.  INT local5;
  385.  if ((self==((FLISTAM_BND_CREA) NULL))) {
  386.   local0 = ((FLISTAM_BND_CREA) sbi_arr_alloc(sizeof(struct FLISTAM_BND_CREA_struct), FLISTAM_BND_CREA_tag, sizeof(AM_BND_CREATE_EXPR) , 5));
  387.   local0->asize = 5;
  388.   r_4670 = local0;
  389.  }
  390.  else {
  391.   local1 = self->loc_17;
  392.   if ((local1<(self->asize))) {
  393.    r_4670 = self;
  394.   }
  395.   else {
  396.    local3 = 2;
  397.    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)))));
  398.    local2->asize = (c_INT_times_INT_INT_chk(local3,(self->asize)));
  399.    r_4670 = local2;
  400.    r_4670->loc_17 = self->loc_17;
  401.    {
  402.     struct FLISTAM_BND_CREA_4674_frame_struct temp4673_0;
  403.     FLISTAM_BND_CREA_4674_frame 
  404.     noname4675 = &temp4673_0;
  405.     struct FLISTAM_BND_CREA_4658_frame_struct temp4673_1;
  406.     FLISTAM_BND_CREA_4658_frame 
  407.     noname4676 = &temp4673_1;
  408.     noname4675->state = 0;
  409.     noname4676->state = 0;
  410.     while (1) {
  411.      if (noname4676->state == 0) {
  412.       noname4672 = r_4670;
  413.       noname4676->arg0 = noname4672;
  414.      }
  415.      if (noname4675->state == 0) {
  416.       noname4671 = self;
  417.       noname4675->arg0 = noname4671;
  418.      }
  419.      local4 = FLISTAM_BND_CREA_4674(noname4675);
  420.      if (noname4675->state == -1) goto after_loop;
  421.      noname4676->arg1 = local4;
  422.      FLISTAM_BND_CREA_4658(noname4676);
  423.      if (noname4676->state == -1) goto after_loop;
  424.      0 /* No return value from iter call */;
  425.     }
  426.    }
  427.    after_loop: ;
  428.    FLISTAM_BND_CREA_4660(self);
  429.   }
  430.  }
  431.  r_4670->loc_17 = (c_INT_plus_INT_INT_chk(r_4670->loc_17,1));
  432.  local5 = (c_INT_minus_INT_INT_chk(r_4670->loc_17,1));
  433.  FLISTAM_BND_CREA_4664(r_4670, local5, e_4668);
  434.  return r_4670;
  435.  if (!FLISTAM_BND_CREA_1044(self)) {
  436.   fprintf(stderr,"Failed invariant FLIST{AM_BND_CREATE_EXPR}::invariant:BOOL ../Library/flist.sa:79:7\n");
  437.   exit(16);
  438.  }
  439. }
  440.  
  441.  
  442. INT AM_BND_ROUT_CALL_4677(AM_BND_ROUT_CALL self) {
  443.  INT noname4678 = ((INT) 0);
  444.   return self->asize;
  445.  fprintf(stderr,"Last statement wasn't return ../Library/aref.sa:20:8\n");
  446.  exit(16);
  447. }
  448.  
  449.  
  450. AM_EXPR AM_BND_ROUT_CALL_4679(AM_BND_ROUT_CALL self, INT ind_4680) {
  451.  AM_EXPR noname4681;
  452.  BOOL local0;
  453.  INT local1;
  454.  INT local2;
  455.  if ((!((self==((AM_BND_ROUT_CALL) NULL))))) {
  456.   local1 = 0;
  457.   local2 = (self->asize);
  458.   local0 = INT_is_bet_INT_I(ind_4680, local1, (c_INT_minus_INT_INT_chk(local2,1)));
  459.  } else {
  460.   local0 = FALSE;
  461.  }
  462.  if (!(local0)) {
  463.   fprintf(stderr,"Violation of precondition ../Library/aref.sa:33:7\n");
  464.   exit(16);
  465.  }
  466.  if (ind_4680<0||ind_4680>=self->asize) {
  467.   fprintf(stderr,"Index out of bounds ../Library/aref.sa:33:7\n");
  468.   exit(16);
  469.  }
  470.  return self->arr_part[ind_4680];
  471. }
  472.  
  473.  
  474. STR BE_emit_expr_AM_(BE self, AM_EXPR arg_4682) {
  475.  STR noname4683;
  476.  STR res;
  477.  STR res_4684;
  478.  STR s2;
  479.  STR s1;
  480.  STR s2_4685;
  481.  STR s1_4686;
  482.  STR s2_4687;
  483.  STR s3;
  484.  STR res_4688;
  485.  STR s1_4689;
  486.  STR s2_4690;
  487.  STR s1_4691;
  488.  STR s2_4692;
  489.  STR s3_4693;
  490.  STR res_4694;
  491.  ARRAYSTR arg_list;
  492.  STR extern_4695;
  493.  STR res_4696;
  494.  INT i = ((INT) 0);
  495.  TP_CLASS arr_4697;
  496.  STR se;
  497.  STR res_4698;
  498.  AM_ARRAY_EXPR noname4699;
  499.  INT i_4700 = ((INT) 0);
  500.  TP arg_tp;
  501.  STR res_4701;
  502.  AM_BND_CREATE_EXPR noname4702;
  503.  INT i_4703 = ((INT) 0);
  504.  STR entry_4704 = ((STR) NULL);
  505.  INT idx = ((INT) 0);
  506.  TP tp_4705;
  507.  STR br_4706;
  508.  STR res_4707;
  509.  ARRAYSTR arg_list_4708;
  510.  AM_BND_ROUT_CALL noname4709;
  511.  INT i_4710 = ((INT) 0);
  512.  ARRAYSTR noname4711;
  513.  STR local0;
  514.  STR local1;
  515.  STR local2;
  516.  STR local3;
  517.  STR local4;
  518.  STR local5;
  519.  STR local6;
  520.  STR local7;
  521.  TP local8;
  522.  STR local9;
  523.  TP local10;
  524.  STR local11;
  525.  STR local12;
  526.  STR local13;
  527.  STR local14;
  528.  STR local15;
  529.  STR local16;
  530.  STR local17;
  531.  BOOL local18;
  532.  BOOL local19;
  533.  AM_EXPR local20;
  534.  TP local21;
  535.  STR local22;
  536.  STR local23;
  537.  STR local24;
  538.  TP local25;
  539.  AM_EXPR local26;
  540.  TP local27;
  541.  TP local28;
  542.  BOOL local29;
  543.  STR local30;
  544.  STR local31;
  545.  STR local32;
  546.  AM_EXPR local33;
  547.  STR local34;
  548.  STR local35;
  549.  STR local36;
  550.  STR local37;
  551.  OB local38;
  552.  STR local39;
  553.  OB local40;
  554.  STR local41;
  555.  OB local42;
  556.  OB local43;
  557.  TP local44;
  558.  STR local45;
  559.  STR local46;
  560.  STR local47;
  561.  STR local48;
  562.  STR local49;
  563.  STR local50;
  564.  AM_EXPR local51;
  565.  TP local52;
  566.  BOOL local53;
  567.  STR local54;
  568.  STR local55;
  569.  STR local56;
  570.  STR local57;
  571.  STR local58;
  572.  STR local59;
  573.  AM_EXPR local60;
  574.  TP local61;
  575.  STR local62;
  576.  STR local63;
  577.  STR local64;
  578.  STR local65;
  579.  TP local66;
  580.  STR local67;
  581.  STR local68;
  582.  STR local69;
  583.  STR local70;
  584.  STR local71;
  585.  STR local72;
  586.  STR local73;
  587.  STR local74;
  588.  AM_EXPR local75;
  589.  TP local76;
  590.  INT local77;
  591.  IMPL_TBL local78;
  592.  AM_EXPR local79;
  593.  STR local80;
  594.  STR local81;
  595.  STR local82;
  596.  STR local83;
  597.  STR local84;
  598.  AM_EXPR local85;
  599.  AM_EXPR local86;
  600.  STR local87;
  601.  TP local88;
  602.  STR local89;
  603.  STR local90;
  604.  STR local91;
  605.  INT local92;
  606.  STR local93;
  607.  STR local94;
  608.  STR local95;
  609.  STR local96;
  610.  AM_EXPR local97;
  611.  BOOL local98;
  612.  TP local99;
  613.  STR local100;
  614.  STR local101;
  615.  STR local102;
  616.  STR local103;
  617.  FILE_20 local104;
  618.  FILE_20 local105;
  619.  FILE_20 local106;
  620.  FILE_20 local107;
  621.  FILE_20 local108;
  622.  FILE_20 local109;
  623.  STR local110;
  624.  STR local111;
  625.  STR local112;
  626.  STR local113;
  627.  STR local114;
  628.  STR local115;
  629.  INT local116;
  630.  TP local117;
  631.  AM_EXPR local118;
  632.  TP local119;
  633.  ARRAYTP local120;
  634.  TP local121;
  635.  AM_EXPR local122;
  636.  TP local123;
  637.  STR local124;
  638.  STR local125;
  639.  STR local126;
  640.  STR local127;
  641.  STR local128;
  642.  STR local129;
  643.  STR local130;
  644.  AM_EXPR local131;
  645.  STR local132;
  646.  STR local133;
  647.  STR local134;
  648.  STR local135;
  649.  INT local136;
  650.  STR local137;
  651.  TP local138;
  652.  AM_EXPR local139;
  653.  TP local140;
  654.  STR local141;
  655.  if (!((!((arg_4682==((AM_EXPR) NULL)))))) {
  656.   fprintf(stderr,"Violation of precondition ./be.sa:2178:13\n");
  657.   exit(16);
  658.  }
  659.  if (arg_4682==NULL) {
  660.  } else
  661.  switch (arg_4682->header.tag) {
  662.   case AM_LOCAL_EXPR_tag:
  663.    return BE_mangle_OB_STR(self, ((OB) arg_4682)); break;
  664.   case AM_ROUT_CALL_EXPR_tag:
  665.    return BE_emit_rout_cal(self, ((AM_ROUT_CALL_EXPR) arg_4682)); break;
  666.   case AM_ITER_CALL_EXPR_tag:
  667.    return BE_emit_iter_cal(self, ((AM_ITER_CALL_EXPR) arg_4682)); break;
  668.   case AM_VOID_CONST_tag:
  669.    if (!((!((((AM_VOID_CONST) arg_4682)->tp_at==((TP) NULL)))))) {
  670.     fprintf(stderr,"Violation of assertion ./be.sa:2187:22\n");
  671.     exit(16);
  672.    }
  673.    return BE_default_init_(self, ((AM_VOID_CONST) arg_4682)->tp_at); break;
  674.   case AM_STR_CONST_tag:
  675.    return BE_emit_str_cons(self, ((AM_STR_CONST) arg_4682)); break;
  676.   case AM_BOOL_CONST_tag:
  677.    if (((AM_BOOL_CONST) arg_4682)->val_16) {
  678.     return ((STR) &TRUE_4712);
  679.    }
  680.    else {
  681.     return ((STR) &FALSE_4713);
  682.    } break;
  683.   case AM_INT_CONST_tag:
  684.    return INTI_str_STR(((AM_INT_CONST) arg_4682)->val_16); break;
  685.   case AM_CHAR_CONST_tag:
  686.    local0 = ((STR) &name_4714);
  687.    local1 = STR_plus_STR_STR(local0, BE_Cify_CHAR_STR(self, ((AM_CHAR_CONST) arg_4682)->bval));
  688.    return STR_plus_CHAR_STR(local1, '\''); break;
  689.   case AM_FLT_CONST_tag:
  690.    return RAT_str_INT_STR(((AM_FLT_CONST) arg_4682)->val_16, 8); break;
  691.   case AM_FLTD_CONST_tag:
  692.    return RAT_str_INT_STR(((AM_FLTD_CONST) arg_4682)->val_16, 17); break;
  693.   case AM_FLTX_CONST_tag:
  694.    BE_barf_at_STR_P(self, ((STR) &FLTXliteralsnoti), ((PROG_ERR) arg_4682)); break;
  695.   case AM_FLTDX_CONST_tag:
  696.    BE_barf_at_STR_P(self, ((STR) &FLTDXliteralsnot), ((PROG_ERR) arg_4682)); break;
  697.   case AM_IF_EXPR_tag:
  698.    res = BE_dec_local_com(self, ((AM_IF_EXPR) arg_4682)->tp_at, ((STR) &localfortest));
  699.    local2 = ((STR) &if_4715);
  700.    local3 = STR_plus_STR_STR(local2, BE_emit_expr_AM_(self, ((AM_IF_EXPR) arg_4682)->test_40));
  701.    BE_ndefer_STR(self, STR_plus_STR_STR(local3, ((STR) &name_4716)));
  702.    BE_in(self);
  703.    local4 = STR_plus_STR_STR(res, ((STR) &name_4717));
  704.    local5 = STR_plus_STR_STR(local4, BE_emit_expr_AM_(self, ((AM_IF_EXPR) arg_4682)->if_true));
  705.    BE_ndefer_STR(self, STR_plus_CHAR_STR(local5, ';'));
  706.    BE_out(self);
  707.    BE_ndefer_STR(self, ((STR) &else_4718));
  708.    BE_in(self);
  709.    local6 = STR_plus_STR_STR(res, ((STR) &name_4719));
  710.    local7 = STR_plus_STR_STR(local6, BE_emit_expr_AM_(self, ((AM_IF_EXPR) arg_4682)->if_false));
  711.    BE_ndefer_STR(self, STR_plus_CHAR_STR(local7, ';'));
  712.    BE_out(self);
  713.    BE_ndefer_STR(self, ((STR) &name_4720));
  714.    return res; break;
  715.   case AM_NEW_EXPR_tag:
  716.    local8 = ((AM_NEW_EXPR) arg_4682)->tp_at;
  717.    local9 = ((STR) &localfor);
  718.    local10 = ((AM_NEW_EXPR) arg_4682)->tp_at;
  719.    local11 = STR_plus_STR_STR(local9, (*TP_str_STR[local10->header.tag+TP_str_STR_offset])(local10));
  720.    res_4684 = BE_dec_local_com(self, local8, STR_plus_STR_STR(local11, ((STR) &create_4721)));
  721.    if ((!((((AM_NEW_EXPR) arg_4682)->asz==((AM_EXPR) NULL))))) {
  722.     s2 = BE_emit_expr_AM_(self, ((AM_NEW_EXPR) arg_4682)->asz);
  723.     local12 = STR_plus_STR_STR(res_4684, ((STR) &name_4722));
  724.     local13 = STR_plus_STR_STR(local12, BE_array_allocat(self, ((AM_NEW_EXPR) arg_4682)->tp_at, s2));
  725.     BE_ndefer_STR(self, STR_plus_STR_STR(local13, ((STR) &name_4723)));
  726.     local14 = STR_plus_STR_STR(res_4684, ((STR) &asize_4724));
  727.     local15 = STR_plus_STR_STR(local14, s2);
  728.     BE_ndefer_STR(self, STR_plus_STR_STR(local15, ((STR) &name_4725)));
  729.    }
  730.    else {
  731.     local16 = STR_plus_STR_STR(res_4684, ((STR) &name_4726));
  732.     local17 = STR_plus_STR_STR(local16, BE_allocate_TP_STR(self, ((AM_NEW_EXPR) arg_4682)->tp_at));
  733.     BE_ndefer_STR(self, STR_plus_STR_STR(local17, ((STR) &name_4727)));
  734.    }
  735.    return res_4684; break;
  736.   case AM_ATTR_EXPR_tag:
  737.    s1 = BE_emit_expr_AM_(self, ((AM_ATTR_EXPR) arg_4682)->ob);
  738.    if (self->chk_void) {
  739.     local20 = ((AM_ATTR_EXPR) arg_4682)->ob;
  740.     local21 = (*AM_EXPR_tp_TP[local20->header.tag+AM_EXPR_tp_TP_offset])(local20);
  741.     local19 = (!((*TP_is_value_BOOL[local21->header.tag+TP_is_value_BOOL_offset])(local21)));
  742.    } else {
  743.     local19 = FALSE;
  744.    }
  745.    if (local19) {
  746.     local18 = (!(self->prog->options_55->null_segfaults));
  747.    } else {
  748.     local18 = FALSE;
  749.    }
  750.    if (local18) {
  751.     local22 = STR_plus_STR_STR(((STR) &if_4728), s1);
  752.     BE_ndefer_STR(self, STR_plus_STR_STR(local22, ((STR) &NULL_4729)));
  753.     BE_in(self);
  754.     local23 = STR_plus_STR_STR(((STR) &Attraccess), ((AM_ATTR_EXPR) arg_4682)->at.str_4);
  755.     local24 = STR_plus_STR_STR(local23, ((STR) &ofvoid));
  756.     BE_runtime_error(self, local24, ((PROG_ERR) arg_4682));
  757.     BE_out(self);
  758.     BE_ndefer_STR(self, ((STR) &name_4730));
  759.    }
  760.    local25 = ((AM_ATTR_EXPR) arg_4682)->self_tp;
  761.    local26 = ((AM_ATTR_EXPR) arg_4682)->ob;
  762.    local27 = (*AM_EXPR_tp_TP[local26->header.tag+AM_EXPR_tp_TP_offset])(local26);
  763.    s2_4685 = BE_cast_TP_TP_ST(self, local25, local27, s1);
  764.    local28 = ((AM_ATTR_EXPR) arg_4682)->self_tp;
  765.    if ((*TP_is_value_BOOL[local28->header.tag+TP_is_value_BOOL_offset])(local28)) {
  766.     local30 = STR_tail_INT_STR(s1, 1);
  767.     if (STR_is_eq_STR_BOOL(local30, ((STR) &name_4731))) {
  768.      local31 = STR_tail_INT_STR(s2_4685, 1);
  769.      local29 = STR_is_eq_STR_BOOL(local31, ((STR) &name_4732));
  770.     } else {
  771.      local29 = FALSE;
  772.     }
  773.     if (local29) {
  774.      local32 = ((STR) &name_4733);
  775.      local33 = ((AM_ATTR_EXPR) arg_4682)->ob;
  776.      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))));
  777.      local35 = STR_plus_STR_STR(local34, ((STR) &S_blob_4734));
  778.      local36 = STR_plus_STR_STR(local35, s2_4685);
  779.      local37 = STR_plus_STR_STR(local36, ((STR) &name_4735));
  780.      local38 = (OB)((IDENT_boxed) sbi_alloc(sizeof(struct IDENT_boxed_struct), IDENT_tag));
  781.      ((IDENT_boxed) local38)->value_part = ((AM_ATTR_EXPR) arg_4682)->at;
  782.      return STR_plus_STR_STR(local37, BE_mangle_OB_STR(self, local38));
  783.     }
  784.     else {
  785.      local39 = STR_plus_STR_STR(s2_4685, ((STR) &name_4736));
  786.      local40 = (OB)((IDENT_boxed) sbi_alloc(sizeof(struct IDENT_boxed_struct), IDENT_tag));
  787.      ((IDENT_boxed) local40)->value_part = ((AM_ATTR_EXPR) arg_4682)->at;
  788.      return STR_plus_STR_STR(local39, BE_mangle_OB_STR(self, local40));
  789.     }
  790.    }
  791.    else {
  792.     local41 = STR_plus_STR_STR(s2_4685, ((STR) &name_4737));
  793.     local42 = (OB)((IDENT_boxed) sbi_alloc(sizeof(struct IDENT_boxed_struct), IDENT_tag));
  794.     ((IDENT_boxed) local42)->value_part = ((AM_ATTR_EXPR) arg_4682)->at;
  795.     return STR_plus_STR_STR(local41, BE_mangle_OB_STR(self, local42));
  796.    } break;
  797.   case AM_VATTR_ASSIGN_EXPR_tag:
  798.    s1_4686 = BE_emit_expr_AM_(self, ((AM_VATTR_ASSIGN_EXPR) arg_4682)->ob);
  799.    local43 = (OB)((IDENT_boxed) sbi_alloc(sizeof(struct IDENT_boxed_struct), IDENT_tag));
  800.    ((IDENT_boxed) local43)->value_part = ((AM_VATTR_ASSIGN_EXPR) arg_4682)->at;
  801.    s2_4687 = BE_mangle_OB_STR(self, local43);
  802.    s3 = BE_emit_expr_AM_(self, ((AM_VATTR_ASSIGN_EXPR) arg_4682)->val_16);
  803.    local44 = AM_VATTR_ASSIGN_(((AM_VATTR_ASSIGN_EXPR) arg_4682));
  804.    res_4688 = BE_dec_local_com(self, local44, ((STR) &localforvaluetyp));
  805.    local45 = STR_plus_STR_STR(res_4688, ((STR) &name_4738));
  806.    local46 = STR_plus_STR_STR(local45, s1_4686);
  807.    BE_ndefer_STR(self, STR_plus_STR_STR(local46, ((STR) &name_4739)));
  808.    local47 = STR_plus_STR_STR(res_4688, ((STR) &name_4740));
  809.    local48 = STR_plus_STR_STR(local47, s2_4687);
  810.    local49 = STR_plus_STR_STR(local48, ((STR) &name_4741));
  811.    local50 = STR_plus_STR_STR(local49, s3);
  812.    BE_ndefer_STR(self, STR_plus_STR_STR(local50, ((STR) &name_4742)));
  813.    return res_4688; break;
  814.   case AM_ARR_EXPR_tag:
  815.    s1_4689 = BE_emit_expr_AM_(self, ((AM_ARR_EXPR) arg_4682)->ob);
  816.    s2_4690 = BE_emit_expr_AM_(self, ((AM_ARR_EXPR) arg_4682)->ind);
  817.    local51 = ((AM_ARR_EXPR) arg_4682)->ob;
  818.    local52 = (*AM_EXPR_tp_TP[local51->header.tag+AM_EXPR_tp_TP_offset])(local51);
  819.    if ((!((*TP_is_value_BOOL[local52->header.tag+TP_is_value_BOOL_offset])(local52)))) {
  820.     if (self->chk_void) {
  821.      local53 = (!(self->prog->options_55->null_segfaults));
  822.     } else {
  823.      local53 = FALSE;
  824.     }
  825.     if (local53) {
  826.      local54 = STR_plus_STR_STR(((STR) &if_4743), s1_4689);
  827.      BE_ndefer_STR(self, STR_plus_STR_STR(local54, ((STR) &NULL_4744)));
  828.      BE_in(self);
  829.      BE_runtime_error(self, ((STR) &Voidarrayaccess), ((PROG_ERR) arg_4682));
  830.      BE_out(self);
  831.      BE_ndefer_STR(self, ((STR) &name_4745));
  832.     }
  833.     if (self->chk_bounds) {
  834.      local55 = STR_plus_STR_STR(((STR) &if_4746), s2_4690);
  835.      local56 = STR_plus_STR_STR(local55, ((STR) &S0_4747));
  836.      local57 = STR_plus_STR_STR(local56, s2_4690);
  837.      local58 = STR_plus_STR_STR(local57, ((STR) &name_4748));
  838.      local59 = STR_plus_STR_STR(local58, s1_4689);
  839.      BE_ndefer_STR(self, STR_plus_STR_STR(local59, ((STR) &asize_4749)));
  840.      BE_in(self);
  841.      BE_runtime_error(self, ((STR) &Indexoutofbounds), ((PROG_ERR) arg_4682));
  842.      BE_out(self);
  843.      BE_ndefer_STR(self, ((STR) &name_4750));
  844.     }
  845.    }
  846.    else {
  847.     BE_ndefer_STR(self, ((STR) &shoulddoboundsch));
  848.    }
  849.    local60 = ((AM_ARR_EXPR) arg_4682)->ob;
  850.    local61 = (*AM_EXPR_tp_TP[local60->header.tag+AM_EXPR_tp_TP_offset])(local60);
  851.    if ((*TP_is_value_BOOL[local61->header.tag+TP_is_value_BOOL_offset])(local61)) {
  852.     local62 = STR_plus_STR_STR(s1_4689, ((STR) &arr_part_4751));
  853.     local63 = STR_plus_STR_STR(local62, s2_4690);
  854.     return STR_plus_STR_STR(local63, ((STR) &name_4752));
  855.    }
  856.    else {
  857.     local64 = STR_plus_STR_STR(s1_4689, ((STR) &arr_part_4753));
  858.     local65 = STR_plus_STR_STR(local64, s2_4690);
  859.     return STR_plus_STR_STR(local65, ((STR) &name_4754));
  860.    } break;
  861.   case AM_VARR_ASSIGN_EXPR_tag:
  862.    s1_4691 = BE_emit_expr_AM_(self, ((AM_VARR_ASSIGN_EXPR) arg_4682)->ob);
  863.    s2_4692 = BE_emit_expr_AM_(self, ((AM_VARR_ASSIGN_EXPR) arg_4682)->ind);
  864.    s3_4693 = BE_emit_expr_AM_(self, ((AM_VARR_ASSIGN_EXPR) arg_4682)->val_16);
  865.    local66 = AM_VARR_ASSIGN_E(((AM_VARR_ASSIGN_EXPR) arg_4682));
  866.    res_4694 = BE_dec_local_com(self, local66, ((STR) &localforvaluearr));
  867.    BE_ndefer_STR(self, ((STR) &shoulddodynamicb));
  868.    local67 = STR_plus_STR_STR(res_4694, ((STR) &name_4755));
  869.    local68 = STR_plus_STR_STR(local67, s1_4691);
  870.    BE_ndefer_STR(self, STR_plus_STR_STR(local68, ((STR) &name_4756)));
  871.    local69 = STR_plus_STR_STR(res_4694, ((STR) &arr_part_4757));
  872.    local70 = STR_plus_STR_STR(local69, s2_4692);
  873.    local71 = STR_plus_STR_STR(local70, ((STR) &name_4758));
  874.    local72 = STR_plus_STR_STR(local71, s3_4693);
  875.    BE_ndefer_STR(self, STR_plus_STR_STR(local72, ((STR) &name_4759)));
  876.    return res_4694; break;
  877.   case AM_EXT_CALL_EXPR_tag:
  878.    arg_list = BE_emit_args_AM_(self, ((AM_CALL_EXPR) arg_4682));
  879.    extern_4695 = ((STR) &extern_4760);
  880.    if ((!((AM_EXT_CALL_EXPR_4606(((AM_EXT_CALL_EXPR) arg_4682))==((TP) NULL))))) {
  881.     local73 = STR_plus_STR_STR(extern_4695, BE_mangle_OB_STR(self, ((OB) AM_EXT_CALL_EXPR_4606(((AM_EXT_CALL_EXPR) arg_4682)))));
  882.     extern_4695 = STR_plus_STR_STR(local73, ((STR) &name_4761));
  883.    }
  884.    else {
  885.     extern_4695 = STR_plus_STR_STR(extern_4695, ((STR) &void_4762));
  886.    }
  887.    local74 = STR_plus_STR_STR(extern_4695, ((AM_EXT_CALL_EXPR) arg_4682)->nm.str_4);
  888.    extern_4695 = STR_plus_STR_STR(local74, ((STR) &name_4763));
  889.    res_4696 = STR_plus_STR_STR(((AM_EXT_CALL_EXPR) arg_4682)->nm.str_4, ((STR) &name_4764));
  890.    i = 1;
  891.    while (1) {
  892.     if ((i>=(arg_list->asize))) {
  893.      goto after_loop;
  894.     }
  895.     local75 = AM_EXT_CALL_EXPR_4610(((AM_EXT_CALL_EXPR) arg_4682), i);
  896.     local76 = (*AM_EXPR_tp_TP[local75->header.tag+AM_EXPR_tp_TP_offset])(local75);
  897.     local77 = (*TP_kind_INT[local76->header.tag+TP_kind_INT_offset])(local76);
  898.     if ((local77==shared_TP_KIND_r_2617)) {
  899.      local78 = self->prog->impl_tbl;
  900.      local79 = AM_EXT_CALL_EXPR_4610(((AM_EXT_CALL_EXPR) arg_4682), i);
  901.      arr_4697 = IMPL_TBL_impl_of(local78, (*AM_EXPR_tp_TP[local79->header.tag+AM_EXPR_tp_TP_offset])(local79))->arr;
  902.      if ((!((arr_4697==((TP_CLASS) NULL))))) {
  903.       local80 = STR_plus_STR_STR(extern_4695, BE_mangle_OB_STR(self, ((OB) ARRAYTP_aget_INT_TP(arr_4697->params, 0))));
  904.       extern_4695 = STR_plus_STR_STR(local80, ((STR) &name_4766));
  905.       local81 = STR_plus_STR_STR(res_4696, ((STR) &name_4767));
  906.       local82 = STR_plus_STR_STR(local81, ARRAYSTR_aget_IN(arg_list, i));
  907.       local83 = STR_plus_STR_STR(local82, ((STR) &NULLNULL));
  908.       local84 = STR_plus_STR_STR(local83, ARRAYSTR_aget_IN(arg_list, i));
  909.       res_4696 = STR_plus_STR_STR(local84, ((STR) &arr_part_4768));
  910.      }
  911.      else {
  912.       local85 = AM_EXT_CALL_EXPR_4610(((AM_EXT_CALL_EXPR) arg_4682), i);
  913.       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))));
  914.       res_4696 = STR_plus_STR_STR(res_4696, ARRAYSTR_aget_IN(arg_list, i));
  915.      }
  916.     }
  917.     else {
  918.      local86 = AM_EXT_CALL_EXPR_4610(((AM_EXT_CALL_EXPR) arg_4682), i);
  919.      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))));
  920.      res_4696 = STR_plus_STR_STR(res_4696, ARRAYSTR_aget_IN(arg_list, i));
  921.     }
  922.     i = (c_INT_plus_INT_INT_chk(i,1));
  923.     if ((i<(arg_list->asize))) {
  924.      extern_4695 = STR_plus_STR_STR(extern_4695, ((STR) &name_4769));
  925.      res_4696 = STR_plus_STR_STR(res_4696, ((STR) &name_4770));
  926.     }
  927.    }
  928.    after_loop: ;
  929.    extern_4695 = STR_plus_STR_STR(extern_4695, ((STR) &name_4771));
  930.    se = FMAPSTRSTR_get_S(self->special_externs, ((AM_EXT_CALL_EXPR) arg_4682)->nm.str_4);
  931.    if ((!((se==((STR) NULL))))) {
  932.     extern_4695 = STR_plus_CHAR_STR(se, '\n');
  933.    }
  934.    (fwrite(extern_4695->arr_part,extern_4695->asize,1,self->decs_h->fp));
  935.    return STR_plus_CHAR_STR(res_4696, ')'); break;
  936.   case AM_GLOBAL_EXPR_tag:
  937.    return BE_mangle_OB_STR(self, ((OB) arg_4682)); break;
  938.   case AM_ARRAY_EXPR_tag:
  939.    res_4698 = BE_dec_local_com(self, ((AM_ARRAY_EXPR) arg_4682)->tp_at, ((STR) &localforarraycre));
  940.    local87 = STR_plus_STR_STR(res_4698, ((STR) &name_4772));
  941.    local88 = ((AM_ARRAY_EXPR) arg_4682)->tp_at;
  942.    local89 = STR_plus_STR_STR(local87, BE_array_allocat(self, local88, INT_str_STR((((AM_ARRAY_EXPR) arg_4682)->asize))));
  943.    BE_ndefer_STR(self, STR_plus_STR_STR(local89, ((STR) &name_4773)));
  944.    local90 = STR_plus_STR_STR(res_4698, ((STR) &asize_4774));
  945.    local91 = STR_plus_INT_STR(local90, (((AM_ARRAY_EXPR) arg_4682)->asize));
  946.    BE_ndefer_STR(self, STR_plus_STR_STR(local91, ((STR) &name_4775)));
  947.    {
  948.     struct AM_ARRAY_EXPR_in_frame_struct temp4777_0;
  949.     AM_ARRAY_EXPR_in_frame 
  950.     noname4778 = &temp4777_0;
  951.     noname4778->state = 0;
  952.     while (1) {
  953.      if (noname4778->state == 0) {
  954.       noname4699 = ((AM_ARRAY_EXPR) arg_4682);
  955.       noname4778->arg0 = noname4699;
  956.      }
  957.      local92 = AM_ARRAY_EXPR_in(noname4778);
  958.      if (noname4778->state == -1) goto after_loop_4776;
  959.      i_4700 = local92;
  960.      local93 = STR_plus_STR_STR(res_4698, ((STR) &arr_part_4779));
  961.      local94 = STR_plus_INT_STR(local93, i_4700);
  962.      local95 = STR_plus_STR_STR(local94, ((STR) &name_4780));
  963.      local96 = STR_plus_STR_STR(local95, BE_emit_expr_AM_(self, AM_ARRAY_EXPR_ag(((AM_ARRAY_EXPR) arg_4682), i_4700)));
  964.      BE_ndefer_STR(self, STR_plus_CHAR_STR(local96, ';'));
  965.     }
  966.    }
  967.    after_loop_4776: ;
  968.    return res_4698; break;
  969.   case AM_IS_VOID_EXPR_tag:
  970.    if (!((!((((AM_IS_VOID_EXPR) arg_4682)->arg_51==((AM_EXPR) NULL)))))) {
  971.     fprintf(stderr,"Violation of assertion ./be.sa:2330:22\n");
  972.     exit(16);
  973.    }
  974.    local97 = ((AM_IS_VOID_EXPR) arg_4682)->arg_51;
  975.    arg_tp = (*AM_EXPR_tp_TP[local97->header.tag+AM_EXPR_tp_TP_offset])(local97);
  976.    if (!((!((arg_tp==((TP) NULL)))))) {
  977.     fprintf(stderr,"Violation of assertion ./be.sa:2332:22\n");
  978.     exit(16);
  979.    }
  980.    local99 = arg_tp;
  981.    if ((*TP_is_value_BOOL[local99->header.tag+TP_is_value_BOOL_offset])(local99)) {
  982.     local98 = (!(BE_is_built_in_t(self, arg_tp)));
  983.    } else {
  984.     local98 = FALSE;
  985.    }
  986.    if (local98) {
  987.     return BE_value_void_TP(self, arg_tp, BE_emit_expr_AM_(self, ((AM_IS_VOID_EXPR) arg_4682)->arg_51));
  988.    }
  989.    else {
  990.     local100 = ((STR) &name_4781);
  991.     local101 = STR_plus_STR_STR(local100, BE_emit_expr_AM_(self, ((AM_IS_VOID_EXPR) arg_4682)->arg_51));
  992.     local102 = STR_plus_STR_STR(local101, ((STR) &name_4782));
  993.     local103 = STR_plus_STR_STR(local102, BE_default_init_(self, arg_tp));
  994.     return STR_plus_STR_STR(local103, ((STR) &name_4783));
  995.    } break;
  996.   case AM_STMT_EXPR_tag:
  997.    if ((!((((AM_STMT_EXPR) arg_4682)->stmts==((AM_STMT) NULL))))) {
  998.     BE_emit_code_AM_STMT(self, ((AM_STMT_EXPR) arg_4682)->stmts);
  999.    }
  1000.    if ((!((((AM_STMT_EXPR) arg_4682)->expr==((AM_EXPR) NULL))))) {
  1001.     return BE_emit_expr_AM_(self, ((AM_STMT_EXPR) arg_4682)->expr);
  1002.    }
  1003.    else {
  1004.     return ((STR) NULL);
  1005.    } break;
  1006.   case AM_EXCEPT_EXPR_tag:
  1007.    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;
  1008.   case AM_BND_CREATE_EXPR_tag:
  1009.    self->bnd_rout_creates = FLISTAM_BND_CREA_4667(self->bnd_rout_creates, ((AM_BND_CREATE_EXPR) arg_4682));
  1010.    res_4701 = BE_genlocal_STR(self);
  1011.    local104 = self->code_c;
  1012.    local105 = FILE_plus_STR_FILE(local104, BE_eol_STR(self));
  1013.    local106 = FILE_plus_CHAR_FILE(local105, ' ');
  1014.    local107 = FILE_plus_STR_FILE(local106, BE_mangle_OB_STR(self, ((OB) arg_4682)));
  1015.    local108 = FILE_plus_STR_FILE(local107, ((STR) &S_ob));
  1016.    local109 = FILE_plus_STR_FILE(local108, res_4701);
  1017.    FILE_plus_CHAR(local109, ';');
  1018.    local110 = STR_plus_STR_STR(res_4701, ((STR) &name_4785));
  1019.    local111 = STR_plus_STR_STR(local110, BE_mangle_OB_STR(self, ((OB) arg_4682)));
  1020.    local112 = STR_plus_STR_STR(local111, ((STR) &S_obGC_mallocsiz));
  1021.    local113 = STR_plus_STR_STR(local112, BE_mangle_OB_STR(self, ((OB) arg_4682)));
  1022.    BE_ndefer_STR(self, STR_plus_STR_STR(local113, ((STR) &S_ob_struct)));
  1023.    local114 = STR_plus_STR_STR(res_4701, ((STR) &funcptr_4786));
  1024.    local115 = STR_plus_STR_STR(local114, BE_mangle_OB_STR(self, ((OB) arg_4682)));
  1025.    BE_ndefer_STR(self, STR_plus_CHAR_STR(local115, ';'));
  1026.    {
  1027.     struct AM_BND_CREATE_EX_3800_frame_struct temp4788_0;
  1028.     AM_BND_CREATE_EX_3800_frame 
  1029.     noname4789 = &temp4788_0;
  1030.     noname4789->state = 0;
  1031.     while (1) {
  1032.      if (noname4789->state == 0) {
  1033.       noname4702 = ((AM_BND_CREATE_EXPR) arg_4682);
  1034.       noname4789->arg0 = noname4702;
  1035.      }
  1036.      local116 = AM_BND_CREATE_EX_3800(noname4789);
  1037.      if (noname4789->state == -1) goto after_loop_4787;
  1038.      i_4703 = local116;
  1039.      idx = ARRAYINT_aget_IN(((AM_BND_CREATE_EXPR) arg_4682)->bnd_args, i_4703);
  1040.      if ((idx==0)) {
  1041.       local117 = ((AM_BND_CREATE_EXPR) arg_4682)->fun->tp;
  1042.       local118 = AM_BND_CREATE_EX_3787(((AM_BND_CREATE_EXPR) arg_4682), i_4703);
  1043.       local119 = (*AM_EXPR_tp_TP[local118->header.tag+AM_EXPR_tp_TP_offset])(local118);
  1044.       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)));
  1045.      }
  1046.      else {
  1047.       local120 = ((AM_BND_CREATE_EXPR) arg_4682)->fun->args_7;
  1048.       local121 = ARRAYTP_aget_INT_TP(local120, (c_INT_minus_INT_INT_chk(idx,1)));
  1049.       local122 = AM_BND_CREATE_EX_3787(((AM_BND_CREATE_EXPR) arg_4682), i_4703);
  1050.       local123 = (*AM_EXPR_tp_TP[local122->header.tag+AM_EXPR_tp_TP_offset])(local122);
  1051.       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)));
  1052.      }
  1053.      local124 = STR_plus_STR_STR(res_4701, ((STR) &bound_arg));
  1054.      local125 = STR_plus_INT_STR(local124, i_4703);
  1055.      local126 = STR_plus_STR_STR(local125, ((STR) &name_4790));
  1056.      local127 = STR_plus_STR_STR(local126, entry_4704);
  1057.      BE_ndefer_STR(self, STR_plus_CHAR_STR(local127, ';'));
  1058.     }
  1059.    }
  1060.    after_loop_4787: ;
  1061.    local128 = ((STR) &name_4791);
  1062.    local129 = STR_plus_STR_STR(local128, BE_mangle_OB_STR(self, ((OB) ((AM_BND_CREATE_EXPR) arg_4682)->tp_at)));
  1063.    local130 = STR_plus_STR_STR(local129, ((STR) &name_4792));
  1064.    return STR_plus_STR_STR(local130, res_4701); break;
  1065.   case AM_BND_ROUT_CALL_tag:
  1066.    local131 = ((AM_BND_ROUT_CALL) arg_4682)->br;
  1067.    tp_4705 = (*AM_EXPR_tp_TP[local131->header.tag+AM_EXPR_tp_TP_offset])(local131);
  1068.    br_4706 = BE_dec_local_TP_STR(self, tp_4705);
  1069.    local132 = STR_plus_STR_STR(br_4706, ((STR) &name_4793));
  1070.    local133 = STR_plus_STR_STR(local132, BE_emit_expr_AM_(self, ((AM_BND_ROUT_CALL) arg_4682)->br));
  1071.    BE_ndefer_STR(self, STR_plus_CHAR_STR(local133, ';'));
  1072.    local134 = STR_plus_STR_STR(((STR) &name_4794), br_4706);
  1073.    local135 = STR_plus_STR_STR(local134, ((STR) &funcptr_4795));
  1074.    res_4707 = STR_plus_STR_STR(local135, br_4706);
  1075.    arg_list_4708 = BE_emit_args_AM_(self, ((AM_CALL_EXPR) arg_4682));
  1076.    {
  1077.     struct AM_BND_ROUT_CALL_4798_frame_struct temp4797_0;
  1078.     AM_BND_ROUT_CALL_4798_frame 
  1079.     noname4799 = &temp4797_0;
  1080.     struct ARRAYSTR_elt_STR_frame_struct temp4797_1;
  1081.     ARRAYSTR_elt_STR_frame 
  1082.     noname4800 = &temp4797_1;
  1083.     noname4799->state = 0;
  1084.     noname4800->state = 0;
  1085.     while (1) {
  1086.      if (noname4799->state == 0) {
  1087.       noname4709 = ((AM_BND_ROUT_CALL) arg_4682);
  1088.       noname4799->arg0 = noname4709;
  1089.      }
  1090.      local136 = AM_BND_ROUT_CALL_4798(noname4799);
  1091.      if (noname4799->state == -1) goto after_loop_4796;
  1092.      i_4710 = local136;
  1093.      if (tp_4705==NULL) {
  1094.      } else
  1095.      switch (tp_4705->header.tag) {
  1096.       case TP_ROUT_tag:
  1097.        local137 = STR_plus_STR_STR(res_4707, ((STR) &name_4801));
  1098.        local138 = ARRAYTP_aget_INT_TP(((TP_ROUT) tp_4705)->args_7, i_4710);
  1099.        local139 = AM_BND_ROUT_CALL_4679(((AM_BND_ROUT_CALL) arg_4682), i_4710);
  1100.        local140 = (*AM_EXPR_tp_TP[local139->header.tag+AM_EXPR_tp_TP_offset])(local139);
  1101.        if (noname4800->state == 0) {
  1102.         noname4711 = arg_list_4708;
  1103.         noname4800->arg0 = noname4711;
  1104.        }
  1105.        local141 = ARRAYSTR_elt_STR(noname4800);
  1106.        if (noname4800->state == -1) goto after_loop_4796;
  1107.        res_4707 = STR_plus_STR_STR(local137, BE_cast_TP_TP_ST(self, local138, local140, local141)); break;
  1108.       default: ;
  1109.        fprintf(stderr,"No applicable type in typecase ./be.sa:2374:28\n");
  1110.        exit(16);
  1111.      }
  1112.     }
  1113.    }
  1114.    after_loop_4796: ;
  1115.    return STR_plus_CHAR_STR(res_4707, ')'); break;
  1116.   case AM_BND_ITER_CALL_tag:
  1117.    BE_barf_at_STR_P(self, ((STR) &bounditersnotimp), ((PROG_ERR) arg_4682)); break;
  1118.   case AM_ARR_CONST_tag:
  1119.    BE_barf_at_STR_P(self, ((STR) &constantarraylit), ((PROG_ERR) arg_4682)); break;
  1120.   case AM_INTI_CONST_tag:
  1121.    BE_barf_at_STR_P(self, ((STR) &INTIliteralsnoti), ((PROG_ERR) arg_4682)); break;
  1122.   case AM_FLTI_CONST_tag:
  1123.    BE_barf_at_STR_P(self, ((STR) &FLTIconstantsnot), ((PROG_ERR) arg_4682)); break;
  1124.   default: ;
  1125.    fprintf(stderr,"No applicable type in typecase ./be.sa:2182:16\n");
  1126.    exit(16);
  1127.  }
  1128.  BE_barf_STR(self, ((STR) &Gottoendofemit_expr));
  1129.  return ((STR) &name_4802);
  1130. }
  1131.  
  1132.  
  1133. STR BE_genother_STR(BE self) {
  1134.  STR noname4803;
  1135.  STR res = ((STR) NULL);
  1136.  while (1) {
  1137.   res = STR_plus_INT_STR(((STR) &temp_4805), self->counter_21);
  1138.   self->counter_21 = (c_INT_plus_INT_INT_chk(self->counter_21,1));
  1139.   if ((!(FSETSTR_test_STR(self->mangleset, res)))) {
  1140.    goto after_loop;
  1141.   }
  1142.  }
  1143.  after_loop: ;
  1144.  return res;
  1145. }
  1146.  
  1147.  
  1148. BOOL FLISTAM_ITER_CAL_4806(FLISTAM_ITER_CAL self, AM_ITER_CALL_EXPR e1_4807, AM_ITER_CALL_EXPR e2_4808) {
  1149.  BOOL noname4809 = ((BOOL) 0);
  1150.  return c_SYS_ob_eq_OB_OB_BOOL(((OB) e1_4807),((OB) e2_4808));
  1151.  if (!FLISTAM_ITER_CAL_4190(self)) {
  1152.   fprintf(stderr,"Failed invariant FLIST{AM_ITER_CALL_EXPR}::invariant:BOOL ../Library/flist.sa:37:9\n");
  1153.   exit(16);
  1154.  }
  1155. }
  1156.  
  1157.  
  1158. BOOL FLISTAM_ITER_CAL_4810(FLISTAM_ITER_CAL self, AM_ITER_CALL_EXPR e_4811) {
  1159.  BOOL noname4812 = ((BOOL) 0);
  1160.  FLISTAM_ITER_CAL noname4813;
  1161.  AM_ITER_CALL_EXPR local0;
  1162.  {
  1163.   struct FLISTAM_ITER_CAL_4815_frame_struct temp4814_0;
  1164.   FLISTAM_ITER_CAL_4815_frame 
  1165.   noname4816 = &temp4814_0;
  1166.   noname4816->state = 0;
  1167.   while (1) {
  1168.    if (noname4816->state == 0) {
  1169.     noname4813 = self;
  1170.     noname4816->arg0 = noname4813;
  1171.    }
  1172.    local0 = FLISTAM_ITER_CAL_4815(noname4816);
  1173.    if (noname4816->state == -1) goto after_loop;
  1174.    if (FLISTAM_ITER_CAL_4806(self, e_4811, local0)) {
  1175.     return TRUE;
  1176.    }
  1177.   }
  1178.  }
  1179.  after_loop: ;
  1180.  return FALSE;
  1181.  if (!FLISTAM_ITER_CAL_4190(self)) {
  1182.   fprintf(stderr,"Failed invariant FLIST{AM_ITER_CALL_EXPR}::invariant:BOOL ../Library/flist.sa:171:11\n");
  1183.   exit(16);
  1184.  }
  1185. }
  1186.  
  1187.  
  1188. INT FLISTAM_ITER_CAL_4817(FLISTAM_ITER_CAL self) {
  1189.  INT noname4818 = ((INT) 0);
  1190.   return self->asize;
  1191.  fprintf(stderr,"Last statement wasn't return ../Library/aref.sa:20:8\n");
  1192.  exit(16);
  1193. }
  1194.  
  1195.  
  1196. INT FLISTAM_ITER_CAL_4819(FLISTAM_ITER_CAL self) {
  1197.  INT noname4820 = ((INT) 0);
  1198.  if ((self==((FLISTAM_ITER_CAL) NULL))) {
  1199.   return 0;
  1200.  }
  1201.  return self->loc_17;
  1202.  if (!FLISTAM_ITER_CAL_4190(self)) {
  1203.   fprintf(stderr,"Failed invariant FLIST{AM_ITER_CALL_EXPR}::invariant:BOOL ../Library/flist.sa:50:7\n");
  1204.   exit(16);
  1205.  }
  1206. }
  1207.  
  1208.  
  1209. BOOL FLISTAM_ITER_CAL_4821(FLISTAM_ITER_CAL self) {
  1210.  BOOL noname4822 = ((BOOL) 0);
  1211.  INT local0;
  1212.  local0 = FLISTAM_ITER_CAL_4819(self);
  1213.  return (local0==0);
  1214.  if (!FLISTAM_ITER_CAL_4190(self)) {
  1215.   fprintf(stderr,"Failed invariant FLIST{AM_ITER_CALL_EXPR}::invariant:BOOL ../Library/flist.sa:113:11\n");
  1216.   exit(16);
  1217.  }
  1218. }
  1219.  
  1220.  
  1221. void FLISTAM_ITER_CAL_4823(FLISTAM_ITER_CAL self) {
  1222.  AM_ITER_CALL_EXPR nil = ((AM_ITER_CALL_EXPR) NULL);
  1223.  FLISTAM_ITER_CAL noname4824;
  1224.  if (!((!((self==((FLISTAM_ITER_CAL) NULL)))))) {
  1225.   fprintf(stderr,"Violation of precondition ../Library/aref.sa:43:9\n");
  1226.   exit(16);
  1227.  }
  1228.  {
  1229.   struct FLISTAM_ITER_CAL_4826_frame_struct temp4825_0;
  1230.   FLISTAM_ITER_CAL_4826_frame 
  1231.   noname4827 = &temp4825_0;
  1232.   noname4827->state = 0;
  1233.   while (1) {
  1234.    if (noname4827->state == 0) {
  1235.     noname4824 = self;
  1236.     noname4827->arg0 = noname4824;
  1237.    }
  1238.    noname4827->arg1 = nil;
  1239.    FLISTAM_ITER_CAL_4826(noname4827);
  1240.    if (noname4827->state == -1) goto after_loop;
  1241.    0 /* No return value from iter call */;
  1242.   }
  1243.  }
  1244.  after_loop: ;
  1245. }
  1246.  
  1247.  
  1248. void FLISTAM_ITER_CAL_4828(FLISTAM_ITER_CAL self) {
  1249.  if (FLISTAM_ITER_CAL_4821(self)) {
  1250.   return;
  1251.  }
  1252.  else {
  1253.   FLISTAM_ITER_CAL_4823(self);
  1254.   self->loc_17 = 0;
  1255.  }
  1256.  if (!FLISTAM_ITER_CAL_4190(self)) {
  1257.   fprintf(stderr,"Failed invariant FLIST{AM_ITER_CALL_EXPR}::invariant:BOOL ../Library/flist.sa:117:8\n");
  1258.   exit(16);
  1259.  }
  1260. }
  1261.  
  1262.  
  1263. void FLISTAM_ITER_CAL_4829(FLISTAM_ITER_CAL self, INT ind_4830, AM_ITER_CALL_EXPR val_4831) {
  1264.  BOOL local0;
  1265.  INT local1;
  1266.  INT local2;
  1267.  if ((!((self==((FLISTAM_ITER_CAL) NULL))))) {
  1268.   local1 = 0;
  1269.   local2 = (self->asize);
  1270.   local0 = INT_is_bet_INT_I(ind_4830, local1, (c_INT_minus_INT_INT_chk(local2,1)));
  1271.  } else {
  1272.   local0 = FALSE;
  1273.  }
  1274.  if (!(local0)) {
  1275.   fprintf(stderr,"Violation of precondition ../Library/aref.sa:38:7\n");
  1276.   exit(16);
  1277.  }
  1278.  if (ind_4830<0||ind_4830>=self->asize) {
  1279.   fprintf(stderr,"Index out of bounds ../Library/aref.sa:38:7\n");
  1280.   exit(16);
  1281.  }
  1282.  self->arr_part[ind_4830] = val_4831;
  1283. }
  1284.  
  1285.  
  1286. void FLISTAM_ITER_CAL_4832(FLISTAM_ITER_CAL self, INT ind_4833, AM_ITER_CALL_EXPR val_4834) {
  1287.  BOOL local0;
  1288.  INT local1;
  1289.  if ((!((self==((FLISTAM_ITER_CAL) NULL))))) {
  1290.   local1 = 0;
  1291.   local0 = INT_is_bet_INT_I(ind_4833, local1, (c_INT_minus_INT_INT_chk(self->loc_17,1)));
  1292.  } else {
  1293.   local0 = FALSE;
  1294.  }
  1295.  if (!(local0)) {
  1296.   fprintf(stderr,"Violation of precondition ../Library/flist.sa:73:7\n");
  1297.   exit(16);
  1298.  }
  1299.  FLISTAM_ITER_CAL_4829(self, ind_4833, val_4834);
  1300.  if (!FLISTAM_ITER_CAL_4190(self)) {
  1301.   fprintf(stderr,"Failed invariant FLIST{AM_ITER_CALL_EXPR}::invariant:BOOL ../Library/flist.sa:73:7\n");
  1302.   exit(16);
  1303.  }
  1304. }
  1305.  
  1306.  
  1307. FLISTAM_ITER_CAL FLISTAM_ITER_CAL_4835(FLISTAM_ITER_CAL self, AM_ITER_CALL_EXPR e_4836) {
  1308.  FLISTAM_ITER_CAL noname4837;
  1309.  FLISTAM_ITER_CAL r_4838 = ((FLISTAM_ITER_CAL) NULL);
  1310.  FLISTAM_ITER_CAL noname4839;
  1311.  FLISTAM_ITER_CAL noname4840;
  1312.  FLISTAM_ITER_CAL local0;
  1313.  INT local1;
  1314.  FLISTAM_ITER_CAL local2;
  1315.  INT local3;
  1316.  AM_ITER_CALL_EXPR local4;
  1317.  INT local5;
  1318.  if ((self==((FLISTAM_ITER_CAL) NULL))) {
  1319.   local0 = ((FLISTAM_ITER_CAL) sbi_arr_alloc(sizeof(struct FLISTAM_ITER_CAL_struct), FLISTAM_ITER_CAL_tag, sizeof(AM_ITER_CALL_EXPR) , 5));
  1320.   local0->asize = 5;
  1321.   r_4838 = local0;
  1322.  }
  1323.  else {
  1324.   local1 = self->loc_17;
  1325.   if ((local1<(self->asize))) {
  1326.    r_4838 = self;
  1327.   }
  1328.   else {
  1329.    local3 = 2;
  1330.    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)))));
  1331.    local2->asize = (c_INT_times_INT_INT_chk(local3,(self->asize)));
  1332.    r_4838 = local2;
  1333.    r_4838->loc_17 = self->loc_17;
  1334.    {
  1335.     struct FLISTAM_ITER_CAL_4815_frame_struct temp4841_0;
  1336.     FLISTAM_ITER_CAL_4815_frame 
  1337.     noname4842 = &temp4841_0;
  1338.     struct FLISTAM_ITER_CAL_4826_frame_struct temp4841_1;
  1339.     FLISTAM_ITER_CAL_4826_frame 
  1340.     noname4843 = &temp4841_1;
  1341.     noname4842->state = 0;
  1342.     noname4843->state = 0;
  1343.     while (1) {
  1344.      if (noname4843->state == 0) {
  1345.       noname4840 = r_4838;
  1346.       noname4843->arg0 = noname4840;
  1347.      }
  1348.      if (noname4842->state == 0) {
  1349.       noname4839 = self;
  1350.       noname4842->arg0 = noname4839;
  1351.      }
  1352.      local4 = FLISTAM_ITER_CAL_4815(noname4842);
  1353.      if (noname4842->state == -1) goto after_loop;
  1354.      noname4843->arg1 = local4;
  1355.      FLISTAM_ITER_CAL_4826(noname4843);
  1356.      if (noname4843->state == -1) goto after_loop;
  1357.      0 /* No return value from iter call */;
  1358.     }
  1359.    }
  1360.    after_loop: ;
  1361.    FLISTAM_ITER_CAL_4828(self);
  1362.   }
  1363.  }
  1364.  r_4838->loc_17 = (c_INT_plus_INT_INT_chk(r_4838->loc_17,1));
  1365.  local5 = (c_INT_minus_INT_INT_chk(r_4838->loc_17,1));
  1366.  FLISTAM_ITER_CAL_4832(r_4838, local5, e_4836);
  1367.  return r_4838;
  1368.  if (!FLISTAM_ITER_CAL_4190(self)) {
  1369.   fprintf(stderr,"Failed invariant FLIST{AM_ITER_CALL_EXPR}::invariant:BOOL ../Library/flist.sa:79:7\n");
  1370.   exit(16);
  1371.  }
  1372. }
  1373.  
  1374.  
  1375. void BE_defer_STR(BE self, STR s_4844) {
  1376.  self->routine_code = FSTR_plus_STR_FSTR(self->routine_code, s_4844);
  1377. }
  1378.  
  1379.  
  1380. ARRAYARRAYSTR ARRAYARRAYSTR_cr(ARRAYARRAYSTR self, INT n_4845) {
  1381.  ARRAYARRAYSTR noname4846;
  1382.  ARRAYARRAYSTR local0;
  1383.  if (!((n_4845>=0))) {
  1384.   fprintf(stderr,"Violation of precondition ../Library/array.sa:56:9\n");
  1385.   exit(16);
  1386.  }
  1387.  local0 = ((ARRAYARRAYSTR) sbi_arr_alloc(sizeof(struct ARRAYARRAYSTR_struct), ARRAYARRAYSTR_tag, sizeof(ARRAYSTR) , n_4845));
  1388.  local0->asize = n_4845;
  1389.  return local0;
  1390. }
  1391.  
  1392.  
  1393. INT ARRAYARRAYSTR_as(ARRAYARRAYSTR self) {
  1394.  INT noname4847 = ((INT) 0);
  1395.   return self->asize;
  1396.  fprintf(stderr,"Last statement wasn't return ../Library/aref.sa:20:8\n");
  1397.  exit(16);
  1398. }
  1399.  
  1400.  
  1401. void ARRAYARRAYSTR_as_4848(ARRAYARRAYSTR self, INT ind_4849, ARRAYSTR val_4850) {
  1402.  BOOL local0;
  1403.  INT local1;
  1404.  INT local2;
  1405.  if ((!((self==((ARRAYARRAYSTR) NULL))))) {
  1406.   local1 = 0;
  1407.   local2 = (self->asize);
  1408.   local0 = INT_is_bet_INT_I(ind_4849, local1, (c_INT_minus_INT_INT_chk(local2,1)));
  1409.  } else {
  1410.   local0 = FALSE;
  1411.  }
  1412.  if (!(local0)) {
  1413.   fprintf(stderr,"Violation of precondition ../Library/aref.sa:38:7\n");
  1414.   exit(16);
  1415.  }
  1416.  if (ind_4849<0||ind_4849>=self->asize) {
  1417.   fprintf(stderr,"Index out of bounds ../Library/aref.sa:38:7\n");
  1418.   exit(16);
  1419.  }
  1420.  self->arr_part[ind_4849] = val_4850;
  1421. }
  1422.  
  1423.  
  1424. ARRAYSTR ARRAYARRAYSTR_ag(ARRAYARRAYSTR self, INT ind_4851) {
  1425.  ARRAYSTR noname4852;
  1426.  BOOL local0;
  1427.  INT local1;
  1428.  INT local2;
  1429.  if ((!((self==((ARRAYARRAYSTR) NULL))))) {
  1430.   local1 = 0;
  1431.   local2 = (self->asize);
  1432.   local0 = INT_is_bet_INT_I(ind_4851, local1, (c_INT_minus_INT_INT_chk(local2,1)));
  1433.  } else {
  1434.   local0 = FALSE;
  1435.  }
  1436.  if (!(local0)) {
  1437.   fprintf(stderr,"Violation of precondition ../Library/aref.sa:33:7\n");
  1438.   exit(16);
  1439.  }
  1440.  if (ind_4851<0||ind_4851>=self->asize) {
  1441.   fprintf(stderr,"Index out of bounds ../Library/aref.sa:33:7\n");
  1442.   exit(16);
  1443.  }
  1444.  return self->arr_part[ind_4851];
  1445. }
  1446.  
  1447.  
  1448. void BE_emit_typeswit(BE self, STR test_4853, FLISTTP tgts_4854, FLISTAM_STMT stmts_4855) {
  1449.  FSETTP gen_4856;
  1450.  FLISTTP noname4857;
  1451.  INT i = ((INT) 0);
  1452.  TP tp_4858;
  1453.  BOOL dseen = ((BOOL) 0);
  1454.  FSETTP noname4859;
  1455.  TP d;
  1456.  FSETTP noname4860;
  1457.  STR local0;
  1458.  INT local1;
  1459.  TP local2;
  1460.  TP local3;
  1461.  STR local4;
  1462.  TP local5;
  1463.  STR local6;
  1464.  STR local7;
  1465.  STR local8;
  1466.  local0 = STR_plus_STR_STR(((STR) &switch_4861), test_4853);
  1467.  BE_ndefer_STR(self, STR_plus_STR_STR(local0, ((STR) &headertag_4862)));
  1468.  BE_in(self);
  1469.  if ((!((tgts_4854==((FLISTTP) NULL))))) {
  1470.   gen_4856 = FSETTP_create_FSETTP(((FSETTP) NULL));
  1471.   {
  1472.    struct FLISTTP_ind_INT_frame_struct temp4863_0;
  1473.    FLISTTP_ind_INT_frame 
  1474.    noname4864 = &temp4863_0;
  1475.    noname4864->state = 0;
  1476.    while (1) {
  1477.     if (noname4864->state == 0) {
  1478.      noname4857 = tgts_4854;
  1479.      noname4864->arg0 = noname4857;
  1480.     }
  1481.     local1 = FLISTTP_ind_INT(noname4864);
  1482.     if (noname4864->state == -1) goto after_loop;
  1483.     i = local1;
  1484.     tp_4858 = FLISTTP_aget_INT_TP(tgts_4854, i);
  1485.     dseen = FALSE;
  1486.     local2 = tp_4858;
  1487.     if ((*TP_is_abstract_BOOL[local2->header.tag+TP_is_abstract_BOOL_offset])(local2)) {
  1488.      if (tp_4858==NULL) {
  1489.      } else
  1490.      switch (tp_4858->header.tag) {
  1491.       case TP_CLASS_tag:
  1492.        {
  1493.         struct FSETTP_elt_TP_frame_struct temp4866_0;
  1494.         FSETTP_elt_TP_frame 
  1495.         noname4867 = &temp4866_0;
  1496.         struct FSETTP_elt_TP_frame_struct temp4866_1;
  1497.         FSETTP_elt_TP_frame 
  1498.         noname4868 = &temp4866_1;
  1499.         noname4867->state = 0;
  1500.         noname4868->state = 0;
  1501.         while (1) {
  1502.          if (noname4867->state == 0) {
  1503.           noname4859 = PROG_descendants(self->prog, ((TP_CLASS) tp_4858));
  1504.           noname4867->arg0 = noname4859;
  1505.          }
  1506.          local3 = FSETTP_elt_TP(noname4867);
  1507.          if (noname4867->state == -1) goto after_loop_4865;
  1508.          d = local3;
  1509.          if ((!(FSETTP_test_TP_BOOL(gen_4856, d)))) {
  1510.           local4 = ((STR) &case_4869);
  1511.           if (noname4868->state == 0) {
  1512.            noname4860 = PROG_descendants(self->prog, ((TP_CLASS) tp_4858));
  1513.            noname4868->arg0 = noname4860;
  1514.           }
  1515.           local5 = FSETTP_elt_TP(noname4868);
  1516.           if (noname4868->state == -1) goto after_loop_4865;
  1517.           local6 = STR_plus_STR_STR(local4, BE_tag_for_TP_STR(self, local5));
  1518.           BE_ndefer_STR(self, STR_plus_CHAR_STR(local6, ':'));
  1519.           dseen = TRUE;
  1520.           gen_4856 = FSETTP_insert_TP(gen_4856, d);
  1521.          }
  1522.         }
  1523.        }
  1524.        after_loop_4865: ; break;
  1525.       default: ;
  1526.        fprintf(stderr,"No applicable type in typecase ./be.sa:1783:28\n");
  1527.        exit(16);
  1528.      }
  1529.     }
  1530.     else {
  1531.      if ((!(FSETTP_test_TP_BOOL(gen_4856, tp_4858)))) {
  1532.       local7 = ((STR) &case_4870);
  1533.       local8 = STR_plus_STR_STR(local7, BE_tag_for_TP_STR(self, tp_4858));
  1534.       BE_ndefer_STR(self, STR_plus_CHAR_STR(local8, ':'));
  1535.       dseen = TRUE;
  1536.       gen_4856 = FSETTP_insert_TP(gen_4856, tp_4858);
  1537.      }
  1538.     }
  1539.     if (dseen) {
  1540.      BE_in(self);
  1541.      BE_emit_code_AM_STMT(self, FLISTAM_STMT_age(stmts_4855, i));
  1542.      BE_defer_STR(self, ((STR) &break_4871));
  1543.      BE_out(self);
  1544.     }
  1545.    }
  1546.   }
  1547.   after_loop: ;
  1548.  }
  1549.  BE_ndefer_STR(self, ((STR) &default_4872));
  1550. }
  1551.  
  1552.  
  1553. void BE_emit_code_AM_STMT(BE self, AM_STMT arg_4873) {
  1554.  STR s1 = ((STR) NULL);
  1555.  STR s2 = ((STR) NULL);
  1556.  STR outer_loop;
  1557.  STR fname;
  1558.  INT fnamecount = ((INT) 0);
  1559.  FLISTAM_ITER_CAL noname4874;
  1560.  AM_ITER_CALL_EXPR e_4875;
  1561.  STR tname;
  1562.  FLISTAM_ITER_CAL noname4876;
  1563.  AM_ITER_CALL_EXPR e_4877;
  1564.  FLISTAM_ITER_CAL noname4878;
  1565.  AM_ITER_CALL_EXPR it;
  1566.  FLISTAM_ITER_CAL noname4879;
  1567.  AM_ITER_CALL_EXPR e_4880;
  1568.  STR ep;
  1569.  ARRAYARRAYSTR targets = ((ARRAYARRAYSTR) NULL);
  1570.  STR test_4881;
  1571.  ARRAYARRAYSTR noname4882;
  1572.  INT i = ((INT) 0);
  1573.  ARRAYSTR noname4883;
  1574.  INT j = ((INT) 0);
  1575.  ARRAYARRAYSTR noname4884;
  1576.  INT i_4885 = ((INT) 0);
  1577.  ARRAYSTR noname4886;
  1578.  AM_STMT local0;
  1579.  STR local1;
  1580.  AM_EXPR local2;
  1581.  TP local3;
  1582.  AM_EXPR local4;
  1583.  TP local5;
  1584.  STR local6;
  1585.  STR local7;
  1586.  BOOL local8;
  1587.  AM_ITER_CALL_EXPR local9;
  1588.  BOOL local10;
  1589.  STR local11;
  1590.  STR local12;
  1591.  STR local13;
  1592.  STR local14;
  1593.  STR local15;
  1594.  STR local16;
  1595.  STR local17;
  1596.  STR local18;
  1597.  STR local19;
  1598.  STR local20;
  1599.  STR local21;
  1600.  STR local22;
  1601.  STR local23;
  1602.  STR local24;
  1603.  STR local25;
  1604.  STR local26;
  1605.  STR local27;
  1606.  AM_ITER_CALL_EXPR local28;
  1607.  BOOL local29;
  1608.  STR local30;
  1609.  STR local31;
  1610.  STR local32;
  1611.  STR local33;
  1612.  STR local34;
  1613.  AM_ITER_CALL_EXPR local35;
  1614.  BOOL local36;
  1615.  STR local37;
  1616.  BOOL local38;
  1617.  BOOL local39;
  1618.  AM_ITER_CALL_EXPR local40;
  1619.  BOOL local41;
  1620.  STR local42;
  1621.  STR local43;
  1622.  STR local44;
  1623.  STR local45;
  1624.  STR local46;
  1625.  TP local47;
  1626.  AM_EXPR local48;
  1627.  TP local49;
  1628.  STR local50;
  1629.  BOOL local51;
  1630.  AM_EXPR local52;
  1631.  STR local53;
  1632.  STR local54;
  1633.  STR local55;
  1634.  TP local56;
  1635.  AM_EXPR local57;
  1636.  TP local58;
  1637.  STR local59;
  1638.  STR local60;
  1639.  ARRAYARRAYSTR local61;
  1640.  INT local62;
  1641.  ARRAYSTR local63;
  1642.  INT local64;
  1643.  ARRAYSTR local65;
  1644.  FLISTAM_CONST local66;
  1645.  STR local67;
  1646.  INT local68;
  1647.  STR local69;
  1648.  STR local70;
  1649.  STR local71;
  1650.  STR local72;
  1651.  STR local73;
  1652.  STR local74;
  1653.  STR local75;
  1654.  STR local76;
  1655.  STR local77;
  1656.  BOOL local78;
  1657.  STR local79;
  1658.  STR local80;
  1659.  STR local81;
  1660.  STR local82;
  1661.  TP_CLASS local83;
  1662.  AM_EXPR local84;
  1663.  TP local85;
  1664.  STR local86;
  1665.  STR local87;
  1666.  STR local88;
  1667.  STR local89;
  1668.  STR local90;
  1669.  STR local91;
  1670.  STR local92;
  1671.  AM_STMT local93;
  1672.  while (1) {
  1673.   if ((arg_4873==((AM_STMT) NULL))) {
  1674.    goto after_loop;
  1675.   }
  1676.   local0 = arg_4873;
  1677.   BE_announce_at_S(self, (*AM_STMT_source_S[local0->header.tag+AM_STMT_source_S_offset])(local0));
  1678.   if (arg_4873==NULL) {
  1679.   } else
  1680.   switch (arg_4873->header.tag) {
  1681.    case AM_ASSIGN_STMT_tag:
  1682.     s1 = BE_emit_expr_AM_(self, ((AM_ASSIGN_STMT) arg_4873)->dest);
  1683.     s2 = BE_emit_expr_AM_(self, ((AM_ASSIGN_STMT) arg_4873)->src_42);
  1684.     local1 = STR_plus_STR_STR(s1, ((STR) &name_4888));
  1685.     local2 = ((AM_ASSIGN_STMT) arg_4873)->dest;
  1686.     local3 = (*AM_EXPR_tp_TP[local2->header.tag+AM_EXPR_tp_TP_offset])(local2);
  1687.     local4 = ((AM_ASSIGN_STMT) arg_4873)->src_42;
  1688.     local5 = (*AM_EXPR_tp_TP[local4->header.tag+AM_EXPR_tp_TP_offset])(local4);
  1689.     local6 = STR_plus_STR_STR(local1, BE_cast_TP_TP_ST(self, local3, local5, s2));
  1690.     BE_ndefer_STR(self, STR_plus_CHAR_STR(local6, ';')); break;
  1691.    case AM_IF_STMT_tag:
  1692.     s1 = BE_emit_expr_AM_(self, ((AM_IF_STMT) arg_4873)->test_40);
  1693.     local7 = STR_plus_STR_STR(((STR) &if_4889), s1);
  1694.     BE_ndefer_STR(self, STR_plus_STR_STR(local7, ((STR) &name_4890)));
  1695.     BE_in(self);
  1696.     BE_emit_code_AM_STMT(self, ((AM_IF_STMT) arg_4873)->if_true);
  1697.     BE_out(self);
  1698.     BE_ndefer_STR(self, ((STR) &name_4891));
  1699.     if ((!((((AM_IF_STMT) arg_4873)->if_false==((AM_STMT) NULL))))) {
  1700.      BE_ndefer_STR(self, ((STR) &else_4892));
  1701.      BE_in(self);
  1702.      BE_emit_code_AM_STMT(self, ((AM_IF_STMT) arg_4873)->if_false);
  1703.      BE_out(self);
  1704.      BE_ndefer_STR(self, ((STR) &name_4893));
  1705.     } break;
  1706.    case AM_LOOP_STMT_tag:
  1707.     outer_loop = self->current_loop;
  1708.     self->current_loop = BE_mangle_OB_STR(self, ((OB) arg_4873));
  1709.     fname = BE_genother_STR(self);
  1710.     fnamecount = 0;
  1711.     if ((!((((AM_LOOP_STMT) arg_4873)->bits_59==((FLISTAM_BND_ITER) NULL))))) {
  1712.      local8 = TRUE;
  1713.     } else {
  1714.      local8 = (!((((AM_LOOP_STMT) arg_4873)->its_60==((FLISTAM_ITER_CAL) NULL))));
  1715.     }
  1716.     if (local8) {
  1717.      BE_comment_STR(self, ((STR) &loop_4894));
  1718.      BE_ndefer_STR(self, ((STR) &name_4895));
  1719.      BE_in(self);
  1720.     }
  1721.     if ((!((((AM_LOOP_STMT) arg_4873)->bits_59==((FLISTAM_BND_ITER) NULL))))) {
  1722.      BE_defer_newline(self);
  1723.      BE_barf_at_STR_P(self, ((STR) &Bounditersnotimp), ((PROG_ERR) arg_4873));
  1724.      (fwrite(((STR) &initializeboundi)->arr_part,((STR) &initializeboundi)->asize,1,self->code_c->fp));
  1725.     }
  1726.     if ((!((((AM_LOOP_STMT) arg_4873)->its_60==((FLISTAM_ITER_CAL) NULL))))) {
  1727.      {
  1728.       struct FLISTAM_ITER_CAL_4815_frame_struct temp4897_0;
  1729.       FLISTAM_ITER_CAL_4815_frame 
  1730.       noname4898 = &temp4897_0;
  1731.       noname4898->state = 0;
  1732.       while (1) {
  1733.        if (noname4898->state == 0) {
  1734.         noname4874 = ((AM_LOOP_STMT) arg_4873)->its_60;
  1735.         noname4898->arg0 = noname4874;
  1736.        }
  1737.        local9 = FLISTAM_ITER_CAL_4815(noname4898);
  1738.        if (noname4898->state == -1) goto after_loop_4896;
  1739.        e_4875 = local9;
  1740.        if (SIG_is_iter_BOOL(self->current_function)) {
  1741.         local10 = TRUE;
  1742.        } else {
  1743.         local10 = (!(BE_is_built_in_i(self, e_4875->fun)));
  1744.        }
  1745.        if (local10) {
  1746.         local11 = ((STR) &Frameforcallto);
  1747.         BE_comment_STR(self, STR_plus_STR_STR(local11, SIG_str_STR(e_4875->fun)));
  1748.         if ((!((self->nested_its==((FLISTAM_ITER_CAL) NULL))))) {
  1749.          if (!((!(FLISTAM_ITER_CAL_4810(self->nested_its, e_4875))))) {
  1750.           fprintf(stderr,"Violation of assertion ./be.sa:1532:38\n");
  1751.           exit(16);
  1752.          }
  1753.          self->nested_its = FLISTAM_ITER_CAL_4835(self->nested_its, e_4875);
  1754.          local12 = ((STR) &framenested);
  1755.          BE_force_mangle_(self, ((OB) e_4875), STR_plus_INT_STR(local12, FLISTAM_ITER_CAL_4819(self->nested_its)));
  1756.         }
  1757.         BE_defer_newline(self);
  1758.         if (((AM_LOOP_STMT) arg_4873)->has_yield) {
  1759.          if ((self->nested_its==((FLISTAM_ITER_CAL) NULL))) {
  1760.           local13 = BE_mangle_OB_STR(self, ((OB) e_4875->fun));
  1761.           BE_defer_STR(self, STR_plus_STR_STR(local13, ((STR) &S_frame)));
  1762.          }
  1763.          local14 = BE_mangle_OB_STR(self, ((OB) e_4875));
  1764.          local15 = STR_plus_STR_STR(local14, ((STR) &ALLOCATE_4899));
  1765.          local16 = STR_plus_STR_STR(local15, BE_mangle_OB_STR(self, ((OB) e_4875->fun)));
  1766.          BE_defer_STR(self, STR_plus_STR_STR(local16, ((STR) &S_frame_4900)));
  1767.         }
  1768.         else {
  1769.          local17 = STR_plus_CHAR_STR(fname, '_');
  1770.          tname = STR_plus_INT_STR(local17, fnamecount);
  1771.          fnamecount = (c_INT_plus_INT_INT_chk(fnamecount,1));
  1772.          local18 = ((STR) &struct_4901);
  1773.          local19 = STR_plus_STR_STR(local18, BE_mangle_OB_STR(self, ((OB) e_4875->fun)));
  1774.          local20 = STR_plus_STR_STR(local19, ((STR) &S_frame_struct));
  1775.          local21 = STR_plus_STR_STR(local20, tname);
  1776.          BE_defer_STR(self, STR_plus_CHAR_STR(local21, ';'));
  1777.          BE_defer_newline(self);
  1778.          if ((self->nested_its==((FLISTAM_ITER_CAL) NULL))) {
  1779.           local22 = BE_mangle_OB_STR(self, ((OB) e_4875->fun));
  1780.           BE_defer_STR(self, STR_plus_STR_STR(local22, ((STR) &S_frame_4902)));
  1781.           local23 = BE_mangle_OB_STR(self, ((OB) e_4875));
  1782.           local24 = STR_plus_STR_STR(local23, ((STR) &name_4903));
  1783.           local25 = STR_plus_STR_STR(local24, tname);
  1784.           BE_ndefer_STR(self, STR_plus_CHAR_STR(local25, ';'));
  1785.          }
  1786.         }
  1787.        }
  1788.        else {
  1789.         local26 = ((STR) &BOOL_4904);
  1790.         local27 = STR_plus_STR_STR(local26, BE_mangle_OB_STR(self, ((OB) e_4875)));
  1791.         BE_ndefer_STR(self, STR_plus_STR_STR(local27, ((STR) &TRUE_4905)));
  1792.        }
  1793.       }
  1794.      }
  1795.      after_loop_4896: ;
  1796.      if ((!((self->nested_its==((FLISTAM_ITER_CAL) NULL))))) {
  1797.       fnamecount = 0;
  1798.       {
  1799.        struct FLISTAM_ITER_CAL_4815_frame_struct temp4907_0;
  1800.        FLISTAM_ITER_CAL_4815_frame 
  1801.        noname4908 = &temp4907_0;
  1802.        noname4908->state = 0;
  1803.        while (1) {
  1804.         if (noname4908->state == 0) {
  1805.          noname4876 = ((AM_LOOP_STMT) arg_4873)->its_60;
  1806.          noname4908->arg0 = noname4876;
  1807.         }
  1808.         local28 = FLISTAM_ITER_CAL_4815(noname4908);
  1809.         if (noname4908->state == -1) goto after_loop_4906;
  1810.         e_4877 = local28;
  1811.         if (SIG_is_iter_BOOL(self->current_function)) {
  1812.          local29 = TRUE;
  1813.         } else {
  1814.          local29 = (!(BE_is_built_in_i(self, e_4877->fun)));
  1815.         }
  1816.         if (local29) {
  1817.          if ((!(((AM_LOOP_STMT) arg_4873)->has_yield))) {
  1818.           local30 = BE_mangle_OB_STR(self, ((OB) e_4877));
  1819.           local31 = STR_plus_STR_STR(local30, ((STR) &name_4909));
  1820.           local32 = STR_plus_STR_STR(local31, fname);
  1821.           local33 = STR_plus_CHAR_STR(local32, '_');
  1822.           local34 = STR_plus_INT_STR(local33, fnamecount);
  1823.           BE_ndefer_STR(self, STR_plus_CHAR_STR(local34, ';'));
  1824.           fnamecount = (c_INT_plus_INT_INT_chk(fnamecount,1));
  1825.          }
  1826.         }
  1827.        }
  1828.       }
  1829.       after_loop_4906: ;
  1830.      }
  1831.      {
  1832.       struct FLISTAM_ITER_CAL_4815_frame_struct temp4911_0;
  1833.       FLISTAM_ITER_CAL_4815_frame 
  1834.       noname4912 = &temp4911_0;
  1835.       noname4912->state = 0;
  1836.       while (1) {
  1837.        if (noname4912->state == 0) {
  1838.         noname4878 = ((AM_LOOP_STMT) arg_4873)->its_60;
  1839.         noname4912->arg0 = noname4878;
  1840.        }
  1841.        local35 = FLISTAM_ITER_CAL_4815(noname4912);
  1842.        if (noname4912->state == -1) goto after_loop_4910;
  1843.        it = local35;
  1844.        if (SIG_is_iter_BOOL(self->current_function)) {
  1845.         local36 = TRUE;
  1846.        } else {
  1847.         local36 = (!(BE_is_built_in_i(self, it->fun)));
  1848.        }
  1849.        if (local36) {
  1850.         local37 = BE_mangle_OB_STR(self, ((OB) it));
  1851.         BE_ndefer_STR(self, STR_plus_STR_STR(local37, ((STR) &state0_4913)));
  1852.        }
  1853.       }
  1854.      }
  1855.      after_loop_4910: ;
  1856.     }
  1857.     BE_ndefer_STR(self, ((STR) &while1));
  1858.     BE_in(self);
  1859.     BE_emit_code_AM_STMT(self, ((AM_LOOP_STMT) arg_4873)->body);
  1860.     BE_out(self);
  1861.     BE_ndefer_STR(self, ((STR) &name_4914));
  1862.     if ((!((((AM_LOOP_STMT) arg_4873)->bits_59==((FLISTAM_BND_ITER) NULL))))) {
  1863.      local38 = TRUE;
  1864.     } else {
  1865.      local38 = (!((((AM_LOOP_STMT) arg_4873)->its_60==((FLISTAM_ITER_CAL) NULL))));
  1866.     }
  1867.     if (local38) {
  1868.      BE_out(self);
  1869.      BE_ndefer_STR(self, ((STR) &name_4915));
  1870.     }
  1871.     BE_ndefer_STR(self, STR_plus_STR_STR(self->current_loop, ((STR) &name_4916)));
  1872.     if (((AM_LOOP_STMT) arg_4873)->has_yield) {
  1873.      local39 = (!((((AM_LOOP_STMT) arg_4873)->its_60==((FLISTAM_ITER_CAL) NULL))));
  1874.     } else {
  1875.      local39 = FALSE;
  1876.     }
  1877.     if (local39) {
  1878.      {
  1879.       struct FLISTAM_ITER_CAL_4815_frame_struct temp4918_0;
  1880.       FLISTAM_ITER_CAL_4815_frame 
  1881.       noname4919 = &temp4918_0;
  1882.       noname4919->state = 0;
  1883.       while (1) {
  1884.        if (noname4919->state == 0) {
  1885.         noname4879 = ((AM_LOOP_STMT) arg_4873)->its_60;
  1886.         noname4919->arg0 = noname4879;
  1887.        }
  1888.        local40 = FLISTAM_ITER_CAL_4815(noname4919);
  1889.        if (noname4919->state == -1) goto after_loop_4917;
  1890.        e_4880 = local40;
  1891.        if (SIG_is_iter_BOOL(self->current_function)) {
  1892.         local41 = TRUE;
  1893.        } else {
  1894.         local41 = (!(BE_is_built_in_i(self, e_4880->fun)));
  1895.        }
  1896.        if (local41) {
  1897.         ep = BE_mangle_OB_STR(self, ((OB) e_4880));
  1898.         local42 = STR_plus_STR_STR(((STR) &GC_free_4920), ep);
  1899.         local43 = STR_plus_STR_STR(local42, ((STR) &name_4921));
  1900.         local44 = STR_plus_STR_STR(local43, ep);
  1901.         BE_ndefer_STR(self, STR_plus_STR_STR(local44, ((STR) &NULL_4922)));
  1902.        }
  1903.       }
  1904.      }
  1905.      after_loop_4917: ;
  1906.     }
  1907.     self->current_loop = outer_loop; break;
  1908.    case AM_BREAK_STMT_tag:
  1909.     local45 = STR_plus_STR_STR(((STR) &goto_4923), self->current_loop);
  1910.     BE_ndefer_STR(self, STR_plus_STR_STR(local45, ((STR) &name_4924))); break;
  1911.    case AM_RETURN_STMT_tag:
  1912.     if (SIG_is_iter_BOOL(self->current_function)) {
  1913.      BE_ndefer_STR(self, ((STR) &framestate1));
  1914.     }
  1915.     if ((!((((AM_RETURN_STMT) arg_4873)->val_16==((AM_EXPR) NULL))))) {
  1916.      s1 = BE_emit_expr_AM_(self, ((AM_RETURN_STMT) arg_4873)->val_16);
  1917.      local46 = ((STR) &return_4925);
  1918.      local47 = self->current_function->ret;
  1919.      local48 = ((AM_RETURN_STMT) arg_4873)->val_16;
  1920.      local49 = (*AM_EXPR_tp_TP[local48->header.tag+AM_EXPR_tp_TP_offset])(local48);
  1921.      local50 = STR_plus_STR_STR(local46, BE_cast_TP_TP_ST(self, local47, local49, s1));
  1922.      BE_ndefer_STR(self, STR_plus_CHAR_STR(local50, ';'));
  1923.     }
  1924.     else {
  1925.      if ((self->current_function->ret==((TP) NULL))) {
  1926.       local51 = TRUE;
  1927.      } else {
  1928.       local51 = SIG_is_iter_BOOL(self->current_function);
  1929.      }
  1930.      if (!(local51)) {
  1931.       fprintf(stderr,"Violation of assertion ./be.sa:1614:30\n");
  1932.       exit(16);
  1933.      }
  1934.      BE_ndefer_STR(self, ((STR) &return_4926));
  1935.     }
  1936.     if ((self->indent==1)) {
  1937.      self->saw_outer_return = TRUE;
  1938.     } break;
  1939.    case AM_EXPR_STMT_tag:
  1940.     s1 = BE_emit_expr_AM_(self, ((AM_EXPR_STMT) arg_4873)->expr);
  1941.     if ((!((s1==((STR) NULL))))) {
  1942.      local52 = ((AM_EXPR_STMT) arg_4873)->expr;
  1943.      if ((!(((*AM_EXPR_tp_TP[local52->header.tag+AM_EXPR_tp_TP_offset])(local52)==((TP) NULL))))) {
  1944.       local53 = STR_plus_STR_STR(((STR) &void_4927), s1);
  1945.       BE_ndefer_STR(self, STR_plus_CHAR_STR(local53, ';'));
  1946.      }
  1947.      else {
  1948.       BE_ndefer_STR(self, STR_plus_CHAR_STR(s1, ';'));
  1949.      }
  1950.     } break;
  1951.    case AM_YIELD_STMT_tag:
  1952.     local54 = STR_plus_INT_STR(((STR) &framestate), ((AM_YIELD_STMT) arg_4873)->ret);
  1953.     BE_ndefer_STR(self, STR_plus_CHAR_STR(local54, ';'));
  1954.     if ((!((((AM_YIELD_STMT) arg_4873)->val_16==((AM_EXPR) NULL))))) {
  1955.      local55 = ((STR) &return_4928);
  1956.      local56 = self->current_function->ret;
  1957.      local57 = ((AM_YIELD_STMT) arg_4873)->val_16;
  1958.      local58 = (*AM_EXPR_tp_TP[local57->header.tag+AM_EXPR_tp_TP_offset])(local57);
  1959.      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)));
  1960.      BE_ndefer_STR(self, STR_plus_CHAR_STR(local59, ';'));
  1961.     }
  1962.     else {
  1963.      BE_ndefer_STR(self, ((STR) &return_4929));
  1964.     }
  1965.     local60 = STR_plus_INT_STR(((STR) &state_4930), self->state_counter);
  1966.     BE_ndefer_STR(self, STR_plus_STR_STR(local60, ((STR) &name_4931)));
  1967.     self->state_counter = (c_INT_plus_INT_INT_chk(self->state_counter,1)); break;
  1968.    case AM_CASE_STMT_tag:
  1969.     test_4881 = BE_emit_expr_AM_(self, ((AM_CASE_STMT) arg_4873)->test_40);
  1970.     if ((!((((AM_CASE_STMT) arg_4873)->tgts==((FLISTFLISTAM_CONST) NULL))))) {
  1971.      local61 = ((ARRAYARRAYSTR) NULL);
  1972.      targets = ARRAYARRAYSTR_cr(local61, FLISTFLISTAM_CON(((AM_CASE_STMT) arg_4873)->tgts));
  1973.      {
  1974.       struct ARRAYARRAYSTR_in_frame_struct temp4933_0;
  1975.       ARRAYARRAYSTR_in_frame 
  1976.       noname4934 = &temp4933_0;
  1977.       noname4934->state = 0;
  1978.       while (1) {
  1979.        if (noname4934->state == 0) {
  1980.         noname4882 = targets;
  1981.         noname4934->arg0 = noname4882;
  1982.        }
  1983.        local62 = ARRAYARRAYSTR_in(noname4934);
  1984.        if (noname4934->state == -1) goto after_loop_4932;
  1985.        i = local62;
  1986.        local63 = ((ARRAYSTR) NULL);
  1987.        ARRAYARRAYSTR_as_4848(targets, i, ARRAYSTR_create_(local63, FLISTAM_CONST_si(FLISTFLISTAM_CON_3988(((AM_CASE_STMT) arg_4873)->tgts, i))));
  1988.        {
  1989.         struct ARRAYSTR_ind_INT_frame_struct temp4936_0;
  1990.         ARRAYSTR_ind_INT_frame 
  1991.         noname4937 = &temp4936_0;
  1992.         noname4937->state = 0;
  1993.         while (1) {
  1994.          if (noname4937->state == 0) {
  1995.           noname4883 = ARRAYARRAYSTR_ag(targets, i);
  1996.           noname4937->arg0 = noname4883;
  1997.          }
  1998.          local64 = ARRAYSTR_ind_INT(noname4937);
  1999.          if (noname4937->state == -1) goto after_loop_4935;
  2000.          j = local64;
  2001.          local65 = ARRAYARRAYSTR_ag(targets, i);
  2002.          local66 = FLISTFLISTAM_CON_3988(((AM_CASE_STMT) arg_4873)->tgts, i);
  2003.          ARRAYSTR_aset_IN_4289(local65, j, BE_emit_expr_AM_(self, ((AM_EXPR) FLISTAM_CONST_ag(local66, j))));
  2004.         }
  2005.        }
  2006.        after_loop_4935: ;
  2007.       }
  2008.      }
  2009.      after_loop_4932: ;
  2010.      local67 = STR_plus_STR_STR(((STR) &switch_4938), test_4881);
  2011.      BE_ndefer_STR(self, STR_plus_STR_STR(local67, ((STR) &name_4939)));
  2012.      BE_in(self);
  2013.      BE_comment_STR(self, ((STR) &casestatement_4940));
  2014.      {
  2015.       struct ARRAYARRAYSTR_in_frame_struct temp4942_0;
  2016.       ARRAYARRAYSTR_in_frame 
  2017.       noname4943 = &temp4942_0;
  2018.       noname4943->state = 0;
  2019.       while (1) {
  2020.        if (noname4943->state == 0) {
  2021.         noname4884 = targets;
  2022.         noname4943->arg0 = noname4884;
  2023.        }
  2024.        local68 = ARRAYARRAYSTR_in(noname4943);
  2025.        if (noname4943->state == -1) goto after_loop_4941;
  2026.        i_4885 = local68;
  2027.        {
  2028.         struct ARRAYSTR_elt_STR_frame_struct temp4945_0;
  2029.         ARRAYSTR_elt_STR_frame 
  2030.         noname4946 = &temp4945_0;
  2031.         noname4946->state = 0;
  2032.         while (1) {
  2033.          local69 = ((STR) &case_4947);
  2034.          if (noname4946->state == 0) {
  2035.           noname4886 = ARRAYARRAYSTR_ag(targets, i_4885);
  2036.           noname4946->arg0 = noname4886;
  2037.          }
  2038.          local70 = ARRAYSTR_elt_STR(noname4946);
  2039.          if (noname4946->state == -1) goto after_loop_4944;
  2040.          local71 = STR_plus_STR_STR(local69, local70);
  2041.          BE_ndefer_STR(self, STR_plus_CHAR_STR(local71, ':'));
  2042.         }
  2043.        }
  2044.        after_loop_4944: ;
  2045.        BE_in(self);
  2046.        BE_emit_code_AM_STMT(self, FLISTAM_STMT_age(((AM_CASE_STMT) arg_4873)->stmts, i_4885));
  2047.        BE_out(self);
  2048.        BE_ndefer_STR(self, ((STR) &break_4948));
  2049.       }
  2050.      }
  2051.      after_loop_4941: ;
  2052.      BE_ndefer_STR(self, ((STR) &default_4949));
  2053.      BE_in(self);
  2054.      if (((AM_CASE_STMT) arg_4873)->no_else) {
  2055.       BE_runtime_error(self, ((STR) &Noapplicabletarg), ((PROG_ERR) arg_4873));
  2056.      }
  2057.      else {
  2058.       BE_emit_code_AM_STMT(self, ((AM_CASE_STMT) arg_4873)->else_stmts);
  2059.      }
  2060.      BE_out(self);
  2061.      BE_out(self);
  2062.      BE_ndefer_STR(self, ((STR) &name_4950));
  2063.     }
  2064.     else {
  2065.      BE_runtime_error(self, ((STR) &Noapplicabletarg_4951), ((PROG_ERR) arg_4873));
  2066.     } break;
  2067.    case AM_PRE_STMT_tag:
  2068.     if (self->chk_pre) {
  2069.      local72 = ((STR) &if_4952);
  2070.      local73 = STR_plus_STR_STR(local72, BE_emit_expr_AM_(self, ((AM_PRE_STMT) arg_4873)->test_40));
  2071.      BE_ndefer_STR(self, STR_plus_STR_STR(local73, ((STR) &name_4953)));
  2072.      BE_in(self);
  2073.      BE_runtime_error(self, ((STR) &Violationofpreco), ((PROG_ERR) arg_4873));
  2074.      BE_out(self);
  2075.      BE_ndefer_STR(self, ((STR) &name_4954));
  2076.     } break;
  2077.    case AM_POST_STMT_tag:
  2078.     if (self->chk_post) {
  2079.      local74 = ((STR) &if_4955);
  2080.      local75 = STR_plus_STR_STR(local74, BE_emit_expr_AM_(self, ((AM_POST_STMT) arg_4873)->test_40));
  2081.      BE_ndefer_STR(self, STR_plus_STR_STR(local75, ((STR) &name_4956)));
  2082.      BE_in(self);
  2083.      BE_runtime_error(self, ((STR) &Violationofpostc), ((PROG_ERR) arg_4873));
  2084.      BE_out(self);
  2085.      BE_ndefer_STR(self, ((STR) &name_4957));
  2086.     } break;
  2087.    case AM_INITIAL_STMT_tag:
  2088.     if (self->chk_post) {
  2089.      BE_emit_code_AM_STMT(self, ((AM_INITIAL_STMT) arg_4873)->stmts);
  2090.     } break;
  2091.    case AM_ASSERT_STMT_tag:
  2092.     if (self->chk_assert) {
  2093.      local76 = ((STR) &if_4958);
  2094.      local77 = STR_plus_STR_STR(local76, BE_emit_expr_AM_(self, ((AM_ASSERT_STMT) arg_4873)->test_40));
  2095.      BE_ndefer_STR(self, STR_plus_STR_STR(local77, ((STR) &name_4959)));
  2096.      BE_in(self);
  2097.      BE_runtime_error(self, ((STR) &Violationofassertion), ((PROG_ERR) arg_4873));
  2098.      BE_out(self);
  2099.      BE_ndefer_STR(self, ((STR) &name_4960));
  2100.     } break;
  2101.    case AM_TYPECASE_STMT_tag:
  2102.     if (((AM_TYPECASE_STMT) arg_4873)->has_void_stmts) {
  2103.      local78 = TRUE;
  2104.     } else {
  2105.      local78 = self->chk_when;
  2106.     }
  2107.     if (local78) {
  2108.      local79 = ((STR) &if_4961);
  2109.      local80 = STR_plus_STR_STR(local79, BE_mangle_OB_STR(self, ((OB) ((AM_TYPECASE_STMT) arg_4873)->test_40)));
  2110.      BE_ndefer_STR(self, STR_plus_STR_STR(local80, ((STR) &NULL_4962)));
  2111.      BE_in(self);
  2112.      if (((AM_TYPECASE_STMT) arg_4873)->has_void_stmts) {
  2113.       BE_emit_code_AM_STMT(self, ((AM_TYPECASE_STMT) arg_4873)->void_stmts);
  2114.      }
  2115.      else {
  2116.       BE_runtime_error(self, ((STR) &Voidobjectoftypecase), ((PROG_ERR) arg_4873));
  2117.      }
  2118.      BE_out(self);
  2119.      BE_ndefer_STR(self, ((STR) &else_4963));
  2120.     }
  2121.     local81 = BE_mangle_OB_STR(self, ((OB) ((AM_TYPECASE_STMT) arg_4873)->test_40));
  2122.     BE_emit_typeswit(self, local81, ((AM_TYPECASE_STMT) arg_4873)->tgts, ((AM_TYPECASE_STMT) arg_4873)->stmts);
  2123.     if (((AM_TYPECASE_STMT) arg_4873)->no_else) {
  2124.      BE_in(self);
  2125.      BE_runtime_error(self, ((STR) &Noapplicabletype), ((PROG_ERR) arg_4873));
  2126.      BE_out(self);
  2127.     }
  2128.     else {
  2129.      BE_in(self);
  2130.      BE_emit_code_AM_STMT(self, ((AM_TYPECASE_STMT) arg_4873)->else_stmts);
  2131.      BE_out(self);
  2132.     }
  2133.     BE_out(self);
  2134.     BE_ndefer_STR(self, ((STR) &name_4964)); break;
  2135.    case AM_RAISE_STMT_tag:
  2136.     if (!((!((((AM_RAISE_STMT) arg_4873)->val_16==((AM_EXPR) NULL)))))) {
  2137.      fprintf(stderr,"Violation of assertion ./be.sa:1719:26\n");
  2138.      exit(16);
  2139.     }
  2140.     local82 = ((STR) &exception_4965);
  2141.     local83 = self->prog->tp_builtin->dollar_ob;
  2142.     local84 = ((AM_RAISE_STMT) arg_4873)->val_16;
  2143.     local85 = (*AM_EXPR_tp_TP[local84->header.tag+AM_EXPR_tp_TP_offset])(local84);
  2144.     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)));
  2145.     BE_ndefer_STR(self, STR_plus_STR_STR(local86, ((STR) &name_4966)));
  2146.     BE_ndefer_STR(self, ((STR) &longjmplast_protect1)); break;
  2147.    case AM_INVARIANT_STMT_tag:
  2148.     if (self->chk_invariant) {
  2149.      if (!((!((self->current_self==((STR) NULL)))))) {
  2150.       fprintf(stderr,"Violation of assertion ./be.sa:1725:30\n");
  2151.       exit(16);
  2152.      }
  2153.      local87 = ((STR) &if_4967);
  2154.      local88 = STR_plus_STR_STR(local87, BE_mangle_OB_STR(self, ((OB) ((AM_INVARIANT_STMT) arg_4873)->sig_6)));
  2155.      local89 = STR_plus_STR_STR(local88, ((STR) &name_4968));
  2156.      local90 = STR_plus_STR_STR(local89, self->current_self);
  2157.      BE_ndefer_STR(self, STR_plus_STR_STR(local90, ((STR) &name_4969)));
  2158.      BE_in(self);
  2159.      local91 = ((STR) &Failedinvariant);
  2160.      local92 = STR_plus_STR_STR(local91, SIG_str_STR(((AM_INVARIANT_STMT) arg_4873)->sig_6));
  2161.      BE_runtime_error(self, local92, ((PROG_ERR) arg_4873));
  2162.      BE_out(self);
  2163.      BE_ndefer_STR(self, ((STR) &name_4970));
  2164.     } break;
  2165.    case AM_PROTECT_STMT_tag:
  2166.     BE_ndefer_STR(self, ((STR) &name_4971));
  2167.     BE_in(self);
  2168.     BE_ndefer_STR(self, ((STR) &OBold_exceptione));
  2169.     BE_ndefer_STR(self, ((STR) &jmp_bufold_protect));
  2170.     BE_ndefer_STR(self, ((STR) &bcopylast_protec));
  2171.     BE_ndefer_STR(self, ((STR) &ifsetjmplast_pro));
  2172.     BE_in(self);
  2173.     BE_emit_code_AM_STMT(self, ((AM_PROTECT_STMT) arg_4873)->body);
  2174.     BE_out(self);
  2175.     BE_ndefer_STR(self, ((STR) &else_4972));
  2176.     BE_in(self);
  2177.     BE_ndefer_STR(self, ((STR) &bcopyold_protect));
  2178.     BE_emit_typeswit(self, ((STR) &exception_4973), ((AM_PROTECT_STMT) arg_4873)->tgts, ((AM_PROTECT_STMT) arg_4873)->stmts);
  2179.     if (((AM_PROTECT_STMT) arg_4873)->no_else) {
  2180.      BE_ndefer_STR(self, ((STR) &longjmplast_prot_4974));
  2181.     }
  2182.     else {
  2183.      BE_in(self);
  2184.      BE_emit_code_AM_STMT(self, ((AM_PROTECT_STMT) arg_4873)->else_stmts);
  2185.      BE_out(self);
  2186.     }
  2187.     BE_out(self);
  2188.     BE_ndefer_STR(self, ((STR) &name_4975));
  2189.     BE_out(self);
  2190.     BE_ndefer_STR(self, ((STR) &name_4976));
  2191.     BE_ndefer_STR(self, ((STR) &bcopyold_protect_4977));
  2192.     BE_ndefer_STR(self, ((STR) &exceptionold_exc));
  2193.     BE_out(self);
  2194.     BE_ndefer_STR(self, ((STR) &name_4978)); break;
  2195.    default: ;
  2196.     fprintf(stderr,"No applicable type in typecase ./be.sa:1494:20\n");
  2197.     exit(16);
  2198.   }
  2199.   local93 = arg_4873;
  2200.   arg_4873 = (*AM_STMT_next_AM_STMT[local93->header.tag+AM_STMT_next_AM_STMT_offset])(local93);
  2201.  }
  2202.  after_loop: ;
  2203. }
  2204.  
  2205.  
  2206. void FILE_plus_FSTR(FILE_20 self, FSTR f_4979) {
  2207.  INT fs = ((INT) 0);
  2208.  INT local0;
  2209.  if (!((!((self->fp==((EXT_OB) NULL)))))) {
  2210.   fprintf(stderr,"Violation of precondition ../Library/file.sa:165:7\n");
  2211.   exit(16);
  2212.  }
  2213.  local0 = FSTR_size_INT(f_4979);
  2214.  fs = fwrite(((f_4979==NULL)?NULL:f_4979->arr_part), local0, 1, self->fp);
  2215. }
  2216.  
  2217.  
  2218. FMAPOBSTR FMAPOBSTR_halve_(FMAPOBSTR self) {
  2219.  FMAPOBSTR noname4980;
  2220.  INT ns = ((INT) 0);
  2221.  FMAPOBSTR r_4981;
  2222.  FMAPOBSTR noname4982;
  2223.  BOOL local0;
  2224.  INT local1;
  2225.  INT local2;
  2226.  INT local3;
  2227.  INT local4;
  2228.  INT local5;
  2229.  INT local6;
  2230.  TUPOBSTR local7;
  2231.  if ((!((self==((FMAPOBSTR) NULL))))) {
  2232.   local1 = self->hsize;
  2233.   local2 = (self->asize);
  2234.   local3 = (c_INT_minus_INT_INT_chk(local2,1));
  2235.   local0 = (local1<(c_INT_div_INT_INT_chk(local3,4)));
  2236.  } else {
  2237.   local0 = FALSE;
  2238.  }
  2239.  if (!(local0)) {
  2240.   fprintf(stderr,"Violation of precondition ../Library/fmap.sa:209:21\n");
  2241.   exit(16);
  2242.  }
  2243.  local4 = (self->asize);
  2244.  local5 = (c_INT_minus_INT_INT_chk(local4,1));
  2245.  local6 = (c_INT_div_INT_INT_chk(local5,2));
  2246.  ns = (c_INT_plus_INT_INT_chk(local6,1));
  2247.  r_4981 = FMAPOBSTR_alloca(self, ns);
  2248.  {
  2249.   struct FMAPOBSTR_pairs__frame_struct temp4983_0;
  2250.   FMAPOBSTR_pairs__frame 
  2251.   noname4984 = &temp4983_0;
  2252.   noname4984->state = 0;
  2253.   while (1) {
  2254.    if (noname4984->state == 0) {
  2255.     noname4982 = self;
  2256.     noname4984->arg0 = noname4982;
  2257.    }
  2258.    local7 = FMAPOBSTR_pairs_(noname4984);
  2259.    if (noname4984->state == -1) goto after_loop;
  2260.    r_4981 = FMAPOBSTR_insert(r_4981, local7);
  2261.   }
  2262.  }
  2263.  after_loop: ;
  2264.  return r_4981;
  2265. }
  2266.  
  2267.  
  2268. FMAPOBSTR FMAPOBSTR_delete(FMAPOBSTR self, OB k) {
  2269.  FMAPOBSTR noname4985;
  2270.  INT h = ((INT) 0);
  2271.  OB tk;
  2272.  INT i = ((INT) 0);
  2273.  OB tk_4986;
  2274.  INT hsh = ((INT) 0);
  2275.  INT local0;
  2276.  INT local1;
  2277.  INT local2;
  2278.  TUPOBSTR local3;
  2279.  OB local4;
  2280.  INT local5;
  2281.  INT local6;
  2282.  INT local7;
  2283.  BOOL local8;
  2284.  TUPOBSTR local9;
  2285.  OB local10;
  2286.  BOOL local11;
  2287.  TUPOBSTR local12;
  2288.  OB local13;
  2289.  BOOL local14;
  2290.  INT local15;
  2291.  INT local16;
  2292.  INT local17;
  2293.  INT local18;
  2294.  if ((self==((FMAPOBSTR) NULL))) {
  2295.   return ((FMAPOBSTR) NULL);
  2296.  }
  2297.  local0 = FMAPOBSTR_key_ha(self, k);
  2298.  local1 = (self->asize);
  2299.  h = (local0&(c_INT_minus_INT_INT_chk(local1,2)));
  2300.  while (1) {
  2301.   tk = (TUPOBSTR_blob=FMAPOBSTR_aget_I(self, h)).t1;
  2302.   if (FMAPOBSTR_key_eq(self, tk, FMAPOBSTR_key_nil_OB(self))) {
  2303.    return self;
  2304.   }
  2305.   else {
  2306.    if (FMAPOBSTR_key_eq(self, tk, k)) {
  2307.     goto after_loop;
  2308.    }
  2309.   }
  2310.   local2 = (self->asize);
  2311.   if ((h==(c_INT_minus_INT_INT_chk(local2,2)))) {
  2312.    h = 0;
  2313.   }
  2314.   else {
  2315.    h = (c_INT_plus_INT_INT_chk(h,1));
  2316.   }
  2317.  }
  2318.  after_loop: ;
  2319.  local3 = TUPOBSTR_zero;
  2320.  local4 = FMAPOBSTR_key_nil_OB(self);
  2321.  FMAPOBSTR_aset_I(self, h, TUPOBSTR_create_(local3, local4, ((STR) NULL)));
  2322.  self->hsize = (c_INT_minus_INT_INT_chk(self->hsize,1));
  2323.  i = h;
  2324.  while (1) {
  2325.   local5 = (self->asize);
  2326.   if ((i==(c_INT_minus_INT_INT_chk(local5,2)))) {
  2327.    i = 0;
  2328.   }
  2329.   else {
  2330.    i = (c_INT_plus_INT_INT_chk(i,1));
  2331.   }
  2332.   tk_4986 = (TUPOBSTR_blob=FMAPOBSTR_aget_I(self, i)).t1;
  2333.   if (FMAPOBSTR_key_eq(self, tk_4986, FMAPOBSTR_key_nil_OB(self))) {
  2334.    goto after_loop_4988;
  2335.   }
  2336.   local6 = FMAPOBSTR_key_ha(self, tk_4986);
  2337.   local7 = (self->asize);
  2338.   hsh = (local6&(c_INT_minus_INT_INT_chk(local7,2)));
  2339.   if ((hsh<=i)) {
  2340.    if ((h<i)) {
  2341.     local8 = (h>=hsh);
  2342.    } else {
  2343.     local8 = FALSE;
  2344.    }
  2345.    if (local8) {
  2346.     FMAPOBSTR_aset_I(self, h, FMAPOBSTR_aget_I(self, i));
  2347.     h = i;
  2348.     local9 = TUPOBSTR_zero;
  2349.     local10 = FMAPOBSTR_key_nil_OB(self);
  2350.     FMAPOBSTR_aset_I(self, i, TUPOBSTR_create_(local9, local10, ((STR) NULL)));
  2351.    }
  2352.   }
  2353.   else {
  2354.    if ((h>=hsh)) {
  2355.     local11 = TRUE;
  2356.    } else {
  2357.     local11 = (h<i);
  2358.    }
  2359.    if (local11) {
  2360.     FMAPOBSTR_aset_I(self, h, FMAPOBSTR_aget_I(self, i));
  2361.     h = i;
  2362.     local12 = TUPOBSTR_zero;
  2363.     local13 = FMAPOBSTR_key_nil_OB(self);
  2364.     FMAPOBSTR_aset_I(self, i, TUPOBSTR_create_(local12, local13, ((STR) NULL)));
  2365.    }
  2366.   }
  2367.  }
  2368.  after_loop_4988: ;
  2369.  local15 = (self->asize);
  2370.  if ((local15>=33)) {
  2371.   local16 = self->hsize;
  2372.   local17 = (self->asize);
  2373.   local18 = (c_INT_minus_INT_INT_chk(local17,1));
  2374.   local14 = (local16<(c_INT_div_INT_INT_chk(local18,4)));
  2375.  } else {
  2376.   local14 = FALSE;
  2377.  }
  2378.  if (local14) {
  2379.   return FMAPOBSTR_halve_(self);
  2380.  }
  2381.  return self;
  2382.  if (!FMAPOBSTR_invari(self)) {
  2383.   fprintf(stderr,"Failed invariant FMAP{$OB,STR}::invariant:BOOL ../Library/fmap.sa:217:9\n");
  2384.   exit(16);
  2385.  }
  2386. }
  2387.  
  2388.  
  2389. FSETSTR FSETSTR_halve_si(FSETSTR self) {
  2390.  FSETSTR noname4990;
  2391.  FSETSTR r_4991;
  2392.  FSETSTR noname4992;
  2393.  BOOL local0;
  2394.  INT local1;
  2395.  INT local2;
  2396.  INT local3;
  2397.  INT local4;
  2398.  INT local5;
  2399.  INT local6;
  2400.  STR local7;
  2401.  if ((!((self==((FSETSTR) NULL))))) {
  2402.   local1 = self->hsize;
  2403.   local2 = (self->asize);
  2404.   local3 = (c_INT_minus_INT_INT_chk(local2,1));
  2405.   local0 = (local1<(c_INT_div_INT_INT_chk(local3,4)));
  2406.  } else {
  2407.   local0 = FALSE;
  2408.  }
  2409.  if (!(local0)) {
  2410.   fprintf(stderr,"Violation of precondition ../Library/fset.sa:180:21\n");
  2411.   exit(16);
  2412.  }
  2413.  local4 = (self->asize);
  2414.  local5 = (c_INT_minus_INT_INT_chk(local4,1));
  2415.  local6 = (c_INT_div_INT_INT_chk(local5,2));
  2416.  r_4991 = FSETSTR_allocate(self, (c_INT_plus_INT_INT_chk(local6,1)));
  2417.  {
  2418.   struct FSETSTR_elt_STR_frame_struct temp4993_0;
  2419.   FSETSTR_elt_STR_frame 
  2420.   noname4994 = &temp4993_0;
  2421.   noname4994->state = 0;
  2422.   while (1) {
  2423.    if (noname4994->state == 0) {
  2424.     noname4992 = self;
  2425.     noname4994->arg0 = noname4992;
  2426.    }
  2427.    local7 = FSETSTR_elt_STR(noname4994);
  2428.    if (noname4994->state == -1) goto after_loop;
  2429.    r_4991 = FSETSTR_insert_S(r_4991, local7);
  2430.   }
  2431.  }
  2432.  after_loop: ;
  2433.  return r_4991;
  2434. }
  2435.  
  2436.  
  2437. FSETSTR FSETSTR_delete_S(FSETSTR self, STR e_4995) {
  2438.  FSETSTR noname4996;
  2439.  INT h = ((INT) 0);
  2440.  STR te;
  2441.  INT i = ((INT) 0);
  2442.  STR te_4997;
  2443.  INT hsh = ((INT) 0);
  2444.  INT local0;
  2445.  INT local1;
  2446.  INT local2;
  2447.  INT local3;
  2448.  INT local4;
  2449.  INT local5;
  2450.  BOOL local6;
  2451.  BOOL local7;
  2452.  BOOL local8;
  2453.  INT local9;
  2454.  INT local10;
  2455.  INT local11;
  2456.  INT local12;
  2457.  if ((self==((FSETSTR) NULL))) {
  2458.   return ((FSETSTR) NULL);
  2459.  }
  2460.  local0 = FSETSTR_elt_hash(self, e_4995);
  2461.  local1 = (self->asize);
  2462.  h = (local0&(c_INT_minus_INT_INT_chk(local1,2)));
  2463.  while (1) {
  2464.   te = FSETSTR_aget_INT_STR(self, h);
  2465.   if (FSETSTR_elt_eq_S(self, te, FSETSTR_elt_nil_STR(self))) {
  2466.    return self;
  2467.   }
  2468.   else {
  2469.    if (FSETSTR_elt_eq_S(self, te, e_4995)) {
  2470.     goto after_loop;
  2471.    }
  2472.   }
  2473.   local2 = (self->asize);
  2474.   if ((h==(c_INT_minus_INT_INT_chk(local2,2)))) {
  2475.    h = 0;
  2476.   }
  2477.   else {
  2478.    h = (c_INT_plus_INT_INT_chk(h,1));
  2479.   }
  2480.  }
  2481.  after_loop: ;
  2482.  FSETSTR_aset_INT_STR(self, h, FSETSTR_elt_nil_STR(self));
  2483.  self->hsize = (c_INT_minus_INT_INT_chk(self->hsize,1));
  2484.  i = h;
  2485.  while (1) {
  2486.   local3 = (self->asize);
  2487.   if ((i==(c_INT_minus_INT_INT_chk(local3,2)))) {
  2488.    i = 0;
  2489.   }
  2490.   else {
  2491.    i = (c_INT_plus_INT_INT_chk(i,1));
  2492.   }
  2493.   te_4997 = FSETSTR_aget_INT_STR(self, i);
  2494.   if (FSETSTR_elt_eq_S(self, te_4997, FSETSTR_elt_nil_STR(self))) {
  2495.    goto after_loop_4999;
  2496.   }
  2497.   local4 = FSETSTR_elt_hash(self, te_4997);
  2498.   local5 = (self->asize);
  2499.   hsh = (local4&(c_INT_minus_INT_INT_chk(local5,2)));
  2500.   if ((hsh<=i)) {
  2501.    if ((h<i)) {
  2502.     local6 = (h>=hsh);
  2503.    } else {
  2504.     local6 = FALSE;
  2505.    }
  2506.    if (local6) {
  2507.     FSETSTR_aset_INT_STR(self, h, FSETSTR_aget_INT_STR(self, i));
  2508.     h = i;
  2509.     FSETSTR_aset_INT_STR(self, i, FSETSTR_elt_nil_STR(self));
  2510.    }
  2511.   }
  2512.   else {
  2513.    if ((h>=hsh)) {
  2514.     local7 = TRUE;
  2515.    } else {
  2516.     local7 = (h<i);
  2517.    }
  2518.    if (local7) {
  2519.     FSETSTR_aset_INT_STR(self, h, FSETSTR_aget_INT_STR(self, i));
  2520.     h = i;
  2521.     FSETSTR_aset_INT_STR(self, i, FSETSTR_elt_nil_STR(self));
  2522.    }
  2523.   }
  2524.  }
  2525.  after_loop_4999: ;
  2526.  local9 = (self->asize);
  2527.  if ((local9>=33)) {
  2528.   local10 = self->hsize;
  2529.   local11 = (self->asize);
  2530.   local12 = (c_INT_minus_INT_INT_chk(local11,1));
  2531.   local8 = (local10<(c_INT_div_INT_INT_chk(local12,4)));
  2532.  } else {
  2533.   local8 = FALSE;
  2534.  }
  2535.  if (local8) {
  2536.   return FSETSTR_halve_si(self);
  2537.  }
  2538.  return self;
  2539.  if (!FSETSTR_invarian(self)) {
  2540.   fprintf(stderr,"Failed invariant FSET{STR}::invariant:BOOL ../Library/fset.sa:188:9\n");
  2541.   exit(16);
  2542.  }
  2543. }
  2544.  
  2545.  
  2546. void BE_unmangle_OB(BE self, OB ob_5001) {
  2547.  STR s_5002;
  2548.  s_5002 = FMAPOBSTR_get_OB_STR(self->manglemap, ob_5001);
  2549.  if ((!((s_5002==((STR) NULL))))) {
  2550.   self->manglemap = FMAPOBSTR_delete(self->manglemap, ob_5001);
  2551.   self->mangleset = FSETSTR_delete_S(self->mangleset, s_5002);
  2552.  }
  2553. }
  2554.  
  2555.  
  2556. void BE_emit_epilogue(BE self, AM_ROUT_DEF f_5003) {
  2557.  FLISTAM_LOCAL_EXPR noname5004;
  2558.  AM_ROUT_DEF noname5005;
  2559.  BOOL local0;
  2560.  BOOL local1;
  2561.  BOOL local2;
  2562.  BOOL local3;
  2563.  AM_LOCAL_EXPR local4;
  2564.  AM_LOCAL_EXPR local5;
  2565.  if (self->chk_return) {
  2566.   local2 = (!(self->saw_outer_return));
  2567.  } else {
  2568.   local2 = FALSE;
  2569.  }
  2570.  if (local2) {
  2571.   local1 = (!(AM_ROUT_DEF_is_i(f_5003)));
  2572.  } else {
  2573.   local1 = FALSE;
  2574.  }
  2575.  if (local1) {
  2576.   local0 = (!((f_5003->sig_6->ret==((TP) NULL))));
  2577.  } else {
  2578.   local0 = FALSE;
  2579.  }
  2580.  if (local0) {
  2581.   BE_runtime_error(self, ((STR) &Laststatementwas), ((PROG_ERR) f_5003));
  2582.  }
  2583.  FILE_plus_FSTR(self->code_c, self->routine_code);
  2584.  if (AM_ROUT_DEF_is_i(f_5003)) {
  2585.   BE_newline(self);
  2586.   (fwrite(((STR) &framestate1_5006)->arr_part,((STR) &framestate1_5006)->asize,1,self->code_c->fp));
  2587.   if ((!((f_5003->sig_6->ret==((TP) NULL))))) {
  2588.    BE_newline(self);
  2589.    (fwrite(((STR) &returndummy)->arr_part,((STR) &returndummy)->asize,1,self->code_c->fp));
  2590.   }
  2591.   else {
  2592.    BE_newline(self);
  2593.    (fwrite(((STR) &return_5007)->arr_part,((STR) &return_5007)->asize,1,self->code_c->fp));
  2594.   }
  2595.  }
  2596.  BE_out(self);
  2597.  BE_newline(self);
  2598.  (fwrite(((STR) &name_5008)->arr_part,((STR) &name_5008)->asize,1,self->code_c->fp));
  2599.  if ((!((f_5003->locals_57==((FLISTAM_LOCAL_EXPR) NULL))))) {
  2600.   local3 = (!(AM_ROUT_DEF_is_i(f_5003)));
  2601.  } else {
  2602.   local3 = FALSE;
  2603.  }
  2604.  if (local3) {
  2605.   {
  2606.    struct FLISTAM_LOCAL_EX_4237_frame_struct temp5009_0;
  2607.    FLISTAM_LOCAL_EX_4237_frame 
  2608.    noname5010 = &temp5009_0;
  2609.    noname5010->state = 0;
  2610.    while (1) {
  2611.     if (noname5010->state == 0) {
  2612.      noname5004 = f_5003->locals_57;
  2613.      noname5010->arg0 = noname5004;
  2614.     }
  2615.     local4 = FLISTAM_LOCAL_EX_4237(noname5010);
  2616.     if (noname5010->state == -1) goto after_loop;
  2617.     BE_unmangle_OB(self, ((OB) local4));
  2618.    }
  2619.   }
  2620.   after_loop: ;
  2621.  }
  2622.  {
  2623.   struct AM_ROUT_DEF_elt__frame_struct temp5012_0;
  2624.   AM_ROUT_DEF_elt__frame 
  2625.   noname5013 = &temp5012_0;
  2626.   noname5013->state = 0;
  2627.   while (1) {
  2628.    if (noname5013->state == 0) {
  2629.     noname5005 = f_5003;
  2630.     noname5013->arg0 = noname5005;
  2631.    }
  2632.    local5 = AM_ROUT_DEF_elt_(noname5013);
  2633.    if (noname5013->state == -1) goto after_loop_5011;
  2634.    BE_unmangle_OB(self, ((OB) local5));
  2635.   }
  2636.  }
  2637.  after_loop_5011: ;
  2638. }
  2639.  
  2640.  
  2641. void BE_emit_typedef_(BE self, AM_ROUT_DEF f_5014) {
  2642.  AM_ROUT_DEF noname5015;
  2643.  AM_LOCAL_EXPR fi;
  2644.  INT noname5016 = ((INT) 0);
  2645.  FLISTAM_LOCAL_EXPR noname5017;
  2646.  AM_LOCAL_EXPR fli;
  2647.  STR name_5018;
  2648.  FLISTAM_ITER_CAL noname5019;
  2649.  AM_ITER_CALL_EXPR ni;
  2650.  STR name_5020;
  2651.  FILE_20 local0;
  2652.  FILE_20 local1;
  2653.  STR local2;
  2654.  AM_LOCAL_EXPR local3;
  2655.  FILE_20 local4;
  2656.  FILE_20 local5;
  2657.  FILE_20 local6;
  2658.  FILE_20 local7;
  2659.  INT local8;
  2660.  FILE_20 local9;
  2661.  FILE_20 local10;
  2662.  AM_LOCAL_EXPR local11;
  2663.  INT local12;
  2664.  FILE_20 local13;
  2665.  FILE_20 local14;
  2666.  FILE_20 local15;
  2667.  FILE_20 local16;
  2668.  AM_ITER_CALL_EXPR local17;
  2669.  FILE_20 local18;
  2670.  FILE_20 local19;
  2671.  INT local20;
  2672.  FILE_20 local21;
  2673.  FILE_20 local22;
  2674.  FILE_20 local23;
  2675.  STR local24;
  2676.  local0 = FILE_plus_STR_FILE(self->typedefs_h, ((STR) &typedefstruct_5021));
  2677.  local1 = FILE_plus_STR_FILE(local0, BE_mangle_OB_STR(self, ((OB) f_5014->sig_6)));
  2678.  (fwrite(((STR) &S_frame_struct_5022)->arr_part,((STR) &S_frame_struct_5022)->asize,1,local1->fp));
  2679.  local2 = BE_mangle_OB_STR(self, ((OB) f_5014->sig_6));
  2680.  BE_forbid_STR(self, STR_plus_STR_STR(local2, ((STR) &S_frame_struct_5023)));
  2681.  {
  2682.   struct AM_ROUT_DEF_elt__frame_struct temp5024_0;
  2683.   AM_ROUT_DEF_elt__frame 
  2684.   noname5025 = &temp5024_0;
  2685.   struct INT_up_INT_frame_struct temp5024_1;
  2686.   INT_up_INT_frame 
  2687.   noname5026 = &temp5024_1;
  2688.   noname5025->state = 0;
  2689.   noname5026->state = 0;
  2690.   while (1) {
  2691.    if (noname5025->state == 0) {
  2692.     noname5015 = f_5014;
  2693.     noname5025->arg0 = noname5015;
  2694.    }
  2695.    local3 = AM_ROUT_DEF_elt_(noname5025);
  2696.    if (noname5025->state == -1) goto after_loop;
  2697.    fi = local3;
  2698.    local4 = FILE_plus_CHAR_FILE(self->typedefs_h, ' ');
  2699.    local5 = FILE_plus_STR_FILE(local4, BE_mangle_OB_STR(self, ((OB) fi->tp_at)));
  2700.    local6 = FILE_plus_CHAR_FILE(local5, ' ');
  2701.    local7 = FILE_plus_STR_FILE(local6, ((STR) &arg_5027));
  2702.    if (noname5026->state == 0) {
  2703.     noname5016 = 0;
  2704.     noname5026->arg0 = noname5016;
  2705.    }
  2706.    local8 = INT_up_INT(noname5026);
  2707.    if (noname5026->state == -1) goto after_loop;
  2708.    local9 = FILE_plus_INT_FILE(local7, local8);
  2709.    FILE_plus_CHAR(local9, ';');
  2710.    local10 = self->typedefs_h;
  2711.    BE_comment_FILE_STR(self, local10, STR_plus_STR_STR(((STR) &Formalargument), fi->name_19.str_4));
  2712.    FILE_plus_CHAR(self->typedefs_h, '\n');
  2713.   }
  2714.  }
  2715.  after_loop: ;
  2716.  if ((!((f_5014->locals_57==((FLISTAM_LOCAL_EXPR) NULL))))) {
  2717.   {
  2718.    struct FLISTAM_LOCAL_EX_4237_frame_struct temp5029_0;
  2719.    FLISTAM_LOCAL_EX_4237_frame 
  2720.    noname5030 = &temp5029_0;
  2721.    noname5030->state = 0;
  2722.    while (1) {
  2723.     if (noname5030->state == 0) {
  2724.      noname5017 = f_5014->locals_57;
  2725.      noname5030->arg0 = noname5017;
  2726.     }
  2727.     local11 = FLISTAM_LOCAL_EX_4237(noname5030);
  2728.     if (noname5030->state == -1) goto after_loop_5028;
  2729.     fli = local11;
  2730.     name_5018 = BE_mangle_OB_STR(self, ((OB) fli));
  2731.     local12 = STR_length_INT(name_5018);
  2732.     name_5018 = STR_tail_INT_STR(name_5018, (c_INT_minus_INT_INT_chk(local12,7)));
  2733.     local13 = FILE_plus_CHAR_FILE(self->typedefs_h, ' ');
  2734.     local14 = FILE_plus_STR_FILE(local13, BE_mangle_OB_STR(self, ((OB) fli->tp_at)));
  2735.     local15 = FILE_plus_CHAR_FILE(local14, ' ');
  2736.     local16 = FILE_plus_STR_FILE(local15, name_5018);
  2737.     FILE_plus_CHAR(local16, ';');
  2738.     BE_comment_FILE_STR(self, self->typedefs_h, ((STR) &local_5031));
  2739.     FILE_plus_CHAR(self->typedefs_h, '\n');
  2740.    }
  2741.   }
  2742.   after_loop_5028: ;
  2743.  }
  2744.  {
  2745.   struct FLISTAM_ITER_CAL_4815_frame_struct temp5033_0;
  2746.   FLISTAM_ITER_CAL_4815_frame 
  2747.   noname5034 = &temp5033_0;
  2748.   noname5034->state = 0;
  2749.   while (1) {
  2750.    if (noname5034->state == 0) {
  2751.     noname5019 = self->nested_its;
  2752.     noname5034->arg0 = noname5019;
  2753.    }
  2754.    local17 = FLISTAM_ITER_CAL_4815(noname5034);
  2755.    if (noname5034->state == -1) goto after_loop_5032;
  2756.    ni = local17;
  2757.    local18 = FILE_plus_STR_FILE(self->typedefs_h, ((STR) &struct_5035));
  2758.    local19 = FILE_plus_STR_FILE(local18, BE_mangle_OB_STR(self, ((OB) ni->fun)));
  2759.    (fwrite(((STR) &S_frame_struct_5036)->arr_part,((STR) &S_frame_struct_5036)->asize,1,local19->fp));
  2760.    name_5020 = BE_mangle_OB_STR(self, ((OB) ni));
  2761.    local20 = STR_length_INT(name_5020);
  2762.    name_5020 = STR_tail_INT_STR(name_5020, (c_INT_minus_INT_INT_chk(local20,7)));
  2763.    local21 = FILE_plus_STR_FILE(self->typedefs_h, name_5020);
  2764.    (fwrite(((STR) &nestediterframe)->arr_part,((STR) &nestediterframe)->asize,1,local21->fp));
  2765.   }
  2766.  }
  2767.  after_loop_5032: ;
  2768.  (fwrite(((STR) &INTstate)->arr_part,((STR) &INTstate)->asize,1,self->typedefs_h->fp));
  2769.  local22 = FILE_plus_STR_FILE(self->typedefs_h, ((STR) &name_5037));
  2770.  local23 = FILE_plus_STR_FILE(local22, BE_mangle_OB_STR(self, ((OB) f_5014->sig_6)));
  2771.  (fwrite(((STR) &S_frame_5038)->arr_part,((STR) &S_frame_5038)->asize,1,local23->fp));
  2772.  local24 = BE_mangle_OB_STR(self, ((OB) f_5014->sig_6));
  2773.  BE_forbid_STR(self, STR_plus_STR_STR(local24, ((STR) &S_frame_5039)));
  2774. }
  2775.  
  2776.  
  2777. void BE_emit_header_A(BE self, AM_ROUT_DEF f_5040) {
  2778.  SIG sig_5041;
  2779.  ARRAYTP noname5042;
  2780.  BOOL flag_5043 = ((BOOL) 0);
  2781.  AM_ROUT_DEF noname5044;
  2782.  STR s_5045;
  2783.  STR noname5046;
  2784.  AM_ROUT_DEF noname5047;
  2785.  STR noname5048;
  2786.  FILE_20 local0;
  2787.  FILE_20 local1;
  2788.  FILE_20 local2;
  2789.  FILE_20 local3;
  2790.  FILE_20 local4;
  2791.  FILE_20 local5;
  2792.  FILE_20 local6;
  2793.  FILE_20 local7;
  2794.  TP local8;
  2795.  AM_LOCAL_EXPR local9;
  2796.  FILE_20 local10;
  2797.  STR local11;
  2798.  FILE_20 local12;
  2799.  STR local13;
  2800.  AM_LOCAL_EXPR local14;
  2801.  sig_5041 = f_5040->sig_6;
  2802.  if (AM_ROUT_DEF_is_i(f_5040)) {
  2803.   BE_emit_typedef_(self, f_5040);
  2804.  }
  2805.  if ((!((sig_5041->ret==((TP) NULL))))) {
  2806.   local0 = self->decs_h;
  2807.   local1 = FILE_plus_STR_FILE(local0, BE_mangle_OB_STR(self, ((OB) sig_5041->ret)));
  2808.   FILE_plus_CHAR(local1, ' ');
  2809.  }
  2810.  else {
  2811.   (fwrite(((STR) &void_5049)->arr_part,((STR) &void_5049)->asize,1,self->decs_h->fp));
  2812.  }
  2813.  local2 = self->decs_h;
  2814.  local3 = FILE_plus_STR_FILE(local2, BE_mangle_OB_STR(self, ((OB) f_5040->sig_6)));
  2815.  FILE_plus_CHAR(local3, '(');
  2816.  if (AM_ROUT_DEF_is_i(f_5040)) {
  2817.   local4 = self->decs_h;
  2818.   local5 = FILE_plus_STR_FILE(local4, BE_mangle_OB_STR(self, ((OB) f_5040->sig_6)));
  2819.   (fwrite(((STR) &S_frame_5050)->arr_part,((STR) &S_frame_5050)->asize,1,local5->fp));
  2820.  }
  2821.  else {
  2822.   if (f_5040->is_abstract) {
  2823.    local6 = self->decs_h;
  2824.    (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));
  2825.    if ((!((f_5040->sig_6->args_7==((ARRAYTP) NULL))))) {
  2826.     {
  2827.      struct ARRAYTP_elt_TP_frame_struct temp5051_0;
  2828.      ARRAYTP_elt_TP_frame 
  2829.      noname5052 = &temp5051_0;
  2830.      noname5052->state = 0;
  2831.      while (1) {
  2832.       local7 = FILE_plus_STR_FILE(self->decs_h, ((STR) &name_5053));
  2833.       if (noname5052->state == 0) {
  2834.        noname5042 = f_5040->sig_6->args_7;
  2835.        noname5052->arg0 = noname5042;
  2836.       }
  2837.       local8 = ARRAYTP_elt_TP(noname5052);
  2838.       if (noname5052->state == -1) goto after_loop;
  2839.       (fwrite(BE_mangle_OB_STR(self, ((OB) local8))->arr_part,BE_mangle_OB_STR(self, ((OB) local8))->asize,1,local7->fp));
  2840.      }
  2841.     }
  2842.     after_loop: ;
  2843.    }
  2844.   }
  2845.   else {
  2846.    if (f_5040->is_external) {
  2847.     flag_5043 = FALSE;
  2848.     {
  2849.      struct AM_ROUT_DEF_elt__frame_struct temp5055_0;
  2850.      AM_ROUT_DEF_elt__frame 
  2851.      noname5056 = &temp5055_0;
  2852.      struct STR_separate_STR_STR_frame_struct temp5055_1;
  2853.      STR_separate_STR_STR_frame 
  2854.      noname5057 = &temp5055_1;
  2855.      noname5056->state = 0;
  2856.      noname5057->state = 0;
  2857.      while (1) {
  2858.       if (noname5056->state == 0) {
  2859.        noname5044 = f_5040;
  2860.        noname5056->arg0 = noname5044;
  2861.       }
  2862.       local9 = AM_ROUT_DEF_elt_(noname5056);
  2863.       if (noname5056->state == -1) goto after_loop_5054;
  2864.       s_5045 = BE_mangle_OB_STR(self, ((OB) local9->tp_at));
  2865.       if (flag_5043) {
  2866.        local10 = self->decs_h;
  2867.        if (noname5057->state == 0) {
  2868.         noname5046 = ((STR) &name_5058);
  2869.         noname5057->arg0 = noname5046;
  2870.        }
  2871.        noname5057->arg1 = s_5045;
  2872.        local11 = STR_separate_STR_STR(noname5057);
  2873.        if (noname5057->state == -1) goto after_loop_5054;
  2874.        (fwrite(local11->arr_part,local11->asize,1,local10->fp));
  2875.       }
  2876.       flag_5043 = TRUE;
  2877.      }
  2878.     }
  2879.     after_loop_5054: ;
  2880.    }
  2881.    else {
  2882.     {
  2883.      struct AM_ROUT_DEF_elt__frame_struct temp5060_0;
  2884.      AM_ROUT_DEF_elt__frame 
  2885.      noname5061 = &temp5060_0;
  2886.      struct STR_separate_STR_STR_frame_struct temp5060_1;
  2887.      STR_separate_STR_STR_frame 
  2888.      noname5062 = &temp5060_1;
  2889.      noname5061->state = 0;
  2890.      noname5062->state = 0;
  2891.      while (1) {
  2892.       local12 = self->decs_h;
  2893.       if (noname5062->state == 0) {
  2894.        noname5048 = ((STR) &name_5063);
  2895.        noname5062->arg0 = noname5048;
  2896.       }
  2897.       if (noname5061->state == 0) {
  2898.        noname5047 = f_5040;
  2899.        noname5061->arg0 = noname5047;
  2900.       }
  2901.       local14 = AM_ROUT_DEF_elt_(noname5061);
  2902.       if (noname5061->state == -1) goto after_loop_5059;
  2903.       noname5062->arg1 = BE_mangle_OB_STR(self, ((OB) local14->tp_at));
  2904.       local13 = STR_separate_STR_STR(noname5062);
  2905.       if (noname5062->state == -1) goto after_loop_5059;
  2906.       (fwrite(local13->arr_part,local13->asize,1,local12->fp));
  2907.      }
  2908.     }
  2909.     after_loop_5059: ;
  2910.    }
  2911.   }
  2912.  }
  2913.  (fwrite(((STR) &name_5064)->arr_part,((STR) &name_5064)->asize,1,self->decs_h->fp));
  2914. }
  2915.  
  2916.  
  2917. void BE_emit_routine_(BE self, AM_ROUT_DEF func) {
  2918.  BOOL local0;
  2919.  self->routine_count = (c_INT_plus_INT_INT_chk(self->routine_count,1));
  2920.  if ((self->routine_count>300)) {
  2921.   self->routine_count = 0;
  2922.   BE_new_c_file(self);
  2923.  }
  2924.  BE_setup_routine(self, func);
  2925.  BE_emit_prologue(self, func);
  2926.  if (BE_is_asize_SIG_BOOL(self, func->sig_6)) {
  2927.   if (self->chk_void) {
  2928.    local0 = (!(self->prog->options_55->null_segfaults));
  2929.   } else {
  2930.    local0 = FALSE;
  2931.   }
  2932.   if (local0) {
  2933.    BE_ndefer_STR(self, ((STR) &ifselfNULL));
  2934.    BE_in(self);
  2935.    BE_runtime_error(self, ((STR) &asizeaccessofvoid), ((PROG_ERR) func));
  2936.    BE_out(self);
  2937.    BE_ndefer_STR(self, ((STR) &name_5065));
  2938.   }
  2939.   BE_ndefer_STR(self, ((STR) &returnselfasize));
  2940.  }
  2941.  else {
  2942.   BE_emit_code_AM_STMT(self, func->code_56);
  2943.  }
  2944.  BE_emit_epilogue(self, func);
  2945.  BE_emit_header_A(self, func);
  2946.  func->calls_58 = ((FLISTAM_EXPR) NULL);
  2947.  func->locals_57 = ((FLISTAM_LOCAL_EXPR) NULL);
  2948.  func->code_56 = ((AM_STMT) NULL);
  2949. }
  2950.  
  2951.  
  2952. void BE_end_mangling(BE self) {
  2953.  FSETOB noname5066;
  2954.  OB local0;
  2955.  {
  2956.   struct FSETOB_elt_OB_frame_struct temp5067_0;
  2957.   FSETOB_elt_OB_frame 
  2958.   noname5068 = &temp5067_0;
  2959.   noname5068->state = 0;
  2960.   while (1) {
  2961.    if (noname5068->state == 0) {
  2962.     noname5066 = self->thisrout;
  2963.     noname5068->arg0 = noname5066;
  2964.    }
  2965.    local0 = FSETOB_elt_OB(noname5068);
  2966.    if (noname5068->state == -1) goto after_loop;
  2967.    BE_unmangle_OB(self, local0);
  2968.   }
  2969.  }
  2970.  after_loop: ;
  2971.  self->thisrout = ((FSETOB) NULL);
  2972. }
  2973.  
  2974.  
  2975. void BE_output_am_rou(BE self, AM_ROUT_DEF func) {
  2976.  OUT local0;
  2977.  OUT local1;
  2978.  OUT local2;
  2979.  if (self->prog->show_am) {
  2980.   local0 = OUT_create_OUT(((OUT) NULL));
  2981.   local1 = OUT_plus_STR_OUT(local0, ((STR) &GeneratingCfor));
  2982.   local2 = OUT_plus_STR_OUT(local1, SIG_str_STR(func->sig_6));
  2983.   OUT_plus_CHAR(local2, '\n');
  2984.  }
  2985.  if (SIG_is_eq_SIG_BOOL(func->sig_6, self->main_sig)) {
  2986.   BE_force_mangle_(self, ((OB) func->sig_6), ((STR) &sather_main_5069));
  2987.  }
  2988.  if (func->is_abstract) {
  2989.   self->abstract_routs = FLISTAM_ROUT_DEF_4097(self->abstract_routs, func);
  2990.  }
  2991.  else {
  2992.   if (BE_inlined_SIG_BOOL(self, func->sig_6)) {
  2993.    self->inlined_sigs = FMAPSIGAM_ROUT_D_4138(self->inlined_sigs, func->sig_6, func);
  2994.   }
  2995.   else {
  2996.    BE_start_mangling(self);
  2997.    BE_emit_routine_(self, func);
  2998.    BE_end_mangling(self);
  2999.   }
  3000.  }
  3001. }
  3002.  
  3003.  
  3004. void PROG_output_am_r(PROG self, AM_ROUT_DEF a_5070) {
  3005.  BOOL local0;
  3006.  if ((!(self->all_reached))) {
  3007.   local0 = (!(self->options_55->only_check));
  3008.  } else {
  3009.   local0 = FALSE;
  3010.  }
  3011.  if (local0) {
  3012.   BE_output_am_rou(self->back_end, a_5070);
  3013.  }
  3014. }
  3015.  
  3016.  
  3017. void PROG_AM_GENERATE_5071(PROG_AM_GENERATE self, SIG s_5072) {
  3018.  AM_ROUT_DEF am_5073;
  3019.  TP_CLASS stp = ((TP_CLASS) NULL);
  3020.  TP ostp;
  3021.  FSETTP noname5074;
  3022.  TP tp_5075;
  3023.  IFC ifc_5076;
  3024.  SIG cs;
  3025.  AM_ROUT_DEF local0;
  3026.  INT local1;
  3027.  INT local2;
  3028.  TP local3;
  3029.  OUT local4;
  3030.  OUT local5;
  3031.  OUT local6;
  3032.  OUT local7;
  3033.  if (!((!((s_5072==((SIG) NULL)))))) {
  3034.   fprintf(stderr,"Violation of precondition ./prog.sa:773:17\n");
  3035.   exit(16);
  3036.  }
  3037.  if ((!((SIG_TBL_sig_eq_t(self->sig_tbl, s_5072)==((SIG) NULL))))) {
  3038.   return;
  3039.  }
  3040.  self->sig_tbl = SIG_TBL_insert_S(self->sig_tbl, s_5072);
  3041.  local0 = ((AM_ROUT_DEF) NULL);
  3042.  local1 = 1;
  3043.  local2 = (c_INT_plus_INT_INT_chk(local1,ARRAYTP_size_INT(s_5072->args_7)));
  3044.  am_5073 = AM_ROUT_DEF_crea(local0, local2, SFILE_ID_zero);
  3045.  am_5073->sig_6 = s_5072;
  3046.  am_5073->is_abstract = TRUE;
  3047.  ostp = s_5072->tp;
  3048.  if (ostp==NULL) {
  3049.  } else
  3050.  switch (ostp->header.tag) {
  3051.   case TP_CLASS_tag:
  3052.    stp = ((TP_CLASS) ostp); break;
  3053.   default: ;
  3054.    fprintf(stderr,"No applicable type in typecase ./prog.sa:781:14\n");
  3055.    exit(16);
  3056.  }
  3057.  {
  3058.   struct FSETTP_elt_TP_frame_struct temp5077_0;
  3059.   FSETTP_elt_TP_frame 
  3060.   noname5078 = &temp5077_0;
  3061.   noname5078->state = 0;
  3062.   while (1) {
  3063.    if (noname5078->state == 0) {
  3064.     noname5074 = PROG_descendants(self->prog, stp);
  3065.     noname5078->arg0 = noname5074;
  3066.    }
  3067.    local3 = FSETTP_elt_TP(noname5078);
  3068.    if (noname5078->state == -1) goto after_loop;
  3069.    tp_5075 = local3;
  3070.    ifc_5076 = IFC_TBL_ifc_of_T(self->prog->ifc_tbl, tp_5075);
  3071.    cs = IFC_sig_conformi(ifc_5076, s_5072);
  3072.    self->sig_list = FLISTSIG_push_SI(self->sig_list, cs);
  3073.   }
  3074.  }
  3075.  after_loop: ;
  3076.  if (self->prog->show_am) {
  3077.   local4 = OUT_create_OUT(((OUT) NULL));
  3078.   local5 = OUT_plus_STR_OUT(local4, ((STR) &AMfor));
  3079.   local6 = OUT_plus_STR_OUT(local5, SIG_str_STR(am_5073->sig_6));
  3080.   OUT_plus_STR(local6, ((STR) &name_5079));
  3081.   AM_OUT_AM_ROUT_D(((AM_OUT) NULL), am_5073);
  3082.   local7 = OUT_create_OUT(((OUT) NULL));
  3083.   OUT_plus_STR(local7, ((STR) &name_5080));
  3084.  }
  3085.  if ((!(self->prog->err_seen))) {
  3086.   PROG_output_am_r(self->prog, am_5073);
  3087.  }
  3088. }
  3089.  
  3090.  
  3091. ELT ELT_TBL_elt_with(ELT_TBL self, SIG s_5081) {
  3092.  ELT noname5082;
  3093.  ELT_TBL noname5083;
  3094.  IDENT noname5084 = IDENT_zero;
  3095.  ELT r_5085;
  3096.  ELT local0;
  3097.  if (!((!((s_5081==((SIG) NULL)))))) {
  3098.   fprintf(stderr,"Violation of precondition ./elt.sa:209:15\n");
  3099.   exit(16);
  3100.  }
  3101.  {
  3102.   struct ELT_TBL_get_quer_frame_struct temp5086_0;
  3103.   ELT_TBL_get_quer_frame 
  3104.   noname5087 = &temp5086_0;
  3105.   noname5087->state = 0;
  3106.   while (1) {
  3107.    if (noname5087->state == 0) {
  3108.     noname5083 = self;
  3109.     noname5084 = s_5081->name_19;
  3110.     noname5087->arg0 = noname5083;
  3111.     noname5087->arg1 = noname5084;
  3112.    }
  3113.    local0 = ELT_TBL_get_quer(noname5087);
  3114.    if (noname5087->state == -1) goto after_loop;
  3115.    r_5085 = local0;
  3116.    if (SIG_is_eq_SIG_BOOL(s_5081, r_5085->sig_6)) {
  3117.     return r_5085;
  3118.    }
  3119.   }
  3120.  }
  3121.  after_loop: ;
  3122.  return ((ELT) NULL);
  3123.  if (!ELT_TBL_invarian(self)) {
  3124.   fprintf(stderr,"Failed invariant ELT_TBL::invariant:BOOL ./elt.sa:209:15\n");
  3125.   exit(16);
  3126.  }
  3127. }
  3128.  
  3129.  
  3130. PROG ELT_prog_PROG(ELT self) {
  3131.  PROG noname5088;
  3132.  if (!((!((self==((ELT) NULL)))))) {
  3133.   fprintf(stderr,"Violation of precondition ./elt.sa:43:7\n");
  3134.   exit(16);
  3135.  }
  3136.  return self->con->prog;
  3137. }
  3138.  
  3139.  
  3140. TP ELT_tp_TP(ELT self) {
  3141.  TP noname5089;
  3142.  BOOL local0;
  3143.  if ((!((self==((ELT) NULL))))) {
  3144.   local0 = (!((self->sig_6==((SIG) NULL))));
  3145.  } else {
  3146.   local0 = FALSE;
  3147.  }
  3148.  if (!(local0)) {
  3149.   fprintf(stderr,"Violation of precondition ./elt.sa:58:5\n");
  3150.   exit(16);
  3151.  }
  3152.  return self->sig_6->tp;
  3153. }
  3154.  
  3155.  
  3156. IMPL ELT_impl_IMPL(ELT self) {
  3157.  IMPL noname5090;
  3158.  IMPL r_5091;
  3159.  IMPL_TBL local0;
  3160.  OUT local1;
  3161.  OUT local2;
  3162.  OUT local3;
  3163.  if (!((!((self==((ELT) NULL)))))) {
  3164.   fprintf(stderr,"Violation of precondition ./elt.sa:63:7\n");
  3165.   exit(16);
  3166.  }
  3167.  local0 = ELT_prog_PROG(self)->impl_tbl;
  3168.  r_5091 = IMPL_TBL_impl_of(local0, ELT_tp_TP(self));
  3169.  if ((r_5091==((IMPL) NULL))) {
  3170.   local1 = OUT_create_OUT(((OUT) NULL));
  3171.   local2 = OUT_plus_STR_OUT(local1, ((STR) &CompilererrorELT));
  3172.   local3 = OUT_plus_STR_OUT(local2, SIG_str_STR(self->sig_6));
  3173.   OUT_plus_STR(local3, ((STR) &returnsvoid));
  3174.   return ((IMPL) NULL);
  3175.  }
  3176.  return r_5091;
  3177. }
  3178.  
  3179.  
  3180. TRANS TRANS_create_ELT(TRANS self, ELT e_5092) {
  3181.  TRANS noname5093;
  3182.  TRANS r_5094;
  3183.  TRANS local0;
  3184.  BOOL local1;
  3185.  if (!((!((e_5092==((ELT) NULL)))))) {
  3186.   fprintf(stderr,"Violation of precondition ./trans.sa:35:9\n");
  3187.   exit(16);
  3188.  }
  3189.  local0 = ((TRANS) sbi_alloc(sizeof(struct TRANS_struct), TRANS_tag));
  3190.  r_5094 = local0;
  3191.  r_5094->prog = ELT_prog_PROG(e_5092);
  3192.  r_5094->impl = ELT_impl_IMPL(e_5092);
  3193.  r_5094->tp_con = e_5092->con;
  3194.  if ((r_5094->impl==((IMPL) NULL))) {
  3195.   local1 = TRUE;
  3196.  } else {
  3197.   local1 = (r_5094->tp_con==((TP_CONTEXT) NULL));
  3198.  }
  3199.  if (local1) {
  3200.   return ((TRANS) NULL);
  3201.  }
  3202.  return r_5094;
  3203. }
  3204.  
  3205.  
  3206. AM_LOCAL_EXPR AM_LOCAL_EXPR_cr(AM_LOCAL_EXPR self, SFILE_ID src_5095, IDENT name_5096, TP tp_5097) {
  3207.  AM_LOCAL_EXPR noname5098;
  3208.  AM_LOCAL_EXPR r_5099;
  3209.  AM_LOCAL_EXPR local0;
  3210.  local0 = ((AM_LOCAL_EXPR) sbi_alloc(sizeof(struct AM_LOCAL_EXPR_struct), AM_LOCAL_EXPR_tag));
  3211.  r_5099 = local0;
  3212.  r_5099->source_38 = src_5095;
  3213.  r_5099->name_19 = name_5096;
  3214.  r_5099->tp_at = tp_5097;
  3215.  return r_5099;
  3216. }
  3217.  
  3218.  
  3219. void AM_ROUT_DEF_aset(AM_ROUT_DEF self, INT ind_5100, AM_LOCAL_EXPR val_5101) {
  3220.  BOOL local0;
  3221.  INT local1;
  3222.  INT local2;
  3223.  if ((!((self==((AM_ROUT_DEF) NULL))))) {
  3224.   local1 = 0;
  3225.   local2 = (self->asize);
  3226.   local0 = INT_is_bet_INT_I(ind_5100, local1, (c_INT_minus_INT_INT_chk(local2,1)));
  3227.  } else {
  3228.   local0 = FALSE;
  3229.  }
  3230.  if (!(local0)) {
  3231.   fprintf(stderr,"Violation of precondition ../Library/aref.sa:38:7\n");
  3232.   exit(16);
  3233.  }
  3234.  if (ind_5100<0||ind_5100>=self->asize) {
  3235.   fprintf(stderr,"Index out of bounds ../Library/aref.sa:38:7\n");
  3236.   exit(16);
  3237.  }
  3238.  self->arr_part[ind_5100] = val_5101;
  3239. }
  3240.  
  3241.  
  3242. INT FMAPTPFMAPIDENTA_5102(FMAPTPFMAPIDENTA self, TP k) {
  3243.  INT noname5103 = ((INT) 0);
  3244.  HASH local0;
  3245.  if (k==NULL) {
  3246.  } else
  3247.  switch (k->header.tag) {
  3248.   case TUPIMPL_INCLUDEI_tag:
  3249.   case TUPAM_BND_CREATE_tag:
  3250.   case TUPIFCIFC_tag:
  3251.   case TUPSTRITER_INLINE_tag:
  3252.   case TUPAM_GLOBAL_EXP_tag:
  3253.   case FSTR_tag:
  3254.   case TUPSIGSIG_tag:
  3255.   case CHAR_tag:
  3256.   case INT_tag:
  3257.   case TUPTP_CLASSFSETTP_tag:
  3258.   case TUPSTRSTR_tag:
  3259.   case TUPINTINTINT_tag:
  3260.   case STR_tag:
  3261.   case TUPSFILE_IDSFILE_ID_tag:
  3262.   case TUPAM_ITER_CALL__tag:
  3263.   case TUPTR_EXPRTR_EXPR_tag:
  3264.   case TUPTPFMAPIDENTAM_tag:
  3265.   case TUPARRAYTPTP_tag:
  3266.   case TUPAM_CONSTAM_CONST_tag:
  3267.   case TUPSTRTUPSTRSTR_tag:
  3268.   case TUPTPIMPL_tag:
  3269.   case TUPSIGAM_ROUT_DEF_tag:
  3270.   case TUPARRAYTPARRAYB_tag:
  3271.   case TUPIDENTAM_GLOBA_tag:
  3272.   case TUPAM_BND_ITER_C_tag:
  3273.   case TUPAM_LOCAL_EXPR_tag:
  3274.   case TUPSTRFSETSTR_tag:
  3275.   case TUPAM_ROUT_DEFAM_tag:
  3276.   case TUPTPTP_tag:
  3277.   case IDENT_tag:
  3278.   case TUPTPINT_tag:
  3279.   case TUPIDENTINT_tag:
  3280.   case TUPIDENTIDENT_tag:
  3281.   case TUPTP_CLASSFSETT_tag:
  3282.   case TUPCHARCHAR_tag:
  3283.   case TUPIDENTTP_tag:
  3284.   case TUPIDENTARRAYTP_tag:
  3285.   case TUPAM_EXPRAM_EXPR_tag:
  3286.   case TUPTPIFC_tag:
  3287.   case TUPTP_CLASSTP_CLASS_tag:
  3288.   case TUPAM_STMTAM_STMT_tag:
  3289.   case TUPINTINT_tag:
  3290.   case TUPOBSTR_tag:
  3291.   case TUPFLISTAM_CONST_tag:
  3292.   case TUPAM_EXPRTP_tag:
  3293.   case TUPBOOLINTIINTBOOL_tag:
  3294.    local0 = ((HASH) k);
  3295.    return (*HASH_hash_INT[local0->header.tag+HASH_hash_INT_offset])(local0); break;
  3296.   default: ;
  3297.  }
  3298.  return (c_SYS_id_OB_INT(((SYS) NULL),((OB) k)));
  3299.  if (!FMAPTPFMAPIDENTA_5104(self)) {
  3300.   fprintf(stderr,"Failed invariant FMAP{$TP,FMAP{IDENT,AM_GLOBAL_EXPR}}::invariant:BOOL ../Library/fmap.sa:64:11\n");
  3301.   exit(16);
  3302.  }
  3303. }
  3304.  
  3305.  
  3306. INT FMAPTPFMAPIDENTA_5105(FMAPTPFMAPIDENTA self) {
  3307.  INT noname5106 = ((INT) 0);
  3308.   return self->asize;
  3309.  fprintf(stderr,"Last statement wasn't return ../Library/aref.sa:20:8\n");
  3310.  exit(16);
  3311. }
  3312.  
  3313.  
  3314. TUPTPFMAPIDENTAM FMAPTPFMAPIDENTA_5107(FMAPTPFMAPIDENTA self, INT ind_5108) {
  3315.  TUPTPFMAPIDENTAM noname5109 = TUPTPFMAPIDENTAM_zero;
  3316.  BOOL local0;
  3317.  INT local1;
  3318.  INT local2;
  3319.  if ((!((self==((FMAPTPFMAPIDENTA) NULL))))) {
  3320.   local1 = 0;
  3321.   local2 = (self->asize);
  3322.   local0 = INT_is_bet_INT_I(ind_5108, local1, (c_INT_minus_INT_INT_chk(local2,1)));
  3323.  } else {
  3324.   local0 = FALSE;
  3325.  }
  3326.  if (!(local0)) {
  3327.   fprintf(stderr,"Violation of precondition ../Library/aref.sa:33:7\n");
  3328.   exit(16);
  3329.  }
  3330.  if (ind_5108<0||ind_5108>=self->asize) {
  3331.   fprintf(stderr,"Index out of bounds ../Library/aref.sa:33:7\n");
  3332.   exit(16);
  3333.  }
  3334.  return self->arr_part[ind_5108];
  3335. }
  3336.  
  3337.  
  3338. BOOL FMAPTPFMAPIDENTA_5110(FMAPTPFMAPIDENTA self, TP k1, TP k2) {
  3339.  BOOL noname5111 = ((BOOL) 0);
  3340.  if (k1==NULL) {
  3341.  } else
  3342.  switch (k1->header.tag) {
  3343.   default: ;
  3344.  }
  3345.  return c_SYS_ob_eq_OB_OB_BOOL(((OB) k1),((OB) k2));
  3346.  if (!FMAPTPFMAPIDENTA_5104(self)) {
  3347.   fprintf(stderr,"Failed invariant FMAP{$TP,FMAP{IDENT,AM_GLOBAL_EXPR}}::invariant:BOOL ../Library/fmap.sa:44:9\n");
  3348.   exit(16);
  3349.  }
  3350. }
  3351.  
  3352.  
  3353. TP FMAPTPFMAPIDENTA_5112(FMAPTPFMAPIDENTA self) {
  3354.  TP noname5113;
  3355.  TP k = ((TP) NULL);
  3356.  if (k==NULL) {
  3357.  } else
  3358.  switch (k->header.tag) {
  3359.   default: ;
  3360.  }
  3361.  return ((TP) NULL);
  3362.  if (!FMAPTPFMAPIDENTA_5104(self)) {
  3363.   fprintf(stderr,"Failed invariant FMAP{$TP,FMAP{IDENT,AM_GLOBAL_EXPR}}::invariant:BOOL ../Library/fmap.sa:54:10\n");
  3364.   exit(16);
  3365.  }
  3366. }
  3367.  
  3368.  
  3369. FMAPIDENTAM_GLOB FMAPTPFMAPIDENTA_5114(FMAPTPFMAPIDENTA self, TP k) {
  3370.  FMAPIDENTAM_GLOB noname5115;
  3371.  INT h = ((INT) 0);
  3372.  TP tk;
  3373.  TP tk_5116;
  3374.  INT local0;
  3375.  INT local1;
  3376.  INT local2;
  3377.  INT local3;
  3378.  if ((self==((FMAPTPFMAPIDENTA) NULL))) {
  3379.   return ((FMAPIDENTAM_GLOB) NULL);
  3380.  }
  3381.  local0 = FMAPTPFMAPIDENTA_5102(self, k);
  3382.  local1 = (self->asize);
  3383.  h = (local0&(c_INT_minus_INT_INT_chk(local1,2)));
  3384.  while (1) {
  3385.   tk = (TUPTPFMAPIDENTAM_blob=FMAPTPFMAPIDENTA_5107(self, h)).t1;
  3386.   if (FMAPTPFMAPIDENTA_5110(self, tk, k)) {
  3387.    return (TUPTPFMAPIDENTAM_blob=FMAPTPFMAPIDENTA_5107(self, h)).t2;
  3388.   }
  3389.   else {
  3390.    if (FMAPTPFMAPIDENTA_5110(self, tk, FMAPTPFMAPIDENTA_5112(self))) {
  3391.     goto after_loop;
  3392.    }
  3393.   }
  3394.   h = (c_INT_plus_INT_INT_chk(h,1));
  3395.  }
  3396.  after_loop: ;
  3397.  local2 = (self->asize);
  3398.  if ((h==(c_INT_minus_INT_INT_chk(local2,1)))) {
  3399.   h = 0;
  3400.   while (1) {
  3401.    tk_5116 = (TUPTPFMAPIDENTAM_blob=FMAPTPFMAPIDENTA_5107(self, h)).t1;
  3402.    if (FMAPTPFMAPIDENTA_5110(self, tk_5116, k)) {
  3403.     return (TUPTPFMAPIDENTAM_blob=FMAPTPFMAPIDENTA_5107(self, h)).t2;
  3404.    }
  3405.    else {
  3406.     if (FMAPTPFMAPIDENTA_5110(self, tk_5116, FMAPTPFMAPIDENTA_5112(self))) {
  3407.      goto after_loop_5118;
  3408.     }
  3409.    }
  3410.    h = (c_INT_plus_INT_INT_chk(h,1));
  3411.   }
  3412.   after_loop_5118: ;
  3413.   local3 = (self->asize);
  3414.   if (!((h!=(c_INT_minus_INT_INT_chk(local3,1))))) {
  3415.    fprintf(stderr,"Violation of assertion ../Library/fmap.sa:150:15\n");
  3416.    exit(16);
  3417.   }
  3418.  }
  3419.  return ((FMAPIDENTAM_GLOB) NULL);
  3420.  if (!FMAPTPFMAPIDENTA_5104(self)) {
  3421.   fprintf(stderr,"Failed invariant FMAP{$TP,FMAP{IDENT,AM_GLOBAL_EXPR}}::invariant:BOOL ../Library/fmap.sa:136:6\n");
  3422.   exit(16);
  3423.  }
  3424. }
  3425.  
  3426.  
  3427. INT FMAPIDENTAM_GLOB_5120(FMAPIDENTAM_GLOB self, IDENT k) {
  3428.  INT noname5121 = ((INT) 0);
  3429.  OB local0;
  3430.  return IDENT_hash_INT(k);
  3431.  local0 = (OB)((IDENT_boxed) sbi_alloc(sizeof(struct IDENT_boxed_struct), IDENT_tag));
  3432.  ((IDENT_boxed) local0)->value_part = k;
  3433.  return (c_SYS_id_OB_INT(((SYS) NULL),local0));
  3434.  if (!FMAPIDENTAM_GLOB_5122(self)) {
  3435.   fprintf(stderr,"Failed invariant FMAP{IDENT,AM_GLOBAL_EXPR}::invariant:BOOL ../Library/fmap.sa:64:11\n");
  3436.   exit(16);
  3437.  }
  3438. }
  3439.  
  3440.  
  3441. INT FMAPIDENTAM_GLOB_5123(FMAPIDENTAM_GLOB self) {
  3442.  INT noname5124 = ((INT) 0);
  3443.   return self->asize;
  3444.  fprintf(stderr,"Last statement wasn't return ../Library/aref.sa:20:8\n");
  3445.  exit(16);
  3446. }
  3447.  
  3448.  
  3449. TUPIDENTAM_GLOBA FMAPIDENTAM_GLOB_5125(FMAPIDENTAM_GLOB self, INT ind_5126) {
  3450.  TUPIDENTAM_GLOBA noname5127 = TUPIDENTAM_GLOBA_zero;
  3451.  BOOL local0;
  3452.  INT local1;
  3453.  INT local2;
  3454.  if ((!((self==((FMAPIDENTAM_GLOB) NULL))))) {
  3455.   local1 = 0;
  3456.   local2 = (self->asize);
  3457.   local0 = INT_is_bet_INT_I(ind_5126, local1, (c_INT_minus_INT_INT_chk(local2,1)));
  3458.  } else {
  3459.   local0 = FALSE;
  3460.  }
  3461.  if (!(local0)) {
  3462.   fprintf(stderr,"Violation of precondition ../Library/aref.sa:33:7\n");
  3463.   exit(16);
  3464.  }
  3465.  if (ind_5126<0||ind_5126>=self->asize) {
  3466.   fprintf(stderr,"Index out of bounds ../Library/aref.sa:33:7\n");
  3467.   exit(16);
  3468.  }
  3469.  return self->arr_part[ind_5126];
  3470. }
  3471.  
  3472.  
  3473. BOOL FMAPIDENTAM_GLOB_5128(FMAPIDENTAM_GLOB self, IDENT k1, IDENT k2) {
  3474.  BOOL noname5129 = ((BOOL) 0);
  3475.  OB local0;
  3476.  OB local1;
  3477.  return IDENT_is_eq_IDEN(k1, k2);
  3478.  local0 = (OB)((IDENT_boxed) sbi_alloc(sizeof(struct IDENT_boxed_struct), IDENT_tag));
  3479.  ((IDENT_boxed) local0)->value_part = k1;
  3480.  local1 = (OB)((IDENT_boxed) sbi_alloc(sizeof(struct IDENT_boxed_struct), IDENT_tag));
  3481.  ((IDENT_boxed) local1)->value_part = k2;
  3482.  return c_SYS_ob_eq_OB_OB_BOOL(local0,local1);
  3483.  if (!FMAPIDENTAM_GLOB_5122(self)) {
  3484.   fprintf(stderr,"Failed invariant FMAP{IDENT,AM_GLOBAL_EXPR}::invariant:BOOL ../Library/fmap.sa:44:9\n");
  3485.   exit(16);
  3486.  }
  3487. }
  3488.  
  3489.  
  3490. IDENT FMAPIDENTAM_GLOB_5130(FMAPIDENTAM_GLOB self) {
  3491.  IDENT noname5131 = IDENT_zero;
  3492.  IDENT k = IDENT_zero;
  3493.  return IDENT_zero;
  3494.  if (!FMAPIDENTAM_GLOB_5122(self)) {
  3495.   fprintf(stderr,"Failed invariant FMAP{IDENT,AM_GLOBAL_EXPR}::invariant:BOOL ../Library/fmap.sa:54:10\n");
  3496.   exit(16);
  3497.  }
  3498. }
  3499.  
  3500.  
  3501. AM_GLOBAL_EXPR FMAPIDENTAM_GLOB_5132(FMAPIDENTAM_GLOB self, IDENT k) {
  3502.  AM_GLOBAL_EXPR noname5133;
  3503.  INT h = ((INT) 0);
  3504.  IDENT tk = IDENT_zero;
  3505.  IDENT tk_5134 = IDENT_zero;
  3506.  INT local0;
  3507.  INT local1;
  3508.  INT local2;
  3509.  INT local3;
  3510.  if ((self==((FMAPIDENTAM_GLOB) NULL))) {
  3511.   return ((AM_GLOBAL_EXPR) NULL);
  3512.  }
  3513.  local0 = FMAPIDENTAM_GLOB_5120(self, k);
  3514.  local1 = (self->asize);
  3515.  h = (local0&(c_INT_minus_INT_INT_chk(local1,2)));
  3516.  while (1) {
  3517.   tk = (TUPIDENTAM_GLOBA_blob=FMAPIDENTAM_GLOB_5125(self, h)).t1;
  3518.   if (FMAPIDENTAM_GLOB_5128(self, tk, k)) {
  3519.    return (TUPIDENTAM_GLOBA_blob=FMAPIDENTAM_GLOB_5125(self, h)).t2;
  3520.   }
  3521.   else {
  3522.    if (FMAPIDENTAM_GLOB_5128(self, tk, FMAPIDENTAM_GLOB_5130(self))) {
  3523.     goto after_loop;
  3524.    }
  3525.   }
  3526.   h = (c_INT_plus_INT_INT_chk(h,1));
  3527.  }
  3528.  after_loop: ;
  3529.  local2 = (self->asize);
  3530.  if ((h==(c_INT_minus_INT_INT_chk(local2,1)))) {
  3531.   h = 0;
  3532.   while (1) {
  3533.    tk_5134 = (TUPIDENTAM_GLOBA_blob=FMAPIDENTAM_GLOB_5125(self, h)).t1;
  3534.    if (FMAPIDENTAM_GLOB_5128(self, tk_5134, k)) {
  3535.     return (TUPIDENTAM_GLOBA_blob=FMAPIDENTAM_GLOB_5125(self, h)).t2;
  3536.    }
  3537.    else {
  3538.     if (FMAPIDENTAM_GLOB_5128(self, tk_5134, FMAPIDENTAM_GLOB_5130(self))) {
  3539.      goto after_loop_5136;
  3540.     }
  3541.    }
  3542.    h = (c_INT_plus_INT_INT_chk(h,1));
  3543.   }
  3544.   after_loop_5136: ;
  3545.   local3 = (self->asize);
  3546.   if (!((h!=(c_INT_minus_INT_INT_chk(local3,1))))) {
  3547.    fprintf(stderr,"Violation of assertion ../Library/fmap.sa:150:15\n");
  3548.    exit(16);
  3549.   }
  3550.  }
  3551.  return ((AM_GLOBAL_EXPR) NULL);
  3552.  if (!FMAPIDENTAM_GLOB_5122(self)) {
  3553.   fprintf(stderr,"Failed invariant FMAP{IDENT,AM_GLOBAL_EXPR}::invariant:BOOL ../Library/fmap.sa:136:6\n");
  3554.   exit(16);
  3555.  }
  3556. }
  3557.  
  3558.  
  3559. AM_GLOBAL_EXPR GLOBAL_TBL_get_I(GLOBAL_TBL self, IDENT name_5138, TP tp_5139) {
  3560.  AM_GLOBAL_EXPR noname5140;
  3561.  FMAPIDENTAM_GLOB m;
  3562.  m = FMAPTPFMAPIDENTA_5114(self->tbl, tp_5139);
  3563.  if ((!((m==((FMAPIDENTAM_GLOB) NULL))))) {
  3564.   return FMAPIDENTAM_GLOB_5132(m, name_5138);
  3565.  }
  3566.  return ((AM_GLOBAL_EXPR) NULL);
  3567. }
  3568.  
  3569.  
  3570. AM_GLOBAL_EXPR AM_GLOBAL_EXPR_c(AM_GLOBAL_EXPR self, SFILE_ID source_5141) {
  3571.  AM_GLOBAL_EXPR noname5142;
  3572.  AM_GLOBAL_EXPR r_5143;
  3573.  AM_GLOBAL_EXPR local0;
  3574.  local0 = ((AM_GLOBAL_EXPR) sbi_alloc(sizeof(struct AM_GLOBAL_EXPR_struct), AM_GLOBAL_EXPR_tag));
  3575.  r_5143 = local0;
  3576.  r_5143->source_38 = source_5141;
  3577.  return r_5143;
  3578. }
  3579.  
  3580.  
  3581. TP ELT_ret_TP(ELT self) {
  3582.  TP noname5144;
  3583.  if (!((!((self==((ELT) NULL)))))) {
  3584.   fprintf(stderr,"Violation of precondition ./elt.sa:53:6\n");
  3585.   exit(16);
  3586.  }
  3587.  return self->sig_6->ret;
  3588. }
  3589.  
  3590.  
  3591. void TRANS_self_const(TRANS self, TR_SELF_EXPR e_5145) {
  3592.  PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5145));
  3593.  PROG_err_STR(self->prog, ((STR) &selfmaynotappear));
  3594. }
  3595.  
  3596.  
  3597. AM_LOCAL_EXPR AM_ROUT_DEF_self(AM_ROUT_DEF self) {
  3598.  AM_LOCAL_EXPR noname5146;
  3599.  return AM_ROUT_DEF_aget(self, 0);
  3600. }
  3601.  
  3602.  
  3603. void TRANS_self_conte(TRANS self, TR_SELF_EXPR e_5147, TP stp, TP tp_5148) {
  3604.  PROG local0;
  3605.  STR local1;
  3606.  TP local2;
  3607.  STR local3;
  3608.  STR local4;
  3609.  TP local5;
  3610.  STR local6;
  3611.  PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5147));
  3612.  local0 = self->prog;
  3613.  local1 = ((STR) &Thetypeofself);
  3614.  local2 = stp;
  3615.  local3 = STR_plus_STR_STR(local1, (*TP_str_STR[local2->header.tag+TP_str_STR_offset])(local2));
  3616.  local4 = STR_plus_STR_STR(local3, ((STR) &isnotasubtypeof));
  3617.  local5 = tp_5148;
  3618.  local6 = STR_plus_STR_STR(local4, (*TP_str_STR[local5->header.tag+TP_str_STR_offset])(local5));
  3619.  PROG_err_STR(local0, STR_plus_STR_STR(local6, ((STR) &name_5149)));
  3620. }
  3621.  
  3622.  
  3623. AM_EXPR TRANS_transform_(TRANS self, TR_SELF_EXPR e_5150, TP tp_5151) {
  3624.  AM_EXPR noname5152;
  3625.  AM_LOCAL_EXPR sl;
  3626.  TP local0;
  3627.  if (self->in_constant) {
  3628.   TRANS_self_const(self, e_5150);
  3629.   return ((AM_EXPR) NULL);
  3630.  }
  3631.  sl = AM_ROUT_DEF_self(self->cur_rout);
  3632.  if ((!((tp_5151==((TP) NULL))))) {
  3633.   local0 = sl->tp_at;
  3634.   if ((!((*TP_is_subtype_TP[local0->header.tag+TP_is_subtype_TP_offset])(local0, tp_5151)))) {
  3635.    TRANS_self_conte(self, e_5150, sl->tp_at, tp_5151);
  3636.    return ((AM_EXPR) NULL);
  3637.   }
  3638.  }
  3639.  return ((AM_EXPR) sl);
  3640. }
  3641.  
  3642.  
  3643. AM_LOCAL_EXPR TRANS_local_with(TRANS self, IDENT n_5153) {
  3644.  AM_LOCAL_EXPR noname5154;
  3645.  AM_ROUT_DEF noname5155;
  3646.  AM_LOCAL_EXPR r_5156;
  3647.  FLISTAM_LOCAL_EXPR noname5157;
  3648.  AM_LOCAL_EXPR r_5158;
  3649.  AM_LOCAL_EXPR local0;
  3650.  OUT local1;
  3651.  AM_LOCAL_EXPR local2;
  3652.  OUT local3;
  3653.  if (!((!((self->cur_rout==((AM_ROUT_DEF) NULL)))))) {
  3654.   fprintf(stderr,"Violation of precondition ./trans.sa:48:18\n");
  3655.   exit(16);
  3656.  }
  3657.  {
  3658.   struct AM_ROUT_DEF_elt__frame_struct temp5159_0;
  3659.   AM_ROUT_DEF_elt__frame 
  3660.   noname5160 = &temp5159_0;
  3661.   noname5160->state = 0;
  3662.   while (1) {
  3663.    if (noname5160->state == 0) {
  3664.     noname5155 = self->cur_rout;
  3665.     noname5160->arg0 = noname5155;
  3666.    }
  3667.    local0 = AM_ROUT_DEF_elt_(noname5160);
  3668.    if (noname5160->state == -1) goto after_loop;
  3669.    r_5156 = local0;
  3670.    if ((r_5156==((AM_LOCAL_EXPR) NULL))) {
  3671.     local1 = OUT_create_OUT(((OUT) NULL));
  3672.     OUT_plus_STR(local1, ((STR) &CompilererrorTRA));
  3673.     return ((AM_LOCAL_EXPR) NULL);
  3674.    }
  3675.    if (IDENT_is_eq_IDEN(r_5156->name_19, n_5153)) {
  3676.     return r_5156;
  3677.    }
  3678.   }
  3679.  }
  3680.  after_loop: ;
  3681.  {
  3682.   struct FLISTAM_LOCAL_EX_4237_frame_struct temp5162_0;
  3683.   FLISTAM_LOCAL_EX_4237_frame 
  3684.   noname5163 = &temp5162_0;
  3685.   noname5163->state = 0;
  3686.   while (1) {
  3687.    if (noname5163->state == 0) {
  3688.     noname5157 = self->active_locals;
  3689.     noname5163->arg0 = noname5157;
  3690.    }
  3691.    local2 = FLISTAM_LOCAL_EX_4237(noname5163);
  3692.    if (noname5163->state == -1) goto after_loop_5161;
  3693.    r_5158 = local2;
  3694.    if ((r_5158==((AM_LOCAL_EXPR) NULL))) {
  3695.     local3 = OUT_create_OUT(((OUT) NULL));
  3696.     OUT_plus_STR(local3, ((STR) &CompilererrorTRA_5164));
  3697.     return ((AM_LOCAL_EXPR) NULL);
  3698.    }
  3699.    if (IDENT_is_eq_IDEN(r_5158->name_19, n_5153)) {
  3700.     return r_5158;
  3701.    }
  3702.   }
  3703.  }
  3704.  after_loop_5161: ;
  3705.  return ((AM_LOCAL_EXPR) NULL);
  3706. }
  3707.  
  3708.  
  3709. void TRANS_call_local(TRANS self, TR_CALL_EXPR e_5165, TP stp, TP tp_5166) {
  3710.  PROG local0;
  3711.  STR local1;
  3712.  TP local2;
  3713.  STR local3;
  3714.  STR local4;
  3715.  TP local5;
  3716.  STR local6;
  3717.  PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5165));
  3718.  local0 = self->prog;
  3719.  local1 = ((STR) &Thetypeofthisloc);
  3720.  local2 = stp;
  3721.  local3 = STR_plus_STR_STR(local1, (*TP_str_STR[local2->header.tag+TP_str_STR_offset])(local2));
  3722.  local4 = STR_plus_STR_STR(local3, ((STR) &isnotasubtypeof_5167));
  3723.  local5 = tp_5166;
  3724.  local6 = STR_plus_STR_STR(local4, (*TP_str_STR[local5->header.tag+TP_str_STR_offset])(local5));
  3725.  PROG_err_STR(local0, STR_plus_STR_STR(local6, ((STR) &name_5168)));
  3726. }
  3727.  
  3728.  
  3729. AM_LOCAL_EXPR TRANS_call_expr_(TRANS self, TR_CALL_EXPR e_5169, TP tp_5170) {
  3730.  AM_LOCAL_EXPR noname5171;
  3731.  TR_EXPR self_tr;
  3732.  AM_LOCAL_EXPR r_5172 = ((AM_LOCAL_EXPR) NULL);
  3733.  BOOL local0;
  3734.  BOOL local1;
  3735.  BOOL local2;
  3736.  TP local3;
  3737.  if (self->in_constant) {
  3738.   return ((AM_LOCAL_EXPR) NULL);
  3739.  }
  3740.  if ((e_5169==((TR_CALL_EXPR) NULL))) {
  3741.   PROG_err_STR(self->prog, ((STR) &CompilererrorTRA_5173));
  3742.   return ((AM_LOCAL_EXPR) NULL);
  3743.  }
  3744.  self_tr = e_5169->ob;
  3745.  if ((self_tr==((TR_EXPR) NULL))) {
  3746.   local2 = (e_5169->tp==((TR_TYPE_SPEC) NULL));
  3747.  } else {
  3748.   local2 = FALSE;
  3749.  }
  3750.  if (local2) {
  3751.   local1 = (e_5169->args_7==((TR_EXPR) NULL));
  3752.  } else {
  3753.   local1 = FALSE;
  3754.  }
  3755.  if (local1) {
  3756.   local0 = ((e_5169->is_array)==(FALSE));
  3757.  } else {
  3758.   local0 = FALSE;
  3759.  }
  3760.  if (local0) {
  3761.   r_5172 = TRANS_local_with(self, e_5169->name_19);
  3762.   if ((!((r_5172==((AM_LOCAL_EXPR) NULL))))) {
  3763.    if ((!((tp_5170==((TP) NULL))))) {
  3764.     local3 = r_5172->tp_at;
  3765.     if ((!((*TP_is_subtype_TP[local3->header.tag+TP_is_subtype_TP_offset])(local3, tp_5170)))) {
  3766.      TRANS_call_local(self, e_5169, r_5172->tp_at, tp_5170);
  3767.      return ((AM_LOCAL_EXPR) NULL);
  3768.     }
  3769.    }
  3770.   }
  3771.  }
  3772.  return r_5172;
  3773. }
  3774.  
  3775.  
  3776. void TRANS_call_self_(TRANS self, TR_CALL_EXPR e_5174) {
  3777.  PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5174));
  3778.  PROG_err_STR(self->prog, ((STR) &Callsmaynotbemad));
  3779. }
  3780.  
  3781.  
  3782. void TRANS_call_self__5175(TRANS self, TR_CALL_EXPR e_5176) {
  3783.  PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5176));
  3784.  PROG_err_STR(self->prog, ((STR) &Callsmaynotbemad_5177));
  3785. }
  3786.  
  3787.  
  3788. TUPAM_EXPRTP TUPAM_EXPRTP_t1_(TUPAM_EXPRTP self, AM_EXPR t1_5178) {
  3789.  TUPAM_EXPRTP local0;
  3790.  local0 = self;
  3791.  local0.t1 = t1_5178;
  3792.  return local0;
  3793. }
  3794.  
  3795.  
  3796. TUPAM_EXPRTP TUPAM_EXPRTP_t2_(TUPAM_EXPRTP self, TP t2_5179) {
  3797.  TUPAM_EXPRTP local0;
  3798.  local0 = self;
  3799.  local0.t2 = t2_5179;
  3800.  return local0;
  3801. }
  3802.  
  3803.  
  3804. TUPAM_EXPRTP TUPAM_EXPRTP_cre(TUPAM_EXPRTP self, AM_EXPR at1, TP at2) {
  3805.  TUPAM_EXPRTP noname5180 = TUPAM_EXPRTP_zero;
  3806.  TUPAM_EXPRTP local0;
  3807.  local0 = TUPAM_EXPRTP_t1_(self, at1);
  3808.  return TUPAM_EXPRTP_t2_(local0, at2);
  3809. }
  3810.  
  3811.  
  3812. void TRANS_call_self__5181(TRANS self, TR_CALL_EXPR e_5182) {
  3813.  PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5182));
  3814.  PROG_err_STR(self->prog, ((STR) &Callsmaynotbemad_5183));
  3815. }
  3816.  
  3817.  
  3818. void TRANS_call_self__5184(TRANS self, TR_CALL_EXPR e_5185) {
  3819.  PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5185));
  3820.  PROG_err_STR(self->prog, ((STR) &Underscoreargume));
  3821. }
  3822.  
  3823.  
  3824. AM_VOID_CONST AM_VOID_CONST_cr(AM_VOID_CONST self, SFILE_ID source_5186) {
  3825.  AM_VOID_CONST noname5187;
  3826.  AM_VOID_CONST r_5188;
  3827.  AM_VOID_CONST local0;
  3828.  local0 = ((AM_VOID_CONST) sbi_alloc(sizeof(struct AM_VOID_CONST_struct), AM_VOID_CONST_tag));
  3829.  r_5188 = local0;
  3830.  r_5188->source_38 = source_5186;
  3831.  return r_5188;
  3832. }
  3833.  
  3834.  
  3835. TP TRANS_tp_of_TR_T(TRANS self, TR_TYPE_SPEC t_5189) {
  3836.  TP noname5190;
  3837.  if (!((!((t_5189==((TR_TYPE_SPEC) NULL)))))) {
  3838.   fprintf(stderr,"Violation of precondition ./trans.sa:71:8\n");
  3839.   exit(16);
  3840.  }
  3841.  return TP_CONTEXT_tp_of(self->tp_con, t_5189);
  3842. }
  3843.  
  3844.  
  3845. TUPAM_EXPRTP TRANS_call_self__5191(TRANS self, TR_CALL_EXPR e_5192) {
  3846.  TUPAM_EXPRTP noname5193 = TUPAM_EXPRTP_zero;
  3847.  TR_EXPR self_tr;
  3848.  AM_EXPR self_val;
  3849.  AM_EXPR self_val_5194;
  3850.  AM_EXPR self_val_5195;
  3851.  AM_VOID_CONST av;
  3852.  AM_EXPR self_val_5196 = ((AM_EXPR) NULL);
  3853.  AM_VOID_CONST av_5197;
  3854.  TUPAM_EXPRTP local0;
  3855.  AM_EXPR local1;
  3856.  TUPAM_EXPRTP local2;
  3857.  AM_EXPR local3;
  3858.  TUPAM_EXPRTP local4;
  3859.  AM_EXPR local5;
  3860.  OUT local6;
  3861.  TUPAM_EXPRTP local7;
  3862.  AM_EXPR local8;
  3863.  if (!((!((e_5192==((TR_CALL_EXPR) NULL)))))) {
  3864.   fprintf(stderr,"Violation of precondition ./trans.sa:1163:12\n");
  3865.   exit(16);
  3866.  }
  3867.  self_tr = e_5192->ob;
  3868.  if ((!((self_tr==((TR_EXPR) NULL))))) {
  3869.   if (self_tr==NULL) {
  3870.    self_val_5195 = TRANS_transform__5198(self, self_tr, ((TP) NULL));
  3871.    if ((self_val_5195==((AM_EXPR) NULL))) {
  3872.     return TUPAM_EXPRTP_zero;
  3873.    }
  3874.    local0 = TUPAM_EXPRTP_zero;
  3875.    local1 = self_val_5195;
  3876.    return TUPAM_EXPRTP_cre(local0, self_val_5195, (*AM_EXPR_tp_TP[local1->header.tag+AM_EXPR_tp_TP_offset])(local1));
  3877.   } else
  3878.   switch (self_tr->header.tag) {
  3879.    case TR_VOID_EXPR_tag:
  3880.     TRANS_call_self_(self, e_5192);
  3881.     return TUPAM_EXPRTP_zero; break;
  3882.    case TR_CREATE_EXPR_tag:
  3883.     if ((((TR_CREATE_EXPR) self_tr)->tp==((TR_TYPE_SPEC) NULL))) {
  3884.      TRANS_call_self__5175(self, e_5192);
  3885.      return TUPAM_EXPRTP_zero;
  3886.     }
  3887.     else {
  3888.      self_val = TRANS_transform__5198(self, self_tr, ((TP) NULL));
  3889.      if ((self_val==((AM_EXPR) NULL))) {
  3890.       return TUPAM_EXPRTP_zero;
  3891.      }
  3892.      local2 = TUPAM_EXPRTP_zero;
  3893.      local3 = self_val;
  3894.      return TUPAM_EXPRTP_cre(local2, self_val, (*AM_EXPR_tp_TP[local3->header.tag+AM_EXPR_tp_TP_offset])(local3));
  3895.     } break;
  3896.    case TR_ARRAY_EXPR_tag:
  3897.     TRANS_call_self__5181(self, e_5192);
  3898.     return TUPAM_EXPRTP_zero; break;
  3899.    case TR_UNDERSCORE_ARG_tag:
  3900.     TRANS_call_self__5184(self, e_5192);
  3901.     return TUPAM_EXPRTP_zero; break;
  3902.    default: ;
  3903.     self_val_5194 = TRANS_transform__5198(self, self_tr, ((TP) NULL));
  3904.     if ((self_val_5194==((AM_EXPR) NULL))) {
  3905.      return TUPAM_EXPRTP_zero;
  3906.     }
  3907.     local4 = TUPAM_EXPRTP_zero;
  3908.     local5 = self_val_5194;
  3909.     return TUPAM_EXPRTP_cre(local4, self_val_5194, (*AM_EXPR_tp_TP[local5->header.tag+AM_EXPR_tp_TP_offset])(local5));
  3910.   }
  3911.  }
  3912.  else {
  3913.   if ((!((e_5192->tp==((TR_TYPE_SPEC) NULL))))) {
  3914.    av = AM_VOID_CONST_cr(((AM_VOID_CONST) NULL), e_5192->source_38);
  3915.    av->tp_at = TRANS_tp_of_TR_T(self, e_5192->tp);
  3916.    return TUPAM_EXPRTP_cre(TUPAM_EXPRTP_zero, ((AM_EXPR) av), av->tp_at);
  3917.   }
  3918.  }
  3919.  if (self->in_constant) {
  3920.   av_5197 = AM_VOID_CONST_cr(((AM_VOID_CONST) NULL), e_5192->source_38);
  3921.   av_5197->tp_at = ((TP) self->tp_con->same_34);
  3922.   self_val_5196 = ((AM_EXPR) av_5197);
  3923.  }
  3924.  else {
  3925.   self_val_5196 = ((AM_EXPR) AM_ROUT_DEF_self(self->cur_rout));
  3926.  }
  3927.  if ((self_val_5196==((AM_EXPR) NULL))) {
  3928.   local6 = OUT_create_OUT(((OUT) NULL));
  3929.   OUT_plus_STR(local6, ((STR) &CompilererrorTRA_5199));
  3930.   return TUPAM_EXPRTP_zero;
  3931.  }
  3932.  local7 = TUPAM_EXPRTP_zero;
  3933.  local8 = self_val_5196;
  3934.  return TUPAM_EXPRTP_cre(local7, self_val_5196, (*AM_EXPR_tp_TP[local8->header.tag+AM_EXPR_tp_TP_offset])(local8));
  3935. }
  3936.  
  3937.  
  3938. CALL_SIG CALL_SIG_create_(CALL_SIG self) {
  3939.  CALL_SIG noname5200;
  3940.  CALL_SIG local0;
  3941.  local0 = ((CALL_SIG) sbi_alloc(sizeof(struct CALL_SIG_struct), CALL_SIG_tag));
  3942.  return local0;
  3943. }
  3944.  
  3945.  
  3946. IDENT TRANS_call_expr__5201(TRANS self, TR_CALL_EXPR e_5202) {
  3947.  IDENT noname5203 = IDENT_zero;
  3948.  if (!((!((e_5202==((TR_CALL_EXPR) NULL)))))) {
  3949.   fprintf(stderr,"Violation of precondition ./trans.sa:1268:22\n");
  3950.   exit(16);
  3951.  }
  3952.  if (e_5202->is_array) {
  3953.   return self->prog->ident_builtin->aget_ident;
  3954.  }
  3955.  return e_5202->name_19;
  3956. }
  3957.  
  3958.  
  3959. INT TR_CALL_EXPR_arg(TR_CALL_EXPR self) {
  3960.  INT noname5204 = ((INT) 0);
  3961.  TR_EXPR local0;
  3962.  if ((self->args_7==((TR_EXPR) NULL))) {
  3963.   return 0;
  3964.  }
  3965.  local0 = self->args_7;
  3966.  return (*TR_EXPR_size_INT[local0->header.tag+TR_EXPR_size_INT_offset])(local0);
  3967. }
  3968.  
  3969.  
  3970. ARRAYAM_EXPR ARRAYAM_EXPR_cre(ARRAYAM_EXPR self, INT n_5205) {
  3971.  ARRAYAM_EXPR noname5206;
  3972.  ARRAYAM_EXPR local0;
  3973.  if (!((n_5205>=0))) {
  3974.   fprintf(stderr,"Violation of precondition ../Library/array.sa:56:9\n");
  3975.   exit(16);
  3976.  }
  3977.  local0 = ((ARRAYAM_EXPR) sbi_arr_alloc(sizeof(struct ARRAYAM_EXPR_struct), ARRAYAM_EXPR_tag, sizeof(AM_EXPR) , n_5205));
  3978.  local0->asize = n_5205;
  3979.  return local0;
  3980. }
  3981.  
  3982.  
  3983. ARRAYCALL_TP ARRAYCALL_TP_cre(ARRAYCALL_TP self, INT n_5207) {
  3984.  ARRAYCALL_TP noname5208;
  3985.  ARRAYCALL_TP local0;
  3986.  if (!((n_5207>=0))) {
  3987.   fprintf(stderr,"Violation of precondition ../Library/array.sa:56:9\n");
  3988.   exit(16);
  3989.  }
  3990.  local0 = ((ARRAYCALL_TP) sbi_arr_alloc(sizeof(struct ARRAYCALL_TP_struct), ARRAYCALL_TP_tag, sizeof(CALL_TP) , n_5207));
  3991.  local0->asize = n_5207;
  3992.  return local0;
  3993. }
  3994.  
  3995.  
  3996. INT ARRAYAM_EXPR_asi(ARRAYAM_EXPR self) {
  3997.  INT noname5209 = ((INT) 0);
  3998.   return self->asize;
  3999.  fprintf(stderr,"Last statement wasn't return ../Library/aref.sa:20:8\n");
  4000.  exit(16);
  4001. }
  4002.  
  4003.  
  4004. INT ARRAYAM_EXPR_siz(ARRAYAM_EXPR self) {
  4005.  INT noname5210 = ((INT) 0);
  4006.  if ((self==((ARRAYAM_EXPR) NULL))) {
  4007.   return 0;
  4008.  }
  4009.  return (self->asize);
  4010. }
  4011.  
  4012.  
  4013. INT ARRAYCALL_TP_asi(ARRAYCALL_TP self) {
  4014.  INT noname5211 = ((INT) 0);
  4015.   return self->asize;
  4016.  fprintf(stderr,"Last statement wasn't return ../Library/aref.sa:20:8\n");
  4017.  exit(16);
  4018. }
  4019.  
  4020.  
  4021. INT ARRAYCALL_TP_siz(ARRAYCALL_TP self) {
  4022.  INT noname5212 = ((INT) 0);
  4023.  if ((self==((ARRAYCALL_TP) NULL))) {
  4024.   return 0;
  4025.  }
  4026.  return (self->asize);
  4027. }
  4028.  
  4029.  
  4030. void CALL_TP_VOID_cac(CALL_TP_VOID self, CALL_TP_VOID cache_5213) {
  4031.  shared_CALL_TP_V = cache_5213;
  4032. }
  4033.  
  4034.  
  4035. CALL_TP_VOID CALL_TP_VOID_cre(CALL_TP_VOID self) {
  4036.  CALL_TP_VOID noname5214;
  4037.  CALL_TP_VOID local0;
  4038.  if ((shared_CALL_TP_V==((CALL_TP_VOID) NULL))) {
  4039.   local0 = ((CALL_TP_VOID) sbi_alloc_atomic(sizeof(struct CALL_TP_VOID_struct), CALL_TP_VOID_tag));
  4040.   CALL_TP_VOID_cac(self, local0);
  4041.  }
  4042.  return shared_CALL_TP_V;
  4043. }
  4044.  
  4045.  
  4046. void CALL_TP_CREATE_c(CALL_TP_CREATE self, CALL_TP_CREATE cache_5215) {
  4047.  shared_CALL_TP_C = cache_5215;
  4048. }
  4049.  
  4050.  
  4051. CALL_TP_CREATE CALL_TP_CREATE_c_5216(CALL_TP_CREATE self) {
  4052.  CALL_TP_CREATE noname5217;
  4053.  CALL_TP_CREATE local0;
  4054.  if ((shared_CALL_TP_C==((CALL_TP_CREATE) NULL))) {
  4055.   local0 = ((CALL_TP_CREATE) sbi_alloc_atomic(sizeof(struct CALL_TP_CREATE_struct), CALL_TP_CREATE_tag));
  4056.   CALL_TP_CREATE_c(self, local0);
  4057.  }
  4058.  return shared_CALL_TP_C;
  4059. }
  4060.  
  4061.  
  4062. void CALL_TP_ARRAY_ca(CALL_TP_ARRAY self, CALL_TP_ARRAY cache_5218) {
  4063.  shared_CALL_TP_A = cache_5218;
  4064. }
  4065.  
  4066.  
  4067. CALL_TP_ARRAY CALL_TP_ARRAY_cr(CALL_TP_ARRAY self) {
  4068.  CALL_TP_ARRAY noname5219;
  4069.  CALL_TP_ARRAY local0;
  4070.  if ((shared_CALL_TP_A==((CALL_TP_ARRAY) NULL))) {
  4071.   local0 = ((CALL_TP_ARRAY) sbi_alloc_atomic(sizeof(struct CALL_TP_ARRAY_struct), CALL_TP_ARRAY_tag));
  4072.   CALL_TP_ARRAY_ca(self, local0);
  4073.  }
  4074.  return shared_CALL_TP_A;
  4075. }
  4076.  
  4077.  
  4078. CALL_TP_UNDERSCORE CALL_TP_UNDERSCO(CALL_TP_UNDERSCORE self) {
  4079.  CALL_TP_UNDERSCORE noname5220;
  4080.  CALL_TP_UNDERSCORE local0;
  4081.  local0 = ((CALL_TP_UNDERSCORE) sbi_alloc(sizeof(struct CALL_TP_UNDERSCORE_struct), CALL_TP_UNDERSCORE_tag));
  4082.  return local0;
  4083. }
  4084.  
  4085.  
  4086. CALL_TP TRANS_call_tp_of(TRANS self, TR_EXPR e_5221) {
  4087.  CALL_TP noname5222;
  4088.  CALL_TP_UNDERSCORE tua;
  4089.  OUT local0;
  4090.  if ((e_5221==((TR_EXPR) NULL))) {
  4091.   local0 = OUT_create_OUT(((OUT) NULL));
  4092.   OUT_plus_STR(local0, ((STR) &CompilererrorTRA_5223));
  4093.   return ((CALL_TP) NULL);
  4094.  }
  4095.  if (e_5221==NULL) {
  4096.  } else
  4097.  switch (e_5221->header.tag) {
  4098.   case TR_VOID_EXPR_tag:
  4099.    return ((CALL_TP) CALL_TP_VOID_cre(((CALL_TP_VOID) NULL))); break;
  4100.   case TR_CREATE_EXPR_tag:
  4101.    if ((((TR_CREATE_EXPR) e_5221)->tp==((TR_TYPE_SPEC) NULL))) {
  4102.     return ((CALL_TP) CALL_TP_CREATE_c_5216(((CALL_TP_CREATE) NULL)));
  4103.    }
  4104.    else {
  4105.     return ((CALL_TP) NULL);
  4106.    } break;
  4107.   case TR_ARRAY_EXPR_tag:
  4108.    return ((CALL_TP) CALL_TP_ARRAY_cr(((CALL_TP_ARRAY) NULL))); break;
  4109.   case TR_UNDERSCORE_ARG_tag:
  4110.    tua = CALL_TP_UNDERSCO(((CALL_TP_UNDERSCORE) NULL));
  4111.    if ((!((((TR_UNDERSCORE_ARG) e_5221)->tp==((TR_TYPE_SPEC) NULL))))) {
  4112.     tua->tp = TRANS_tp_of_TR_T(self, ((TR_UNDERSCORE_ARG) e_5221)->tp);
  4113.    }
  4114.    return ((CALL_TP) tua); break;
  4115.   default: ;
  4116.  }
  4117.  return ((CALL_TP) NULL);
  4118. }
  4119.  
  4120.  
  4121. void ARRAYCALL_TP_ase(ARRAYCALL_TP self, INT ind_5224, CALL_TP val_5225) {
  4122.  BOOL local0;
  4123.  INT local1;
  4124.  INT local2;
  4125.  if ((!((self==((ARRAYCALL_TP) NULL))))) {
  4126.   local1 = 0;
  4127.   local2 = (self->asize);
  4128.   local0 = INT_is_bet_INT_I(ind_5224, local1, (c_INT_minus_INT_INT_chk(local2,1)));
  4129.  } else {
  4130.   local0 = FALSE;
  4131.  }
  4132.  if (!(local0)) {
  4133.   fprintf(stderr,"Violation of precondition ../Library/aref.sa:38:7\n");
  4134.   exit(16);
  4135.  }
  4136.  if (ind_5224<0||ind_5224>=self->asize) {
  4137.   fprintf(stderr,"Index out of bounds ../Library/aref.sa:38:7\n");
  4138.   exit(16);
  4139.  }
  4140.  self->arr_part[ind_5224] = val_5225;
  4141. }
  4142.  
  4143.  
  4144. void ARRAYAM_EXPR_ase(ARRAYAM_EXPR self, INT ind_5226, AM_EXPR val_5227) {
  4145.  BOOL local0;
  4146.  INT local1;
  4147.  INT local2;
  4148.  if ((!((self==((ARRAYAM_EXPR) NULL))))) {
  4149.   local1 = 0;
  4150.   local2 = (self->asize);
  4151.   local0 = INT_is_bet_INT_I(ind_5226, local1, (c_INT_minus_INT_INT_chk(local2,1)));
  4152.  } else {
  4153.   local0 = FALSE;
  4154.  }
  4155.  if (!(local0)) {
  4156.   fprintf(stderr,"Violation of precondition ../Library/aref.sa:38:7\n");
  4157.   exit(16);
  4158.  }
  4159.  if (ind_5226<0||ind_5226>=self->asize) {
  4160.   fprintf(stderr,"Index out of bounds ../Library/aref.sa:38:7\n");
  4161.   exit(16);
  4162.  }
  4163.  self->arr_part[ind_5226] = val_5227;
  4164. }
  4165.  
  4166.  
  4167. PROG CALL_SIG_prog_PROG(CALL_SIG self) {
  4168.  PROG noname5228;
  4169.  TP local0;
  4170.  local0 = self->tp;
  4171.  return (*TP_prog_PROG[local0->header.tag+TP_prog_PROG_offset])(local0);
  4172. }
  4173.  
  4174.  
  4175. BOOL CALL_SIG_conform(CALL_SIG self, SIG s_5229) {
  4176.  BOOL noname5230 = ((BOOL) 0);
  4177.  ARRAYCALL_TP noname5231;
  4178.  CALL_TP ca;
  4179.  ARRAYTP noname5232;
  4180.  TP sa_5233;
  4181.  BOOL local0;
  4182.  TP local1;
  4183.  INT local2;
  4184.  CALL_TP local3;
  4185.  TP local4;
  4186.  CALL_TP local5;
  4187.  if ((self==((CALL_SIG) NULL))) {
  4188.   local0 = TRUE;
  4189.  } else {
  4190.   local0 = (s_5229==((SIG) NULL));
  4191.  }
  4192.  if (local0) {
  4193.   return FALSE;
  4194.  }
  4195.  local1 = self->tp;
  4196.  if ((*TP_is_neq_TP_BOOL[local1->header.tag+TP_is_neq_TP_BOOL_offset])(local1, s_5229->tp)) {
  4197.   return FALSE;
  4198.  }
  4199.  if (IDENT_is_neq_IDE(self->name_19, s_5229->name_19)) {
  4200.   return FALSE;
  4201.  }
  4202.  if ((!(self->unknown_ret))) {
  4203.   if (self->has_ret) {
  4204.    if ((s_5229->ret==((TP) NULL))) {
  4205.     return FALSE;
  4206.    }
  4207.   }
  4208.   else {
  4209.    if ((!((s_5229->ret==((TP) NULL))))) {
  4210.     return FALSE;
  4211.    }
  4212.   }
  4213.  }
  4214.  local2 = ARRAYCALL_TP_siz(self->args_7);
  4215.  if ((local2!=ARRAYTP_size_INT(s_5229->args_7))) {
  4216.   return FALSE;
  4217.  }
  4218.  {
  4219.   struct ARRAYCALL_TP_elt_frame_struct temp5234_0;
  4220.   ARRAYCALL_TP_elt_frame 
  4221.   noname5235 = &temp5234_0;
  4222.   struct ARRAYTP_elt_TP_frame_struct temp5234_1;
  4223.   ARRAYTP_elt_TP_frame 
  4224.   noname5236 = &temp5234_1;
  4225.   noname5235->state = 0;
  4226.   noname5236->state = 0;
  4227.   while (1) {
  4228.    if (noname5235->state == 0) {
  4229.     noname5231 = self->args_7;
  4230.     noname5235->arg0 = noname5231;
  4231.    }
  4232.    local3 = ARRAYCALL_TP_elt(noname5235);
  4233.    if (noname5235->state == -1) goto after_loop;
  4234.    ca = local3;
  4235.    if (noname5236->state == 0) {
  4236.     noname5232 = s_5229->args_7;
  4237.     noname5236->arg0 = noname5232;
  4238.    }
  4239.    local4 = ARRAYTP_elt_TP(noname5236);
  4240.    if (noname5236->state == -1) goto after_loop;
  4241.    sa_5233 = local4;
  4242.    local5 = ca;
  4243.    if ((!((*CALL_TP_is_subty[local5->header.tag+CALL_TP_is_subty_offset])(local5, sa_5233)))) {
  4244.     return FALSE;
  4245.    }
  4246.   }
  4247.  }
  4248.  after_loop: ;
  4249.  return TRUE;
  4250. }
  4251.  
  4252.  
  4253. STR CALL_SIG_str_STR(CALL_SIG self) {
  4254.  STR noname5237;
  4255.  FSTR s_5238;
  4256.  ARRAYCALL_TP noname5239;
  4257.  STR noname5240;
  4258.  FSTR local0;
  4259.  TP local1;
  4260.  FSTR local2;
  4261.  FSTR local3;
  4262.  STR local4;
  4263.  CALL_TP local5;
  4264.  CALL_TP local6;
  4265.  if ((self==((CALL_SIG) NULL))) {
  4266.   return ((STR) &void_5241);
  4267.  }
  4268.  local0 = FSTR_create_FSTR(((FSTR) NULL));
  4269.  local1 = self->tp;
  4270.  local2 = FSTR_plus_STR_FSTR(local0, (*TP_str_STR[local1->header.tag+TP_str_STR_offset])(local1));
  4271.  local3 = FSTR_plus_STR_FSTR(local2, ((STR) &name_5242));
  4272.  s_5238 = FSTR_plus_STR_FSTR(local3, self->name_19.str_4);
  4273.  if ((!((self->args_7==((ARRAYCALL_TP) NULL))))) {
  4274.   s_5238 = FSTR_plus_CHAR_FSTR(s_5238, '(');
  4275.   {
  4276.    struct ARRAYCALL_TP_elt_frame_struct temp5243_0;
  4277.    ARRAYCALL_TP_elt_frame 
  4278.    noname5244 = &temp5243_0;
  4279.    struct STR_separate_STR_STR_frame_struct temp5243_1;
  4280.    STR_separate_STR_STR_frame 
  4281.    noname5245 = &temp5243_1;
  4282.    noname5244->state = 0;
  4283.    noname5245->state = 0;
  4284.    while (1) {
  4285.     if (noname5245->state == 0) {
  4286.      noname5240 = ((STR) &name_5246);
  4287.      noname5245->arg0 = noname5240;
  4288.     }
  4289.     if (noname5244->state == 0) {
  4290.      noname5239 = self->args_7;
  4291.      noname5244->arg0 = noname5239;
  4292.     }
  4293.     local5 = ARRAYCALL_TP_elt(noname5244);
  4294.     if (noname5244->state == -1) goto after_loop;
  4295.     local6 = local5;
  4296.     noname5245->arg1 = (*CALL_TP_str_STR[local6->header.tag+CALL_TP_str_STR_offset])(local6);
  4297.     local4 = STR_separate_STR_STR(noname5245);
  4298.     if (noname5245->state == -1) goto after_loop;
  4299.     s_5238 = FSTR_plus_STR_FSTR(s_5238, local4);
  4300.    }
  4301.   }
  4302.   after_loop: ;
  4303.   s_5238 = FSTR_plus_CHAR_FSTR(s_5238, ')');
  4304.  }
  4305.  if (self->unknown_ret) {
  4306.   s_5238 = FSTR_plus_STR_FSTR(s_5238, ((STR) &name_5247));
  4307.  }
  4308.  else {
  4309.   if (self->has_ret) {
  4310.    s_5238 = FSTR_plus_STR_FSTR(s_5238, ((STR) &S__5248));
  4311.   }
  4312.  }
  4313.  return FSTR_str_STR(s_5238);
  4314. }
  4315.  
  4316.  
  4317. SIG IMPL_sig_for_int(IMPL self, CALL_SIG c_5249) {
  4318.  SIG noname5250;
  4319.  SIG r_5251 = ((SIG) NULL);
  4320.  ELT_TBL noname5252;
  4321.  IDENT noname5253 = IDENT_zero;
  4322.  SIG s_5254;
  4323.  ELT local0;
  4324.  PROG local1;
  4325.  STR local2;
  4326.  STR local3;
  4327.  STR local4;
  4328.  STR local5;
  4329.  STR local6;
  4330.  STR local7;
  4331.  PROG local8;
  4332.  STR local9;
  4333.  STR local10;
  4334.  if (!((!((c_5249==((CALL_SIG) NULL)))))) {
  4335.   fprintf(stderr,"Violation of precondition ./impl.sa:48:24\n");
  4336.   exit(16);
  4337.  }
  4338.  {
  4339.   struct ELT_TBL_get_quer_frame_struct temp5255_0;
  4340.   ELT_TBL_get_quer_frame 
  4341.   noname5256 = &temp5255_0;
  4342.   noname5256->state = 0;
  4343.   while (1) {
  4344.    if (noname5256->state == 0) {
  4345.     noname5252 = self->elts;
  4346.     noname5253 = c_5249->name_19;
  4347.     noname5256->arg0 = noname5252;
  4348.     noname5256->arg1 = noname5253;
  4349.    }
  4350.    local0 = ELT_TBL_get_quer(noname5256);
  4351.    if (noname5256->state == -1) goto after_loop;
  4352.    s_5254 = local0->sig_6;
  4353.    if (CALL_SIG_conform(c_5249, s_5254)) {
  4354.     if ((r_5251==((SIG) NULL))) {
  4355.      r_5251 = s_5254;
  4356.     }
  4357.     else {
  4358.      local1 = CALL_SIG_prog_PROG(c_5249);
  4359.      local2 = ((STR) &Theinternalcall);
  4360.      local3 = STR_plus_STR_STR(local2, CALL_SIG_str_STR(c_5249));
  4361.      local4 = STR_plus_STR_STR(local3, ((STR) &matchesboththefe));
  4362.      local5 = STR_plus_STR_STR(local4, SIG_str_STR(r_5251));
  4363.      local6 = STR_plus_STR_STR(local5, ((STR) &and_5257));
  4364.      local7 = STR_plus_STR_STR(local6, SIG_str_STR(s_5254));
  4365.      PROG_err_STR(local1, STR_plus_STR_STR(local7, ((STR) &name_5258)));
  4366.     }
  4367.    }
  4368.   }
  4369.  }
  4370.  after_loop: ;
  4371.  if ((r_5251==((SIG) NULL))) {
  4372.   local8 = CALL_SIG_prog_PROG(c_5249);
  4373.   local9 = ((STR) &Nomatchfortheint);
  4374.   local10 = STR_plus_STR_STR(local9, CALL_SIG_str_STR(c_5249));
  4375.   PROG_err_STR(local8, STR_plus_STR_STR(local10, ((STR) &name_5259)));
  4376.  }
  4377.  return r_5251;
  4378. }
  4379.  
  4380.  
  4381. SIG IFC_sig_for_call(IFC self, CALL_SIG c_5260) {
  4382.  SIG noname5261;
  4383.  SIG r_5262 = ((SIG) NULL);
  4384.  SIG_TBL noname5263;
  4385.  IDENT noname5264 = IDENT_zero;
  4386.  SIG s_5265;
  4387.  BOOL local0;
  4388.  SIG local1;
  4389.  BOOL local2;
  4390.  BOOL local3;
  4391.  BOOL local4;
  4392.  BOOL local5;
  4393.  PROG local6;
  4394.  STR local7;
  4395.  STR local8;
  4396.  STR local9;
  4397.  STR local10;
  4398.  STR local11;
  4399.  STR local12;
  4400.  PROG local13;
  4401.  STR local14;
  4402.  STR local15;
  4403.  if ((!((self==((IFC) NULL))))) {
  4404.   local0 = (!((c_5260==((CALL_SIG) NULL))));
  4405.  } else {
  4406.   local0 = FALSE;
  4407.  }
  4408.  if (!(local0)) {
  4409.   fprintf(stderr,"Violation of precondition ./ifc.sa:74:15\n");
  4410.   exit(16);
  4411.  }
  4412.  {
  4413.   struct SIG_TBL_get_quer_frame_struct temp5266_0;
  4414.   SIG_TBL_get_quer_frame 
  4415.   noname5267 = &temp5266_0;
  4416.   noname5267->state = 0;
  4417.   while (1) {
  4418.    if (noname5267->state == 0) {
  4419.     noname5263 = self->sigs;
  4420.     noname5264 = c_5260->name_19;
  4421.     noname5267->arg0 = noname5263;
  4422.     noname5267->arg1 = noname5264;
  4423.    }
  4424.    local1 = SIG_TBL_get_quer(noname5267);
  4425.    if (noname5267->state == -1) goto after_loop;
  4426.    s_5265 = local1;
  4427.    if (CALL_SIG_conform(c_5260, s_5265)) {
  4428.     if ((r_5262==((SIG) NULL))) {
  4429.      r_5262 = s_5265;
  4430.     }
  4431.     else {
  4432.      if (c_5260->unknown_ret) {
  4433.       local3 = (r_5262->ret==((TP) NULL));
  4434.      } else {
  4435.       local3 = FALSE;
  4436.      }
  4437.      if (local3) {
  4438.       local2 = (!((s_5265->ret==((TP) NULL))));
  4439.      } else {
  4440.       local2 = FALSE;
  4441.      }
  4442.      if (local2) {
  4443.      }
  4444.      else {
  4445.       if (c_5260->unknown_ret) {
  4446.        local5 = (!((r_5262->ret==((TP) NULL))));
  4447.       } else {
  4448.        local5 = FALSE;
  4449.       }
  4450.       if (local5) {
  4451.        local4 = (s_5265->ret==((TP) NULL));
  4452.       } else {
  4453.        local4 = FALSE;
  4454.       }
  4455.       if (local4) {
  4456.        r_5262 = s_5265;
  4457.       }
  4458.       else {
  4459.        local6 = CALL_SIG_prog_PROG(c_5260);
  4460.        local7 = ((STR) &Thecall);
  4461.        local8 = STR_plus_STR_STR(local7, CALL_SIG_str_STR(c_5260));
  4462.        local9 = STR_plus_STR_STR(local8, ((STR) &matchesboththefe_5268));
  4463.        local10 = STR_plus_STR_STR(local9, SIG_str_STR(r_5262));
  4464.        local11 = STR_plus_STR_STR(local10, ((STR) &and_5269));
  4465.        local12 = STR_plus_STR_STR(local11, SIG_str_STR(s_5265));
  4466.        PROG_err_STR(local6, STR_plus_STR_STR(local12, ((STR) &name_5270)));
  4467.        return ((SIG) NULL);
  4468.       }
  4469.      }
  4470.     }
  4471.    }
  4472.   }
  4473.  }
  4474.  after_loop: ;
  4475.  if ((r_5262==((SIG) NULL))) {
  4476.   local13 = CALL_SIG_prog_PROG(c_5260);
  4477.   local14 = ((STR) &Nomatchforthecall);
  4478.   local15 = STR_plus_STR_STR(local14, CALL_SIG_str_STR(c_5260));
  4479.   PROG_err_STR(local13, STR_plus_STR_STR(local15, ((STR) &name_5271)));
  4480.  }
  4481.  return r_5262;
  4482. }
  4483.  
  4484.  
  4485. SIG CALL_SIG_lookup_(CALL_SIG self, BOOL in_class) {
  4486.  SIG noname5272;
  4487.  TP st;
  4488.  ARRAYCALL_TP noname5273;
  4489.  CALL_TP at_5274;
  4490.  ARRAYTP noname5275;
  4491.  TP brat;
  4492.  ARRAYCALL_TP noname5276;
  4493.  CALL_TP at_5277;
  4494.  ARRAYTP noname5278;
  4495.  TP brat_5279;
  4496.  IMPL local0;
  4497.  IFC local1;
  4498.  PROG local2;
  4499.  BOOL local3;
  4500.  PROG local4;
  4501.  STR local5;
  4502.  STR local6;
  4503.  BOOL local7;
  4504.  PROG local8;
  4505.  STR local9;
  4506.  STR local10;
  4507.  INT local11;
  4508.  PROG local12;
  4509.  STR local13;
  4510.  STR local14;
  4511.  STR local15;
  4512.  STR local16;
  4513.  CALL_TP local17;
  4514.  TP local18;
  4515.  CALL_TP local19;
  4516.  PROG local20;
  4517.  STR local21;
  4518.  CALL_TP local22;
  4519.  STR local23;
  4520.  STR local24;
  4521.  STR local25;
  4522.  STR local26;
  4523.  TP local27;
  4524.  STR local28;
  4525.  STR local29;
  4526.  STR local30;
  4527.  PROG local31;
  4528.  BOOL local32;
  4529.  PROG local33;
  4530.  STR local34;
  4531.  STR local35;
  4532.  BOOL local36;
  4533.  PROG local37;
  4534.  STR local38;
  4535.  STR local39;
  4536.  INT local40;
  4537.  PROG local41;
  4538.  STR local42;
  4539.  STR local43;
  4540.  STR local44;
  4541.  STR local45;
  4542.  CALL_TP local46;
  4543.  TP local47;
  4544.  CALL_TP local48;
  4545.  PROG local49;
  4546.  STR local50;
  4547.  CALL_TP local51;
  4548.  STR local52;
  4549.  STR local53;
  4550.  STR local54;
  4551.  STR local55;
  4552.  TP local56;
  4553.  STR local57;
  4554.  STR local58;
  4555.  STR local59;
  4556.  st = self->tp;
  4557.  if (st==NULL) {
  4558.  } else
  4559.  switch (st->header.tag) {
  4560.   case TP_CLASS_tag:
  4561.    if (in_class) {
  4562.     local0 = IMPL_TBL_impl_of(CALL_SIG_prog_PROG(self)->impl_tbl, self->tp);
  4563.     return IMPL_sig_for_int(local0, self);
  4564.    }
  4565.    else {
  4566.     local1 = IFC_TBL_ifc_of_T(CALL_SIG_prog_PROG(self)->ifc_tbl, self->tp);
  4567.     return IFC_sig_for_call(local1, self);
  4568.    } break;
  4569.   case TP_ROUT_tag:
  4570.    if (IDENT_is_neq_IDE(self->name_19, CALL_SIG_prog_PROG(self)->ident_builtin->call_ident)) {
  4571.     local2 = CALL_SIG_prog_PROG(self);
  4572.     PROG_err_STR(local2, ((STR) &Onlycallmaybeapp));
  4573.     return ((SIG) NULL);
  4574.    }
  4575.    if ((!(self->unknown_ret))) {
  4576.     if (self->has_ret) {
  4577.      local3 = (((TP_ROUT) st)->ret==((TP) NULL));
  4578.     } else {
  4579.      local3 = FALSE;
  4580.     }
  4581.     if (local3) {
  4582.      local4 = CALL_SIG_prog_PROG(self);
  4583.      local5 = ((STR) &Theboundroutine);
  4584.      local6 = STR_plus_STR_STR(local5, TP_ROUT_str_STR(((TP_ROUT) st)));
  4585.      PROG_err_STR(local4, STR_plus_STR_STR(local6, ((STR) &hasnoreturnvalue)));
  4586.      return ((SIG) NULL);
  4587.     }
  4588.     else {
  4589.      if ((!(self->has_ret))) {
  4590.       local7 = (!((((TP_ROUT) st)->ret==((TP) NULL))));
  4591.      } else {
  4592.       local7 = FALSE;
  4593.      }
  4594.      if (local7) {
  4595.       local8 = CALL_SIG_prog_PROG(self);
  4596.       local9 = ((STR) &Theboundroutine_5280);
  4597.       local10 = STR_plus_STR_STR(local9, TP_ROUT_str_STR(((TP_ROUT) st)));
  4598.       PROG_err_STR(local8, STR_plus_STR_STR(local10, ((STR) &hasareturnvalueb)));
  4599.       return ((SIG) NULL);
  4600.      }
  4601.     }
  4602.    }
  4603.    local11 = ARRAYTP_size_INT(((TP_ROUT) st)->args_7);
  4604.    if ((local11!=ARRAYCALL_TP_siz(self->args_7))) {
  4605.     local12 = CALL_SIG_prog_PROG(self);
  4606.     local13 = ((STR) &Thecall_5281);
  4607.     local14 = STR_plus_STR_STR(local13, CALL_SIG_str_STR(self));
  4608.     local15 = STR_plus_STR_STR(local14, ((STR) &hasthewrongnumbe));
  4609.     local16 = STR_plus_STR_STR(local15, TP_ROUT_str_STR(((TP_ROUT) st)));
  4610.     PROG_err_STR(local12, STR_plus_STR_STR(local16, ((STR) &name_5282)));
  4611.     return ((SIG) NULL);
  4612.    }
  4613.    {
  4614.     struct ARRAYCALL_TP_elt_frame_struct temp5283_0;
  4615.     ARRAYCALL_TP_elt_frame 
  4616.     noname5284 = &temp5283_0;
  4617.     struct ARRAYTP_elt_TP_frame_struct temp5283_1;
  4618.     ARRAYTP_elt_TP_frame 
  4619.     noname5285 = &temp5283_1;
  4620.     noname5284->state = 0;
  4621.     noname5285->state = 0;
  4622.     while (1) {
  4623.      if (noname5284->state == 0) {
  4624.       noname5273 = self->args_7;
  4625.       noname5284->arg0 = noname5273;
  4626.      }
  4627.      local17 = ARRAYCALL_TP_elt(noname5284);
  4628.      if (noname5284->state == -1) goto after_loop;
  4629.      at_5274 = local17;
  4630.      if (noname5285->state == 0) {
  4631.       noname5275 = ((TP_ROUT) st)->args_7;
  4632.       noname5285->arg0 = noname5275;
  4633.      }
  4634.      local18 = ARRAYTP_elt_TP(noname5285);
  4635.      if (noname5285->state == -1) goto after_loop;
  4636.      brat = local18;
  4637.      local19 = at_5274;
  4638.      if ((!((*CALL_TP_is_subty[local19->header.tag+CALL_TP_is_subty_offset])(local19, brat)))) {
  4639.       local20 = CALL_SIG_prog_PROG(self);
  4640.       local21 = ((STR) &Theargumenttype);
  4641.       local22 = at_5274;
  4642.       local23 = STR_plus_STR_STR(local21, (*CALL_TP_str_STR[local22->header.tag+CALL_TP_str_STR_offset])(local22));
  4643.       local24 = STR_plus_STR_STR(local23, ((STR) &inthecall));
  4644.       local25 = STR_plus_STR_STR(local24, CALL_SIG_str_STR(self));
  4645.       local26 = STR_plus_STR_STR(local25, ((STR) &doesntconformto));
  4646.       local27 = brat;
  4647.       local28 = STR_plus_STR_STR(local26, (*TP_str_STR[local27->header.tag+TP_str_STR_offset])(local27));
  4648.       local29 = STR_plus_STR_STR(local28, ((STR) &intheboundroutine));
  4649.       local30 = STR_plus_STR_STR(local29, TP_ROUT_str_STR(((TP_ROUT) st)));
  4650.       PROG_err_STR(local20, STR_plus_STR_STR(local30, ((STR) &name_5286)));
  4651.       return ((SIG) NULL);
  4652.      }
  4653.     }
  4654.    }
  4655.    after_loop: ;
  4656.    return SIG_bound_routin(((SIG) NULL), ((TP_ROUT) st)); break;
  4657.   case TP_ITER_tag:
  4658.    if (IDENT_is_neq_IDE(self->name_19, CALL_SIG_prog_PROG(self)->ident_builtin->call_bang_ident)) {
  4659.     local31 = CALL_SIG_prog_PROG(self);
  4660.     PROG_err_STR(local31, ((STR) &Onlycallmaybeapp_5287));
  4661.     return ((SIG) NULL);
  4662.    }
  4663.    if ((!(self->unknown_ret))) {
  4664.     if (self->has_ret) {
  4665.      local32 = (((TP_ITER) st)->ret==((TP) NULL));
  4666.     } else {
  4667.      local32 = FALSE;
  4668.     }
  4669.     if (local32) {
  4670.      local33 = CALL_SIG_prog_PROG(self);
  4671.      local34 = ((STR) &Thebounditer);
  4672.      local35 = STR_plus_STR_STR(local34, TP_ITER_str_STR(((TP_ITER) st)));
  4673.      PROG_err_STR(local33, STR_plus_STR_STR(local35, ((STR) &hasnoreturnvalue_5288)));
  4674.      return ((SIG) NULL);
  4675.     }
  4676.     else {
  4677.      if ((!(self->has_ret))) {
  4678.       local36 = (!((((TP_ITER) st)->ret==((TP) NULL))));
  4679.      } else {
  4680.       local36 = FALSE;
  4681.      }
  4682.      if (local36) {
  4683.       local37 = CALL_SIG_prog_PROG(self);
  4684.       local38 = ((STR) &Thebounditer_5289);
  4685.       local39 = STR_plus_STR_STR(local38, TP_ITER_str_STR(((TP_ITER) st)));
  4686.       PROG_err_STR(local37, STR_plus_STR_STR(local39, ((STR) &hasareturnvalueb_5290)));
  4687.       return ((SIG) NULL);
  4688.      }
  4689.     }
  4690.    }
  4691.    local40 = ARRAYTP_size_INT(((TP_ITER) st)->args_7);
  4692.    if ((local40!=ARRAYCALL_TP_siz(self->args_7))) {
  4693.     local41 = CALL_SIG_prog_PROG(self);
  4694.     local42 = ((STR) &Thecall_5291);
  4695.     local43 = STR_plus_STR_STR(local42, CALL_SIG_str_STR(self));
  4696.     local44 = STR_plus_STR_STR(local43, ((STR) &hasthewrongnumbe_5292));
  4697.     local45 = STR_plus_STR_STR(local44, TP_ITER_str_STR(((TP_ITER) st)));
  4698.     PROG_err_STR(local41, STR_plus_STR_STR(local45, ((STR) &name_5293)));
  4699.     return ((SIG) NULL);
  4700.    }
  4701.    {
  4702.     struct ARRAYCALL_TP_elt_frame_struct temp5295_0;
  4703.     ARRAYCALL_TP_elt_frame 
  4704.     noname5296 = &temp5295_0;
  4705.     struct ARRAYTP_elt_TP_frame_struct temp5295_1;
  4706.     ARRAYTP_elt_TP_frame 
  4707.     noname5297 = &temp5295_1;
  4708.     noname5296->state = 0;
  4709.     noname5297->state = 0;
  4710.     while (1) {
  4711.      if (noname5296->state == 0) {
  4712.       noname5276 = self->args_7;
  4713.       noname5296->arg0 = noname5276;
  4714.      }
  4715.      local46 = ARRAYCALL_TP_elt(noname5296);
  4716.      if (noname5296->state == -1) goto after_loop_5294;
  4717.      at_5277 = local46;
  4718.      if (noname5297->state == 0) {
  4719.       noname5278 = ((TP_ITER) st)->args_7;
  4720.       noname5297->arg0 = noname5278;
  4721.      }
  4722.      local47 = ARRAYTP_elt_TP(noname5297);
  4723.      if (noname5297->state == -1) goto after_loop_5294;
  4724.      brat_5279 = local47;
  4725.      local48 = at_5277;
  4726.      if ((!((*CALL_TP_is_subty[local48->header.tag+CALL_TP_is_subty_offset])(local48, brat_5279)))) {
  4727.       local49 = CALL_SIG_prog_PROG(self);
  4728.       local50 = ((STR) &Theargumenttype_5298);
  4729.       local51 = at_5277;
  4730.       local52 = STR_plus_STR_STR(local50, (*CALL_TP_str_STR[local51->header.tag+CALL_TP_str_STR_offset])(local51));
  4731.       local53 = STR_plus_STR_STR(local52, ((STR) &inthecall_5299));
  4732.       local54 = STR_plus_STR_STR(local53, CALL_SIG_str_STR(self));
  4733.       local55 = STR_plus_STR_STR(local54, ((STR) &doesntconformto_5300));
  4734.       local56 = brat_5279;
  4735.       local57 = STR_plus_STR_STR(local55, (*TP_str_STR[local56->header.tag+TP_str_STR_offset])(local56));
  4736.       local58 = STR_plus_STR_STR(local57, ((STR) &intheboundroutin_5301));
  4737.       local59 = STR_plus_STR_STR(local58, TP_ITER_str_STR(((TP_ITER) st)));
  4738.       PROG_err_STR(local49, STR_plus_STR_STR(local59, ((STR) &name_5302)));
  4739.       return ((SIG) NULL);
  4740.      }
  4741.     }
  4742.    }
  4743.    after_loop_5294: ;
  4744.    return SIG_bound_iter_c(((SIG) NULL), ((TP_ITER) st)); break;
  4745.   default: ;
  4746.    fprintf(stderr,"No applicable type in typecase ./call.sa:201:14\n");
  4747.    exit(16);
  4748.  }
  4749.  return ((SIG) NULL);
  4750. }
  4751.  
  4752.  
  4753. AM_EXPR ARRAYAM_EXPR_age(ARRAYAM_EXPR self, INT ind_5303) {
  4754.  AM_EXPR noname5304;
  4755.  BOOL local0;
  4756.  INT local1;
  4757.  INT local2;
  4758.  if ((!((self==((ARRAYAM_EXPR) NULL))))) {
  4759.   local1 = 0;
  4760.   local2 = (self->asize);
  4761.   local0 = INT_is_bet_INT_I(ind_5303, local1, (c_INT_minus_INT_INT_chk(local2,1)));
  4762.  } else {
  4763.   local0 = FALSE;
  4764.  }
  4765.  if (!(local0)) {
  4766.   fprintf(stderr,"Violation of precondition ../Library/aref.sa:33:7\n");
  4767.   exit(16);
  4768.  }
  4769.  if (ind_5303<0||ind_5303>=self->asize) {
  4770.   fprintf(stderr,"Index out of bounds ../Library/aref.sa:33:7\n");
  4771.   exit(16);
  4772.  }
  4773.  return self->arr_part[ind_5303];
  4774. }
  4775.  
  4776.  
  4777. SIG TRANS_call_expr__5305(TRANS self, TR_CALL_EXPR e_5306, CALL_SIG call_sig, ARRAYAM_EXPR args_5307, BOOL in_class) {
  4778.  SIG noname5308;
  4779.  TR_EXPR a_5309;
  4780.  INT i = ((INT) 0);
  4781.  AM_EXPR ce = ((AM_EXPR) NULL);
  4782.  CALL_TP ct;
  4783.  SIG r_5310;
  4784.  TP at_5311;
  4785.  BOOL local0;
  4786.  INT local1;
  4787.  INT local2;
  4788.  AM_EXPR local3;
  4789.  TR_EXPR local4;
  4790.  INT local5;
  4791.  TR_EXPR local6;
  4792.  if ((args_5307==((ARRAYAM_EXPR) NULL))) {
  4793.   if ((!((e_5306->args_7==((TR_EXPR) NULL))))) {
  4794.    PROG_err_STR(self->prog, ((STR) &CompilererrorTRA_5312));
  4795.    return ((SIG) NULL);
  4796.   }
  4797.  }
  4798.  else {
  4799.   local1 = ARRAYAM_EXPR_siz(args_5307);
  4800.   if ((local1!=TR_CALL_EXPR_arg(e_5306))) {
  4801.    local0 = TRUE;
  4802.   } else {
  4803.    local2 = ARRAYCALL_TP_siz(call_sig->args_7);
  4804.    local0 = (local2!=TR_CALL_EXPR_arg(e_5306));
  4805.   }
  4806.   if (local0) {
  4807.    PROG_err_STR(self->prog, ((STR) &CompilererrorTRA_5313));
  4808.    return ((SIG) NULL);
  4809.   }
  4810.  }
  4811.  a_5309 = e_5306->args_7;
  4812.  i = 0;
  4813.  while (1) {
  4814.   if ((!((a_5309==((TR_EXPR) NULL))))) {
  4815.   }
  4816.   else {
  4817.    goto after_loop;
  4818.   }
  4819.   ct = TRANS_call_tp_of(self, a_5309);
  4820.   if ((ct==((CALL_TP) NULL))) {
  4821.    ce = TRANS_transform__5198(self, a_5309, ((TP) NULL));
  4822.    if ((ce==((AM_EXPR) NULL))) {
  4823.     return ((SIG) NULL);
  4824.    }
  4825.    else {
  4826.     local3 = ce;
  4827.     ct = ((CALL_TP) (*AM_EXPR_tp_TP[local3->header.tag+AM_EXPR_tp_TP_offset])(local3));
  4828.    }
  4829.   }
  4830.   else {
  4831.    ce = ((AM_EXPR) NULL);
  4832.   }
  4833.   ARRAYCALL_TP_ase(call_sig->args_7, i, ct);
  4834.   ARRAYAM_EXPR_ase(args_5307, i, ce);
  4835.   local4 = a_5309;
  4836.   a_5309 = (*TR_EXPR_next_TR_EXPR[local4->header.tag+TR_EXPR_next_TR_EXPR_offset])(local4);
  4837.   i = (c_INT_plus_INT_INT_chk(i,1));
  4838.  }
  4839.  after_loop: ;
  4840.  PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5306));
  4841.  r_5310 = CALL_SIG_lookup_(call_sig, in_class);
  4842.  if ((r_5310==((SIG) NULL))) {
  4843.   return ((SIG) NULL);
  4844.  }
  4845.  local5 = ARRAYTP_size_INT(r_5310->args_7);
  4846.  if ((local5!=TR_CALL_EXPR_arg(e_5306))) {
  4847.   PROG_err_STR(self->prog, ((STR) &CompilererrorTRA_5315));
  4848.   return ((SIG) NULL);
  4849.  }
  4850.  a_5309 = e_5306->args_7;
  4851.  i = 0;
  4852.  while (1) {
  4853.   if ((!((a_5309==((TR_EXPR) NULL))))) {
  4854.   }
  4855.   else {
  4856.    goto after_loop_5316;
  4857.   }
  4858.   ce = ARRAYAM_EXPR_age(args_5307, i);
  4859.   at_5311 = ARRAYTP_aget_INT_TP(r_5310->args_7, i);
  4860.   if ((ce==((AM_EXPR) NULL))) {
  4861.    ce = TRANS_transform__5198(self, a_5309, at_5311);
  4862.   }
  4863.   if ((ce==((AM_EXPR) NULL))) {
  4864.    return ((SIG) NULL);
  4865.   }
  4866.   ARRAYAM_EXPR_ase(args_5307, i, ce);
  4867.   local6 = a_5309;
  4868.   a_5309 = (*TR_EXPR_next_TR_EXPR[local6->header.tag+TR_EXPR_next_TR_EXPR_offset])(local6);
  4869.   i = (c_INT_plus_INT_INT_chk(i,1));
  4870.  }
  4871.  after_loop_5316: ;
  4872.  return r_5310;
  4873. }
  4874.  
  4875.  
  4876. void TRANS_ext_call_c(TRANS self, TR_CALL_EXPR e_5318) {
  4877.  PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5318));
  4878.  PROG_err_STR(self->prog, ((STR) &Externalcallsmay));
  4879. }
  4880.  
  4881.  
  4882. ELT IMPL_elt_with_si(IMPL self, SIG s_5319) {
  4883.  ELT noname5320;
  4884.  return ELT_TBL_elt_with(self->elts, s_5319);
  4885. }
  4886.  
  4887.  
  4888. IDENT TRANS_name_for_e(TRANS self, ELT el) {
  4889.  IDENT noname5321 = IDENT_zero;
  4890.  PROG local0;
  4891.  TP local1;
  4892.  STR local2;
  4893.  STR local3;
  4894.  if (ELT_is_abstract_BOOL(el)) {
  4895.   return el->sig_6->name_19;
  4896.  }
  4897.  local0 = self->prog;
  4898.  local1 = ELT_tp_TP(el);
  4899.  local2 = (*TP_str_STR[local1->header.tag+TP_str_STR_offset])(local1);
  4900.  local3 = STR_plus_CHAR_STR(local2, '_');
  4901.  return PROG_ident_for_S(local0, STR_plus_STR_STR(local3, el->sig_6->name_19.str_4));
  4902. }
  4903.  
  4904.  
  4905. AM_EXT_CALL_EXPR AM_EXT_CALL_EXPR_5322(AM_EXT_CALL_EXPR self, INT nargs, SFILE_ID source_5323) {
  4906.  AM_EXT_CALL_EXPR noname5324;
  4907.  AM_EXT_CALL_EXPR r_5325;
  4908.  AM_EXT_CALL_EXPR local0;
  4909.  local0 = ((AM_EXT_CALL_EXPR) sbi_arr_alloc(sizeof(struct AM_EXT_CALL_EXPR_struct), AM_EXT_CALL_EXPR_tag, sizeof(AM_EXPR) , nargs));
  4910.  local0->asize = nargs;
  4911.  r_5325 = local0;
  4912.  r_5325->source_38 = source_5323;
  4913.  return r_5325;
  4914. }
  4915.  
  4916.  
  4917. AM_EXT_CALL_EXPR AM_EXT_CALL_EXPR_5326(AM_EXT_CALL_EXPR self, INT nargs, SFILE_ID source_5327, IDENT nm_5328) {
  4918.  AM_EXT_CALL_EXPR noname5329;
  4919.  AM_EXT_CALL_EXPR r_5330;
  4920.  r_5330 = AM_EXT_CALL_EXPR_5322(self, nargs, source_5327);
  4921.  r_5330->nm = nm_5328;
  4922.  return r_5330;
  4923. }
  4924.  
  4925.  
  4926. void AM_EXT_CALL_EXPR_5331(AM_EXT_CALL_EXPR self, INT ind_5332, AM_EXPR val_5333) {
  4927.  BOOL local0;
  4928.  INT local1;
  4929.  INT local2;
  4930.  if ((!((self==((AM_EXT_CALL_EXPR) NULL))))) {
  4931.   local1 = 0;
  4932.   local2 = (self->asize);
  4933.   local0 = INT_is_bet_INT_I(ind_5332, local1, (c_INT_minus_INT_INT_chk(local2,1)));
  4934.  } else {
  4935.   local0 = FALSE;
  4936.  }
  4937.  if (!(local0)) {
  4938.   fprintf(stderr,"Violation of precondition ../Library/aref.sa:38:7\n");
  4939.   exit(16);
  4940.  }
  4941.  if (ind_5332<0||ind_5332>=self->asize) {
  4942.   fprintf(stderr,"Index out of bounds ../Library/aref.sa:38:7\n");
  4943.   exit(16);
  4944.  }
  4945.  self->arr_part[ind_5332] = val_5333;
  4946. }
  4947.  
  4948.  
  4949. AM_ITER_CALL_EXPR AM_ITER_CALL_EXP_5334(AM_ITER_CALL_EXPR self, INT nargs, SFILE_ID source_5335) {
  4950.  AM_ITER_CALL_EXPR noname5336;
  4951.  AM_ITER_CALL_EXPR r_5337;
  4952.  AM_ITER_CALL_EXPR local0;
  4953.  local0 = ((AM_ITER_CALL_EXPR) sbi_arr_alloc(sizeof(struct AM_ITER_CALL_EXPR_struct), AM_ITER_CALL_EXPR_tag, sizeof(AM_EXPR) , nargs));
  4954.  local0->asize = nargs;
  4955.  r_5337 = local0;
  4956.  r_5337->source_38 = source_5335;
  4957.  return r_5337;
  4958. }
  4959.  
  4960.  
  4961. void AM_ITER_CALL_EXP_5338(AM_ITER_CALL_EXPR self, INT ind_5339, AM_EXPR val_5340) {
  4962.  BOOL local0;
  4963.  INT local1;
  4964.  INT local2;
  4965.  if ((!((self==((AM_ITER_CALL_EXPR) NULL))))) {
  4966.   local1 = 0;
  4967.   local2 = (self->asize);
  4968.   local0 = INT_is_bet_INT_I(ind_5339, local1, (c_INT_minus_INT_INT_chk(local2,1)));
  4969.  } else {
  4970.   local0 = FALSE;
  4971.  }
  4972.  if (!(local0)) {
  4973.   fprintf(stderr,"Violation of precondition ../Library/aref.sa:38:7\n");
  4974.   exit(16);
  4975.  }
  4976.  if (ind_5339<0||ind_5339>=self->asize) {
  4977.   fprintf(stderr,"Index out of bounds ../Library/aref.sa:38:7\n");
  4978.   exit(16);
  4979.  }
  4980.  self->arr_part[ind_5339] = val_5340;
  4981. }
  4982.  
  4983.  
  4984. void TRANS_iter_call_(TRANS self) {
  4985.  PROG_err_STR(self->prog, ((STR) &Itercallsmaynota));
  4986. }
  4987.  
  4988.  
  4989. void TRANS_iter_call__5341(TRANS self) {
  4990.  PROG_err_STR(self->prog, ((STR) &Itersmayonlybeca));
  4991. }
  4992.  
  4993.  
  4994. BOOL TRANS_contains_i(TRANS self, AM_EXPR e_5342) {
  4995.  BOOL noname5343 = ((BOOL) 0);
  4996.  AM_ROUT_CALL_EXPR noname5344;
  4997.  AM_ARRAY_EXPR noname5345;
  4998.  AM_BND_CREATE_EXPR noname5346;
  4999.  AM_BND_ROUT_CALL noname5347;
  5000.  AM_EXT_CALL_EXPR noname5348;
  5001.  AM_EXPR local0;
  5002.  AM_EXPR local1;
  5003.  AM_EXPR local2;
  5004.  AM_EXPR local3;
  5005.  BOOL local4;
  5006.  BOOL local5;
  5007.  BOOL local6;
  5008.  AM_EXPR local7;
  5009.  if ((e_5342==((AM_EXPR) NULL))) {
  5010.   return ((BOOL) 0);
  5011.  }
  5012.  if (e_5342==NULL) {
  5013.  } else
  5014.  switch (e_5342->header.tag) {
  5015.   case AM_ROUT_CALL_EXPR_tag:
  5016.    {
  5017.     struct AM_ROUT_CALL_EXP_frame_struct temp5349_0;
  5018.     AM_ROUT_CALL_EXP_frame 
  5019.     noname5350 = &temp5349_0;
  5020.     noname5350->state = 0;
  5021.     while (1) {
  5022.      if (noname5350->state == 0) {
  5023.       noname5344 = ((AM_ROUT_CALL_EXPR) e_5342);
  5024.       noname5350->arg0 = noname5344;
  5025.      }
  5026.      local0 = AM_ROUT_CALL_EXP(noname5350);
  5027.      if (noname5350->state == -1) goto after_loop;
  5028.      if (TRANS_contains_i(self, local0)) {
  5029.       return TRUE;
  5030.      }
  5031.     }
  5032.    }
  5033.    after_loop: ; break;
  5034.   case AM_ITER_CALL_EXPR_tag:
  5035.    return TRUE; break;
  5036.   case AM_ARRAY_EXPR_tag:
  5037.    {
  5038.     struct AM_ARRAY_EXPR_el_frame_struct temp5352_0;
  5039.     AM_ARRAY_EXPR_el_frame 
  5040.     noname5353 = &temp5352_0;
  5041.     noname5353->state = 0;
  5042.     while (1) {
  5043.      if (noname5353->state == 0) {
  5044.       noname5345 = ((AM_ARRAY_EXPR) e_5342);
  5045.       noname5353->arg0 = noname5345;
  5046.      }
  5047.      local1 = AM_ARRAY_EXPR_el(noname5353);
  5048.      if (noname5353->state == -1) goto after_loop_5351;
  5049.      if (TRANS_contains_i(self, local1)) {
  5050.       return TRUE;
  5051.      }
  5052.     }
  5053.    }
  5054.    after_loop_5351: ; break;
  5055.   case AM_BND_CREATE_EXPR_tag:
  5056.    {
  5057.     struct AM_BND_CREATE_EX_5356_frame_struct temp5355_0;
  5058.     AM_BND_CREATE_EX_5356_frame 
  5059.     noname5357 = &temp5355_0;
  5060.     noname5357->state = 0;
  5061.     while (1) {
  5062.      if (noname5357->state == 0) {
  5063.       noname5346 = ((AM_BND_CREATE_EXPR) e_5342);
  5064.       noname5357->arg0 = noname5346;
  5065.      }
  5066.      local2 = AM_BND_CREATE_EX_5356(noname5357);
  5067.      if (noname5357->state == -1) goto after_loop_5354;
  5068.      if (TRANS_contains_i(self, local2)) {
  5069.       return TRUE;
  5070.      }
  5071.     }
  5072.    }
  5073.    after_loop_5354: ; break;
  5074.   case AM_BND_ROUT_CALL_tag:
  5075.    {
  5076.     struct AM_BND_ROUT_CALL_3884_frame_struct temp5359_0;
  5077.     AM_BND_ROUT_CALL_3884_frame 
  5078.     noname5360 = &temp5359_0;
  5079.     noname5360->state = 0;
  5080.     while (1) {
  5081.      if (noname5360->state == 0) {
  5082.       noname5347 = ((AM_BND_ROUT_CALL) e_5342);
  5083.       noname5360->arg0 = noname5347;
  5084.      }
  5085.      local3 = AM_BND_ROUT_CALL_3884(noname5360);
  5086.      if (noname5360->state == -1) goto after_loop_5358;
  5087.      if (TRANS_contains_i(self, local3)) {
  5088.       return TRUE;
  5089.      }
  5090.     }
  5091.    }
  5092.    after_loop_5358: ; break;
  5093.   case AM_BND_ITER_CALL_tag:
  5094.    return TRUE; break;
  5095.   case AM_IF_EXPR_tag:
  5096.    if (TRANS_contains_i(self, ((AM_IF_EXPR) e_5342)->test_40)) {
  5097.     local5 = TRUE;
  5098.    } else {
  5099.     local5 = TRANS_contains_i(self, ((AM_IF_EXPR) e_5342)->if_true);
  5100.    }
  5101.    if (local5) {
  5102.     local4 = TRUE;
  5103.    } else {
  5104.     local4 = TRANS_contains_i(self, ((AM_IF_EXPR) e_5342)->if_false);
  5105.    }
  5106.    if (local4) {
  5107.     return TRUE;
  5108.    } break;
  5109.   case AM_IS_VOID_EXPR_tag:
  5110.    if (TRANS_contains_i(self, ((AM_IS_VOID_EXPR) e_5342)->arg_51)) {
  5111.     return TRUE;
  5112.    } break;
  5113.   case AM_NEW_EXPR_tag:
  5114.    if (TRANS_contains_i(self, ((AM_NEW_EXPR) e_5342)->asz)) {
  5115.     return TRUE;
  5116.    } break;
  5117.   case AM_ATTR_EXPR_tag:
  5118.    if (TRANS_contains_i(self, ((AM_ATTR_EXPR) e_5342)->ob)) {
  5119.     return TRUE;
  5120.    } break;
  5121.   case AM_ARR_EXPR_tag:
  5122.    if (TRANS_contains_i(self, ((AM_ARR_EXPR) e_5342)->ob)) {
  5123.     local6 = TRUE;
  5124.    } else {
  5125.     local6 = TRANS_contains_i(self, ((AM_ARR_EXPR) e_5342)->ind);
  5126.    }
  5127.    if (local6) {
  5128.     return TRUE;
  5129.    } break;
  5130.   case AM_EXT_CALL_EXPR_tag:
  5131.    {
  5132.     struct AM_EXT_CALL_EXPR_3901_frame_struct temp5362_0;
  5133.     AM_EXT_CALL_EXPR_3901_frame 
  5134.     noname5363 = &temp5362_0;
  5135.     noname5363->state = 0;
  5136.     while (1) {
  5137.      if (noname5363->state == 0) {
  5138.       noname5348 = ((AM_EXT_CALL_EXPR) e_5342);
  5139.       noname5363->arg0 = noname5348;
  5140.      }
  5141.      local7 = AM_EXT_CALL_EXPR_3901(noname5363);
  5142.      if (noname5363->state == -1) goto after_loop_5361;
  5143.      if (TRANS_contains_i(self, local7)) {
  5144.       return TRUE;
  5145.      }
  5146.     }
  5147.    }
  5148.    after_loop_5361: ; break;
  5149.   default: ;
  5150.  }
  5151.  return FALSE;
  5152. }
  5153.  
  5154.  
  5155. void TRANS_iter_call__5364(TRANS self, INT i) {
  5156.  PROG local0;
  5157.  STR local1;
  5158.  if ((i==0)) {
  5159.   PROG_err_STR(self->prog, ((STR) &Theexpressionspe));
  5160.  }
  5161.  else {
  5162.   local0 = self->prog;
  5163.   local1 = STR_plus_INT_STR(((STR) &Theexpressionfor), i);
  5164.   PROG_err_STR(local0, STR_plus_STR_STR(local1, ((STR) &inthisitercallit)));
  5165.  }
  5166. }
  5167.  
  5168.  
  5169. BOOL FLISTAM_LOCAL_EX_5365(FLISTAM_LOCAL_EXPR self) {
  5170.  BOOL noname5366 = ((BOOL) 0);
  5171.  INT local0;
  5172.  local0 = FLISTAM_LOCAL_EX(self);
  5173.  return (local0==0);
  5174.  if (!FLISTAM_LOCAL_EX_3769(self)) {
  5175.   fprintf(stderr,"Failed invariant FLIST{AM_LOCAL_EXPR}::invariant:BOOL ../Library/flist.sa:113:11\n");
  5176.   exit(16);
  5177.  }
  5178. }
  5179.  
  5180.  
  5181. void FLISTAM_LOCAL_EX_5367(FLISTAM_LOCAL_EXPR self) {
  5182.  AM_LOCAL_EXPR nil = ((AM_LOCAL_EXPR) NULL);
  5183.  FLISTAM_LOCAL_EXPR noname5368;
  5184.  if (!((!((self==((FLISTAM_LOCAL_EXPR) NULL)))))) {
  5185.   fprintf(stderr,"Violation of precondition ../Library/aref.sa:43:9\n");
  5186.   exit(16);
  5187.  }
  5188.  {
  5189.   struct FLISTAM_LOCAL_EX_5370_frame_struct temp5369_0;
  5190.   FLISTAM_LOCAL_EX_5370_frame 
  5191.   noname5371 = &temp5369_0;
  5192.   noname5371->state = 0;
  5193.   while (1) {
  5194.    if (noname5371->state == 0) {
  5195.     noname5368 = self;
  5196.     noname5371->arg0 = noname5368;
  5197.    }
  5198.    noname5371->arg1 = nil;
  5199.    FLISTAM_LOCAL_EX_5370(noname5371);
  5200.    if (noname5371->state == -1) goto after_loop;
  5201.    0 /* No return value from iter call */;
  5202.   }
  5203.  }
  5204.  after_loop: ;
  5205. }
  5206.  
  5207.  
  5208. void FLISTAM_LOCAL_EX_5372(FLISTAM_LOCAL_EXPR self) {
  5209.  if (FLISTAM_LOCAL_EX_5365(self)) {
  5210.   return;
  5211.  }
  5212.  else {
  5213.   FLISTAM_LOCAL_EX_5367(self);
  5214.   self->loc_17 = 0;
  5215.  }
  5216.  if (!FLISTAM_LOCAL_EX_3769(self)) {
  5217.   fprintf(stderr,"Failed invariant FLIST{AM_LOCAL_EXPR}::invariant:BOOL ../Library/flist.sa:117:8\n");
  5218.   exit(16);
  5219.  }
  5220. }
  5221.  
  5222.  
  5223. void FLISTAM_LOCAL_EX_5373(FLISTAM_LOCAL_EXPR self, INT ind_5374, AM_LOCAL_EXPR val_5375) {
  5224.  BOOL local0;
  5225.  INT local1;
  5226.  INT local2;
  5227.  if ((!((self==((FLISTAM_LOCAL_EXPR) NULL))))) {
  5228.   local1 = 0;
  5229.   local2 = (self->asize);
  5230.   local0 = INT_is_bet_INT_I(ind_5374, local1, (c_INT_minus_INT_INT_chk(local2,1)));
  5231.  } else {
  5232.   local0 = FALSE;
  5233.  }
  5234.  if (!(local0)) {
  5235.   fprintf(stderr,"Violation of precondition ../Library/aref.sa:38:7\n");
  5236.   exit(16);
  5237.  }
  5238.  if (ind_5374<0||ind_5374>=self->asize) {
  5239.   fprintf(stderr,"Index out of bounds ../Library/aref.sa:38:7\n");
  5240.   exit(16);
  5241.  }
  5242.  self->arr_part[ind_5374] = val_5375;
  5243. }
  5244.  
  5245.  
  5246. void FLISTAM_LOCAL_EX_5376(FLISTAM_LOCAL_EXPR self, INT ind_5377, AM_LOCAL_EXPR val_5378) {
  5247.  BOOL local0;
  5248.  INT local1;
  5249.  if ((!((self==((FLISTAM_LOCAL_EXPR) NULL))))) {
  5250.   local1 = 0;
  5251.   local0 = INT_is_bet_INT_I(ind_5377, local1, (c_INT_minus_INT_INT_chk(self->loc_17,1)));
  5252.  } else {
  5253.   local0 = FALSE;
  5254.  }
  5255.  if (!(local0)) {
  5256.   fprintf(stderr,"Violation of precondition ../Library/flist.sa:73:7\n");
  5257.   exit(16);
  5258.  }
  5259.  FLISTAM_LOCAL_EX_5373(self, ind_5377, val_5378);
  5260.  if (!FLISTAM_LOCAL_EX_3769(self)) {
  5261.   fprintf(stderr,"Failed invariant FLIST{AM_LOCAL_EXPR}::invariant:BOOL ../Library/flist.sa:73:7\n");
  5262.   exit(16);
  5263.  }
  5264. }
  5265.  
  5266.  
  5267. FLISTAM_LOCAL_EXPR FLISTAM_LOCAL_EX_5379(FLISTAM_LOCAL_EXPR self, AM_LOCAL_EXPR e_5380) {
  5268.  FLISTAM_LOCAL_EXPR noname5381;
  5269.  FLISTAM_LOCAL_EXPR r_5382 = ((FLISTAM_LOCAL_EXPR) NULL);
  5270.  FLISTAM_LOCAL_EXPR noname5383;
  5271.  FLISTAM_LOCAL_EXPR noname5384;
  5272.  FLISTAM_LOCAL_EXPR local0;
  5273.  INT local1;
  5274.  FLISTAM_LOCAL_EXPR local2;
  5275.  INT local3;
  5276.  AM_LOCAL_EXPR local4;
  5277.  INT local5;
  5278.  if ((self==((FLISTAM_LOCAL_EXPR) NULL))) {
  5279.   local0 = ((FLISTAM_LOCAL_EXPR) sbi_arr_alloc(sizeof(struct FLISTAM_LOCAL_EXPR_struct), FLISTAM_LOCAL_EXPR_tag, sizeof(AM_LOCAL_EXPR) , 5));
  5280.   local0->asize = 5;
  5281.   r_5382 = local0;
  5282.  }
  5283.  else {
  5284.   local1 = self->loc_17;
  5285.   if ((local1<(self->asize))) {
  5286.    r_5382 = self;
  5287.   }
  5288.   else {
  5289.    local3 = 2;
  5290.    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)))));
  5291.    local2->asize = (c_INT_times_INT_INT_chk(local3,(self->asize)));
  5292.    r_5382 = local2;
  5293.    r_5382->loc_17 = self->loc_17;
  5294.    {
  5295.     struct FLISTAM_LOCAL_EX_4237_frame_struct temp5385_0;
  5296.     FLISTAM_LOCAL_EX_4237_frame 
  5297.     noname5386 = &temp5385_0;
  5298.     struct FLISTAM_LOCAL_EX_5370_frame_struct temp5385_1;
  5299.     FLISTAM_LOCAL_EX_5370_frame 
  5300.     noname5387 = &temp5385_1;
  5301.     noname5386->state = 0;
  5302.     noname5387->state = 0;
  5303.     while (1) {
  5304.      if (noname5387->state == 0) {
  5305.       noname5384 = r_5382;
  5306.       noname5387->arg0 = noname5384;
  5307.      }
  5308.      if (noname5386->state == 0) {
  5309.       noname5383 = self;
  5310.       noname5386->arg0 = noname5383;
  5311.      }
  5312.      local4 = FLISTAM_LOCAL_EX_4237(noname5386);
  5313.      if (noname5386->state == -1) goto after_loop;
  5314.      noname5387->arg1 = local4;
  5315.      FLISTAM_LOCAL_EX_5370(noname5387);
  5316.      if (noname5387->state == -1) goto after_loop;
  5317.      0 /* No return value from iter call */;
  5318.     }
  5319.    }
  5320.    after_loop: ;
  5321.    FLISTAM_LOCAL_EX_5372(self);
  5322.   }
  5323.  }
  5324.  r_5382->loc_17 = (c_INT_plus_INT_INT_chk(r_5382->loc_17,1));
  5325.  local5 = (c_INT_minus_INT_INT_chk(r_5382->loc_17,1));
  5326.  FLISTAM_LOCAL_EX_5376(r_5382, local5, e_5380);
  5327.  return r_5382;
  5328.  if (!FLISTAM_LOCAL_EX_3769(self)) {
  5329.   fprintf(stderr,"Failed invariant FLIST{AM_LOCAL_EXPR}::invariant:BOOL ../Library/flist.sa:79:7\n");
  5330.   exit(16);
  5331.  }
  5332. }
  5333.  
  5334.  
  5335. void TRANS_add_local_(TRANS self, AM_LOCAL_EXPR l) {
  5336.  OUT local0;
  5337.  if ((self->cur_rout==((AM_ROUT_DEF) NULL))) {
  5338.   local0 = OUT_create_OUT(((OUT) NULL));
  5339.   OUT_plus_STR(local0, ((STR) &CompilererrorTRA_5388));
  5340.   return;
  5341.  }
  5342.  self->cur_rout->locals_57 = FLISTAM_LOCAL_EX_5379(self->cur_rout->locals_57, l);
  5343.  if ((!((l->name_19.str_4==(STR)0)))) {
  5344.   self->active_locals = FLISTAM_LOCAL_EX_5379(self->active_locals, l);
  5345.  }
  5346. }
  5347.  
  5348.  
  5349. AM_ASSIGN_STMT AM_ASSIGN_STMT_c(AM_ASSIGN_STMT self, SFILE_ID source_5389) {
  5350.  AM_ASSIGN_STMT noname5390;
  5351.  AM_ASSIGN_STMT r_5391;
  5352.  AM_ASSIGN_STMT local0;
  5353.  local0 = ((AM_ASSIGN_STMT) sbi_alloc(sizeof(struct AM_ASSIGN_STMT_struct), AM_ASSIGN_STMT_tag));
  5354.  r_5391 = local0;
  5355.  r_5391->source_38 = source_5389;
  5356.  return r_5391;
  5357. }
  5358.  
  5359.  
  5360. OUT OUT_plus_INT_OUT(OUT self, INT i) {
  5361.  OUT noname5392;
  5362.  c_out_str(((INT_str_STR(i)==NULL)?NULL:INT_str_STR(i)->arr_part));
  5363.  return self;
  5364. }
  5365.  
  5366.  
  5367. AM_ITER_CALL_EXPR TRANS_call_fix_i(TRANS self, AM_ITER_CALL_EXPR ir) {
  5368.  AM_ITER_CALL_EXPR noname5393;
  5369.  AM_LOCAL_EXPR nl_5394;
  5370.  AM_ASSIGN_STMT ass;
  5371.  INT i = ((INT) 0);
  5372.  BOOL once = ((BOOL) 0);
  5373.  OUT local0;
  5374.  OUT local1;
  5375.  AM_LOCAL_EXPR local2;
  5376.  SFILE_ID local3;
  5377.  IDENT local4;
  5378.  AM_EXPR local5;
  5379.  INT local6;
  5380.  OUT local7;
  5381.  OUT local8;
  5382.  OUT local9;
  5383.  AM_LOCAL_EXPR local10;
  5384.  SFILE_ID local11;
  5385.  IDENT local12;
  5386.  AM_EXPR local13;
  5387.  INT local14;
  5388.  AM_STMT local15;
  5389.  if (!((!((ir==((AM_ITER_CALL_EXPR) NULL)))))) {
  5390.   fprintf(stderr,"Violation of precondition ./trans.sa:1275:16\n");
  5391.   exit(16);
  5392.  }
  5393.  if (self->in_constant) {
  5394.   TRANS_iter_call_(self);
  5395.   return ((AM_ITER_CALL_EXPR) NULL);
  5396.  }
  5397.  if ((self->cur_loop==((AM_LOOP_STMT) NULL))) {
  5398.   TRANS_iter_call__5341(self);
  5399.   return ((AM_ITER_CALL_EXPR) NULL);
  5400.  }
  5401.  ir->lp = self->cur_loop;
  5402.  if ((AM_ITER_CALL_EXP_4468(ir, 0)==((AM_EXPR) NULL))) {
  5403.   local0 = OUT_create_OUT(((OUT) NULL));
  5404.   OUT_plus_STR(local0, ((STR) &CompilererrorTRA_5395));
  5405.   return ((AM_ITER_CALL_EXPR) NULL);
  5406.  }
  5407.  if ((ir->fun==((SIG) NULL))) {
  5408.   local1 = OUT_create_OUT(((OUT) NULL));
  5409.   OUT_plus_STR(local1, ((STR) &CompilererrorTRA_5396));
  5410.   return ((AM_ITER_CALL_EXPR) NULL);
  5411.  }
  5412.  if (TRANS_contains_i(self, AM_ITER_CALL_EXP_4468(ir, 0))) {
  5413.   TRANS_iter_call__5364(self, 0);
  5414.   return ((AM_ITER_CALL_EXPR) NULL);
  5415.  }
  5416.  local2 = ((AM_LOCAL_EXPR) NULL);
  5417.  local3 = ir->source_38;
  5418.  local4 = IDENT_zero;
  5419.  local5 = AM_ITER_CALL_EXP_4468(ir, 0);
  5420.  nl_5394 = AM_LOCAL_EXPR_cr(local2, local3, local4, (*AM_EXPR_tp_TP[local5->header.tag+AM_EXPR_tp_TP_offset])(local5));
  5421.  TRANS_add_local_(self, nl_5394);
  5422.  ass = AM_ASSIGN_STMT_c(((AM_ASSIGN_STMT) NULL), ir->source_38);
  5423.  ass->dest = ((AM_EXPR) nl_5394);
  5424.  ass->src_42 = AM_ITER_CALL_EXP_4468(ir, 0);
  5425.  AM_ITER_CALL_EXP_5338(ir, 0, ((AM_EXPR) nl_5394));
  5426.  ir->init = ((AM_STMT) ass);
  5427.  i = 0;
  5428.  while (1) {
  5429.   local6 = AM_ITER_CALL_EXP_4466(ir);
  5430.   if ((i<(c_INT_minus_INT_INT_chk(local6,1)))) {
  5431.   }
  5432.   else {
  5433.    goto after_loop;
  5434.   }
  5435.   if ((AM_ITER_CALL_EXP_4468(ir, (c_INT_plus_INT_INT_chk(i,1)))==((AM_EXPR) NULL))) {
  5436.    local7 = OUT_create_OUT(((OUT) NULL));
  5437.    local8 = OUT_plus_STR_OUT(local7, ((STR) &CompilererrorTRA_5398));
  5438.    local9 = OUT_plus_INT_OUT(local8, (c_INT_plus_INT_INT_chk(i,1)));
  5439.    OUT_plus_STR(local9, ((STR) &void_5399));
  5440.    return ((AM_ITER_CALL_EXPR) NULL);
  5441.   }
  5442.   once = FALSE;
  5443.   if ((ir->fun->hot==((ARRAYBOOL) NULL))) {
  5444.    once = TRUE;
  5445.   }
  5446.   else {
  5447.    if ((!(ARRAYBOOL_aget_I(ir->fun->hot, i)))) {
  5448.     once = TRUE;
  5449.    }
  5450.   }
  5451.   if (once) {
  5452.    if (TRANS_contains_i(self, AM_ITER_CALL_EXP_4468(ir, (c_INT_plus_INT_INT_chk(i,1))))) {
  5453.     TRANS_iter_call__5364(self, (c_INT_plus_INT_INT_chk(i,1)));
  5454.     return ((AM_ITER_CALL_EXPR) NULL);
  5455.    }
  5456.    local10 = ((AM_LOCAL_EXPR) NULL);
  5457.    local11 = ir->source_38;
  5458.    local12 = IDENT_zero;
  5459.    local13 = AM_ITER_CALL_EXP_4468(ir, (c_INT_plus_INT_INT_chk(i,1)));
  5460.    nl_5394 = AM_LOCAL_EXPR_cr(local10, local11, local12, (*AM_EXPR_tp_TP[local13->header.tag+AM_EXPR_tp_TP_offset])(local13));
  5461.    TRANS_add_local_(self, nl_5394);
  5462.    ass = AM_ASSIGN_STMT_c(((AM_ASSIGN_STMT) NULL), ir->source_38);
  5463.    ass->dest = ((AM_EXPR) nl_5394);
  5464.    ass->src_42 = AM_ITER_CALL_EXP_4468(ir, (c_INT_plus_INT_INT_chk(i,1)));
  5465.    local14 = (c_INT_plus_INT_INT_chk(i,1));
  5466.    AM_ITER_CALL_EXP_5338(ir, local14, ((AM_EXPR) nl_5394));
  5467.    if ((ir->init==((AM_STMT) NULL))) {
  5468.     ir->init = ((AM_STMT) ass);
  5469.    }
  5470.    else {
  5471.     local15 = ir->init;
  5472.     (*AM_STMT_append_A[local15->header.tag+AM_STMT_append_A_offset])(local15, ((AM_STMT) ass));
  5473.    }
  5474.   }
  5475.   i = (c_INT_plus_INT_INT_chk(i,1));
  5476.  }
  5477.  after_loop: ;
  5478.  self->cur_loop->its_60 = FLISTAM_ITER_CAL_4835(self->cur_loop->its_60, ir);
  5479.  return ir;
  5480. }
  5481.  
  5482.  
  5483. AM_ROUT_CALL_EXPR AM_ROUT_CALL_EXP_5400(AM_ROUT_CALL_EXPR self, INT nargs, SFILE_ID source_5401) {
  5484.  AM_ROUT_CALL_EXPR noname5402;
  5485.  AM_ROUT_CALL_EXPR r_5403;
  5486.  AM_ROUT_CALL_EXPR local0;
  5487.  local0 = ((AM_ROUT_CALL_EXPR) sbi_arr_alloc(sizeof(struct AM_ROUT_CALL_EXPR_struct), AM_ROUT_CALL_EXPR_tag, sizeof(AM_EXPR) , nargs));
  5488.  local0->asize = nargs;
  5489.  r_5403 = local0;
  5490.  r_5403->source_38 = source_5401;
  5491.  return r_5403;
  5492. }
  5493.  
  5494.  
  5495. void AM_ROUT_CALL_EXP_5404(AM_ROUT_CALL_EXPR self, INT ind_5405, AM_EXPR val_5406) {
  5496.  BOOL local0;
  5497.  INT local1;
  5498.  INT local2;
  5499.  if ((!((self==((AM_ROUT_CALL_EXPR) NULL))))) {
  5500.   local1 = 0;
  5501.   local2 = (self->asize);
  5502.   local0 = INT_is_bet_INT_I(ind_5405, local1, (c_INT_minus_INT_INT_chk(local2,1)));
  5503.  } else {
  5504.   local0 = FALSE;
  5505.  }
  5506.  if (!(local0)) {
  5507.   fprintf(stderr,"Violation of precondition ../Library/aref.sa:38:7\n");
  5508.   exit(16);
  5509.  }
  5510.  if (ind_5405<0||ind_5405>=self->asize) {
  5511.   fprintf(stderr,"Index out of bounds ../Library/aref.sa:38:7\n");
  5512.   exit(16);
  5513.  }
  5514.  self->arr_part[ind_5405] = val_5406;
  5515. }
  5516.  
  5517.  
  5518. void TRANS_bnd_rout_c(TRANS self) {
  5519.  PROG_err_STR(self->prog, ((STR) &Boundroutinecall));
  5520. }
  5521.  
  5522.  
  5523. AM_BND_ROUT_CALL AM_BND_ROUT_CALL_5407(AM_BND_ROUT_CALL self, INT nargs, SFILE_ID source_5408) {
  5524.  AM_BND_ROUT_CALL noname5409;
  5525.  AM_BND_ROUT_CALL r_5410;
  5526.  AM_BND_ROUT_CALL local0;
  5527.  local0 = ((AM_BND_ROUT_CALL) sbi_arr_alloc(sizeof(struct AM_BND_ROUT_CALL_struct), AM_BND_ROUT_CALL_tag, sizeof(AM_EXPR) , nargs));
  5528.  local0->asize = nargs;
  5529.  r_5410 = local0;
  5530.  r_5410->source_38 = source_5408;
  5531.  return r_5410;
  5532. }
  5533.  
  5534.  
  5535. void AM_BND_ROUT_CALL_5411(AM_BND_ROUT_CALL self, INT ind_5412, AM_EXPR val_5413) {
  5536.  BOOL local0;
  5537.  INT local1;
  5538.  INT local2;
  5539.  if ((!((self==((AM_BND_ROUT_CALL) NULL))))) {
  5540.   local1 = 0;
  5541.   local2 = (self->asize);
  5542.   local0 = INT_is_bet_INT_I(ind_5412, local1, (c_INT_minus_INT_INT_chk(local2,1)));
  5543.  } else {
  5544.   local0 = FALSE;
  5545.  }
  5546.  if (!(local0)) {
  5547.   fprintf(stderr,"Violation of precondition ../Library/aref.sa:38:7\n");
  5548.   exit(16);
  5549.  }
  5550.  if (ind_5412<0||ind_5412>=self->asize) {
  5551.   fprintf(stderr,"Index out of bounds ../Library/aref.sa:38:7\n");
  5552.   exit(16);
  5553.  }
  5554.  self->arr_part[ind_5412] = val_5413;
  5555. }
  5556.  
  5557.  
  5558. AM_BND_ITER_CALL AM_BND_ITER_CALL_5414(AM_BND_ITER_CALL self, INT nargs, SFILE_ID source_5415) {
  5559.  AM_BND_ITER_CALL noname5416;
  5560.  AM_BND_ITER_CALL r_5417;
  5561.  AM_BND_ITER_CALL local0;
  5562.  local0 = ((AM_BND_ITER_CALL) sbi_arr_alloc(sizeof(struct AM_BND_ITER_CALL_struct), AM_BND_ITER_CALL_tag, sizeof(AM_EXPR) , nargs));
  5563.  local0->asize = nargs;
  5564.  r_5417 = local0;
  5565.  r_5417->source_38 = source_5415;
  5566.  return r_5417;
  5567. }
  5568.  
  5569.  
  5570. INT AM_BND_ITER_CALL_5418(AM_BND_ITER_CALL self) {
  5571.  INT noname5419 = ((INT) 0);
  5572.   return self->asize;
  5573.  fprintf(stderr,"Last statement wasn't return ../Library/aref.sa:20:8\n");
  5574.  exit(16);
  5575. }
  5576.  
  5577.  
  5578. void AM_BND_ITER_CALL_5420(AM_BND_ITER_CALL self, INT ind_5421, AM_EXPR val_5422) {
  5579.  BOOL local0;
  5580.  INT local1;
  5581.  INT local2;
  5582.  if ((!((self==((AM_BND_ITER_CALL) NULL))))) {
  5583.   local1 = 0;
  5584.   local2 = (self->asize);
  5585.   local0 = INT_is_bet_INT_I(ind_5421, local1, (c_INT_minus_INT_INT_chk(local2,1)));
  5586.  } else {
  5587.   local0 = FALSE;
  5588.  }
  5589.  if (!(local0)) {
  5590.   fprintf(stderr,"Violation of precondition ../Library/aref.sa:38:7\n");
  5591.   exit(16);
  5592.  }
  5593.  if (ind_5421<0||ind_5421>=self->asize) {
  5594.   fprintf(stderr,"Index out of bounds ../Library/aref.sa:38:7\n");
  5595.   exit(16);
  5596.  }
  5597.  self->arr_part[ind_5421] = val_5422;
  5598. }
  5599.  
  5600.  
  5601. void TRANS_bnd_iter_c(TRANS self) {
  5602.  PROG_err_STR(self->prog, ((STR) &Bounditercallsma));
  5603. }
  5604.  
  5605.  
  5606. void TRANS_bnd_iter_c_5423(TRANS self) {
  5607.  PROG_err_STR(self->prog, ((STR) &Bounditersmayonl));
  5608. }
  5609.  
  5610.  
  5611. INT AM_BND_ITER_CALL_5424(AM_BND_ITER_CALL self) {
  5612.  INT noname5425 = ((INT) 0);
  5613.  if ((self==((AM_BND_ITER_CALL) NULL))) {
  5614.   return 0;
  5615.  }
  5616.  return (self->asize);
  5617. }
  5618.  
  5619.  
  5620. AM_EXPR AM_BND_ITER_CALL_5426(AM_BND_ITER_CALL self, INT ind_5427) {
  5621.  AM_EXPR noname5428;
  5622.  BOOL local0;
  5623.  INT local1;
  5624.  INT local2;
  5625.  if ((!((self==((AM_BND_ITER_CALL) NULL))))) {
  5626.   local1 = 0;
  5627.   local2 = (self->asize);
  5628.   local0 = INT_is_bet_INT_I(ind_5427, local1, (c_INT_minus_INT_INT_chk(local2,1)));
  5629.  } else {
  5630.   local0 = FALSE;
  5631.  }
  5632.  if (!(local0)) {
  5633.   fprintf(stderr,"Violation of precondition ../Library/aref.sa:33:7\n");
  5634.   exit(16);
  5635.  }
  5636.  if (ind_5427<0||ind_5427>=self->asize) {
  5637.   fprintf(stderr,"Index out of bounds ../Library/aref.sa:33:7\n");
  5638.   exit(16);
  5639.  }
  5640.  return self->arr_part[ind_5427];
  5641. }
  5642.  
  5643.  
  5644. void TRANS_bnd_iter_c_5429(TRANS self, INT i) {
  5645.  PROG local0;
  5646.  STR local1;
  5647.  STR local2;
  5648.  local0 = self->prog;
  5649.  local1 = STR_plus_INT_STR(((STR) &Argument), i);
  5650.  local2 = STR_plus_STR_STR(local1, ((STR) &ofthisbounditerc));
  5651.  PROG_err_STR(local0, STR_plus_STR_STR(local2, ((STR) &aonceargumentbut)));
  5652. }
  5653.  
  5654.  
  5655. INT FLISTAM_BND_ITER_5430(FLISTAM_BND_ITER self) {
  5656.  INT noname5431 = ((INT) 0);
  5657.   return self->asize;
  5658.  fprintf(stderr,"Last statement wasn't return ../Library/aref.sa:20:8\n");
  5659.  exit(16);
  5660. }
  5661.  
  5662.  
  5663. INT FLISTAM_BND_ITER_5432(FLISTAM_BND_ITER self) {
  5664.  INT noname5433 = ((INT) 0);
  5665.  if ((self==((FLISTAM_BND_ITER) NULL))) {
  5666.   return 0;
  5667.  }
  5668.  return self->loc_17;
  5669.  if (!FLISTAM_BND_ITER_5434(self)) {
  5670.   fprintf(stderr,"Failed invariant FLIST{AM_BND_ITER_CALL_EXPR}::invariant:BOOL ../Library/flist.sa:50:7\n");
  5671.   exit(16);
  5672.  }
  5673. }
  5674.  
  5675.  
  5676. BOOL FLISTAM_BND_ITER_5435(FLISTAM_BND_ITER self) {
  5677.  BOOL noname5436 = ((BOOL) 0);
  5678.  INT local0;
  5679.  local0 = FLISTAM_BND_ITER_5432(self);
  5680.  return (local0==0);
  5681.  if (!FLISTAM_BND_ITER_5434(self)) {
  5682.   fprintf(stderr,"Failed invariant FLIST{AM_BND_ITER_CALL_EXPR}::invariant:BOOL ../Library/flist.sa:113:11\n");
  5683.   exit(16);
  5684.  }
  5685. }
  5686.  
  5687.  
  5688. void FLISTAM_BND_ITER_5437(FLISTAM_BND_ITER self) {
  5689.  AM_BND_ITER_CALL nil = ((AM_BND_ITER_CALL) NULL);
  5690.  FLISTAM_BND_ITER noname5438;
  5691.  if (!((!((self==((FLISTAM_BND_ITER) NULL)))))) {
  5692.   fprintf(stderr,"Violation of precondition ../Library/aref.sa:43:9\n");
  5693.   exit(16);
  5694.  }
  5695.  {
  5696.   struct FLISTAM_BND_ITER_5440_frame_struct temp5439_0;
  5697.   FLISTAM_BND_ITER_5440_frame 
  5698.   noname5441 = &temp5439_0;
  5699.   noname5441->state = 0;
  5700.   while (1) {
  5701.    if (noname5441->state == 0) {
  5702.     noname5438 = self;
  5703.     noname5441->arg0 = noname5438;
  5704.    }
  5705.    noname5441->arg1 = nil;
  5706.    FLISTAM_BND_ITER_5440(noname5441);
  5707.    if (noname5441->state == -1) goto after_loop;
  5708.    0 /* No return value from iter call */;
  5709.   }
  5710.  }
  5711.  after_loop: ;
  5712. }
  5713.  
  5714.  
  5715. void FLISTAM_BND_ITER_5442(FLISTAM_BND_ITER self) {
  5716.  if (FLISTAM_BND_ITER_5435(self)) {
  5717.   return;
  5718.  }
  5719.  else {
  5720.   FLISTAM_BND_ITER_5437(self);
  5721.   self->loc_17 = 0;
  5722.  }
  5723.  if (!FLISTAM_BND_ITER_5434(self)) {
  5724.   fprintf(stderr,"Failed invariant FLIST{AM_BND_ITER_CALL_EXPR}::invariant:BOOL ../Library/flist.sa:117:8\n");
  5725.   exit(16);
  5726.  }
  5727. }
  5728.  
  5729.  
  5730. void FLISTAM_BND_ITER_5443(FLISTAM_BND_ITER self, INT ind_5444, AM_BND_ITER_CALL val_5445) {
  5731.  BOOL local0;
  5732.  INT local1;
  5733.  INT local2;
  5734.  if ((!((self==((FLISTAM_BND_ITER) NULL))))) {
  5735.   local1 = 0;
  5736.   local2 = (self->asize);
  5737.   local0 = INT_is_bet_INT_I(ind_5444, local1, (c_INT_minus_INT_INT_chk(local2,1)));
  5738.  } else {
  5739.   local0 = FALSE;
  5740.  }
  5741.  if (!(local0)) {
  5742.   fprintf(stderr,"Violation of precondition ../Library/aref.sa:38:7\n");
  5743.   exit(16);
  5744.  }
  5745.  if (ind_5444<0||ind_5444>=self->asize) {
  5746.   fprintf(stderr,"Index out of bounds ../Library/aref.sa:38:7\n");
  5747.   exit(16);
  5748.  }
  5749.  self->arr_part[ind_5444] = val_5445;
  5750. }
  5751.  
  5752.  
  5753. void FLISTAM_BND_ITER_5446(FLISTAM_BND_ITER self, INT ind_5447, AM_BND_ITER_CALL val_5448) {
  5754.  BOOL local0;
  5755.  INT local1;
  5756.  if ((!((self==((FLISTAM_BND_ITER) NULL))))) {
  5757.   local1 = 0;
  5758.   local0 = INT_is_bet_INT_I(ind_5447, local1, (c_INT_minus_INT_INT_chk(self->loc_17,1)));
  5759.  } else {
  5760.   local0 = FALSE;
  5761.  }
  5762.  if (!(local0)) {
  5763.   fprintf(stderr,"Violation of precondition ../Library/flist.sa:73:7\n");
  5764.   exit(16);
  5765.  }
  5766.  FLISTAM_BND_ITER_5443(self, ind_5447, val_5448);
  5767.  if (!FLISTAM_BND_ITER_5434(self)) {
  5768.   fprintf(stderr,"Failed invariant FLIST{AM_BND_ITER_CALL_EXPR}::invariant:BOOL ../Library/flist.sa:73:7\n");
  5769.   exit(16);
  5770.  }
  5771. }
  5772.  
  5773.  
  5774. FLISTAM_BND_ITER FLISTAM_BND_ITER_5449(FLISTAM_BND_ITER self, AM_BND_ITER_CALL e_5450) {
  5775.  FLISTAM_BND_ITER noname5451;
  5776.  FLISTAM_BND_ITER r_5452 = ((FLISTAM_BND_ITER) NULL);
  5777.  FLISTAM_BND_ITER noname5453;
  5778.  FLISTAM_BND_ITER noname5454;
  5779.  FLISTAM_BND_ITER local0;
  5780.  INT local1;
  5781.  FLISTAM_BND_ITER local2;
  5782.  INT local3;
  5783.  AM_BND_ITER_CALL local4;
  5784.  INT local5;
  5785.  if ((self==((FLISTAM_BND_ITER) NULL))) {
  5786.   local0 = ((FLISTAM_BND_ITER) sbi_arr_alloc(sizeof(struct FLISTAM_BND_ITER_struct), FLISTAM_BND_ITER_tag, sizeof(AM_BND_ITER_CALL) , 5));
  5787.   local0->asize = 5;
  5788.   r_5452 = local0;
  5789.  }
  5790.  else {
  5791.   local1 = self->loc_17;
  5792.   if ((local1<(self->asize))) {
  5793.    r_5452 = self;
  5794.   }
  5795.   else {
  5796.    local3 = 2;
  5797.    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)))));
  5798.    local2->asize = (c_INT_times_INT_INT_chk(local3,(self->asize)));
  5799.    r_5452 = local2;
  5800.    r_5452->loc_17 = self->loc_17;
  5801.    {
  5802.     struct FLISTAM_BND_ITER_5456_frame_struct temp5455_0;
  5803.     FLISTAM_BND_ITER_5456_frame 
  5804.     noname5457 = &temp5455_0;
  5805.     struct FLISTAM_BND_ITER_5440_frame_struct temp5455_1;
  5806.     FLISTAM_BND_ITER_5440_frame 
  5807.     noname5458 = &temp5455_1;
  5808.     noname5457->state = 0;
  5809.     noname5458->state = 0;
  5810.     while (1) {
  5811.      if (noname5458->state == 0) {
  5812.       noname5454 = r_5452;
  5813.       noname5458->arg0 = noname5454;
  5814.      }
  5815.      if (noname5457->state == 0) {
  5816.       noname5453 = self;
  5817.       noname5457->arg0 = noname5453;
  5818.      }
  5819.      local4 = FLISTAM_BND_ITER_5456(noname5457);
  5820.      if (noname5457->state == -1) goto after_loop;
  5821.      noname5458->arg1 = local4;
  5822.      FLISTAM_BND_ITER_5440(noname5458);
  5823.      if (noname5458->state == -1) goto after_loop;
  5824.      0 /* No return value from iter call */;
  5825.     }
  5826.    }
  5827.    after_loop: ;
  5828.    FLISTAM_BND_ITER_5442(self);
  5829.   }
  5830.  }
  5831.  r_5452->loc_17 = (c_INT_plus_INT_INT_chk(r_5452->loc_17,1));
  5832.  local5 = (c_INT_minus_INT_INT_chk(r_5452->loc_17,1));
  5833.  FLISTAM_BND_ITER_5446(r_5452, local5, e_5450);
  5834.  return r_5452;
  5835.  if (!FLISTAM_BND_ITER_5434(self)) {
  5836.   fprintf(stderr,"Failed invariant FLIST{AM_BND_ITER_CALL_EXPR}::invariant:BOOL ../Library/flist.sa:79:7\n");
  5837.   exit(16);
  5838.  }
  5839. }
  5840.  
  5841.  
  5842. AM_BND_ITER_CALL TRANS_call_fix_b(TRANS self, AM_BND_ITER_CALL bir, SIG sig_5459) {
  5843.  AM_BND_ITER_CALL noname5460;
  5844.  INT i = ((INT) 0);
  5845.  BOOL once = ((BOOL) 0);
  5846.  AM_LOCAL_EXPR nl_5461;
  5847.  AM_ASSIGN_STMT ass;
  5848.  BOOL local0;
  5849.  PROG local1;
  5850.  STR local2;
  5851.  AM_LOCAL_EXPR local3;
  5852.  SFILE_ID local4;
  5853.  IDENT local5;
  5854.  AM_EXPR local6;
  5855.  AM_STMT local7;
  5856.  if ((bir==((AM_BND_ITER_CALL) NULL))) {
  5857.   local0 = TRUE;
  5858.  } else {
  5859.   local0 = (sig_5459==((SIG) NULL));
  5860.  }
  5861.  if (local0) {
  5862.   return ((AM_BND_ITER_CALL) NULL);
  5863.  }
  5864.  if (self->in_constant) {
  5865.   TRANS_bnd_iter_c(self);
  5866.   return ((AM_BND_ITER_CALL) NULL);
  5867.  }
  5868.  if ((self->cur_loop==((AM_LOOP_STMT) NULL))) {
  5869.   TRANS_bnd_iter_c_5423(self);
  5870.   return ((AM_BND_ITER_CALL) NULL);
  5871.  }
  5872.  bir->lp = self->cur_loop;
  5873.  i = 0;
  5874.  while (1) {
  5875.   if ((i<AM_BND_ITER_CALL_5424(bir))) {
  5876.   }
  5877.   else {
  5878.    goto after_loop;
  5879.   }
  5880.   if ((AM_BND_ITER_CALL_5426(bir, i)==((AM_EXPR) NULL))) {
  5881.    PROG_err_loc_PRO(self->prog, ((PROG_ERR) bir));
  5882.    local1 = self->prog;
  5883.    local2 = STR_plus_INT_STR(((STR) &CompilererrorTRA_5463), i);
  5884.    PROG_err_STR(local1, STR_plus_STR_STR(local2, ((STR) &void_5464)));
  5885.    return ((AM_BND_ITER_CALL) NULL);
  5886.   }
  5887.   once = FALSE;
  5888.   if ((sig_5459->hot==((ARRAYBOOL) NULL))) {
  5889.    once = TRUE;
  5890.   }
  5891.   else {
  5892.    if ((!(ARRAYBOOL_aget_I(sig_5459->hot, i)))) {
  5893.     once = TRUE;
  5894.    }
  5895.   }
  5896.   if (once) {
  5897.    if (TRANS_contains_i(self, AM_BND_ITER_CALL_5426(bir, i))) {
  5898.     TRANS_bnd_iter_c_5429(self, i);
  5899.     return ((AM_BND_ITER_CALL) NULL);
  5900.    }
  5901.    local3 = ((AM_LOCAL_EXPR) NULL);
  5902.    local4 = bir->source_38;
  5903.    local5 = IDENT_zero;
  5904.    local6 = AM_BND_ITER_CALL_5426(bir, i);
  5905.    nl_5461 = AM_LOCAL_EXPR_cr(local3, local4, local5, (*AM_EXPR_tp_TP[local6->header.tag+AM_EXPR_tp_TP_offset])(local6));
  5906.    TRANS_add_local_(self, nl_5461);
  5907.    ass = AM_ASSIGN_STMT_c(((AM_ASSIGN_STMT) NULL), bir->source_38);
  5908.    ass->dest = ((AM_EXPR) nl_5461);
  5909.    ass->src_42 = AM_BND_ITER_CALL_5426(bir, i);
  5910.    AM_BND_ITER_CALL_5420(bir, i, ((AM_EXPR) nl_5461));
  5911.    if ((bir->init==((AM_STMT) NULL))) {
  5912.     bir->init = ((AM_STMT) ass);
  5913.    }
  5914.    else {
  5915.     local7 = bir->init;
  5916.     (*AM_STMT_append_A[local7->header.tag+AM_STMT_append_A_offset])(local7, ((AM_STMT) ass));
  5917.    }
  5918.   }
  5919.   i = (c_INT_plus_INT_INT_chk(i,1));
  5920.  }
  5921.  after_loop: ;
  5922.  self->cur_loop->bits_59 = FLISTAM_BND_ITER_5449(self->cur_loop->bits_59, bir);
  5923.  return bir;
  5924. }
  5925.  
  5926.  
  5927. void TRANS_call_conte(TRANS self, TR_CALL_EXPR e_5465, TP stp, TP tp_5466) {
  5928.  PROG local0;
  5929.  STR local1;
  5930.  TP local2;
  5931.  STR local3;
  5932.  STR local4;
  5933.  TP local5;
  5934.  STR local6;
  5935.  PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5465));
  5936.  local0 = self->prog;
  5937.  local1 = ((STR) &Thetypeofthecall);
  5938.  local2 = stp;
  5939.  local3 = STR_plus_STR_STR(local1, (*TP_str_STR[local2->header.tag+TP_str_STR_offset])(local2));
  5940.  local4 = STR_plus_STR_STR(local3, ((STR) &isnotasubtypeof_5467));
  5941.  local5 = tp_5466;
  5942.  local6 = STR_plus_STR_STR(local4, (*TP_str_STR[local5->header.tag+TP_str_STR_offset])(local5));
  5943.  PROG_err_STR(local0, STR_plus_STR_STR(local6, ((STR) &name_5468)));
  5944. }
  5945.  
  5946.  
  5947. AM_EXPR TRANS_inline_AM_(TRANS self, AM_ROUT_CALL_EXPR call_5469) {
  5948.  AM_EXPR noname5470;
  5949.  INLINE_TBL itbl;
  5950.  INLINE in_5471;
  5951.  INLINE local0;
  5952.  PROG_AM_GENERATE_5472(self->prog->prog_am_generate, call_5469->fun);
  5953.  itbl = self->prog->prog_am_generate->inline_tbl;
  5954.  in_5471 = INLINE_TBL_get_q(itbl, call_5469->fun);
  5955.  if ((in_5471==((INLINE) NULL))) {
  5956.   return ((AM_EXPR) call_5469);
  5957.  }
  5958.  local0 = in_5471;
  5959.  return (*INLINE_inline_AM[local0->header.tag+INLINE_inline_AM_offset])(local0, call_5469, self);
  5960. }
  5961.  
  5962.  
  5963. INT FLISTAM_EXPR_asi(FLISTAM_EXPR self) {
  5964.  INT noname5473 = ((INT) 0);
  5965.   return self->asize;
  5966.  fprintf(stderr,"Last statement wasn't return ../Library/aref.sa:20:8\n");
  5967.  exit(16);
  5968. }
  5969.  
  5970.  
  5971. INT FLISTAM_EXPR_siz(FLISTAM_EXPR self) {
  5972.  INT noname5474 = ((INT) 0);
  5973.  if ((self==((FLISTAM_EXPR) NULL))) {
  5974.   return 0;
  5975.  }
  5976.  return self->loc_17;
  5977.  if (!FLISTAM_EXPR_inv(self)) {
  5978.   fprintf(stderr,"Failed invariant FLIST{$AM_EXPR}::invariant:BOOL ../Library/flist.sa:50:7\n");
  5979.   exit(16);
  5980.  }
  5981. }
  5982.  
  5983.  
  5984. BOOL FLISTAM_EXPR_is_(FLISTAM_EXPR self) {
  5985.  BOOL noname5475 = ((BOOL) 0);
  5986.  INT local0;
  5987.  local0 = FLISTAM_EXPR_siz(self);
  5988.  return (local0==0);
  5989.  if (!FLISTAM_EXPR_inv(self)) {
  5990.   fprintf(stderr,"Failed invariant FLIST{$AM_EXPR}::invariant:BOOL ../Library/flist.sa:113:11\n");
  5991.   exit(16);
  5992.  }
  5993. }
  5994.  
  5995.  
  5996. void FLISTAM_EXPR_aclear(FLISTAM_EXPR self) {
  5997.  AM_EXPR nil = ((AM_EXPR) NULL);
  5998.  FLISTAM_EXPR noname5476;
  5999.  if (!((!((self==((FLISTAM_EXPR) NULL)))))) {
  6000.   fprintf(stderr,"Violation of precondition ../Library/aref.sa:43:9\n");
  6001.   exit(16);
  6002.  }
  6003.  {
  6004.   struct FLISTAM_EXPR_ase_frame_struct temp5477_0;
  6005.   FLISTAM_EXPR_ase_frame 
  6006.   noname5478 = &temp5477_0;
  6007.   noname5478->state = 0;
  6008.   while (1) {
  6009.    if (noname5478->state == 0) {
  6010.     noname5476 = self;
  6011.     noname5478->arg0 = noname5476;
  6012.    }
  6013.    noname5478->arg1 = nil;
  6014.    FLISTAM_EXPR_ase(noname5478);
  6015.    if (noname5478->state == -1) goto after_loop;
  6016.    0 /* No return value from iter call */;
  6017.   }
  6018.  }
  6019.  after_loop: ;
  6020. }
  6021.  
  6022.  
  6023. void FLISTAM_EXPR_clear(FLISTAM_EXPR self) {
  6024.  if (FLISTAM_EXPR_is_(self)) {
  6025.   return;
  6026.  }
  6027.  else {
  6028.   FLISTAM_EXPR_aclear(self);
  6029.   self->loc_17 = 0;
  6030.  }
  6031.  if (!FLISTAM_EXPR_inv(self)) {
  6032.   fprintf(stderr,"Failed invariant FLIST{$AM_EXPR}::invariant:BOOL ../Library/flist.sa:117:8\n");
  6033.   exit(16);
  6034.  }
  6035. }
  6036.  
  6037.  
  6038. void FLISTAM_EXPR_are(FLISTAM_EXPR self, INT ind_5479, AM_EXPR val_5480) {
  6039.  BOOL local0;
  6040.  INT local1;
  6041.  INT local2;
  6042.  if ((!((self==((FLISTAM_EXPR) NULL))))) {
  6043.   local1 = 0;
  6044.   local2 = (self->asize);
  6045.   local0 = INT_is_bet_INT_I(ind_5479, local1, (c_INT_minus_INT_INT_chk(local2,1)));
  6046.  } else {
  6047.   local0 = FALSE;
  6048.  }
  6049.  if (!(local0)) {
  6050.   fprintf(stderr,"Violation of precondition ../Library/aref.sa:38:7\n");
  6051.   exit(16);
  6052.  }
  6053.  if (ind_5479<0||ind_5479>=self->asize) {
  6054.   fprintf(stderr,"Index out of bounds ../Library/aref.sa:38:7\n");
  6055.   exit(16);
  6056.  }
  6057.  self->arr_part[ind_5479] = val_5480;
  6058. }
  6059.  
  6060.  
  6061. void FLISTAM_EXPR_ase_5481(FLISTAM_EXPR self, INT ind_5482, AM_EXPR val_5483) {
  6062.  BOOL local0;
  6063.  INT local1;
  6064.  if ((!((self==((FLISTAM_EXPR) NULL))))) {
  6065.   local1 = 0;
  6066.   local0 = INT_is_bet_INT_I(ind_5482, local1, (c_INT_minus_INT_INT_chk(self->loc_17,1)));
  6067.  } else {
  6068.   local0 = FALSE;
  6069.  }
  6070.  if (!(local0)) {
  6071.   fprintf(stderr,"Violation of precondition ../Library/flist.sa:73:7\n");
  6072.   exit(16);
  6073.  }
  6074.  FLISTAM_EXPR_are(self, ind_5482, val_5483);
  6075.  if (!FLISTAM_EXPR_inv(self)) {
  6076.   fprintf(stderr,"Failed invariant FLIST{$AM_EXPR}::invariant:BOOL ../Library/flist.sa:73:7\n");
  6077.   exit(16);
  6078.  }
  6079. }
  6080.  
  6081.  
  6082. FLISTAM_EXPR FLISTAM_EXPR_pus(FLISTAM_EXPR self, AM_EXPR e_5484) {
  6083.  FLISTAM_EXPR noname5485;
  6084.  FLISTAM_EXPR r_5486 = ((FLISTAM_EXPR) NULL);
  6085.  FLISTAM_EXPR noname5487;
  6086.  FLISTAM_EXPR noname5488;
  6087.  FLISTAM_EXPR local0;
  6088.  INT local1;
  6089.  FLISTAM_EXPR local2;
  6090.  INT local3;
  6091.  AM_EXPR local4;
  6092.  INT local5;
  6093.  if ((self==((FLISTAM_EXPR) NULL))) {
  6094.   local0 = ((FLISTAM_EXPR) sbi_arr_alloc(sizeof(struct FLISTAM_EXPR_struct), FLISTAM_EXPR_tag, sizeof(AM_EXPR) , 5));
  6095.   local0->asize = 5;
  6096.   r_5486 = local0;
  6097.  }
  6098.  else {
  6099.   local1 = self->loc_17;
  6100.   if ((local1<(self->asize))) {
  6101.    r_5486 = self;
  6102.   }
  6103.   else {
  6104.    local3 = 2;
  6105.    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)))));
  6106.    local2->asize = (c_INT_times_INT_INT_chk(local3,(self->asize)));
  6107.    r_5486 = local2;
  6108.    r_5486->loc_17 = self->loc_17;
  6109.    {
  6110.     struct FLISTAM_EXPR_elt_frame_struct temp5489_0;
  6111.     FLISTAM_EXPR_elt_frame 
  6112.     noname5490 = &temp5489_0;
  6113.     struct FLISTAM_EXPR_ase_frame_struct temp5489_1;
  6114.     FLISTAM_EXPR_ase_frame 
  6115.     noname5491 = &temp5489_1;
  6116.     noname5490->state = 0;
  6117.     noname5491->state = 0;
  6118.     while (1) {
  6119.      if (noname5491->state == 0) {
  6120.       noname5488 = r_5486;
  6121.       noname5491->arg0 = noname5488;
  6122.      }
  6123.      if (noname5490->state == 0) {
  6124.       noname5487 = self;
  6125.       noname5490->arg0 = noname5487;
  6126.      }
  6127.      local4 = FLISTAM_EXPR_elt(noname5490);
  6128.      if (noname5490->state == -1) goto after_loop;
  6129.      noname5491->arg1 = local4;
  6130.      FLISTAM_EXPR_ase(noname5491);
  6131.      if (noname5491->state == -1) goto after_loop;
  6132.      0 /* No return value from iter call */;
  6133.     }
  6134.    }
  6135.    after_loop: ;
  6136.    FLISTAM_EXPR_clear(self);
  6137.   }
  6138.  }
  6139.  r_5486->loc_17 = (c_INT_plus_INT_INT_chk(r_5486->loc_17,1));
  6140.  local5 = (c_INT_minus_INT_INT_chk(r_5486->loc_17,1));
  6141.  FLISTAM_EXPR_ase_5481(r_5486, local5, e_5484);
  6142.  return r_5486;
  6143.  if (!FLISTAM_EXPR_inv(self)) {
  6144.   fprintf(stderr,"Failed invariant FLIST{$AM_EXPR}::invariant:BOOL ../Library/flist.sa:79:7\n");
  6145.   exit(16);
  6146.  }
  6147. }
  6148.  
  6149.  
  6150. AM_EXPR TRANS_transform__5492(TRANS self, TR_CALL_EXPR e_5493, TP tp_5494, BOOL has_ret_5495) {
  6151.  AM_EXPR noname5496;
  6152.  AM_EXPR r_5497 = ((AM_EXPR) NULL);
  6153.  TUPAM_EXPRTP stup = TUPAM_EXPRTP_zero;
  6154.  AM_EXPR self_val;
  6155.  TP self_tp_5498;
  6156.  BOOL in_class = ((BOOL) 0);
  6157.  CALL_SIG call_sig;
  6158.  ARRAYAM_EXPR args_5499 = ((ARRAYAM_EXPR) NULL);
  6159.  INT nargs = ((INT) 0);
  6160.  SIG sig_5500;
  6161.  AM_CALL_EXPR cr = ((AM_CALL_EXPR) NULL);
  6162.  AM_EXT_CALL_EXPR er = ((AM_EXT_CALL_EXPR) NULL);
  6163.  AM_ITER_CALL_EXPR ir = ((AM_ITER_CALL_EXPR) NULL);
  6164.  AM_ROUT_CALL_EXPR rr = ((AM_ROUT_CALL_EXPR) NULL);
  6165.  AM_BND_ROUT_CALL brr = ((AM_BND_ROUT_CALL) NULL);
  6166.  AM_BND_ITER_CALL bir = ((AM_BND_ITER_CALL) NULL);
  6167.  IMPL im;
  6168.  ELT el;
  6169.  INT i = ((INT) 0);
  6170.  INT i_5501 = ((INT) 0);
  6171.  INT i_5502 = ((INT) 0);
  6172.  INT i_5503 = ((INT) 0);
  6173.  INT i_5504 = ((INT) 0);
  6174.  AM_EXPR ncr;
  6175.  BOOL local0;
  6176.  OUT local1;
  6177.  TP local2;
  6178.  INT local3;
  6179.  OUT local4;
  6180.  OUT local5;
  6181.  AM_EXT_CALL_EXPR local6;
  6182.  INT local7;
  6183.  SFILE_ID local8;
  6184.  INT local9;
  6185.  AM_ITER_CALL_EXPR local10;
  6186.  INT local11;
  6187.  INT local12;
  6188.  AM_ROUT_CALL_EXPR local13;
  6189.  INT local14;
  6190.  INT local15;
  6191.  BOOL local16;
  6192.  AM_CALL_EXPR local17;
  6193.  AM_CALL_EXPR local18;
  6194.  TP local19;
  6195.  TP local20;
  6196.  AM_CALL_EXPR local21;
  6197.  TP local22;
  6198.  if ((self->cur_rout==((AM_ROUT_DEF) NULL))) {
  6199.   local0 = (!(self->in_constant));
  6200.  } else {
  6201.   local0 = FALSE;
  6202.  }
  6203.  if (local0) {
  6204.   local1 = OUT_create_OUT(((OUT) NULL));
  6205.   OUT_plus_STR(local1, ((STR) &CompilererrorTRA_5505));
  6206.   return ((AM_EXPR) NULL);
  6207.  }
  6208.  if ((e_5493==((TR_CALL_EXPR) NULL))) {
  6209.   return ((AM_EXPR) NULL);
  6210.  }
  6211.  PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5493));
  6212.  r_5497 = ((AM_EXPR) TRANS_call_expr_(self, e_5493, tp_5494));
  6213.  if ((!((r_5497==((AM_EXPR) NULL))))) {
  6214.   return r_5497;
  6215.  }
  6216.  stup = TRANS_call_self__5191(self, e_5493);
  6217.  if ((stup.t1==(AM_EXPR)0)&&(stup.t2==(TP)0)) {
  6218.   return ((AM_EXPR) NULL);
  6219.  }
  6220.  self_val = stup.t1;
  6221.  self_tp_5498 = stup.t2;
  6222.  if ((self_tp_5498==((TP) NULL))) {
  6223.   return ((AM_EXPR) NULL);
  6224.  }
  6225.  local2 = self_tp_5498;
  6226.  if ((*TP_is_eq_TP_BOOL[local2->header.tag+TP_is_eq_TP_BOOL_offset])(local2, ((TP) self->tp_con->same_34))) {
  6227.   in_class = TRUE;
  6228.  }
  6229.  call_sig = CALL_SIG_create_(((CALL_SIG) NULL));
  6230.  call_sig->has_ret = has_ret_5495;
  6231.  call_sig->name_19 = TRANS_call_expr__5201(self, e_5493);
  6232.  call_sig->tp = self_tp_5498;
  6233.  nargs = TR_CALL_EXPR_arg(e_5493);
  6234.  if ((!((e_5493->args_7==((TR_EXPR) NULL))))) {
  6235.   args_5499 = ARRAYAM_EXPR_cre(((ARRAYAM_EXPR) NULL), nargs);
  6236.   call_sig->args_7 = ARRAYCALL_TP_cre(((ARRAYCALL_TP) NULL), nargs);
  6237.  }
  6238.  sig_5500 = TRANS_call_expr__5305(self, e_5493, call_sig, args_5499, in_class);
  6239.  if ((sig_5500==((SIG) NULL))) {
  6240.   return ((AM_EXPR) NULL);
  6241.  }
  6242.  if (self_tp_5498==NULL) {
  6243.  } else
  6244.  switch (self_tp_5498->header.tag) {
  6245.   case TP_CLASS_tag:
  6246.    local3 = PROG_tp_kind_TP_INT(self->prog, self_tp_5498);
  6247.    if ((local3==shared_TP_KIND_e)) {
  6248.     if (self->in_constant) {
  6249.      TRANS_ext_call_c(self, e_5493);
  6250.      return ((AM_EXPR) NULL);
  6251.     }
  6252.     im = IMPL_TBL_impl_of(self->prog->impl_tbl, self_tp_5498);
  6253.     if ((im==((IMPL) NULL))) {
  6254.      local4 = OUT_create_OUT(((OUT) NULL));
  6255.      OUT_plus_STR(local4, ((STR) &CompilererrTRANS));
  6256.      return ((AM_EXPR) NULL);
  6257.     }
  6258.     el = IMPL_elt_with_si(im, sig_5500);
  6259.     if ((el==((ELT) NULL))) {
  6260.      local5 = OUT_create_OUT(((OUT) NULL));
  6261.      OUT_plus_STR(local5, ((STR) &CompilererrTRANS_5506));
  6262.      return ((AM_EXPR) NULL);
  6263.     }
  6264.     local6 = ((AM_EXT_CALL_EXPR) NULL);
  6265.     local7 = (c_INT_plus_INT_INT_chk(nargs,1));
  6266.     local8 = e_5493->source_38;
  6267.     er = AM_EXT_CALL_EXPR_5326(local6, local7, local8, TRANS_name_for_e(self, el));
  6268.     AM_EXT_CALL_EXPR_5331(er, 0, self_val);
  6269.     er->fun = sig_5500;
  6270.     if ((!((args_5499==((ARRAYAM_EXPR) NULL))))) {
  6271.      i = 0;
  6272.      while (1) {
  6273.       if ((i<nargs)) {
  6274.       }
  6275.       else {
  6276.        goto after_loop;
  6277.       }
  6278.       local9 = (c_INT_plus_INT_INT_chk(i,1));
  6279.       AM_EXT_CALL_EXPR_5331(er, local9, ARRAYAM_EXPR_age(args_5499, i));
  6280.       i = (c_INT_plus_INT_INT_chk(i,1));
  6281.      }
  6282.      after_loop: ;
  6283.     }
  6284.     cr = ((AM_CALL_EXPR) er);
  6285.    }
  6286.    else {
  6287.     if (IDENT_is_iter_BOOL(e_5493->name_19)) {
  6288.      local10 = ((AM_ITER_CALL_EXPR) NULL);
  6289.      local11 = (c_INT_plus_INT_INT_chk(nargs,1));
  6290.      ir = AM_ITER_CALL_EXP_5334(local10, local11, e_5493->source_38);
  6291.      AM_ITER_CALL_EXP_5338(ir, 0, self_val);
  6292.      ir->fun = sig_5500;
  6293.      if ((!((args_5499==((ARRAYAM_EXPR) NULL))))) {
  6294.       i_5501 = 0;
  6295.       while (1) {
  6296.        if ((i_5501<nargs)) {
  6297.        }
  6298.        else {
  6299.         goto after_loop_5508;
  6300.        }
  6301.        local12 = (c_INT_plus_INT_INT_chk(i_5501,1));
  6302.        AM_ITER_CALL_EXP_5338(ir, local12, ARRAYAM_EXPR_age(args_5499, i_5501));
  6303.        i_5501 = (c_INT_plus_INT_INT_chk(i_5501,1));
  6304.       }
  6305.       after_loop_5508: ;
  6306.      }
  6307.      cr = ((AM_CALL_EXPR) TRANS_call_fix_i(self, ir));
  6308.     }
  6309.     else {
  6310.      local13 = ((AM_ROUT_CALL_EXPR) NULL);
  6311.      local14 = (c_INT_plus_INT_INT_chk(nargs,1));
  6312.      rr = AM_ROUT_CALL_EXP_5400(local13, local14, e_5493->source_38);
  6313.      AM_ROUT_CALL_EXP_5404(rr, 0, self_val);
  6314.      rr->fun = sig_5500;
  6315.      if ((!((args_5499==((ARRAYAM_EXPR) NULL))))) {
  6316.       i_5502 = 0;
  6317.       while (1) {
  6318.        if ((i_5502<nargs)) {
  6319.        }
  6320.        else {
  6321.         goto after_loop_5510;
  6322.        }
  6323.        local15 = (c_INT_plus_INT_INT_chk(i_5502,1));
  6324.        AM_ROUT_CALL_EXP_5404(rr, local15, ARRAYAM_EXPR_age(args_5499, i_5502));
  6325.        i_5502 = (c_INT_plus_INT_INT_chk(i_5502,1));
  6326.       }
  6327.       after_loop_5510: ;
  6328.      }
  6329.      cr = ((AM_CALL_EXPR) rr);
  6330.     }
  6331.    } break;
  6332.   case TP_ROUT_tag:
  6333.    if (self->in_constant) {
  6334.     TRANS_bnd_rout_c(self);
  6335.     return ((AM_EXPR) NULL);
  6336.    }
  6337.    brr = AM_BND_ROUT_CALL_5407(((AM_BND_ROUT_CALL) NULL), nargs, e_5493->source_38);
  6338.    brr->br = self_val;
  6339.    if ((!((args_5499==((ARRAYAM_EXPR) NULL))))) {
  6340.     i_5503 = 0;
  6341.     while (1) {
  6342.      if ((i_5503<nargs)) {
  6343.      }
  6344.      else {
  6345.       goto after_loop_5512;
  6346.      }
  6347.      AM_BND_ROUT_CALL_5411(brr, i_5503, ARRAYAM_EXPR_age(args_5499, i_5503));
  6348.      i_5503 = (c_INT_plus_INT_INT_chk(i_5503,1));
  6349.     }
  6350.     after_loop_5512: ;
  6351.    }
  6352.    cr = ((AM_CALL_EXPR) brr); break;
  6353.   case TP_ITER_tag:
  6354.    bir = AM_BND_ITER_CALL_5414(((AM_BND_ITER_CALL) NULL), nargs, e_5493->source_38);
  6355.    bir->bi = self_val;
  6356.    if ((!((args_5499==((ARRAYAM_EXPR) NULL))))) {
  6357.     i_5504 = 0;
  6358.     while (1) {
  6359.      if ((i_5504<nargs)) {
  6360.      }
  6361.      else {
  6362.       goto after_loop_5514;
  6363.      }
  6364.      AM_BND_ITER_CALL_5420(bir, i_5504, ARRAYAM_EXPR_age(args_5499, i_5504));
  6365.      i_5504 = (c_INT_plus_INT_INT_chk(i_5504,1));
  6366.     }
  6367.     after_loop_5514: ;
  6368.    }
  6369.    cr = ((AM_CALL_EXPR) TRANS_call_fix_b(self, bir, sig_5500)); break;
  6370.   default: ;
  6371.    fprintf(stderr,"No applicable type in typecase ./trans.sa:1057:14\n");
  6372.    exit(16);
  6373.  }
  6374.  if ((cr==((AM_CALL_EXPR) NULL))) {
  6375.   return ((AM_EXPR) NULL);
  6376.  }
  6377.  if ((!((tp_5494==((TP) NULL))))) {
  6378.   local17 = cr;
  6379.   local16 = (!(((*AM_CALL_EXPR_tp_TP[local17->header.tag+AM_CALL_EXPR_tp_TP_offset])(local17)==((TP) NULL))));
  6380.  } else {
  6381.   local16 = FALSE;
  6382.  }
  6383.  if (local16) {
  6384.   local18 = cr;
  6385.   local19 = (*AM_CALL_EXPR_tp_TP[local18->header.tag+AM_CALL_EXPR_tp_TP_offset])(local18);
  6386.   local20 = local19;
  6387.   if ((!((*TP_is_subtype_TP[local20->header.tag+TP_is_subtype_TP_offset])(local20, tp_5494)))) {
  6388.    local21 = cr;
  6389.    local22 = (*AM_CALL_EXPR_tp_TP[local21->header.tag+AM_CALL_EXPR_tp_TP_offset])(local21);
  6390.    TRANS_call_conte(self, e_5493, local22, tp_5494);
  6391.    return ((AM_EXPR) NULL);
  6392.   }
  6393.  }
  6394.  ncr = ((AM_EXPR) cr);
  6395.  if (cr==NULL) {
  6396.  } else
  6397.  switch (cr->header.tag) {
  6398.   case AM_ROUT_CALL_EXPR_tag:
  6399.    ncr = TRANS_inline_AM_(self, ((AM_ROUT_CALL_EXPR) cr)); break;
  6400.   default: ;
  6401.  }
  6402.  if ((!((self->cur_rout==((AM_ROUT_DEF) NULL))))) {
  6403.   if (ncr==NULL) {
  6404.   } else
  6405.   switch (ncr->header.tag) {
  6406.    case AM_ITER_CALL_EXPR_tag:
  6407.    case AM_BND_ROUT_CALL_tag:
  6408.    case AM_EXT_CALL_EXPR_tag:
  6409.    case AM_BND_ITER_CALL_tag:
  6410.    case AM_ROUT_CALL_EXPR_tag:
  6411.     self->cur_rout->calls_58 = FLISTAM_EXPR_pus(self->cur_rout->calls_58, ncr); break;
  6412.    default: ;
  6413.   }
  6414.  }
  6415.  return ncr;
  6416. }
  6417.  
  6418.  
  6419. AM_EXPR TRANS_transform__5516(TRANS self, TR_VOID_EXPR e_5517, TP tp_5518) {
  6420.  AM_EXPR noname5519;
  6421.  AM_VOID_CONST r_5520;
  6422.  r_5520 = AM_VOID_CONST_cr(((AM_VOID_CONST) NULL), e_5517->source_38);
  6423.  if ((tp_5518==((TP) NULL))) {
  6424.   PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5517));
  6425.   PROG_err_STR(self->prog, ((STR) &Compilererrornot));
  6426.   return ((AM_EXPR) NULL);
  6427.  }
  6428.  r_5520->tp_at = tp_5518;
  6429.  return ((AM_EXPR) r_5520);
  6430. }
  6431.  
  6432.  
  6433. BOOL FSETTP_CLASS_tes(FSETTP_CLASS self, TP_CLASS e_5521) {
  6434.  BOOL noname5522 = ((BOOL) 0);
  6435.  INT h = ((INT) 0);
  6436.  TP_CLASS te;
  6437.  TP_CLASS te_5523;
  6438.  INT local0;
  6439.  INT local1;
  6440.  INT local2;
  6441.  INT local3;
  6442.  if ((self==((FSETTP_CLASS) NULL))) {
  6443.   return FALSE;
  6444.  }
  6445.  local0 = FSETTP_CLASS_elt_3008(self, e_5521);
  6446.  local1 = (self->asize);
  6447.  h = (local0&(c_INT_minus_INT_INT_chk(local1,2)));
  6448.  while (1) {
  6449.   te = FSETTP_CLASS_age(self, h);
  6450.   if (FSETTP_CLASS_elt_3013(self, te, e_5521)) {
  6451.    return TRUE;
  6452.   }
  6453.   else {
  6454.    if (FSETTP_CLASS_elt_3013(self, te, FSETTP_CLASS_elt(self))) {
  6455.     goto after_loop;
  6456.    }
  6457.   }
  6458.   h = (c_INT_plus_INT_INT_chk(h,1));
  6459.  }
  6460.  after_loop: ;
  6461.  local2 = (self->asize);
  6462.  if ((h==(c_INT_minus_INT_INT_chk(local2,1)))) {
  6463.   h = 0;
  6464.   while (1) {
  6465.    te_5523 = FSETTP_CLASS_age(self, h);
  6466.    if (FSETTP_CLASS_elt_3013(self, te_5523, e_5521)) {
  6467.     return TRUE;
  6468.    }
  6469.    else {
  6470.     if (FSETTP_CLASS_elt_3013(self, te_5523, FSETTP_CLASS_elt(self))) {
  6471.      goto after_loop_5525;
  6472.     }
  6473.    }
  6474.    h = (c_INT_plus_INT_INT_chk(h,1));
  6475.   }
  6476.   after_loop_5525: ;
  6477.   local3 = (self->asize);
  6478.   if (!((h!=(c_INT_minus_INT_INT_chk(local3,1))))) {
  6479.    fprintf(stderr,"Violation of assertion ../Library/fset.sa:127:15\n");
  6480.    exit(16);
  6481.   }
  6482.  }
  6483.  return FALSE;
  6484.  if (!FSETTP_CLASS_inv(self)) {
  6485.   fprintf(stderr,"Failed invariant FSET{TP_CLASS}::invariant:BOOL ../Library/fset.sa:112:7\n");
  6486.   exit(16);
  6487.  }
  6488. }
  6489.  
  6490.  
  6491. BOOL TP_GRAPH_abs_sub(TP_GRAPH self, TP t_5527, TP_CLASS at_5528) {
  6492.  BOOL noname5529 = ((BOOL) 0);
  6493.  BOOL local0;
  6494.  TP local1;
  6495.  FSETTP_CLASS local2;
  6496.  FSETTP local3;
  6497.  if (!(TP_CLASS_is_abst(at_5528))) {
  6498.   fprintf(stderr,"Violation of precondition ./tp.sa:665:19\n");
  6499.   exit(16);
  6500.  }
  6501.  local1 = t_5527;
  6502.  if ((*TP_is_eq_TP_BOOL[local1->header.tag+TP_is_eq_TP_BOOL_offset])(local1, ((TP) at_5528))) {
  6503.   local0 = TRUE;
  6504.  } else {
  6505.   local0 = TP_CLASS_is_eq_T(at_5528, ((TP) self->prog->tp_builtin->dollar_ob));
  6506.  }
  6507.  if (local0) {
  6508.   return TRUE;
  6509.  }
  6510.  if (t_5527==NULL) {
  6511.  } else
  6512.  switch (t_5527->header.tag) {
  6513.   case TP_CLASS_tag:
  6514.    local2 = TP_GRAPH_ANC_get_3088(self->anc, ((TP_CLASS) t_5527));
  6515.    if (FSETTP_CLASS_tes(local2, at_5528)) {
  6516.     return TRUE;
  6517.    } break;
  6518.   default: ;
  6519.  }
  6520.  local3 = TP_GRAPH_DES_get_3183(self->des_15, at_5528);
  6521.  if (FSETTP_test_TP_BOOL(local3, t_5527)) {
  6522.   return TRUE;
  6523.  }
  6524.  return FALSE;
  6525. }
  6526.  
  6527.  
  6528. BOOL PROG_abs_subtype(PROG self, TP t_5530, TP_CLASS at_5531) {
  6529.  BOOL noname5532 = ((BOOL) 0);
  6530.  if (!(TP_CLASS_is_abst(at_5531))) {
  6531.   fprintf(stderr,"Violation of precondition ./prog.sa:122:19\n");
  6532.   exit(16);
  6533.  }
  6534.  return TP_GRAPH_abs_sub(self->tp_graph, t_5530, at_5531);
  6535. }
  6536.  
  6537.  
  6538. BOOL TP_CLASS_is_subt(TP_CLASS self, TP t_5533) {
  6539.  BOOL noname5534 = ((BOOL) 0);
  6540.  if ((self==((TP_CLASS) NULL))) {
  6541.   return FALSE;
  6542.  }
  6543.  if (TP_CLASS_is_eq_T(self, t_5533)) {
  6544.   return TRUE;
  6545.  }
  6546.  else {
  6547.   if (t_5533==NULL) {
  6548.   } else
  6549.   switch (t_5533->header.tag) {
  6550.    case TP_CLASS_tag:
  6551.     if (TP_CLASS_is_abst(((TP_CLASS) t_5533))) {
  6552.      return PROG_abs_subtype(self->prog, ((TP) self), ((TP_CLASS) t_5533));
  6553.     }
  6554.     else {
  6555.      return FALSE;
  6556.     } break;
  6557.    default: ;
  6558.   }
  6559.  }
  6560.  return FALSE;
  6561. }
  6562.  
  6563.  
  6564. AM_IS_VOID_EXPR AM_IS_VOID_EXPR_(AM_IS_VOID_EXPR self, SFILE_ID source_5535) {
  6565.  AM_IS_VOID_EXPR noname5536;
  6566.  AM_IS_VOID_EXPR r_5537;
  6567.  AM_IS_VOID_EXPR local0;
  6568.  local0 = ((AM_IS_VOID_EXPR) sbi_alloc(sizeof(struct AM_IS_VOID_EXPR_struct), AM_IS_VOID_EXPR_tag));
  6569.  r_5537 = local0;
  6570.  r_5537->source_38 = source_5535;
  6571.  return r_5537;
  6572. }
  6573.  
  6574.  
  6575. AM_EXPR TRANS_transform__5538(TRANS self, TR_IS_VOID_EXPR e_5539, TP tp_5540) {
  6576.  AM_EXPR noname5541;
  6577.  AM_IS_VOID_EXPR r_5542;
  6578.  TR_EXPR earg;
  6579.  PROG local0;
  6580.  STR local1;
  6581.  TP local2;
  6582.  STR local3;
  6583.  if ((!((tp_5540==((TP) NULL))))) {
  6584.   if ((!(TP_CLASS_is_subt(self->prog->tp_builtin->bool_2, tp_5540)))) {
  6585.    PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5539));
  6586.    local0 = self->prog;
  6587.    local1 = ((STR) &Voidtestexpressi);
  6588.    local2 = tp_5540;
  6589.    local3 = STR_plus_STR_STR(local1, (*TP_str_STR[local2->header.tag+TP_str_STR_offset])(local2));
  6590.    PROG_err_STR(local0, STR_plus_STR_STR(local3, ((STR) &name_5543)));
  6591.    return ((AM_EXPR) NULL);
  6592.   }
  6593.  }
  6594.  r_5542 = AM_IS_VOID_EXPR_(((AM_IS_VOID_EXPR) NULL), e_5539->source_38);
  6595.  r_5542->tp_at = ((TP) self->prog->tp_builtin->bool_2);
  6596.  PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5539->arg_51));
  6597.  earg = e_5539->arg_51;
  6598.  if (earg==NULL) {
  6599.  } else
  6600.  switch (earg->header.tag) {
  6601.   case TR_VOID_EXPR_tag:
  6602.    PROG_err_STR(self->prog, ((STR) &voidvoidisnotallowed));
  6603.    return ((AM_EXPR) NULL); break;
  6604.   case TR_CREATE_EXPR_tag:
  6605.    if ((((TR_CREATE_EXPR) earg)->tp==((TR_TYPE_SPEC) NULL))) {
  6606.     PROG_err_STR(self->prog, ((STR) &voidoncreateexpr));
  6607.     return ((AM_EXPR) NULL);
  6608.    } break;
  6609.   case TR_ARRAY_EXPR_tag:
  6610.    PROG_err_STR(self->prog, ((STR) &voidonarraycreat));
  6611.    return ((AM_EXPR) NULL); break;
  6612.   case TR_UNDERSCORE_ARG_tag:
  6613.    PROG_err_STR(self->prog, ((STR) &void_isillegal));
  6614.    return ((AM_EXPR) NULL); break;
  6615.   default: ;
  6616.  }
  6617.  r_5542->arg_51 = TRANS_transform__5198(self, e_5539->arg_51, ((TP) NULL));
  6618.  if ((r_5542->arg_51==((AM_EXPR) NULL))) {
  6619.   return ((AM_EXPR) NULL);
  6620.  }
  6621.  return ((AM_EXPR) r_5542);
  6622. }
  6623.  
  6624.  
  6625. void TRANS_array_tp_v(TRANS self, TR_ARRAY_EXPR e_5544) {
  6626.  PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5544));
  6627.  PROG_err_STR(self->prog, ((STR) &Thetypeofthisarr));
  6628. }
  6629.  
  6630.  
  6631. void TRANS_array_wron(TRANS self, TR_ARRAY_EXPR e_5545, TP tp_5546) {
  6632.  PROG local0;
  6633.  STR local1;
  6634.  TP local2;
  6635.  STR local3;
  6636.  STR local4;
  6637.  PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5545));
  6638.  local0 = self->prog;
  6639.  local1 = ((STR) &Theinferredtype);
  6640.  local2 = tp_5546;
  6641.  local3 = STR_plus_STR_STR(local1, (*TP_str_STR[local2->header.tag+TP_str_STR_offset])(local2));
  6642.  local4 = STR_plus_STR_STR(local3, ((STR) &forthisarray));
  6643.  PROG_err_STR(local0, STR_plus_STR_STR(local4, ((STR) &creationexpressi)));
  6644. }
  6645.  
  6646.  
  6647. INT TR_ARRAY_EXPR_el(TR_ARRAY_EXPR self) {
  6648.  INT noname5547 = ((INT) 0);
  6649.  TR_EXPR local0;
  6650.  if ((self->elts==((TR_EXPR) NULL))) {
  6651.   return 0;
  6652.  }
  6653.  local0 = self->elts;
  6654.  return (*TR_EXPR_size_INT[local0->header.tag+TR_EXPR_size_INT_offset])(local0);
  6655. }
  6656.  
  6657.  
  6658. AM_ARRAY_EXPR AM_ARRAY_EXPR_cr(AM_ARRAY_EXPR self, INT nargs, SFILE_ID source_5548) {
  6659.  AM_ARRAY_EXPR noname5549;
  6660.  AM_ARRAY_EXPR r_5550;
  6661.  AM_ARRAY_EXPR local0;
  6662.  local0 = ((AM_ARRAY_EXPR) sbi_arr_alloc(sizeof(struct AM_ARRAY_EXPR_struct), AM_ARRAY_EXPR_tag, sizeof(AM_EXPR) , nargs));
  6663.  local0->asize = nargs;
  6664.  r_5550 = local0;
  6665.  r_5550->source_38 = source_5548;
  6666.  return r_5550;
  6667. }
  6668.  
  6669.  
  6670. void AM_ARRAY_EXPR_as_5551(AM_ARRAY_EXPR self, INT ind_5552, AM_EXPR val_5553) {
  6671.  BOOL local0;
  6672.  INT local1;
  6673.  INT local2;
  6674.  if ((!((self==((AM_ARRAY_EXPR) NULL))))) {
  6675.   local1 = 0;
  6676.   local2 = (self->asize);
  6677.   local0 = INT_is_bet_INT_I(ind_5552, local1, (c_INT_minus_INT_INT_chk(local2,1)));
  6678.  } else {
  6679.   local0 = FALSE;
  6680.  }
  6681.  if (!(local0)) {
  6682.   fprintf(stderr,"Violation of precondition ../Library/aref.sa:38:7\n");
  6683.   exit(16);
  6684.  }
  6685.  if (ind_5552<0||ind_5552>=self->asize) {
  6686.   fprintf(stderr,"Index out of bounds ../Library/aref.sa:38:7\n");
  6687.   exit(16);
  6688.  }
  6689.  self->arr_part[ind_5552] = val_5553;
  6690. }
  6691.  
  6692.  
  6693. AM_EXPR TRANS_transform__5554(TRANS self, TR_ARRAY_EXPR e_5555, TP tp_5556) {
  6694.  AM_EXPR noname5557;
  6695.  TP pt = ((TP) NULL);
  6696.  AM_ARRAY_EXPR r_5558;
  6697.  TR_EXPR ae;
  6698.  INT i = ((INT) 0);
  6699.  AM_EXPR tae;
  6700.  BOOL local0;
  6701.  INT local1;
  6702.  AM_ARRAY_EXPR local2;
  6703.  INT local3;
  6704.  TR_EXPR local4;
  6705.  if ((tp_5556==((TP) NULL))) {
  6706.   TRANS_array_tp_v(self, e_5555);
  6707.   return ((AM_EXPR) NULL);
  6708.  }
  6709.  if (tp_5556==NULL) {
  6710.   TRANS_array_wron(self, e_5555, tp_5556);
  6711.   return ((AM_EXPR) NULL);
  6712.  } else
  6713.  switch (tp_5556->header.tag) {
  6714.   case TP_CLASS_tag:
  6715.    if (IDENT_is_neq_IDE(((TP_CLASS) tp_5556)->name_19, self->prog->ident_builtin->ARRAY_ident)) {
  6716.     local0 = TRUE;
  6717.    } else {
  6718.     local1 = ARRAYTP_size_INT(((TP_CLASS) tp_5556)->params);
  6719.     local0 = (local1!=1);
  6720.    }
  6721.    if (local0) {
  6722.     TRANS_array_wron(self, e_5555, tp_5556);
  6723.     return ((AM_EXPR) NULL);
  6724.    }
  6725.    pt = ARRAYTP_aget_INT_TP(((TP_CLASS) tp_5556)->params, 0); break;
  6726.   default: ;
  6727.    TRANS_array_wron(self, e_5555, tp_5556);
  6728.    return ((AM_EXPR) NULL);
  6729.  }
  6730.  local2 = ((AM_ARRAY_EXPR) NULL);
  6731.  local3 = TR_ARRAY_EXPR_el(e_5555);
  6732.  r_5558 = AM_ARRAY_EXPR_cr(local2, local3, e_5555->source_38);
  6733.  r_5558->tp_at = tp_5556;
  6734.  ae = e_5555->elts;
  6735.  i = 0;
  6736.  while (1) {
  6737.   if ((!((ae==((TR_EXPR) NULL))))) {
  6738.   }
  6739.   else {
  6740.    goto after_loop;
  6741.   }
  6742.   tae = TRANS_transform__5198(self, ae, pt);
  6743.   if ((tae==((AM_EXPR) NULL))) {
  6744.    return ((AM_EXPR) NULL);
  6745.   }
  6746.   AM_ARRAY_EXPR_as_5551(r_5558, i, tae);
  6747.   local4 = ae;
  6748.   ae = (*TR_EXPR_next_TR_EXPR[local4->header.tag+TR_EXPR_next_TR_EXPR_offset])(local4);
  6749.   i = (c_INT_plus_INT_INT_chk(i,1));
  6750.  }
  6751.  after_loop: ;
  6752.  return ((AM_EXPR) r_5558);
  6753. }
  6754.  
  6755.  
  6756. void TRANS_create_con(TRANS self, TR_CREATE_EXPR e_5560) {
  6757.  PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5560));
  6758.  PROG_err_STR(self->prog, ((STR) &Creationexpressi));
  6759. }
  6760.  
  6761.  
  6762. void TRANS_create_con_5561(TRANS self, TR_CREATE_EXPR e_5562, TP stp, TP tp_5563) {
  6763.  PROG local0;
  6764.  STR local1;
  6765.  TP local2;
  6766.  STR local3;
  6767.  STR local4;
  6768.  TP local5;
  6769.  STR local6;
  6770.  PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5562));
  6771.  local0 = self->prog;
  6772.  local1 = ((STR) &Thetypeofthecrea);
  6773.  local2 = stp;
  6774.  local3 = STR_plus_STR_STR(local1, (*TP_str_STR[local2->header.tag+TP_str_STR_offset])(local2));
  6775.  local4 = STR_plus_STR_STR(local3, ((STR) &isnotasubtypeof_5564));
  6776.  local5 = tp_5563;
  6777.  local6 = STR_plus_STR_STR(local4, (*TP_str_STR[local5->header.tag+TP_str_STR_offset])(local5));
  6778.  PROG_err_STR(local0, STR_plus_STR_STR(local6, ((STR) &name_5565)));
  6779. }
  6780.  
  6781.  
  6782. void TRANS_create_tp_(TRANS self, TR_CREATE_EXPR e_5566) {
  6783.  PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5566));
  6784.  PROG_err_STR(self->prog, ((STR) &Thiscreationexpr));
  6785. }
  6786.  
  6787.  
  6788. INT TR_CREATE_EXPR_e(TR_CREATE_EXPR self) {
  6789.  INT noname5567 = ((INT) 0);
  6790.  TR_EXPR local0;
  6791.  if ((self->elts==((TR_EXPR) NULL))) {
  6792.   return 0;
  6793.  }
  6794.  local0 = self->elts;
  6795.  return (*TR_EXPR_size_INT[local0->header.tag+TR_EXPR_size_INT_offset])(local0);
  6796. }
  6797.  
  6798.  
  6799. CALL_TP ARRAYCALL_TP_age(ARRAYCALL_TP self, INT ind_5568) {
  6800.  CALL_TP noname5569;
  6801.  BOOL local0;
  6802.  INT local1;
  6803.  INT local2;
  6804.  if ((!((self==((ARRAYCALL_TP) NULL))))) {
  6805.   local1 = 0;
  6806.   local2 = (self->asize);
  6807.   local0 = INT_is_bet_INT_I(ind_5568, local1, (c_INT_minus_INT_INT_chk(local2,1)));
  6808.  } else {
  6809.   local0 = FALSE;
  6810.  }
  6811.  if (!(local0)) {
  6812.   fprintf(stderr,"Violation of precondition ../Library/aref.sa:33:7\n");
  6813.   exit(16);
  6814.  }
  6815.  if (ind_5568<0||ind_5568>=self->asize) {
  6816.   fprintf(stderr,"Index out of bounds ../Library/aref.sa:33:7\n");
  6817.   exit(16);
  6818.  }
  6819.  return self->arr_part[ind_5568];
  6820. }
  6821.  
  6822.  
  6823. void TRANS_create_bad(TRANS self, TR_CREATE_EXPR e_5570, TP rt, TP at_5571) {
  6824.  PROG local0;
  6825.  STR local1;
  6826.  TP local2;
  6827.  STR local3;
  6828.  STR local4;
  6829.  TP local5;
  6830.  STR local6;
  6831.  PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5570));
  6832.  local0 = self->prog;
  6833.  local1 = ((STR) &Thiscreationexpr_5572);
  6834.  local2 = rt;
  6835.  local3 = STR_plus_STR_STR(local1, (*TP_str_STR[local2->header.tag+TP_str_STR_offset])(local2));
  6836.  local4 = STR_plus_STR_STR(local3, ((STR) &ratherthan));
  6837.  local5 = at_5571;
  6838.  local6 = STR_plus_STR_STR(local4, (*TP_str_STR[local5->header.tag+TP_str_STR_offset])(local5));
  6839.  PROG_err_STR(local0, STR_plus_STR_STR(local6, ((STR) &asitmust)));
  6840. }
  6841.  
  6842.  
  6843. AM_EXPR TRANS_transform__5573(TRANS self, TR_CREATE_EXPR e_5574, TP tp_5575) {
  6844.  AM_EXPR noname5576;
  6845.  TP at_5577 = ((TP) NULL);
  6846.  INT na = ((INT) 0);
  6847.  AM_ROUT_CALL_EXPR r_5578;
  6848.  AM_VOID_CONST av;
  6849.  CALL_SIG cs;
  6850.  TR_EXPR ce;
  6851.  INT i = ((INT) 0);
  6852.  TP local0;
  6853.  TP local1;
  6854.  AM_ROUT_CALL_EXPR local2;
  6855.  INT local3;
  6856.  ARRAYCALL_TP local4;
  6857.  INT local5;
  6858.  ARRAYCALL_TP local6;
  6859.  AM_EXPR local7;
  6860.  TR_EXPR local8;
  6861.  TP local9;
  6862.  IMPL local10;
  6863.  IFC local11;
  6864.  INT local12;
  6865.  TR_EXPR local13;
  6866.  TP local14;
  6867.  if (self->in_constant) {
  6868.   TRANS_create_con(self, e_5574);
  6869.   return ((AM_EXPR) NULL);
  6870.  }
  6871.  if ((!((e_5574->tp==((TR_TYPE_SPEC) NULL))))) {
  6872.   at_5577 = TRANS_tp_of_TR_T(self, e_5574->tp);
  6873.   if ((!((tp_5575==((TP) NULL))))) {
  6874.    local0 = at_5577;
  6875.    if ((!((*TP_is_subtype_TP[local0->header.tag+TP_is_subtype_TP_offset])(local0, tp_5575)))) {
  6876.     TRANS_create_con_5561(self, e_5574, at_5577, tp_5575);
  6877.     return ((AM_EXPR) NULL);
  6878.    }
  6879.   }
  6880.  }
  6881.  else {
  6882.   if ((tp_5575==((TP) NULL))) {
  6883.    TRANS_create_tp_(self, e_5574);
  6884.    return ((AM_EXPR) NULL);
  6885.   }
  6886.   else {
  6887.    at_5577 = tp_5575;
  6888.   }
  6889.  }
  6890.  local1 = at_5577;
  6891.  if ((*TP_is_abstract_BOOL[local1->header.tag+TP_is_abstract_BOOL_offset])(local1)) {
  6892.   PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5574));
  6893.   PROG_err_STR(self->prog, ((STR) &Creationexpressi_5579));
  6894.   return ((AM_EXPR) NULL);
  6895.  }
  6896.  na = TR_CREATE_EXPR_e(e_5574);
  6897.  local2 = ((AM_ROUT_CALL_EXPR) NULL);
  6898.  local3 = (c_INT_plus_INT_INT_chk(na,1));
  6899.  r_5578 = AM_ROUT_CALL_EXP_5400(local2, local3, e_5574->source_38);
  6900.  av = AM_VOID_CONST_cr(((AM_VOID_CONST) NULL), e_5574->source_38);
  6901.  av->tp_at = at_5577;
  6902.  AM_ROUT_CALL_EXP_5404(r_5578, 0, ((AM_EXPR) av));
  6903.  cs = CALL_SIG_create_(((CALL_SIG) NULL));
  6904.  if ((na>0)) {
  6905.   cs->args_7 = ARRAYCALL_TP_cre(((ARRAYCALL_TP) NULL), na);
  6906.  }
  6907.  cs->tp = at_5577;
  6908.  cs->name_19 = self->prog->ident_builtin->create_ident;
  6909.  cs->has_ret = TRUE;
  6910.  ce = e_5574->elts;
  6911.  i = 0;
  6912.  while (1) {
  6913.   if ((!((ce==((TR_EXPR) NULL))))) {
  6914.   }
  6915.   else {
  6916.    goto after_loop;
  6917.   }
  6918.   local4 = cs->args_7;
  6919.   ARRAYCALL_TP_ase(local4, i, TRANS_call_tp_of(self, ce));
  6920.   if ((ARRAYCALL_TP_age(cs->args_7, i)==((CALL_TP) NULL))) {
  6921.    local5 = (c_INT_plus_INT_INT_chk(i,1));
  6922.    AM_ROUT_CALL_EXP_5404(r_5578, local5, TRANS_transform__5198(self, ce, ((TP) NULL)));
  6923.    if ((AM_ROUT_CALL_EXP_4316(r_5578, (c_INT_plus_INT_INT_chk(i,1)))==((AM_EXPR) NULL))) {
  6924.     return ((AM_EXPR) NULL);
  6925.    }
  6926.    local6 = cs->args_7;
  6927.    local7 = AM_ROUT_CALL_EXP_4316(r_5578, (c_INT_plus_INT_INT_chk(i,1)));
  6928.    ARRAYCALL_TP_ase(local6, i, ((CALL_TP) (*AM_EXPR_tp_TP[local7->header.tag+AM_EXPR_tp_TP_offset])(local7)));
  6929.   }
  6930.   local8 = ce;
  6931.   ce = (*TR_EXPR_next_TR_EXPR[local8->header.tag+TR_EXPR_next_TR_EXPR_offset])(local8);
  6932.   i = (c_INT_plus_INT_INT_chk(i,1));
  6933.  }
  6934.  after_loop: ;
  6935.  PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5574));
  6936.  local9 = at_5577;
  6937.  if ((*TP_is_eq_TP_BOOL[local9->header.tag+TP_is_eq_TP_BOOL_offset])(local9, ((TP) self->tp_con->same_34))) {
  6938.   local10 = IMPL_TBL_impl_of(self->prog->impl_tbl, at_5577);
  6939.   r_5578->fun = IMPL_sig_for_int(local10, cs);
  6940.  }
  6941.  else {
  6942.   local11 = IFC_TBL_ifc_of_T(self->prog->ifc_tbl, at_5577);
  6943.   r_5578->fun = IFC_sig_for_call(local11, cs);
  6944.  }
  6945.  if ((r_5578->fun==((SIG) NULL))) {
  6946.   return ((AM_EXPR) NULL);
  6947.  }
  6948.  ce = e_5574->elts;
  6949.  i = 0;
  6950.  while (1) {
  6951.   if ((!((ce==((TR_EXPR) NULL))))) {
  6952.   }
  6953.   else {
  6954.    goto after_loop_5581;
  6955.   }
  6956.   if ((AM_ROUT_CALL_EXP_4316(r_5578, (c_INT_plus_INT_INT_chk(i,1)))==((AM_EXPR) NULL))) {
  6957.    local12 = (c_INT_plus_INT_INT_chk(i,1));
  6958.    AM_ROUT_CALL_EXP_5404(r_5578, local12, TRANS_transform__5198(self, ce, ARRAYTP_aget_INT_TP(r_5578->fun->args_7, i)));
  6959.    if ((AM_ROUT_CALL_EXP_4316(r_5578, (c_INT_plus_INT_INT_chk(i,1)))==((AM_EXPR) NULL))) {
  6960.     return ((AM_EXPR) NULL);
  6961.    }
  6962.   }
  6963.   local13 = ce;
  6964.   ce = (*TR_EXPR_next_TR_EXPR[local13->header.tag+TR_EXPR_next_TR_EXPR_offset])(local13);
  6965.   i = (c_INT_plus_INT_INT_chk(i,1));
  6966.  }
  6967.  after_loop_5581: ;
  6968.  local14 = r_5578->fun->ret;
  6969.  if ((*TP_is_neq_TP_BOOL[local14->header.tag+TP_is_neq_TP_BOOL_offset])(local14, at_5577)) {
  6970.   TRANS_create_bad(self, e_5574, r_5578->fun->ret, at_5577);
  6971.   return ((AM_EXPR) NULL);
  6972.  }
  6973.  self->cur_rout->calls_58 = FLISTAM_EXPR_pus(self->cur_rout->calls_58, ((AM_EXPR) r_5578));
  6974.  return TRANS_inline_AM_(self, r_5578);
  6975. }
  6976.  
  6977.  
  6978. void TRANS_bound_crea(TRANS self, TR_BOUND_CREATE_EXPR e_5583) {
  6979.  PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5583));
  6980.  PROG_err_STR(self->prog, ((STR) &Boundcreationexp));
  6981. }
  6982.  
  6983.  
  6984. void TRANS_bound_crea_5584(TRANS self, TR_BOUND_CREATE_EXPR e_5585) {
  6985.  PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5585));
  6986.  PROG_err_STR(self->prog, ((STR) &Boundcreationcal));
  6987. }
  6988.  
  6989.  
  6990. void TRANS_bound_crea_5586(TRANS self, TR_BOUND_CREATE_EXPR e_5587) {
  6991.  PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5587));
  6992.  PROG_err_STR(self->prog, ((STR) &Boundcreationcal_5588));
  6993. }
  6994.  
  6995.  
  6996. void TRANS_bound_crea_5589(TRANS self, TR_BOUND_CREATE_EXPR e_5590) {
  6997.  PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5590));
  6998.  PROG_err_STR(self->prog, ((STR) &Boundcreationcal_5591));
  6999. }
  7000.  
  7001.  
  7002. void TRANS_bound_crea_5592(TRANS self, TR_BOUND_CREATE_EXPR e_5593) {
  7003.  PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5593));
  7004.  PROG_err_STR(self->prog, ((STR) &Boundcreationcal_5594));
  7005. }
  7006.  
  7007.  
  7008. TUPAM_EXPRTP TRANS_bound_crea_5595(TRANS self, TR_BOUND_CREATE_EXPR e_5596) {
  7009.  TUPAM_EXPRTP noname5597 = TUPAM_EXPRTP_zero;
  7010.  TR_CALL_EXPR call_5598;
  7011.  TR_EXPR self_tr;
  7012.  AM_EXPR self_val = ((AM_EXPR) NULL);
  7013.  AM_VOID_CONST res;
  7014.  AM_LOCAL_EXPR l;
  7015.  TUPAM_EXPRTP local0;
  7016.  AM_EXPR local1;
  7017.  TUPAM_EXPRTP local2;
  7018.  AM_EXPR local3;
  7019.  TUPAM_EXPRTP local4;
  7020.  AM_EXPR local5;
  7021.  TUPAM_EXPRTP local6;
  7022.  AM_EXPR local7;
  7023.  TUPAM_EXPRTP local8;
  7024.  AM_EXPR local9;
  7025.  call_5598 = e_5596->call_43;
  7026.  self_tr = call_5598->ob;
  7027.  if ((!((self_tr==((TR_EXPR) NULL))))) {
  7028.   if (self_tr==NULL) {
  7029.    self_val = TRANS_transform__5198(self, self_tr, ((TP) NULL));
  7030.    local0 = TUPAM_EXPRTP_zero;
  7031.    local1 = self_val;
  7032.    return TUPAM_EXPRTP_cre(local0, self_val, (*AM_EXPR_tp_TP[local1->header.tag+AM_EXPR_tp_TP_offset])(local1));
  7033.   } else
  7034.   switch (self_tr->header.tag) {
  7035.    case TR_VOID_EXPR_tag:
  7036.     TRANS_bound_crea_5584(self, e_5596);
  7037.     return TUPAM_EXPRTP_cre(TUPAM_EXPRTP_zero, ((AM_EXPR) NULL), ((TP) NULL)); break;
  7038.    case TR_CREATE_EXPR_tag:
  7039.     if ((((TR_CREATE_EXPR) self_tr)->tp==((TR_TYPE_SPEC) NULL))) {
  7040.      TRANS_bound_crea_5586(self, e_5596);
  7041.      return TUPAM_EXPRTP_cre(TUPAM_EXPRTP_zero, ((AM_EXPR) NULL), ((TP) NULL));
  7042.     }
  7043.     else {
  7044.      self_val = TRANS_transform__5198(self, self_tr, ((TP) NULL));
  7045.      local2 = TUPAM_EXPRTP_zero;
  7046.      local3 = self_val;
  7047.      return TUPAM_EXPRTP_cre(local2, self_val, (*AM_EXPR_tp_TP[local3->header.tag+AM_EXPR_tp_TP_offset])(local3));
  7048.     } break;
  7049.    case TR_ARRAY_EXPR_tag:
  7050.     TRANS_bound_crea_5589(self, e_5596);
  7051.     return TUPAM_EXPRTP_cre(TUPAM_EXPRTP_zero, ((AM_EXPR) NULL), ((TP) NULL)); break;
  7052.    case TR_UNDERSCORE_ARG_tag:
  7053.     if ((((TR_UNDERSCORE_ARG) self_tr)->tp==((TR_TYPE_SPEC) NULL))) {
  7054.      return TUPAM_EXPRTP_cre(TUPAM_EXPRTP_zero, ((AM_EXPR) NULL), self->impl->tp);
  7055.     }
  7056.     else {
  7057.      local4 = TUPAM_EXPRTP_zero;
  7058.      local5 = ((AM_EXPR) NULL);
  7059.      return TUPAM_EXPRTP_cre(local4, local5, TRANS_tp_of_TR_T(self, ((TR_UNDERSCORE_ARG) self_tr)->tp));
  7060.     } break;
  7061.    default: ;
  7062.     self_val = TRANS_transform__5198(self, self_tr, ((TP) NULL));
  7063.     local6 = TUPAM_EXPRTP_zero;
  7064.     local7 = self_val;
  7065.     return TUPAM_EXPRTP_cre(local6, self_val, (*AM_EXPR_tp_TP[local7->header.tag+AM_EXPR_tp_TP_offset])(local7));
  7066.   }
  7067.  }
  7068.  else {
  7069.   if ((!((call_5598->tp==((TR_TYPE_SPEC) NULL))))) {
  7070.    res = AM_VOID_CONST_cr(((AM_VOID_CONST) NULL), call_5598->source_38);
  7071.    res->tp_at = TRANS_tp_of_TR_T(self, call_5598->tp);
  7072.    return TUPAM_EXPRTP_cre(TUPAM_EXPRTP_zero, ((AM_EXPR) res), res->tp_at);
  7073.   }
  7074.   else {
  7075.    if ((call_5598->args_7==((TR_EXPR) NULL))) {
  7076.     l = TRANS_local_with(self, call_5598->name_19);
  7077.     if ((!((l==((AM_LOCAL_EXPR) NULL))))) {
  7078.      TRANS_bound_crea_5592(self, e_5596);
  7079.      return TUPAM_EXPRTP_cre(TUPAM_EXPRTP_zero, ((AM_EXPR) NULL), ((TP) NULL));
  7080.     }
  7081.    }
  7082.    self_val = ((AM_EXPR) AM_ROUT_DEF_self(self->cur_rout));
  7083.   }
  7084.  }
  7085.  local8 = TUPAM_EXPRTP_zero;
  7086.  local9 = self_val;
  7087.  return TUPAM_EXPRTP_cre(local8, self_val, (*AM_EXPR_tp_TP[local9->header.tag+AM_EXPR_tp_TP_offset])(local9));
  7088. }
  7089.  
  7090.  
  7091. INT TRANS_bound_crea_5599(TRANS self, AM_EXPR self_val, TR_BOUND_CREATE_EXPR e_5600) {
  7092.  INT noname5601 = ((INT) 0);
  7093.  INT r_5602 = ((INT) 0);
  7094.  TR_EXPR a_5603;
  7095.  TR_EXPR local0;
  7096.  if ((self_val==((AM_EXPR) NULL))) {
  7097.   r_5602 = 0;
  7098.  }
  7099.  else {
  7100.   r_5602 = 1;
  7101.  }
  7102.  a_5603 = e_5600->call_43->args_7;
  7103.  while (1) {
  7104.   if ((!((a_5603==((TR_EXPR) NULL))))) {
  7105.   }
  7106.   else {
  7107.    goto after_loop;
  7108.   }
  7109.   if (a_5603==NULL) {
  7110.    r_5602 = (c_INT_plus_INT_INT_chk(r_5602,1));
  7111.   } else
  7112.   switch (a_5603->header.tag) {
  7113.    case TR_UNDERSCORE_ARG_tag: break;
  7114.    default: ;
  7115.     r_5602 = (c_INT_plus_INT_INT_chk(r_5602,1));
  7116.   }
  7117.   local0 = a_5603;
  7118.   a_5603 = (*TR_EXPR_next_TR_EXPR[local0->header.tag+TR_EXPR_next_TR_EXPR_offset])(local0);
  7119.  }
  7120.  after_loop: ;
  7121.  return r_5602;
  7122. }
  7123.  
  7124.  
  7125. AM_BND_CREATE_EXPR AM_BND_CREATE_EX_5605(AM_BND_CREATE_EXPR self, INT n_5606) {
  7126.  AM_BND_CREATE_EXPR noname5607;
  7127.  AM_BND_CREATE_EXPR local0;
  7128.  if (!((n_5606>=0))) {
  7129.   fprintf(stderr,"Violation of precondition ../Library/array.sa:56:9\n");
  7130.   exit(16);
  7131.  }
  7132.  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));
  7133.  local0->asize = n_5606;
  7134.  return local0;
  7135. }
  7136.  
  7137.  
  7138. SIG TRANS_bound_crea_5608(TRANS self, TR_BOUND_CREATE_EXPR e_5609, TP self_tp_5610) {
  7139.  SIG noname5611;
  7140.  CALL_SIG call_sig;
  7141.  TR_EXPR ca;
  7142.  CALL_TP atp;
  7143.  ARRAYCALL_TP noname5612;
  7144.  ARRAYCALL_TP local0;
  7145.  AM_EXPR local1;
  7146.  TR_EXPR local2;
  7147.  TP local3;
  7148.  call_sig = CALL_SIG_create_(((CALL_SIG) NULL));
  7149.  call_sig->tp = self_tp_5610;
  7150.  call_sig->name_19 = e_5609->call_43->name_19;
  7151.  local0 = ((ARRAYCALL_TP) NULL);
  7152.  call_sig->args_7 = ARRAYCALL_TP_cre(local0, TR_CALL_EXPR_arg(e_5609->call_43));
  7153.  if ((!((e_5609->ret==((TR_TYPE_SPEC) NULL))))) {
  7154.   call_sig->has_ret = TRUE;
  7155.  }
  7156.  else {
  7157.   call_sig->unknown_ret = TRUE;
  7158.  }
  7159.  ca = e_5609->call_43->args_7;
  7160.  {
  7161.   struct ARRAYCALL_TP_set_frame_struct temp5613_0;
  7162.   ARRAYCALL_TP_set_frame 
  7163.   noname5614 = &temp5613_0;
  7164.   noname5614->state = 0;
  7165.   while (1) {
  7166.    if ((!((ca==((TR_EXPR) NULL))))) {
  7167.    }
  7168.    else {
  7169.     goto after_loop;
  7170.    }
  7171.    atp = TRANS_call_tp_of(self, ca);
  7172.    if ((atp==((CALL_TP) NULL))) {
  7173.     local1 = TRANS_transform__5198(self, ca, ((TP) NULL));
  7174.     atp = ((CALL_TP) (*AM_EXPR_tp_TP[local1->header.tag+AM_EXPR_tp_TP_offset])(local1));
  7175.    }
  7176.    if (noname5614->state == 0) {
  7177.     noname5612 = call_sig->args_7;
  7178.     noname5614->arg0 = noname5612;
  7179.    }
  7180.    noname5614->arg1 = atp;
  7181.    ARRAYCALL_TP_set(noname5614);
  7182.    if (noname5614->state == -1) goto after_loop;
  7183.    0 /* No return value from iter call */;
  7184.    local2 = ca;
  7185.    ca = (*TR_EXPR_next_TR_EXPR[local2->header.tag+TR_EXPR_next_TR_EXPR_offset])(local2);
  7186.   }
  7187.  }
  7188.  after_loop: ;
  7189.  PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5609));
  7190.  local3 = self_tp_5610;
  7191.  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)));
  7192. }
  7193.  
  7194.  
  7195. void TRANS_bound_crea_5615(TRANS self, TR_BOUND_CREATE_EXPR e_5616) {
  7196.  PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5616));
  7197.  PROG_err_STR(self->prog, ((STR) &Bounditersmustbe));
  7198. }
  7199.  
  7200.  
  7201. void TRANS_bound_crea_5617(TRANS self, TR_BOUND_CREATE_EXPR e_5618) {
  7202.  PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5618));
  7203.  PROG_err_STR(self->prog, ((STR) &Boundroutinesmus));
  7204. }
  7205.  
  7206.  
  7207. ARRAYINT ARRAYINT_create_(ARRAYINT self, INT n_5619) {
  7208.  ARRAYINT noname5620;
  7209.  ARRAYINT local0;
  7210.  if (!((n_5619>=0))) {
  7211.   fprintf(stderr,"Violation of precondition ../Library/array.sa:56:9\n");
  7212.   exit(16);
  7213.  }
  7214.  local0 = ((ARRAYINT) sbi_arr_alloc_atomic(sizeof(struct ARRAYINT_struct), ARRAYINT_tag, sizeof(INT) , n_5619));
  7215.  local0->asize = n_5619;
  7216.  return local0;
  7217. }
  7218.  
  7219.  
  7220. void ARRAYINT_aset_IN(ARRAYINT self, INT ind_5621, INT val_5622) {
  7221.  BOOL local0;
  7222.  INT local1;
  7223.  INT local2;
  7224.  if ((!((self==((ARRAYINT) NULL))))) {
  7225.   local1 = 0;
  7226.   local2 = (self->asize);
  7227.   local0 = INT_is_bet_INT_I(ind_5621, local1, (c_INT_minus_INT_INT_chk(local2,1)));
  7228.  } else {
  7229.   local0 = FALSE;
  7230.  }
  7231.  if (!(local0)) {
  7232.   fprintf(stderr,"Violation of precondition ../Library/aref.sa:38:7\n");
  7233.   exit(16);
  7234.  }
  7235.  if (ind_5621<0||ind_5621>=self->asize) {
  7236.   fprintf(stderr,"Index out of bounds ../Library/aref.sa:38:7\n");
  7237.   exit(16);
  7238.  }
  7239.  self->arr_part[ind_5621] = val_5622;
  7240. }
  7241.  
  7242.  
  7243. ARRAYINT TRANS_bound_crea_5623(TRANS self, INT nbnd, TR_BOUND_CREATE_EXPR e_5624) {
  7244.  ARRAYINT noname5625;
  7245.  ARRAYINT r_5626;
  7246.  INT rind = ((INT) 0);
  7247.  TR_EXPR st;
  7248.  INT aind = ((INT) 0);
  7249.  TR_EXPR a_5627;
  7250.  TR_EXPR local0;
  7251.  r_5626 = ARRAYINT_create_(((ARRAYINT) NULL), nbnd);
  7252.  rind = 0;
  7253.  st = e_5624->call_43->ob;
  7254.  if (st==NULL) {
  7255.   ARRAYINT_aset_IN(r_5626, rind, 0);
  7256.   rind = (c_INT_plus_INT_INT_chk(rind,1));
  7257.  } else
  7258.  switch (st->header.tag) {
  7259.   case TR_UNDERSCORE_ARG_tag: break;
  7260.   default: ;
  7261.    ARRAYINT_aset_IN(r_5626, rind, 0);
  7262.    rind = (c_INT_plus_INT_INT_chk(rind,1));
  7263.  }
  7264.  aind = 0;
  7265.  a_5627 = e_5624->call_43->args_7;
  7266.  while (1) {
  7267.   if ((!((a_5627==((TR_EXPR) NULL))))) {
  7268.   }
  7269.   else {
  7270.    goto after_loop;
  7271.   }
  7272.   aind = (c_INT_plus_INT_INT_chk(aind,1));
  7273.   if (a_5627==NULL) {
  7274.    ARRAYINT_aset_IN(r_5626, rind, aind);
  7275.    rind = (c_INT_plus_INT_INT_chk(rind,1));
  7276.   } else
  7277.   switch (a_5627->header.tag) {
  7278.    case TR_UNDERSCORE_ARG_tag: break;
  7279.    default: ;
  7280.     ARRAYINT_aset_IN(r_5626, rind, aind);
  7281.     rind = (c_INT_plus_INT_INT_chk(rind,1));
  7282.   }
  7283.   local0 = a_5627;
  7284.   a_5627 = (*TR_EXPR_next_TR_EXPR[local0->header.tag+TR_EXPR_next_TR_EXPR_offset])(local0);
  7285.  }
  7286.  after_loop: ;
  7287.  return r_5626;
  7288. }
  7289.  
  7290.  
  7291. ARRAYINT TRANS_bound_crea_5629(TRANS self, INT nbnd, TR_BOUND_CREATE_EXPR e_5630) {
  7292.  ARRAYINT noname5631;
  7293.  ARRAYINT r_5632;
  7294.  INT rind = ((INT) 0);
  7295.  TR_EXPR st;
  7296.  INT aind = ((INT) 0);
  7297.  TR_EXPR a_5633;
  7298.  ARRAYINT local0;
  7299.  INT local1;
  7300.  INT local2;
  7301.  TR_EXPR local3;
  7302.  local0 = ((ARRAYINT) NULL);
  7303.  local1 = 1;
  7304.  local2 = (c_INT_plus_INT_INT_chk(local1,TR_CALL_EXPR_arg(e_5630->call_43)));
  7305.  r_5632 = ARRAYINT_create_(local0, (c_INT_minus_INT_INT_chk(local2,nbnd)));
  7306.  rind = 0;
  7307.  st = e_5630->call_43->ob;
  7308.  if (st==NULL) {
  7309.  } else
  7310.  switch (st->header.tag) {
  7311.   case TR_UNDERSCORE_ARG_tag:
  7312.    ARRAYINT_aset_IN(r_5632, rind, 0);
  7313.    rind = (c_INT_plus_INT_INT_chk(rind,1)); break;
  7314.   default: ;
  7315.  }
  7316.  aind = 0;
  7317.  a_5633 = e_5630->call_43->args_7;
  7318.  while (1) {
  7319.   if ((!((a_5633==((TR_EXPR) NULL))))) {
  7320.   }
  7321.   else {
  7322.    goto after_loop;
  7323.   }
  7324.   aind = (c_INT_plus_INT_INT_chk(aind,1));
  7325.   if (a_5633==NULL) {
  7326.   } else
  7327.   switch (a_5633->header.tag) {
  7328.    case TR_UNDERSCORE_ARG_tag:
  7329.     ARRAYINT_aset_IN(r_5632, rind, aind);
  7330.     rind = (c_INT_plus_INT_INT_chk(rind,1)); break;
  7331.    default: ;
  7332.   }
  7333.   local3 = a_5633;
  7334.   a_5633 = (*TR_EXPR_next_TR_EXPR[local3->header.tag+TR_EXPR_next_TR_EXPR_offset])(local3);
  7335.  }
  7336.  after_loop: ;
  7337.  return r_5632;
  7338. }
  7339.  
  7340.  
  7341. void AM_BND_CREATE_EX_5635(AM_BND_CREATE_EXPR self, INT ind_5636, AM_EXPR val_5637) {
  7342.  BOOL local0;
  7343.  INT local1;
  7344.  INT local2;
  7345.  if ((!((self==((AM_BND_CREATE_EXPR) NULL))))) {
  7346.   local1 = 0;
  7347.   local2 = (self->asize);
  7348.   local0 = INT_is_bet_INT_I(ind_5636, local1, (c_INT_minus_INT_INT_chk(local2,1)));
  7349.  } else {
  7350.   local0 = FALSE;
  7351.  }
  7352.  if (!(local0)) {
  7353.   fprintf(stderr,"Violation of precondition ../Library/aref.sa:38:7\n");
  7354.   exit(16);
  7355.  }
  7356.  if (ind_5636<0||ind_5636>=self->asize) {
  7357.   fprintf(stderr,"Index out of bounds ../Library/aref.sa:38:7\n");
  7358.   exit(16);
  7359.  }
  7360.  self->arr_part[ind_5636] = val_5637;
  7361. }
  7362.  
  7363.  
  7364. void TRANS_bound_crea_5638(TRANS self, TR_BOUND_CREATE_EXPR e_5639) {
  7365.  PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5639));
  7366.  PROG_err_STR(self->prog, ((STR) &Theexpressionfor_5640));
  7367. }
  7368.  
  7369.  
  7370. void TRANS_bound_crea_5641(TRANS self, TR_EXPR a_5642) {
  7371.  PROG_err_loc_PRO(self->prog, ((PROG_ERR) a_5642));
  7372.  PROG_err_STR(self->prog, ((STR) &Onceargumentsofi));
  7373. }
  7374.  
  7375.  
  7376. INT ARRAYINT_size_INT(ARRAYINT self) {
  7377.  INT noname5643 = ((INT) 0);
  7378.  if ((self==((ARRAYINT) NULL))) {
  7379.   return 0;
  7380.  }
  7381.  return (self->asize);
  7382. }
  7383.  
  7384.  
  7385. void TRANS_bound_crea_5644(TRANS self, AM_BND_CREATE_EXPR r_5645) {
  7386.  SIG fun_5646;
  7387.  ARRAYTP args_5647;
  7388.  TP t_5648 = ((TP) NULL);
  7389.  BOOL h = ((BOOL) 0);
  7390.  ARRAYBOOL hot_5649;
  7391.  ARRAYINT noname5650;
  7392.  INT i = ((INT) 0);
  7393.  ARRAYTP noname5651;
  7394.  ARRAYBOOL noname5652;
  7395.  ARRAYINT noname5653;
  7396.  INT i_5654 = ((INT) 0);
  7397.  ARRAYTP noname5655;
  7398.  ARRAYTP local0;
  7399.  ARRAYBOOL local1;
  7400.  INT local2;
  7401.  ARRAYTP local3;
  7402.  BOOL local4;
  7403.  ARRAYBOOL local5;
  7404.  INT local6;
  7405.  ARRAYTP local7;
  7406.  fun_5646 = r_5645->fun;
  7407.  local0 = ((ARRAYTP) NULL);
  7408.  args_5647 = ARRAYTP_create_I(local0, ARRAYINT_size_INT(r_5645->unbnd_args));
  7409.  if (SIG_is_iter_BOOL(fun_5646)) {
  7410.   local1 = ((ARRAYBOOL) NULL);
  7411.   hot_5649 = ARRAYBOOL_create(local1, ARRAYINT_size_INT(r_5645->unbnd_args));
  7412.   {
  7413.    struct ARRAYINT_elt_INT_frame_struct temp5656_0;
  7414.    ARRAYINT_elt_INT_frame 
  7415.    noname5657 = &temp5656_0;
  7416.    struct ARRAYTP_set_TP_frame_struct temp5656_1;
  7417.    ARRAYTP_set_TP_frame 
  7418.    noname5658 = &temp5656_1;
  7419.    struct ARRAYBOOL_set_BOOL_frame_struct temp5656_2;
  7420.    ARRAYBOOL_set_BOOL_frame 
  7421.    noname5659 = &temp5656_2;
  7422.    noname5657->state = 0;
  7423.    noname5658->state = 0;
  7424.    noname5659->state = 0;
  7425.    while (1) {
  7426.     if (noname5657->state == 0) {
  7427.      noname5650 = r_5645->unbnd_args;
  7428.      noname5657->arg0 = noname5650;
  7429.     }
  7430.     local2 = ARRAYINT_elt_INT(noname5657);
  7431.     if (noname5657->state == -1) goto after_loop;
  7432.     i = local2;
  7433.     if ((i==0)) {
  7434.      t_5648 = fun_5646->tp;
  7435.     }
  7436.     else {
  7437.      local3 = fun_5646->args_7;
  7438.      t_5648 = ARRAYTP_aget_INT_TP(local3, (c_INT_minus_INT_INT_chk(i,1)));
  7439.     }
  7440.     if (noname5658->state == 0) {
  7441.      noname5651 = args_5647;
  7442.      noname5658->arg0 = noname5651;
  7443.     }
  7444.     noname5658->arg1 = t_5648;
  7445.     ARRAYTP_set_TP(noname5658);
  7446.     if (noname5658->state == -1) goto after_loop;
  7447.     0 /* No return value from iter call */;
  7448.     if ((i==0)) {
  7449.      local4 = TRUE;
  7450.     } else {
  7451.      local4 = (fun_5646->hot==((ARRAYBOOL) NULL));
  7452.     }
  7453.     if (local4) {
  7454.      h = FALSE;
  7455.     }
  7456.     else {
  7457.      local5 = fun_5646->hot;
  7458.      h = ARRAYBOOL_aget_I(local5, (c_INT_minus_INT_INT_chk(i,1)));
  7459.     }
  7460.     if (noname5659->state == 0) {
  7461.      noname5652 = hot_5649;
  7462.      noname5659->arg0 = noname5652;
  7463.     }
  7464.     noname5659->arg1 = h;
  7465.     ARRAYBOOL_set_BOOL(noname5659);
  7466.     if (noname5659->state == -1) goto after_loop;
  7467.     0 /* No return value from iter call */;
  7468.    }
  7469.   }
  7470.   after_loop: ;
  7471.   r_5645->tp_at = ((TP) TP_TBL_tp_iter_f(self->prog->tp_tbl, args_5647, hot_5649, fun_5646->ret));
  7472.  }
  7473.  else {
  7474.   {
  7475.    struct ARRAYINT_elt_INT_frame_struct temp5661_0;
  7476.    ARRAYINT_elt_INT_frame 
  7477.    noname5662 = &temp5661_0;
  7478.    struct ARRAYTP_set_TP_frame_struct temp5661_1;
  7479.    ARRAYTP_set_TP_frame 
  7480.    noname5663 = &temp5661_1;
  7481.    noname5662->state = 0;
  7482.    noname5663->state = 0;
  7483.    while (1) {
  7484.     if (noname5662->state == 0) {
  7485.      noname5653 = r_5645->unbnd_args;
  7486.      noname5662->arg0 = noname5653;
  7487.     }
  7488.     local6 = ARRAYINT_elt_INT(noname5662);
  7489.     if (noname5662->state == -1) goto after_loop_5660;
  7490.     i_5654 = local6;
  7491.     if ((i_5654==0)) {
  7492.      t_5648 = fun_5646->tp;
  7493.     }
  7494.     else {
  7495.      local7 = fun_5646->args_7;
  7496.      t_5648 = ARRAYTP_aget_INT_TP(local7, (c_INT_minus_INT_INT_chk(i_5654,1)));
  7497.     }
  7498.     if (noname5663->state == 0) {
  7499.      noname5655 = args_5647;
  7500.      noname5663->arg0 = noname5655;
  7501.     }
  7502.     noname5663->arg1 = t_5648;
  7503.     ARRAYTP_set_TP(noname5663);
  7504.     if (noname5663->state == -1) goto after_loop_5660;
  7505.     0 /* No return value from iter call */;
  7506.    }
  7507.   }
  7508.   after_loop_5660: ;
  7509.   r_5645->tp_at = ((TP) TP_TBL_tp_rout_f(self->prog->tp_tbl, args_5647, fun_5646->ret));
  7510.  }
  7511. }
  7512.  
  7513.  
  7514. void TRANS_bound_crea_5664(TRANS self, TR_BOUND_CREATE_EXPR e_5665, TP stp, TP tp_5666) {
  7515.  PROG local0;
  7516.  STR local1;
  7517.  TP local2;
  7518.  STR local3;
  7519.  STR local4;
  7520.  TP local5;
  7521.  STR local6;
  7522.  PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5665));
  7523.  local0 = self->prog;
  7524.  local1 = ((STR) &Thetypeoftheboun);
  7525.  local2 = stp;
  7526.  local3 = STR_plus_STR_STR(local1, (*TP_str_STR[local2->header.tag+TP_str_STR_offset])(local2));
  7527.  local4 = STR_plus_STR_STR(local3, ((STR) &isnotasubtypeof_5667));
  7528.  local5 = tp_5666;
  7529.  local6 = STR_plus_STR_STR(local4, (*TP_str_STR[local5->header.tag+TP_str_STR_offset])(local5));
  7530.  PROG_err_STR(local0, STR_plus_STR_STR(local6, ((STR) &name_5668)));
  7531. }
  7532.  
  7533.  
  7534. AM_EXPR TRANS_transform__5669(TRANS self, TR_BOUND_CREATE_EXPR e_5670, TP tp_5671) {
  7535.  AM_EXPR noname5672;
  7536.  TUPAM_EXPRTP st = TUPAM_EXPRTP_zero;
  7537.  AM_EXPR self_val;
  7538.  TP self_tp_5673;
  7539.  INT nbnd = ((INT) 0);
  7540.  AM_BND_CREATE_EXPR r_5674;
  7541.  INT bind_5675 = ((INT) 0);
  7542.  BOOL hot_5676 = ((BOOL) 0);
  7543.  TR_EXPR a_5677;
  7544.  ARRAYTP noname5678;
  7545.  TP atp;
  7546.  ARRAYBOOL noname5679;
  7547.  BOOL local0;
  7548.  BOOL local1;
  7549.  BOOL local2;
  7550.  TP local3;
  7551.  BOOL local4;
  7552.  BOOL local5;
  7553.  BOOL local6;
  7554.  BOOL local7;
  7555.  BOOL local8;
  7556.  TR_EXPR local9;
  7557.  BOOL local10;
  7558.  TP local11;
  7559.  if (self->in_constant) {
  7560.   TRANS_bound_crea(self, e_5670);
  7561.   return ((AM_EXPR) NULL);
  7562.  }
  7563.  st = TRANS_bound_crea_5595(self, e_5670);
  7564.  self_val = st.t1;
  7565.  self_tp_5673 = st.t2;
  7566.  if ((self_tp_5673==((TP) NULL))) {
  7567.   return ((AM_EXPR) NULL);
  7568.  }
  7569.  nbnd = TRANS_bound_crea_5599(self, self_val, e_5670);
  7570.  r_5674 = AM_BND_CREATE_EX_5605(((AM_BND_CREATE_EXPR) NULL), nbnd);
  7571.  r_5674->fun = TRANS_bound_crea_5608(self, e_5670, self_tp_5673);
  7572.  if ((r_5674->fun==((SIG) NULL))) {
  7573.   return ((AM_EXPR) NULL);
  7574.  }
  7575.  if (e_5670->is_iter) {
  7576.   local0 = (!(SIG_is_iter_BOOL(r_5674->fun)));
  7577.  } else {
  7578.   local0 = FALSE;
  7579.  }
  7580.  if (local0) {
  7581.   TRANS_bound_crea_5615(self, e_5670);
  7582.   return ((AM_EXPR) NULL);
  7583.  }
  7584.  else {
  7585.   if ((!(e_5670->is_iter))) {
  7586.    local1 = SIG_is_iter_BOOL(r_5674->fun);
  7587.   } else {
  7588.    local1 = FALSE;
  7589.   }
  7590.   if (local1) {
  7591.    TRANS_bound_crea_5617(self, e_5670);
  7592.    return ((AM_EXPR) NULL);
  7593.   }
  7594.  }
  7595.  r_5674->bnd_args = TRANS_bound_crea_5623(self, nbnd, e_5670);
  7596.  r_5674->unbnd_args = TRANS_bound_crea_5629(self, nbnd, e_5670);
  7597.  bind_5675 = 0;
  7598.  if ((!((self_val==((AM_EXPR) NULL))))) {
  7599.   AM_BND_CREATE_EX_5635(r_5674, bind_5675, self_val);
  7600.   bind_5675 = (c_INT_plus_INT_INT_chk(bind_5675,1));
  7601.   if (e_5670->is_iter) {
  7602.    local2 = TRANS_contains_i(self, self_val);
  7603.   } else {
  7604.    local2 = FALSE;
  7605.   }
  7606.   if (local2) {
  7607.    TRANS_bound_crea_5638(self, e_5670);
  7608.    return ((AM_EXPR) NULL);
  7609.   }
  7610.   a_5677 = e_5670->call_43->args_7;
  7611.   {
  7612.    struct ARRAYTP_elt_TP_frame_struct temp5680_0;
  7613.    ARRAYTP_elt_TP_frame 
  7614.    noname5681 = &temp5680_0;
  7615.    struct ARRAYBOOL_elt_BOOL_frame_struct temp5680_1;
  7616.    ARRAYBOOL_elt_BOOL_frame 
  7617.    noname5682 = &temp5680_1;
  7618.    noname5681->state = 0;
  7619.    noname5682->state = 0;
  7620.    while (1) {
  7621.     if ((!((a_5677==((TR_EXPR) NULL))))) {
  7622.     }
  7623.     else {
  7624.      goto after_loop;
  7625.     }
  7626.     if (noname5681->state == 0) {
  7627.      noname5678 = r_5674->fun->args_7;
  7628.      noname5681->arg0 = noname5678;
  7629.     }
  7630.     local3 = ARRAYTP_elt_TP(noname5681);
  7631.     if (noname5681->state == -1) goto after_loop;
  7632.     atp = local3;
  7633.     if ((!((r_5674->fun->hot==((ARRAYBOOL) NULL))))) {
  7634.      if (noname5682->state == 0) {
  7635.       noname5679 = r_5674->fun->hot;
  7636.       noname5682->arg0 = noname5679;
  7637.      }
  7638.      local4 = ARRAYBOOL_elt_BOOL(noname5682);
  7639.      if (noname5682->state == -1) goto after_loop;
  7640.      hot_5676 = local4;
  7641.     }
  7642.     if (a_5677==NULL) {
  7643.      AM_BND_CREATE_EX_5635(r_5674, bind_5675, TRANS_transform__5198(self, a_5677, atp));
  7644.      if ((AM_BND_CREATE_EX_3787(r_5674, bind_5675)==((AM_EXPR) NULL))) {
  7645.       return ((AM_EXPR) NULL);
  7646.      }
  7647.      if (e_5670->is_iter) {
  7648.       local6 = (!(hot_5676));
  7649.      } else {
  7650.       local6 = FALSE;
  7651.      }
  7652.      if (local6) {
  7653.       local5 = TRANS_contains_i(self, AM_BND_CREATE_EX_3787(r_5674, bind_5675));
  7654.      } else {
  7655.       local5 = FALSE;
  7656.      }
  7657.      if (local5) {
  7658.       TRANS_bound_crea_5641(self, a_5677);
  7659.       return ((AM_EXPR) NULL);
  7660.      }
  7661.      bind_5675 = (c_INT_plus_INT_INT_chk(bind_5675,1));
  7662.     } else
  7663.     switch (a_5677->header.tag) {
  7664.      case TR_UNDERSCORE_ARG_tag: break;
  7665.      default: ;
  7666.       AM_BND_CREATE_EX_5635(r_5674, bind_5675, TRANS_transform__5198(self, a_5677, atp));
  7667.       if ((AM_BND_CREATE_EX_3787(r_5674, bind_5675)==((AM_EXPR) NULL))) {
  7668.        return ((AM_EXPR) NULL);
  7669.       }
  7670.       if (e_5670->is_iter) {
  7671.        local8 = (!(hot_5676));
  7672.       } else {
  7673.        local8 = FALSE;
  7674.       }
  7675.       if (local8) {
  7676.        local7 = TRANS_contains_i(self, AM_BND_CREATE_EX_3787(r_5674, bind_5675));
  7677.       } else {
  7678.        local7 = FALSE;
  7679.       }
  7680.       if (local7) {
  7681.        TRANS_bound_crea_5641(self, a_5677);
  7682.        return ((AM_EXPR) NULL);
  7683.       }
  7684.       bind_5675 = (c_INT_plus_INT_INT_chk(bind_5675,1));
  7685.     }
  7686.     local9 = a_5677;
  7687.     a_5677 = (*TR_EXPR_next_TR_EXPR[local9->header.tag+TR_EXPR_next_TR_EXPR_offset])(local9);
  7688.    }
  7689.   }
  7690.   after_loop: ;
  7691.  }
  7692.  TRANS_bound_crea_5644(self, r_5674);
  7693.  if ((!((tp_5671==((TP) NULL))))) {
  7694.   local11 = r_5674->tp_at;
  7695.   local10 = (!((*TP_is_subtype_TP[local11->header.tag+TP_is_subtype_TP_offset])(local11, tp_5671)));
  7696.  } else {
  7697.   local10 = FALSE;
  7698.  }
  7699.  if (local10) {
  7700.   TRANS_bound_crea_5664(self, e_5670, r_5674->tp_at, tp_5671);
  7701.   return ((AM_EXPR) NULL);
  7702.  }
  7703.  self->cur_rout->calls_58 = FLISTAM_EXPR_pus(self->cur_rout->calls_58, ((AM_EXPR) r_5674));
  7704.  return ((AM_EXPR) r_5674);
  7705. }
  7706.  
  7707.  
  7708. void TRANS_and_contex(TRANS self, TR_AND_EXPR e_5683, TP tp_5684) {
  7709.  PROG local0;
  7710.  STR local1;
  7711.  TP local2;
  7712.  STR local3;
  7713.  PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5683));
  7714.  local0 = self->prog;
  7715.  local1 = STR_plus_STR_STR(((STR) &Andexpressionsre), ((STR) ¬subtypesof));
  7716.  local2 = tp_5684;
  7717.  local3 = STR_plus_STR_STR(local1, (*TP_str_STR[local2->header.tag+TP_str_STR_offset])(local2));
  7718.  PROG_err_STR(local0, STR_plus_STR_STR(local3, ((STR) &name_5685)));
  7719. }
  7720.  
  7721.  
  7722. AM_IF_EXPR AM_IF_EXPR_creat(AM_IF_EXPR self, SFILE_ID source_5686) {
  7723.  AM_IF_EXPR noname5687;
  7724.  AM_IF_EXPR r_5688;
  7725.  AM_IF_EXPR local0;
  7726.  local0 = ((AM_IF_EXPR) sbi_alloc(sizeof(struct AM_IF_EXPR_struct), AM_IF_EXPR_tag));
  7727.  r_5688 = local0;
  7728.  r_5688->source_38 = source_5686;
  7729.  return r_5688;
  7730. }
  7731.  
  7732.  
  7733. AM_BOOL_CONST AM_BOOL_CONST_cr(AM_BOOL_CONST self, SFILE_ID src_5689) {
  7734.  AM_BOOL_CONST noname5690;
  7735.  AM_BOOL_CONST r_5691;
  7736.  AM_BOOL_CONST local0;
  7737.  local0 = ((AM_BOOL_CONST) sbi_alloc(sizeof(struct AM_BOOL_CONST_struct), AM_BOOL_CONST_tag));
  7738.  r_5691 = local0;
  7739.  r_5691->source_38 = src_5689;
  7740.  return r_5691;
  7741. }
  7742.  
  7743.  
  7744. AM_EXPR TRANS_transform__5692(TRANS self, TR_AND_EXPR e_5693, TP tp_5694) {
  7745.  AM_EXPR noname5695;
  7746.  AM_EXPR e1_5696;
  7747.  AM_EXPR e2_5697;
  7748.  AM_IF_EXPR r_5698;
  7749.  AM_BOOL_CONST abc;
  7750.  BOOL local0;
  7751.  if ((!((tp_5694==((TP) NULL))))) {
  7752.   if ((!(TP_CLASS_is_subt(self->prog->tp_builtin->bool_2, tp_5694)))) {
  7753.    TRANS_and_contex(self, e_5693, tp_5694);
  7754.    return ((AM_EXPR) NULL);
  7755.   }
  7756.  }
  7757.  e1_5696 = TRANS_transform__5198(self, e_5693->e1, ((TP) self->prog->tp_builtin->bool_2));
  7758.  e2_5697 = TRANS_transform__5198(self, e_5693->e2, ((TP) self->prog->tp_builtin->bool_2));
  7759.  if ((e1_5696==((AM_EXPR) NULL))) {
  7760.   local0 = TRUE;
  7761.  } else {
  7762.   local0 = (e2_5697==((AM_EXPR) NULL));
  7763.  }
  7764.  if (local0) {
  7765.   return ((AM_EXPR) NULL);
  7766.  }
  7767.  r_5698 = AM_IF_EXPR_creat(((AM_IF_EXPR) NULL), e_5693->source_38);
  7768.  r_5698->test_40 = e1_5696;
  7769.  r_5698->if_true = e2_5697;
  7770.  abc = AM_BOOL_CONST_cr(((AM_BOOL_CONST) NULL), e_5693->source_38);
  7771.  abc->val_16 = FALSE;
  7772.  r_5698->if_false = ((AM_EXPR) abc);
  7773.  r_5698->tp_at = ((TP) self->prog->tp_builtin->bool_2);
  7774.  return ((AM_EXPR) r_5698);
  7775. }
  7776.  
  7777.  
  7778. void TRANS_or_context(TRANS self, TR_OR_EXPR e_5699, TP tp_5700) {
  7779.  PROG local0;
  7780.  STR local1;
  7781.  TP local2;
  7782.  STR local3;
  7783.  PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5699));
  7784.  local0 = self->prog;
  7785.  local1 = STR_plus_STR_STR(((STR) &Orexpressionsret), ((STR) ¬subtypesof_5701));
  7786.  local2 = tp_5700;
  7787.  local3 = STR_plus_STR_STR(local1, (*TP_str_STR[local2->header.tag+TP_str_STR_offset])(local2));
  7788.  PROG_err_STR(local0, STR_plus_STR_STR(local3, ((STR) &name_5702)));
  7789. }
  7790.  
  7791.  
  7792. AM_EXPR TRANS_transform__5703(TRANS self, TR_OR_EXPR e_5704, TP tp_5705) {
  7793.  AM_EXPR noname5706;
  7794.  AM_EXPR e1_5707;
  7795.  AM_EXPR e2_5708;
  7796.  AM_IF_EXPR r_5709;
  7797.  AM_BOOL_CONST abc;
  7798.  BOOL local0;
  7799.  if ((!((tp_5705==((TP) NULL))))) {
  7800.   if ((!(TP_CLASS_is_subt(self->prog->tp_builtin->bool_2, tp_5705)))) {
  7801.    TRANS_or_context(self, e_5704, tp_5705);
  7802.    return ((AM_EXPR) NULL);
  7803.   }
  7804.  }
  7805.  e1_5707 = TRANS_transform__5198(self, e_5704->e1, ((TP) self->prog->tp_builtin->bool_2));
  7806.  e2_5708 = TRANS_transform__5198(self, e_5704->e2, ((TP) self->prog->tp_builtin->bool_2));
  7807.  if ((e1_5707==((AM_EXPR) NULL))) {
  7808.   local0 = TRUE;
  7809.  } else {
  7810.   local0 = (e2_5708==((AM_EXPR) NULL));
  7811.  }
  7812.  if (local0) {
  7813.   return ((AM_EXPR) NULL);
  7814.  }
  7815.  r_5709 = AM_IF_EXPR_creat(((AM_IF_EXPR) NULL), e_5704->source_38);
  7816.  r_5709->test_40 = e1_5707;
  7817.  r_5709->if_false = e2_5708;
  7818.  abc = AM_BOOL_CONST_cr(((AM_BOOL_CONST) NULL), e_5704->source_38);
  7819.  abc->val_16 = TRUE;
  7820.  r_5709->if_true = ((AM_EXPR) abc);
  7821.  r_5709->tp_at = ((TP) self->prog->tp_builtin->bool_2);
  7822.  return ((AM_EXPR) r_5709);
  7823. }
  7824.  
  7825.  
  7826. void TRANS_except_con(TRANS self, TR_EXCEPT_EXPR e_5710) {
  7827.  PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5710));
  7828.  PROG_err_STR(self->prog, ((STR) &exceptionexpress));
  7829. }
  7830.  
  7831.  
  7832. void TRANS_except_loc(TRANS self, TR_EXCEPT_EXPR e_5711) {
  7833.  PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5711));
  7834.  PROG_err_STR(self->prog, ((STR) &exceptionexpress_5712));
  7835. }
  7836.  
  7837.  
  7838. AM_EXCEPT_EXPR AM_EXCEPT_EXPR_c(AM_EXCEPT_EXPR self, TP tp_5713) {
  7839.  AM_EXCEPT_EXPR noname5714;
  7840.  AM_EXCEPT_EXPR r_5715;
  7841.  AM_EXCEPT_EXPR local0;
  7842.  local0 = ((AM_EXCEPT_EXPR) sbi_alloc(sizeof(struct AM_EXCEPT_EXPR_struct), AM_EXCEPT_EXPR_tag));
  7843.  r_5715 = local0;
  7844.  r_5715->tp_at = tp_5713;
  7845.  return r_5715;
  7846. }
  7847.  
  7848.  
  7849. void TRANS_except_con_5716(TRANS self, TR_EXCEPT_EXPR e_5717, TP stp, TP tp_5718) {
  7850.  PROG local0;
  7851.  STR local1;
  7852.  TP local2;
  7853.  STR local3;
  7854.  STR local4;
  7855.  TP local5;
  7856.  STR local6;
  7857.  PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5717));
  7858.  local0 = self->prog;
  7859.  local1 = ((STR) &Thetypeoftheexce);
  7860.  local2 = stp;
  7861.  local3 = STR_plus_STR_STR(local1, (*TP_str_STR[local2->header.tag+TP_str_STR_offset])(local2));
  7862.  local4 = STR_plus_STR_STR(local3, ((STR) &isnotasubtypeof_5719));
  7863.  local5 = tp_5718;
  7864.  local6 = STR_plus_STR_STR(local4, (*TP_str_STR[local5->header.tag+TP_str_STR_offset])(local5));
  7865.  PROG_err_STR(local0, STR_plus_STR_STR(local6, ((STR) &name_5720)));
  7866. }
  7867.  
  7868.  
  7869. AM_EXPR TRANS_transform__5721(TRANS self, TR_EXCEPT_EXPR e_5722, TP tp_5723) {
  7870.  AM_EXPR noname5724;
  7871.  AM_EXCEPT_EXPR r_5725;
  7872.  TP local0;
  7873.  if (self->in_constant) {
  7874.   TRANS_except_con(self, e_5722);
  7875.   return ((AM_EXPR) NULL);
  7876.  }
  7877.  if (((self->in_protect_then)==(FALSE))) {
  7878.   TRANS_except_loc(self, e_5722);
  7879.   return ((AM_EXPR) NULL);
  7880.  }
  7881.  r_5725 = AM_EXCEPT_EXPR_c(((AM_EXCEPT_EXPR) NULL), self->ex_tp);
  7882.  if ((!((tp_5723==((TP) NULL))))) {
  7883.   local0 = r_5725->tp_at;
  7884.   if ((!((*TP_is_subtype_TP[local0->header.tag+TP_is_subtype_TP_offset])(local0, tp_5723)))) {
  7885.    TRANS_except_con_5716(self, e_5722, r_5725->tp_at, tp_5723);
  7886.    return ((AM_EXPR) NULL);
  7887.   }
  7888.  }
  7889.  return ((AM_EXPR) r_5725);
  7890. }
  7891.  
  7892.  
  7893. void TRANS_new_const_(TRANS self, TR_NEW_EXPR e_5726) {
  7894.  PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5726));
  7895.  PROG_err_STR(self->prog, ((STR) &newexpressionsma));
  7896. }
  7897.  
  7898.  
  7899. void TRANS_new_in_non(TRANS self, TR_NEW_EXPR e_5727) {
  7900.  PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5727));
  7901.  PROG_err_STR(self->prog, ((STR) &newexpressionsma_5728));
  7902. }
  7903.  
  7904.  
  7905. void TRANS_new_contex(TRANS self, TR_NEW_EXPR e_5729, TP stp, TP tp_5730) {
  7906.  PROG local0;
  7907.  STR local1;
  7908.  TP local2;
  7909.  STR local3;
  7910.  STR local4;
  7911.  TP local5;
  7912.  STR local6;
  7913.  PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5729));
  7914.  local0 = self->prog;
  7915.  local1 = ((STR) &Thetypeofthenewe);
  7916.  local2 = stp;
  7917.  local3 = STR_plus_STR_STR(local1, (*TP_str_STR[local2->header.tag+TP_str_STR_offset])(local2));
  7918.  local4 = STR_plus_STR_STR(local3, ((STR) &isnotasubtypeof_5731));
  7919.  local5 = tp_5730;
  7920.  local6 = STR_plus_STR_STR(local4, (*TP_str_STR[local5->header.tag+TP_str_STR_offset])(local5));
  7921.  PROG_err_STR(local0, STR_plus_STR_STR(local6, ((STR) &name_5732)));
  7922. }
  7923.  
  7924.  
  7925. void TRANS_new_arg_no(TRANS self, TR_NEW_EXPR e_5733) {
  7926.  PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5733));
  7927.  PROG_err_STR(self->prog, ((STR) &newexpressionson));
  7928. }
  7929.  
  7930.  
  7931. AM_NEW_EXPR AM_NEW_EXPR_crea(AM_NEW_EXPR self, SFILE_ID source_5734) {
  7932.  AM_NEW_EXPR noname5735;
  7933.  AM_NEW_EXPR r_5736;
  7934.  AM_NEW_EXPR local0;
  7935.  local0 = ((AM_NEW_EXPR) sbi_alloc(sizeof(struct AM_NEW_EXPR_struct), AM_NEW_EXPR_tag));
  7936.  r_5736 = local0;
  7937.  r_5736->source_38 = source_5734;
  7938.  return r_5736;
  7939. }
  7940.  
  7941.  
  7942. void TRANS_new_no_arg(TRANS self, TR_NEW_EXPR e_5737) {
  7943.  PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5737));
  7944.  PROG_err_STR(self->prog, ((STR) &newexpressionsmu));
  7945. }
  7946.  
  7947.  
  7948. AM_EXPR TRANS_transform__5738(TRANS self, TR_NEW_EXPR e_5739, TP tp_5740) {
  7949.  AM_EXPR noname5741;
  7950.  TP t_5742;
  7951.  INT k = ((INT) 0);
  7952.  AM_NEW_EXPR r_5743 = ((AM_NEW_EXPR) NULL);
  7953.  TP local0;
  7954.  if (self->in_constant) {
  7955.   TRANS_new_const_(self, e_5739);
  7956.   return ((AM_EXPR) NULL);
  7957.  }
  7958.  t_5742 = self->impl->tp;
  7959.  k = PROG_tp_kind_TP_INT(self->prog, t_5742);
  7960.  if ((k!=shared_TP_KIND_r_2617)) {
  7961.   TRANS_new_in_non(self, e_5739);
  7962.   return ((AM_EXPR) NULL);
  7963.  }
  7964.  if ((!((tp_5740==((TP) NULL))))) {
  7965.   local0 = t_5742;
  7966.   if ((!((*TP_is_subtype_TP[local0->header.tag+TP_is_subtype_TP_offset])(local0, tp_5740)))) {
  7967.    TRANS_new_contex(self, e_5739, t_5742, tp_5740);
  7968.    return ((AM_EXPR) NULL);
  7969.   }
  7970.  }
  7971.  if ((!((e_5739->arg_51==((TR_EXPR) NULL))))) {
  7972.   if ((self->impl->arr==((TP_CLASS) NULL))) {
  7973.    TRANS_new_arg_no(self, e_5739);
  7974.    return ((AM_EXPR) NULL);
  7975.   }
  7976.   r_5743 = AM_NEW_EXPR_crea(((AM_NEW_EXPR) NULL), e_5739->source_38);
  7977.   r_5743->tp_at = t_5742;
  7978.   r_5743->asz = TRANS_transform__5198(self, e_5739->arg_51, ((TP) self->prog->tp_builtin->int_1));
  7979.   if ((r_5743->asz==((AM_EXPR) NULL))) {
  7980.    return ((AM_EXPR) NULL);
  7981.   }
  7982.  }
  7983.  else {
  7984.   if ((!((self->impl->arr==((TP_CLASS) NULL))))) {
  7985.    TRANS_new_no_arg(self, e_5739);
  7986.    return ((AM_EXPR) NULL);
  7987.   }
  7988.   r_5743 = AM_NEW_EXPR_crea(((AM_NEW_EXPR) NULL), e_5739->source_38);
  7989.   r_5743->tp_at = t_5742;
  7990.  }
  7991.  return ((AM_EXPR) r_5743);
  7992. }
  7993.  
  7994.  
  7995. void TRANS_initial_ou(TRANS self, TR_INITIAL_EXPR e_5744) {
  7996.  PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5744));
  7997.  PROG_err_STR(self->prog, ((STR) &initialexpressio));
  7998. }
  7999.  
  8000.  
  8001. void TRANS_nested_ini(TRANS self, TR_INITIAL_EXPR e_5745) {
  8002.  PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5745));
  8003.  PROG_err_STR(self->prog, ((STR) &initialexpressio_5746));
  8004. }
  8005.  
  8006.  
  8007. AM_INITIAL_STMT AM_INITIAL_STMT_(AM_INITIAL_STMT self, SFILE_ID source_5747) {
  8008.  AM_INITIAL_STMT noname5748;
  8009.  AM_INITIAL_STMT r_5749;
  8010.  AM_INITIAL_STMT local0;
  8011.  local0 = ((AM_INITIAL_STMT) sbi_alloc(sizeof(struct AM_INITIAL_STMT_struct), AM_INITIAL_STMT_tag));
  8012.  r_5749 = local0;
  8013.  r_5749->source_38 = source_5747;
  8014.  return r_5749;
  8015. }
  8016.  
  8017.  
  8018. AM_EXPR TRANS_transform__5750(TRANS self, TR_INITIAL_EXPR e_5751, TP tp_5752) {
  8019.  AM_EXPR noname5753;
  8020.  AM_EXPR te;
  8021.  AM_LOCAL_EXPR v_5754;
  8022.  AM_ASSIGN_STMT as_5755;
  8023.  AM_INITIAL_STMT inst;
  8024.  AM_LOCAL_EXPR local0;
  8025.  SFILE_ID local1;
  8026.  IDENT local2;
  8027.  AM_EXPR local3;
  8028.  AM_STMT local4;
  8029.  if ((!(self->in_post))) {
  8030.   TRANS_initial_ou(self, e_5751);
  8031.   return ((AM_EXPR) NULL);
  8032.  }
  8033.  if (self->in_initial) {
  8034.   TRANS_nested_ini(self, e_5751);
  8035.   return ((AM_EXPR) NULL);
  8036.  }
  8037.  self->in_initial = TRUE;
  8038.  te = TRANS_transform__5198(self, e_5751->e, tp_5752);
  8039.  self->in_initial = FALSE;
  8040.  if ((te==((AM_EXPR) NULL))) {
  8041.   return ((AM_EXPR) NULL);
  8042.  }
  8043.  local0 = ((AM_LOCAL_EXPR) NULL);
  8044.  local1 = e_5751->source_38;
  8045.  local2 = IDENT_zero;
  8046.  local3 = te;
  8047.  v_5754 = AM_LOCAL_EXPR_cr(local0, local1, local2, (*AM_EXPR_tp_TP[local3->header.tag+AM_EXPR_tp_TP_offset])(local3));
  8048.  self->cur_rout->locals_57 = FLISTAM_LOCAL_EX_5379(self->cur_rout->locals_57, v_5754);
  8049.  as_5755 = AM_ASSIGN_STMT_c(((AM_ASSIGN_STMT) NULL), e_5751->source_38);
  8050.  as_5755->src_42 = te;
  8051.  as_5755->dest = ((AM_EXPR) v_5754);
  8052.  inst = AM_INITIAL_STMT_(((AM_INITIAL_STMT) NULL), e_5751->source_38);
  8053.  inst->tp = self->impl->tp;
  8054.  inst->stmts = ((AM_STMT) as_5755);
  8055.  if ((self->init_stmts==((AM_STMT) NULL))) {
  8056.   self->init_stmts = ((AM_STMT) inst);
  8057.  }
  8058.  else {
  8059.   local4 = self->init_stmts;
  8060.   (*AM_STMT_append_A[local4->header.tag+AM_STMT_append_A_offset])(local4, ((AM_STMT) inst));
  8061.  }
  8062.  return ((AM_EXPR) v_5754);
  8063. }
  8064.  
  8065.  
  8066. AM_EXPR TRANS_transform__5756(TRANS self, TR_BREAK_EXPR e_5757, TP tp_5758) {
  8067.  AM_EXPR noname5759;
  8068.  PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5757));
  8069.  PROG_err_STR(self->prog, ((STR) &breakmaynotappea));
  8070.  return ((AM_EXPR) NULL);
  8071. }
  8072.  
  8073.  
  8074. void TRANS_result_out(TRANS self, TR_RESULT_EXPR e_5760) {
  8075.  PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5760));
  8076.  PROG_err_STR(self->prog, ((STR) &resultexpression));
  8077. }
  8078.  
  8079.  
  8080. void TRANS_result_in_(TRANS self, TR_RESULT_EXPR e_5761) {
  8081.  PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5761));
  8082.  PROG_err_STR(self->prog, ((STR) &resultexpression_5762));
  8083. }
  8084.  
  8085.  
  8086. void TRANS_result_and(TRANS self, TR_RESULT_EXPR e_5763) {
  8087.  PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5763));
  8088.  PROG_err_STR(self->prog, ((STR) &resultexpression_5764));
  8089. }
  8090.  
  8091.  
  8092. void TRANS_result_con(TRANS self, TR_RESULT_EXPR e_5765, TP stp, TP tp_5766) {
  8093.  PROG local0;
  8094.  STR local1;
  8095.  TP local2;
  8096.  STR local3;
  8097.  STR local4;
  8098.  TP local5;
  8099.  STR local6;
  8100.  PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5765));
  8101.  local0 = self->prog;
  8102.  local1 = ((STR) &Thetypeoftheresu);
  8103.  local2 = stp;
  8104.  local3 = STR_plus_STR_STR(local1, (*TP_str_STR[local2->header.tag+TP_str_STR_offset])(local2));
  8105.  local4 = STR_plus_STR_STR(local3, ((STR) &isnotasubtypeof_5767));
  8106.  local5 = tp_5766;
  8107.  local6 = STR_plus_STR_STR(local4, (*TP_str_STR[local5->header.tag+TP_str_STR_offset])(local5));
  8108.  PROG_err_STR(local0, STR_plus_STR_STR(local6, ((STR) &name_5768)));
  8109. }
  8110.  
  8111.  
  8112. AM_EXPR TRANS_transform__5769(TRANS self, TR_RESULT_EXPR e_5770, TP tp_5771) {
  8113.  AM_EXPR noname5772;
  8114.  TP local0;
  8115.  if (((self->in_post)==(FALSE))) {
  8116.   TRANS_result_out(self, e_5770);
  8117.   return ((AM_EXPR) NULL);
  8118.  }
  8119.  if (((self->in_initial)==(TRUE))) {
  8120.   TRANS_result_in_(self, e_5770);
  8121.   return ((AM_EXPR) NULL);
  8122.  }
  8123.  if ((self->cur_rout->rres==((AM_LOCAL_EXPR) NULL))) {
  8124.   if ((self->cur_rout->sig_6->ret==((TP) NULL))) {
  8125.    TRANS_result_and(self, e_5770);
  8126.    return ((AM_EXPR) NULL);
  8127.   }
  8128.   self->cur_rout->rres = AM_LOCAL_EXPR_cr(((AM_LOCAL_EXPR) NULL), e_5770->source_38, IDENT_zero, self->cur_rout->sig_6->ret);
  8129.  }
  8130.  if ((!((tp_5771==((TP) NULL))))) {
  8131.   local0 = self->cur_rout->rres->tp_at;
  8132.   if ((!((*TP_is_subtype_TP[local0->header.tag+TP_is_subtype_TP_offset])(local0, tp_5771)))) {
  8133.    TRANS_result_con(self, e_5770, self->cur_rout->rres->tp_at, tp_5771);
  8134.    return ((AM_EXPR) NULL);
  8135.   }
  8136.  }
  8137.  return ((AM_EXPR) self->cur_rout->rres);
  8138. }
  8139.  
  8140.  
  8141. void TRANS_bool_lit_c(TRANS self, TR_BOOL_LIT_EXPR e_5773, TP tp_5774) {
  8142.  PROG local0;
  8143.  STR local1;
  8144.  TP local2;
  8145.  STR local3;
  8146.  PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5773));
  8147.  local0 = self->prog;
  8148.  local1 = ((STR) &Booleanliteralsa);
  8149.  local2 = tp_5774;
  8150.  local3 = STR_plus_STR_STR(local1, (*TP_str_STR[local2->header.tag+TP_str_STR_offset])(local2));
  8151.  PROG_err_STR(local0, STR_plus_STR_STR(local3, ((STR) &name_5775)));
  8152. }
  8153.  
  8154.  
  8155. AM_EXPR TRANS_transform__5776(TRANS self, TR_BOOL_LIT_EXPR e_5777, TP tp_5778) {
  8156.  AM_EXPR noname5779;
  8157.  AM_BOOL_CONST r_5780;
  8158.  if ((!((tp_5778==((TP) NULL))))) {
  8159.   if ((!(TP_CLASS_is_subt(self->prog->tp_builtin->bool_2, tp_5778)))) {
  8160.    TRANS_bool_lit_c(self, e_5777, tp_5778);
  8161.    return ((AM_EXPR) NULL);
  8162.   }
  8163.  }
  8164.  r_5780 = AM_BOOL_CONST_cr(((AM_BOOL_CONST) NULL), e_5777->source_38);
  8165.  r_5780->tp_at = ((TP) self->prog->tp_builtin->bool_2);
  8166.  r_5780->val_16 = e_5777->val_16;
  8167.  return ((AM_EXPR) r_5780);
  8168. }
  8169.  
  8170.  
  8171. void TRANS_char_lit_c(TRANS self, TR_CHAR_LIT_EXPR e_5781, TP tp_5782) {
  8172.  PROG local0;
  8173.  STR local1;
  8174.  TP local2;
  8175.  STR local3;
  8176.  PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5781));
  8177.  local0 = self->prog;
  8178.  local1 = ((STR) &Characterliteral);
  8179.  local2 = tp_5782;
  8180.  local3 = STR_plus_STR_STR(local1, (*TP_str_STR[local2->header.tag+TP_str_STR_offset])(local2));
  8181.  PROG_err_STR(local0, STR_plus_STR_STR(local3, ((STR) &name_5783)));
  8182. }
  8183.  
  8184.  
  8185. AM_CHAR_CONST AM_CHAR_CONST_cr(AM_CHAR_CONST self, TR_CHAR_LIT_EXPR t_5784) {
  8186.  AM_CHAR_CONST noname5785;
  8187.  AM_CHAR_CONST r_5786;
  8188.  AM_CHAR_CONST local0;
  8189.  local0 = ((AM_CHAR_CONST) sbi_alloc(sizeof(struct AM_CHAR_CONST_struct), AM_CHAR_CONST_tag));
  8190.  r_5786 = local0;
  8191.  r_5786->source_38 = t_5784->source_38;
  8192.  r_5786->bval = ((CHAR)t_5784->val_16);
  8193.  return r_5786;
  8194. }
  8195.  
  8196.  
  8197. AM_EXPR TRANS_transform__5787(TRANS self, TR_CHAR_LIT_EXPR e_5788, TP tp_5789) {
  8198.  AM_EXPR noname5790;
  8199.  AM_CHAR_CONST r_5791;
  8200.  if ((!((tp_5789==((TP) NULL))))) {
  8201.   if ((!(TP_CLASS_is_subt(self->prog->tp_builtin->char_5, tp_5789)))) {
  8202.    TRANS_char_lit_c(self, e_5788, tp_5789);
  8203.    return ((AM_EXPR) NULL);
  8204.   }
  8205.  }
  8206.  r_5791 = AM_CHAR_CONST_cr(((AM_CHAR_CONST) NULL), e_5788);
  8207.  r_5791->tp_at = ((TP) self->prog->tp_builtin->char_5);
  8208.  return ((AM_EXPR) r_5791);
  8209. }
  8210.  
  8211.  
  8212. void TRANS_str_lit_co(TRANS self, TR_STR_LIT_EXPR e_5792, TP tp_5793) {
  8213.  PROG local0;
  8214.  STR local1;
  8215.  TP local2;
  8216.  STR local3;
  8217.  PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5792));
  8218.  local0 = self->prog;
  8219.  local1 = ((STR) &Stringliteralsar);
  8220.  local2 = tp_5793;
  8221.  local3 = STR_plus_STR_STR(local1, (*TP_str_STR[local2->header.tag+TP_str_STR_offset])(local2));
  8222.  PROG_err_STR(local0, STR_plus_STR_STR(local3, ((STR) &name_5794)));
  8223. }
  8224.  
  8225.  
  8226. AM_STR_CONST AM_STR_CONST_cre(AM_STR_CONST self, TR_STR_LIT_EXPR t_5795) {
  8227.  AM_STR_CONST noname5796;
  8228.  AM_STR_CONST r_5797;
  8229.  AM_STR_CONST local0;
  8230.  local0 = ((AM_STR_CONST) sbi_alloc(sizeof(struct AM_STR_CONST_struct), AM_STR_CONST_tag));
  8231.  r_5797 = local0;
  8232.  r_5797->source_38 = t_5795->source_38;
  8233.  r_5797->bval = t_5795->s;
  8234.  return r_5797;
  8235. }
  8236.  
  8237.  
  8238. AM_EXPR TRANS_transform__5798(TRANS self, TR_STR_LIT_EXPR e_5799, TP tp_5800) {
  8239.  AM_EXPR noname5801;
  8240.  AM_STR_CONST r_5802;
  8241.  if ((!((tp_5800==((TP) NULL))))) {
  8242.   if ((!(TP_CLASS_is_subt(self->prog->tp_builtin->str_4, tp_5800)))) {
  8243.    TRANS_str_lit_co(self, e_5799, tp_5800);
  8244.    return ((AM_EXPR) NULL);
  8245.   }
  8246.  }
  8247.  r_5802 = AM_STR_CONST_cre(((AM_STR_CONST) NULL), e_5799);
  8248.  r_5802->tp_at = ((TP) self->prog->tp_builtin->str_4);
  8249.  return ((AM_EXPR) r_5802);
  8250. }
  8251.  
  8252.  
  8253. AM_INTI_CONST AM_INTI_CONST_cr(AM_INTI_CONST self, TR_INT_LIT_EXPR t_5803) {
  8254.  AM_INTI_CONST noname5804;
  8255.  AM_INTI_CONST r_5805;
  8256.  AM_INTI_CONST local0;
  8257.  local0 = ((AM_INTI_CONST) sbi_alloc(sizeof(struct AM_INTI_CONST_struct), AM_INTI_CONST_tag));
  8258.  r_5805 = local0;
  8259.  r_5805->source_38 = t_5803->source_38;
  8260.  r_5805->val_16 = t_5803->val_16;
  8261.  return r_5805;
  8262. }
  8263.  
  8264.  
  8265. AM_INT_CONST AM_INT_CONST_cre(AM_INT_CONST self, TR_INT_LIT_EXPR t_5806) {
  8266.  AM_INT_CONST noname5807;
  8267.  AM_INT_CONST r_5808;
  8268.  AM_INT_CONST local0;
  8269.  local0 = ((AM_INT_CONST) sbi_alloc(sizeof(struct AM_INT_CONST_struct), AM_INT_CONST_tag));
  8270.  r_5808 = local0;
  8271.  r_5808->source_38 = t_5806->source_38;
  8272.  r_5808->val_16 = t_5806->val_16;
  8273.  return r_5808;
  8274. }
  8275.  
  8276.  
  8277. AM_EXPR TRANS_transform__5809(TRANS self, TR_INT_LIT_EXPR e_5810, TP tp_5811) {
  8278.  AM_EXPR noname5812;
  8279.  AM_INTI_CONST ri;
  8280.  AM_INT_CONST r_5813;
  8281.  TP local0;
  8282.  PROG local1;
  8283.  STR local2;
  8284.  TP local3;
  8285.  STR local4;
  8286.  TP local5;
  8287.  PROG local6;
  8288.  STR local7;
  8289.  TP local8;
  8290.  STR local9;
  8291.  if (e_5810->is_inti) {
  8292.   ri = AM_INTI_CONST_cr(((AM_INTI_CONST) NULL), e_5810);
  8293.   ri->tp_at = ((TP) self->prog->tp_builtin->inti);
  8294.   if ((tp_5811==((TP) NULL))) {
  8295.    return ((AM_EXPR) ri);
  8296.   }
  8297.   else {
  8298.    local0 = ri->tp_at;
  8299.    if ((!((*TP_is_subtype_TP[local0->header.tag+TP_is_subtype_TP_offset])(local0, tp_5811)))) {
  8300.     PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5810));
  8301.     local1 = self->prog;
  8302.     local2 = ((STR) &Thetypeofthedest);
  8303.     local3 = tp_5811;
  8304.     local4 = STR_plus_STR_STR(local2, (*TP_str_STR[local3->header.tag+TP_str_STR_offset])(local3));
  8305.     PROG_err_STR(local1, STR_plus_STR_STR(local4, ((STR) &isnotasupertypeo)));
  8306.     return ((AM_EXPR) NULL);
  8307.    }
  8308.    else {
  8309.     return ((AM_EXPR) ri);
  8310.    }
  8311.   }
  8312.  }
  8313.  r_5813 = AM_INT_CONST_cre(((AM_INT_CONST) NULL), e_5810);
  8314.  r_5813->tp_at = ((TP) self->prog->tp_builtin->int_1);
  8315.  if ((tp_5811==((TP) NULL))) {
  8316.   return ((AM_EXPR) r_5813);
  8317.  }
  8318.  else {
  8319.   local5 = r_5813->tp_at;
  8320.   if ((!((*TP_is_subtype_TP[local5->header.tag+TP_is_subtype_TP_offset])(local5, tp_5811)))) {
  8321.    PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5810));
  8322.    local6 = self->prog;
  8323.    local7 = ((STR) &Thetypeofthedest_5814);
  8324.    local8 = tp_5811;
  8325.    local9 = STR_plus_STR_STR(local7, (*TP_str_STR[local8->header.tag+TP_str_STR_offset])(local8));
  8326.    PROG_err_STR(local6, STR_plus_STR_STR(local9, ((STR) &isnotasupertypeofINT)));
  8327.    return ((AM_EXPR) NULL);
  8328.   }
  8329.  }
  8330.  return ((AM_EXPR) r_5813);
  8331. }
  8332.  
  8333.  
  8334. AM_FLT_CONST AM_FLT_CONST_cre(AM_FLT_CONST self, TR_FLT_LIT_EXPR t_5815) {
  8335.  AM_FLT_CONST noname5816;
  8336.  AM_FLT_CONST r_5817;
  8337.  AM_FLT_CONST local0;
  8338.  local0 = ((AM_FLT_CONST) sbi_alloc(sizeof(struct AM_FLT_CONST_struct), AM_FLT_CONST_tag));
  8339.  r_5817 = local0;
  8340.  r_5817->source_38 = t_5815->source_38;
  8341.  r_5817->val_16 = t_5815->val_16;
  8342.  return r_5817;
  8343. }
  8344.  
  8345.  
  8346. AM_FLTD_CONST AM_FLTD_CONST_cr(AM_FLTD_CONST self, TR_FLT_LIT_EXPR t_5818) {
  8347.  AM_FLTD_CONST noname5819;
  8348.  AM_FLTD_CONST r_5820;
  8349.  AM_FLTD_CONST local0;
  8350.  local0 = ((AM_FLTD_CONST) sbi_alloc(sizeof(struct AM_FLTD_CONST_struct), AM_FLTD_CONST_tag));
  8351.  r_5820 = local0;
  8352.  r_5820->source_38 = t_5818->source_38;
  8353.  r_5820->val_16 = t_5818->val_16;
  8354.  return r_5820;
  8355. }
  8356.  
  8357.  
  8358. AM_FLTX_CONST AM_FLTX_CONST_cr(AM_FLTX_CONST self, TR_FLT_LIT_EXPR t_5821) {
  8359.  AM_FLTX_CONST noname5822;
  8360.  AM_FLTX_CONST r_5823;
  8361.  AM_FLTX_CONST local0;
  8362.  local0 = ((AM_FLTX_CONST) sbi_alloc(sizeof(struct AM_FLTX_CONST_struct), AM_FLTX_CONST_tag));
  8363.  r_5823 = local0;
  8364.  r_5823->source_38 = t_5821->source_38;
  8365.  r_5823->val_16 = t_5821->val_16;
  8366.  return r_5823;
  8367. }
  8368.  
  8369.  
  8370. AM_FLTDX_CONST AM_FLTDX_CONST_c(AM_FLTDX_CONST self, TR_FLT_LIT_EXPR t_5824) {
  8371.  AM_FLTDX_CONST noname5825;
  8372.  AM_FLTDX_CONST r_5826;
  8373.  AM_FLTDX_CONST local0;
  8374.  local0 = ((AM_FLTDX_CONST) sbi_alloc(sizeof(struct AM_FLTDX_CONST_struct), AM_FLTDX_CONST_tag));
  8375.  r_5826 = local0;
  8376.  r_5826->source_38 = t_5824->source_38;
  8377.  r_5826->val_16 = t_5824->val_16;
  8378.  return r_5826;
  8379. }
  8380.  
  8381.  
  8382. AM_FLTI_CONST AM_FLTI_CONST_cr(AM_FLTI_CONST self, TR_FLT_LIT_EXPR t_5827) {
  8383.  AM_FLTI_CONST noname5828;
  8384.  AM_FLTI_CONST r_5829;
  8385.  AM_FLTI_CONST local0;
  8386.  local0 = ((AM_FLTI_CONST) sbi_alloc(sizeof(struct AM_FLTI_CONST_struct), AM_FLTI_CONST_tag));
  8387.  r_5829 = local0;
  8388.  r_5829->source_38 = t_5827->source_38;
  8389.  r_5829->val_16 = t_5827->val_16;
  8390.  return r_5829;
  8391. }
  8392.  
  8393.  
  8394. AM_EXPR TRANS_transform__5830(TRANS self, TR_FLT_LIT_EXPR e_5831, TP tp_5832) {
  8395.  AM_EXPR noname5833;
  8396.  INT noname5834 = ((INT) 0);
  8397.  AM_FLT_CONST rf;
  8398.  AM_FLTD_CONST rfd;
  8399.  AM_FLTX_CONST rfx;
  8400.  AM_FLTDX_CONST rfdx;
  8401.  AM_FLTI_CONST rfi;
  8402.  TP local0;
  8403.  PROG local1;
  8404.  STR local2;
  8405.  TP local3;
  8406.  STR local4;
  8407.  TP local5;
  8408.  PROG local6;
  8409.  STR local7;
  8410.  TP local8;
  8411.  STR local9;
  8412.  TP local10;
  8413.  PROG local11;
  8414.  STR local12;
  8415.  TP local13;
  8416.  STR local14;
  8417.  TP local15;
  8418.  PROG local16;
  8419.  STR local17;
  8420.  TP local18;
  8421.  STR local19;
  8422.  TP local20;
  8423.  PROG local21;
  8424.  STR local22;
  8425.  TP local23;
  8426.  STR local24;
  8427.  noname5834 = e_5831->tp;
  8428.  switch (noname5834) {
  8429.   case 0:
  8430.    rf = AM_FLT_CONST_cre(((AM_FLT_CONST) NULL), e_5831);
  8431.    rf->tp_at = ((TP) self->prog->tp_builtin->flt);
  8432.    if ((tp_5832==((TP) NULL))) {
  8433.     return ((AM_EXPR) rf);
  8434.    }
  8435.    else {
  8436.     local0 = rf->tp_at;
  8437.     if ((!((*TP_is_subtype_TP[local0->header.tag+TP_is_subtype_TP_offset])(local0, tp_5832)))) {
  8438.      PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5831));
  8439.      local1 = self->prog;
  8440.      local2 = ((STR) &Thetypeofthedest_5835);
  8441.      local3 = tp_5832;
  8442.      local4 = STR_plus_STR_STR(local2, (*TP_str_STR[local3->header.tag+TP_str_STR_offset])(local3));
  8443.      PROG_err_STR(local1, STR_plus_STR_STR(local4, ((STR) &isnotasupertypeofFLT)));
  8444.      return ((AM_EXPR) NULL);
  8445.     }
  8446.     else {
  8447.      return ((AM_EXPR) rf);
  8448.     }
  8449.    }
  8450.    break;
  8451.   case 1:
  8452.    rfd = AM_FLTD_CONST_cr(((AM_FLTD_CONST) NULL), e_5831);
  8453.    rfd->tp_at = ((TP) self->prog->tp_builtin->fltd);
  8454.    if ((tp_5832==((TP) NULL))) {
  8455.     return ((AM_EXPR) rfd);
  8456.    }
  8457.    else {
  8458.     local5 = rfd->tp_at;
  8459.     if ((!((*TP_is_subtype_TP[local5->header.tag+TP_is_subtype_TP_offset])(local5, tp_5832)))) {
  8460.      PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5831));
  8461.      local6 = self->prog;
  8462.      local7 = ((STR) &Thetypeofthedest_5836);
  8463.      local8 = tp_5832;
  8464.      local9 = STR_plus_STR_STR(local7, (*TP_str_STR[local8->header.tag+TP_str_STR_offset])(local8));
  8465.      PROG_err_STR(local6, STR_plus_STR_STR(local9, ((STR) &isnotasupertypeo_5837)));
  8466.      return ((AM_EXPR) NULL);
  8467.     }
  8468.     else {
  8469.      return ((AM_EXPR) rfd);
  8470.     }
  8471.    }
  8472.    break;
  8473.   case 2:
  8474.    rfx = AM_FLTX_CONST_cr(((AM_FLTX_CONST) NULL), e_5831);
  8475.    rfx->tp_at = ((TP) self->prog->tp_builtin->fltx);
  8476.    if ((tp_5832==((TP) NULL))) {
  8477.     return ((AM_EXPR) rfx);
  8478.    }
  8479.    else {
  8480.     local10 = rfx->tp_at;
  8481.     if ((!((*TP_is_subtype_TP[local10->header.tag+TP_is_subtype_TP_offset])(local10, tp_5832)))) {
  8482.      PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5831));
  8483.      local11 = self->prog;
  8484.      local12 = ((STR) &Thetypeofthedest_5838);
  8485.      local13 = tp_5832;
  8486.      local14 = STR_plus_STR_STR(local12, (*TP_str_STR[local13->header.tag+TP_str_STR_offset])(local13));
  8487.      PROG_err_STR(local11, STR_plus_STR_STR(local14, ((STR) &isnotasupertypeo_5839)));
  8488.      return ((AM_EXPR) NULL);
  8489.     }
  8490.     else {
  8491.      return ((AM_EXPR) rfx);
  8492.     }
  8493.    }
  8494.    break;
  8495.   case 3:
  8496.    rfdx = AM_FLTDX_CONST_c(((AM_FLTDX_CONST) NULL), e_5831);
  8497.    rfdx->tp_at = ((TP) self->prog->tp_builtin->fltdx);
  8498.    if ((tp_5832==((TP) NULL))) {
  8499.     return ((AM_EXPR) rfdx);
  8500.    }
  8501.    else {
  8502.     local15 = rfdx->tp_at;
  8503.     if ((!((*TP_is_subtype_TP[local15->header.tag+TP_is_subtype_TP_offset])(local15, tp_5832)))) {
  8504.      PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5831));
  8505.      local16 = self->prog;
  8506.      local17 = ((STR) &Thetypeofthedest_5840);
  8507.      local18 = tp_5832;
  8508.      local19 = STR_plus_STR_STR(local17, (*TP_str_STR[local18->header.tag+TP_str_STR_offset])(local18));
  8509.      PROG_err_STR(local16, STR_plus_STR_STR(local19, ((STR) &isnotasupertypeo_5841)));
  8510.      return ((AM_EXPR) NULL);
  8511.     }
  8512.     else {
  8513.      return ((AM_EXPR) rfdx);
  8514.     }
  8515.    }
  8516.    break;
  8517.   case 4:
  8518.    rfi = AM_FLTI_CONST_cr(((AM_FLTI_CONST) NULL), e_5831);
  8519.    rfi->tp_at = ((TP) self->prog->tp_builtin->flti);
  8520.    if ((tp_5832==((TP) NULL))) {
  8521.     return ((AM_EXPR) rfi);
  8522.    }
  8523.    else {
  8524.     local20 = rfi->tp_at;
  8525.     if ((!((*TP_is_subtype_TP[local20->header.tag+TP_is_subtype_TP_offset])(local20, tp_5832)))) {
  8526.      PROG_err_loc_PRO(self->prog, ((PROG_ERR) e_5831));
  8527.      local21 = self->prog;
  8528.      local22 = ((STR) &Thetypeofthedest_5842);
  8529.      local23 = tp_5832;
  8530.      local24 = STR_plus_STR_STR(local22, (*TP_str_STR[local23->header.tag+TP_str_STR_offset])(local23));
  8531.      PROG_err_STR(local21, STR_plus_STR_STR(local24, ((STR) &isnotasupertypeo_5843)));
  8532.      return ((AM_EXPR) NULL);
  8533.     }
  8534.     else {
  8535.      return ((AM_EXPR) rfi);
  8536.     }
  8537.    }
  8538.    break;
  8539.   default: ;
  8540.    fprintf(stderr,"No applicable target in case statement ./trans.sa:2022:26\n");
  8541.    exit(16);
  8542.  }
  8543.  return ((AM_EXPR) NULL);
  8544. }
  8545.  
  8546.  
  8547. AM_EXPR TRANS_transform__5198(TRANS self, TR_EXPR e_5844, TP tp_5845) {
  8548.  AM_EXPR noname5846;
  8549.  if ((e_5844==((TR_EXPR) NULL))) {
  8550.   return ((AM_EXPR) NULL);
  8551.  }
  8552.  if (e_5844==NULL) {
  8553.  } else
  8554.  switch (e_5844->header.tag) {
  8555.   case TR_SELF_EXPR_tag:
  8556.    return TRANS_transform_(self, ((TR_SELF_EXPR) e_5844), tp_5845); break;
  8557.   case TR_CALL_EXPR_tag:
  8558.    return TRANS_transform__5492(self, ((TR_CALL_EXPR) e_5844), tp_5845, TRUE); break;
  8559.   case TR_VOID_EXPR_tag:
  8560.    return TRANS_transform__5516(self, ((TR_VOID_EXPR) e_5844), tp_5845); break;
  8561.   case TR_IS_VOID_EXPR_tag:
  8562.    return TRANS_transform__5538(self, ((TR_IS_VOID_EXPR) e_5844), tp_5845); break;
  8563.   case TR_ARRAY_EXPR_tag:
  8564.    return TRANS_transform__5554(self, ((TR_ARRAY_EXPR) e_5844), tp_5845); break;
  8565.   case TR_CREATE_EXPR_tag:
  8566.    return TRANS_transform__5573(self, ((TR_CREATE_EXPR) e_5844), tp_5845); break;
  8567.   case TR_BOUND_CREATE_EXPR_tag:
  8568.    return TRANS_transform__5669(self, ((TR_BOUND_CREATE_EXPR) e_5844), tp_5845); break;
  8569.   case TR_AND_EXPR_tag:
  8570.    return TRANS_transform__5692(self, ((TR_AND_EXPR) e_5844), tp_5845); break;
  8571.   case TR_OR_EXPR_tag:
  8572.    return TRANS_transform__5703(self, ((TR_OR_EXPR) e_5844), tp_5845); break;
  8573.   case TR_EXCEPT_EXPR_tag:
  8574.    return TRANS_transform__5721(self, ((TR_EXCEPT_EXPR) e_5844), tp_5845); break;
  8575.   case TR_NEW_EXPR_tag:
  8576.    return TRANS_transform__5738(self, ((TR_NEW_EXPR) e_5844), tp_5845); break;
  8577.   case TR_INITIAL_EXPR_tag:
  8578.    return TRANS_transform__5750(self, ((TR_INITIAL_EXPR) e_5844), tp_5845); break;
  8579.   case TR_BREAK_EXPR_tag:
  8580.    return TRANS_transform__5756(self, ((TR_BREAK_EXPR) e_5844), tp_5845); break;
  8581.   case TR_RESULT_EXPR_tag:
  8582.    return TRANS_transform__5769(self, ((TR_RESULT_EXPR) e_5844), tp_5845); break;
  8583.   case TR_BOOL_LIT_EXPR_tag:
  8584.    return TRANS_transform__5776(self, ((TR_BOOL_LIT_EXPR) e_5844), tp_5845); break;
  8585.   case TR_CHAR_LIT_EXPR_tag:
  8586.    return TRANS_transform__5787(self, ((TR_CHAR_LIT_EXPR) e_5844), tp_5845); break;
  8587.   case TR_STR_LIT_EXPR_tag:
  8588.    return TRANS_transform__5798(self, ((TR_STR_LIT_EXPR) e_5844), tp_5845); break;
  8589.   case TR_INT_LIT_EXPR_tag:
  8590.    return TRANS_transform__5809(self, ((TR_INT_LIT_EXPR) e_5844), tp_5845); break;
  8591.   case TR_FLT_LIT_EXPR_tag:
  8592.    return TRANS_transform__5830(self, ((TR_FLT_LIT_EXPR) e_5844), tp_5845); break;
  8593.   default: ;
  8594.    fprintf(stderr,"No applicable type in typecase ./trans.sa:984:14\n");
  8595.    exit(16);
  8596.  }
  8597.  return ((AM_EXPR) NULL);
  8598. }
  8599.  
  8600.  
  8601. TUPIDENTAM_GLOBA TUPIDENTAM_GLOBA_5847(TUPIDENTAM_GLOBA self, IDENT t1_5848) {
  8602.  TUPIDENTAM_GLOBA local0;
  8603.  local0 = self;
  8604.  local0.t1 = t1_5848;
  8605.  return local0;
  8606. }
  8607.  
  8608.  
  8609. TUPIDENTAM_GLOBA TUPIDENTAM_GLOBA_5849(TUPIDENTAM_GLOBA self, AM_GLOBAL_EXPR t2_5850) {
  8610.  TUPIDENTAM_GLOBA local0;
  8611.  local0 = self;
  8612.  local0.t2 = t2_5850;
  8613.  return local0;
  8614. }
  8615.  
  8616.  
  8617. TUPIDENTAM_GLOBA TUPIDENTAM_GLOBA_5851(TUPIDENTAM_GLOBA self, IDENT at1, AM_GLOBAL_EXPR at2) {
  8618.  TUPIDENTAM_GLOBA noname5852 = TUPIDENTAM_GLOBA_zero;
  8619.  TUPIDENTAM_GLOBA local0;
  8620.  local0 = TUPIDENTAM_GLOBA_5847(self, at1);
  8621.  return TUPIDENTAM_GLOBA_5849(local0, at2);
  8622. }
  8623.  
  8624.  
  8625. FMAPIDENTAM_GLOB FMAPIDENTAM_GLOB_5853(FMAPIDENTAM_GLOB self, INT n_5854) {
  8626.  FMAPIDENTAM_GLOB noname5855;
  8627.  FMAPIDENTAM_GLOB r_5856;
  8628.  FMAPIDENTAM_GLOB noname5857;
  8629.  FMAPIDENTAM_GLOB local0;
  8630.  TUPIDENTAM_GLOBA local1;
  8631.  IDENT local2;
  8632.  local0 = ((FMAPIDENTAM_GLOB) sbi_arr_alloc(sizeof(struct FMAPIDENTAM_GLOB_struct), FMAPIDENTAM_GLOB_tag, sizeof(TUPIDENTAM_GLOBA) , n_5854));
  8633.  local0->asize = n_5854;
  8634.  r_5856 = local0;
  8635.  if ((!(((IDENT_blob=FMAPIDENTAM_GLOB_5130(self)).str_4==(STR)0)))) {
  8636.   {
  8637.    struct FMAPIDENTAM_GLOB_5859_frame_struct temp5858_0;
  8638.    FMAPIDENTAM_GLOB_5859_frame 
  8639.    noname5860 = &temp5858_0;
  8640.    noname5860->state = 0;
  8641.    while (1) {
  8642.     if (noname5860->state == 0) {
  8643.      noname5857 = r_5856;
  8644.      noname5860->arg0 = noname5857;
  8645.     }
  8646.     local1 = TUPIDENTAM_GLOBA_zero;
  8647.     local2 = FMAPIDENTAM_GLOB_5130(self);
  8648.     noname5860->arg1 = TUPIDENTAM_GLOBA_5851(local1, local2, ((AM_GLOBAL_EXPR) NULL));
  8649.     FMAPIDENTAM_GLOB_5859(noname5860);
  8650.     if (noname5860->state == -1) goto after_loop;
  8651.     0 /* No return value from iter call */;
  8652.    }
  8653.   }
  8654.   after_loop: ;
  8655.  }
  8656.  return r_5856;
  8657. }
  8658.  
  8659.  
  8660. FMAPIDENTAM_GLOB FMAPIDENTAM_GLOB_5861(FMAPIDENTAM_GLOB self, TUPIDENTAM_GLOBA p) {
  8661.  FMAPIDENTAM_GLOB noname5862;
  8662.  return FMAPIDENTAM_GLOB_5863(self, p.t1, p.t2);
  8663.  if (!FMAPIDENTAM_GLOB_5122(self)) {
  8664.   fprintf(stderr,"Failed invariant FMAP{IDENT,AM_GLOBAL_EXPR}::invariant:BOOL ../Library/fmap.sa:202:14\n");
  8665.   exit(16);
  8666.  }
  8667. }
  8668.  
  8669.  
  8670. FMAPIDENTAM_GLOB FMAPIDENTAM_GLOB_5864(FMAPIDENTAM_GLOB self) {
  8671.  FMAPIDENTAM_GLOB noname5865;
  8672.  INT ns = ((INT) 0);
  8673.  FMAPIDENTAM_GLOB r_5866;
  8674.  FMAPIDENTAM_GLOB noname5867;
  8675.  INT local0;
  8676.  INT local1;
  8677.  INT local2;
  8678.  TUPIDENTAM_GLOBA local3;
  8679.  if (!((!((self==((FMAPIDENTAM_GLOB) NULL)))))) {
  8680.   fprintf(stderr,"Violation of precondition ../Library/fmap.sa:172:22\n");
  8681.   exit(16);
  8682.  }
  8683.  local0 = (self->asize);
  8684.  local1 = (c_INT_minus_INT_INT_chk(local0,1));
  8685.  local2 = (c_INT_times_INT_INT_chk(local1,2));
  8686.  ns = (c_INT_plus_INT_INT_chk(local2,1));
  8687.  r_5866 = FMAPIDENTAM_GLOB_5853(self, ns);
  8688.  {
  8689.   struct FMAPIDENTAM_GLOB_5869_frame_struct temp5868_0;
  8690.   FMAPIDENTAM_GLOB_5869_frame 
  8691.   noname5870 = &temp5868_0;
  8692.   noname5870->state = 0;
  8693.   while (1) {
  8694.    if (noname5870->state == 0) {
  8695.     noname5867 = self;
  8696.     noname5870->arg0 = noname5867;
  8697.    }
  8698.    local3 = FMAPIDENTAM_GLOB_5869(noname5870);
  8699.    if (noname5870->state == -1) goto after_loop;
  8700.    r_5866 = FMAPIDENTAM_GLOB_5861(r_5866, local3);
  8701.   }
  8702.  }
  8703.  after_loop: ;
  8704.  return r_5866;
  8705. }
  8706.  
  8707.  
  8708. void FMAPIDENTAM_GLOB_5871(FMAPIDENTAM_GLOB self, INT ind_5872, TUPIDENTAM_GLOBA val_5873) {
  8709.  BOOL local0;
  8710.  INT local1;
  8711.  INT local2;
  8712.  if ((!((self==((FMAPIDENTAM_GLOB) NULL))))) {
  8713.   local1 = 0;
  8714.   local2 = (self->asize);
  8715.   local0 = INT_is_bet_INT_I(ind_5872, local1, (c_INT_minus_INT_INT_chk(local2,1)));
  8716.  } else {
  8717.   local0 = FALSE;
  8718.  }
  8719.  if (!(local0)) {
  8720.   fprintf(stderr,"Violation of precondition ../Library/aref.sa:38:7\n");
  8721.   exit(16);
  8722.  }
  8723.  if (ind_5872<0||ind_5872>=self->asize) {
  8724.   fprintf(stderr,"Index out of bounds ../Library/aref.sa:38:7\n");
  8725.   exit(16);
  8726.  }
  8727.  self->arr_part[ind_5872] = val_5873;
  8728. }
  8729.  
  8730.  
  8731. FMAPIDENTAM_GLOB FMAPIDENTAM_GLOB_5863(FMAPIDENTAM_GLOB self, IDENT k, AM_GLOBAL_EXPR t_5874) {
  8732.  FMAPIDENTAM_GLOB noname5875;
  8733.  FMAPIDENTAM_GLOB r_5876;
  8734.  INT h = ((INT) 0);
  8735.  INT asm_5877 = ((INT) 0);
  8736.  IDENT tk = IDENT_zero;
  8737.  IDENT tk_5878 = IDENT_zero;
  8738.  INT local0;
  8739.  INT local1;
  8740.  INT local2;
  8741.  INT local3;
  8742.  INT local4;
  8743.  r_5876 = self;
  8744.  if ((r_5876==((FMAPIDENTAM_GLOB) NULL))) {
  8745.   r_5876 = FMAPIDENTAM_GLOB_5853(self, 5);
  8746.  }
  8747.  else {
  8748.   local0 = (c_INT_plus_INT_INT_chk(self->hsize,1));
  8749.   local1 = (c_INT_times_INT_INT_chk(local0,2));
  8750.   if ((local1>(self->asize))) {
  8751.    r_5876 = FMAPIDENTAM_GLOB_5864(self);
  8752.   }
  8753.  }
  8754.  local2 = FMAPIDENTAM_GLOB_5120(r_5876, k);
  8755.  local3 = (r_5876->asize);
  8756.  h = (local2&(c_INT_minus_INT_INT_chk(local3,2)));
  8757.  local4 = (r_5876->asize);
  8758.  asm_5877 = (c_INT_minus_INT_INT_chk(local4,1));
  8759.  while (1) {
  8760.   tk = (TUPIDENTAM_GLOBA_blob=FMAPIDENTAM_GLOB_5125(r_5876, h)).t1;
  8761.   if (FMAPIDENTAM_GLOB_5128(self, tk, FMAPIDENTAM_GLOB_5130(self))) {
  8762.    goto after_loop;
  8763.   }
  8764.   if (FMAPIDENTAM_GLOB_5128(self, tk, k)) {
  8765.    FMAPIDENTAM_GLOB_5871(r_5876, h, TUPIDENTAM_GLOBA_5851(TUPIDENTAM_GLOBA_zero, k, t_5874));
  8766.    return r_5876;
  8767.   }
  8768.   h = (c_INT_plus_INT_INT_chk(h,1));
  8769.  }
  8770.  after_loop: ;
  8771.  if ((h==asm_5877)) {
  8772.   h = 0;
  8773.   while (1) {
  8774.    tk_5878 = (TUPIDENTAM_GLOBA_blob=FMAPIDENTAM_GLOB_5125(r_5876, h)).t1;
  8775.    if (FMAPIDENTAM_GLOB_5128(self, tk_5878, FMAPIDENTAM_GLOB_5130(self))) {
  8776.     goto after_loop_5880;
  8777.    }
  8778.    if (FMAPIDENTAM_GLOB_5128(self, tk_5878, k)) {
  8779.     FMAPIDENTAM_GLOB_5871(r_5876, h, TUPIDENTAM_GLOBA_5851(TUPIDENTAM_GLOBA_zero, k, t_5874));
  8780.     return r_5876;
  8781.    }
  8782.    h = (c_INT_plus_INT_INT_chk(h,1));
  8783.   }
  8784.   after_loop_5880: ;
  8785.   if (!((h!=asm_5877))) {
  8786.    fprintf(stderr,"Violation of assertion ../Library/fmap.sa:199:15\n");
  8787.    exit(16);
  8788.   }
  8789.  }
  8790.  FMAPIDENTAM_GLOB_5871(r_5876, h, TUPIDENTAM_GLOBA_5851(TUPIDENTAM_GLOBA_zero, k, t_5874));
  8791.  r_5876->hsize = (c_INT_plus_INT_INT_chk(r_5876->hsize,1));
  8792.  return r_5876;
  8793.  if (!FMAPIDENTAM_GLOB_5122(self)) {
  8794.   fprintf(stderr,"Failed invariant FMAP{IDENT,AM_GLOBAL_EXPR}::invariant:BOOL ../Library/fmap.sa:180:9\n");
  8795.   exit(16);
  8796.  }
  8797. }
  8798.  
  8799.  
  8800. TUPTPFMAPIDENTAM TUPTPFMAPIDENTAM_5882(TUPTPFMAPIDENTAM self, TP t1_5883) {
  8801.  TUPTPFMAPIDENTAM local0;
  8802.  local0 = self;
  8803.  local0.t1 = t1_5883;
  8804.  return local0;
  8805. }
  8806.  
  8807.  
  8808. TUPTPFMAPIDENTAM TUPTPFMAPIDENTAM_5884(TUPTPFMAPIDENTAM self, FMAPIDENTAM_GLOB t2_5885) {
  8809.  TUPTPFMAPIDENTAM local0;
  8810.  local0 = self;
  8811.  local0.t2 = t2_5885;
  8812.  return local0;
  8813. }
  8814.  
  8815.  
  8816. TUPTPFMAPIDENTAM TUPTPFMAPIDENTAM_5886(TUPTPFMAPIDENTAM self, TP at1, FMAPIDENTAM_GLOB at2) {
  8817.  TUPTPFMAPIDENTAM noname5887 = TUPTPFMAPIDENTAM_zero;
  8818.  TUPTPFMAPIDENTAM local0;
  8819.  local0 = TUPTPFMAPIDENTAM_5882(self, at1);
  8820.  return TUPTPFMAPIDENTAM_5884(local0, at2);
  8821. }
  8822.  
  8823.  
  8824. FMAPTPFMAPIDENTA FMAPTPFMAPIDENTA_5888(FMAPTPFMAPIDENTA self, INT n_5889) {
  8825.  FMAPTPFMAPIDENTA noname5890;
  8826.  FMAPTPFMAPIDENTA r_5891;
  8827.  FMAPTPFMAPIDENTA noname5892;
  8828.  FMAPTPFMAPIDENTA local0;
  8829.  TUPTPFMAPIDENTAM local1;
  8830.  TP local2;
  8831.  local0 = ((FMAPTPFMAPIDENTA) sbi_arr_alloc(sizeof(struct FMAPTPFMAPIDENTA_struct), FMAPTPFMAPIDENTA_tag, sizeof(TUPTPFMAPIDENTAM) , n_5889));
  8832.  local0->asize = n_5889;
  8833.  r_5891 = local0;
  8834.  if ((!((FMAPTPFMAPIDENTA_5112(self)==((TP) NULL))))) {
  8835.   {
  8836.    struct FMAPTPFMAPIDENTA_5894_frame_struct temp5893_0;
  8837.    FMAPTPFMAPIDENTA_5894_frame 
  8838.    noname5895 = &temp5893_0;
  8839.    noname5895->state = 0;
  8840.    while (1) {
  8841.     if (noname5895->state == 0) {
  8842.      noname5892 = r_5891;
  8843.      noname5895->arg0 = noname5892;
  8844.     }
  8845.     local1 = TUPTPFMAPIDENTAM_zero;
  8846.     local2 = FMAPTPFMAPIDENTA_5112(self);
  8847.     noname5895->arg1 = TUPTPFMAPIDENTAM_5886(local1, local2, ((FMAPIDENTAM_GLOB) NULL));
  8848.     FMAPTPFMAPIDENTA_5894(noname5895);
  8849.     if (noname5895->state == -1) goto after_loop;
  8850.     0 /* No return value from iter call */;
  8851.    }
  8852.   }
  8853.   after_loop: ;
  8854.  }
  8855.  return r_5891;
  8856. }
  8857.  
  8858.  
  8859. FMAPTPFMAPIDENTA FMAPTPFMAPIDENTA_5896(FMAPTPFMAPIDENTA self, TUPTPFMAPIDENTAM p) {
  8860.  FMAPTPFMAPIDENTA noname5897;
  8861.  return FMAPTPFMAPIDENTA_5898(self, p.t1, p.t2);
  8862.  if (!FMAPTPFMAPIDENTA_5104(self)) {
  8863.   fprintf(stderr,"Failed invariant FMAP{$TP,FMAP{IDENT,AM_GLOBAL_EXPR}}::invariant:BOOL ../Library/fmap.sa:202:14\n");
  8864.   exit(16);
  8865.  }
  8866. }
  8867.  
  8868.  
  8869. FMAPTPFMAPIDENTA FMAPTPFMAPIDENTA_5899(FMAPTPFMAPIDENTA self) {
  8870.  FMAPTPFMAPIDENTA noname5900;
  8871.  INT ns = ((INT) 0);
  8872.  FMAPTPFMAPIDENTA r_5901;
  8873.  FMAPTPFMAPIDENTA noname5902;
  8874.  INT local0;
  8875.  INT local1;
  8876.  INT local2;
  8877.  TUPTPFMAPIDENTAM local3;
  8878.  if (!((!((self==((FMAPTPFMAPIDENTA) NULL)))))) {
  8879.   fprintf(stderr,"Violation of precondition ../Library/fmap.sa:172:22\n");
  8880.   exit(16);
  8881.  }
  8882.  local0 = (self->asize);
  8883.  local1 = (c_INT_minus_INT_INT_chk(local0,1));
  8884.  local2 = (c_INT_times_INT_INT_chk(local1,2));
  8885.  ns = (c_INT_plus_INT_INT_chk(local2,1));
  8886.  r_5901 = FMAPTPFMAPIDENTA_5888(self, ns);
  8887.  {
  8888.   struct FMAPTPFMAPIDENTA_5904_frame_struct temp5903_0;
  8889.   FMAPTPFMAPIDENTA_5904_frame 
  8890.   noname5905 = &temp5903_0;
  8891.   noname5905->state = 0;
  8892.   while (1) {
  8893.    if (noname5905->state == 0) {
  8894.     noname5902 = self;
  8895.     noname5905->arg0 = noname5902;
  8896.    }
  8897.    local3 = FMAPTPFMAPIDENTA_5904(noname5905);
  8898.    if (noname5905->state == -1) goto after_loop;
  8899.    r_5901 = FMAPTPFMAPIDENTA_5896(r_5901, local3);
  8900.   }
  8901.  }
  8902.  after_loop: ;
  8903.  return r_5901;
  8904. }
  8905.  
  8906.  
  8907. void FMAPTPFMAPIDENTA_5906(FMAPTPFMAPIDENTA self, INT ind_5907, TUPTPFMAPIDENTAM val_5908) {
  8908.  BOOL local0;
  8909.  INT local1;
  8910.  INT local2;
  8911.  if ((!((self==((FMAPTPFMAPIDENTA) NULL))))) {
  8912.   local1 = 0;
  8913.   local2 = (self->asize);
  8914.   local0 = INT_is_bet_INT_I(ind_5907, local1, (c_INT_minus_INT_INT_chk(local2,1)));
  8915.  } else {
  8916.   local0 = FALSE;
  8917.  }
  8918.  if (!(local0)) {
  8919.   fprintf(stderr,"Violation of precondition ../Library/aref.sa:38:7\n");
  8920.   exit(16);
  8921.  }
  8922.  if (ind_5907<0||ind_5907>=self->asize) {
  8923.   fprintf(stderr,"Index out of bounds ../Library/aref.sa:38:7\n");
  8924.   exit(16);
  8925.  }
  8926.  self->arr_part[ind_5907] = val_5908;
  8927. }
  8928.  
  8929.  
  8930. FMAPTPFMAPIDENTA FMAPTPFMAPIDENTA_5898(FMAPTPFMAPIDENTA self, TP k, FMAPIDENTAM_GLOB t_5909) {
  8931.  FMAPTPFMAPIDENTA noname5910;
  8932.  FMAPTPFMAPIDENTA r_5911;
  8933.  INT h = ((INT) 0);
  8934.  INT asm_5912 = ((INT) 0);
  8935.  TP tk;
  8936.  TP tk_5913;
  8937.  INT local0;
  8938.  INT local1;
  8939.  INT local2;
  8940.  INT local3;
  8941.  INT local4;
  8942.  r_5911 = self;
  8943.  if ((r_5911==((FMAPTPFMAPIDENTA) NULL))) {
  8944.   r_5911 = FMAPTPFMAPIDENTA_5888(self, 5);
  8945.  }
  8946.  else {
  8947.   local0 = (c_INT_plus_INT_INT_chk(self->hsize,1));
  8948.   local1 = (c_INT_times_INT_INT_chk(local0,2));
  8949.   if ((local1>(self->asize))) {
  8950.    r_5911 = FMAPTPFMAPIDENTA_5899(self);
  8951.   }
  8952.  }
  8953.  local2 = FMAPTPFMAPIDENTA_5102(r_5911, k);
  8954.  local3 = (r_5911->asize);
  8955.  h = (local2&(c_INT_minus_INT_INT_chk(local3,2)));
  8956.  local4 = (r_5911->asize);
  8957.  asm_5912 = (c_INT_minus_INT_INT_chk(local4,1));
  8958.  while (1) {
  8959.   tk = (TUPTPFMAPIDENTAM_blob=FMAPTPFMAPIDENTA_5107(r_5911, h)).t1;
  8960.   if (FMAPTPFMAPIDENTA_5110(self, tk, FMAPTPFMAPIDENTA_5112(self))) {
  8961.    goto after_loop;
  8962.   }
  8963.   if (FMAPTPFMAPIDENTA_5110(self, tk, k)) {
  8964.    FMAPTPFMAPIDENTA_5906(r_5911, h, TUPTPFMAPIDENTAM_5886(TUPTPFMAPIDENTAM_zero, k, t_5909));
  8965.    return r_5911;
  8966.   }
  8967.   h = (c_INT_plus_INT_INT_chk(h,1));
  8968.  }
  8969.  after_loop: ;
  8970.  if ((h==asm_5912)) {
  8971.   h = 0;
  8972.   while (1) {
  8973.    tk_5913 = (TUPTPFMAPIDENTAM_blob=FMAPTPFMAPIDENTA_5107(r_5911, h)).t1;
  8974.    if (FMAPTPFMAPIDENTA_5110(self, tk_5913, FMAPTPFMAPIDENTA_5112(self))) {
  8975.     goto after_loop_5915;
  8976.    }
  8977.    if (FMAPTPFMAPIDENTA_5110(self, tk_5913, k)) {
  8978.     FMAPTPFMAPIDENTA_5906(r_5911, h, TUPTPFMAPIDENTAM_5886(TUPTPFMAPIDENTAM_zero, k, t_5909));
  8979.     return r_5911;
  8980.    }
  8981.    h = (c_INT_plus_INT_INT_chk(h,1));
  8982.   }
  8983.   after_loop_5915: ;
  8984.   if (!((h!=asm_5912))) {
  8985.    fprintf(stderr,"Violation of assertion ../Library/fmap.sa:199:15\n");
  8986.    exit(16);
  8987.   }
  8988.  }
  8989.  FMAPTPFMAPIDENTA_5906(r_5911, h, TUPTPFMAPIDENTAM_5886(TUPTPFMAPIDENTAM_zero, k, t_5909));
  8990.  r_5911->hsize = (c_INT_plus_INT_INT_chk(r_5911->hsize,1));
  8991.  return r_5911;
  8992.  if (!FMAPTPFMAPIDENTA_5104(self)) {
  8993.   fprintf(stderr,"Failed invariant FMAP{$TP,FMAP{IDENT,AM_GLOBAL_EXPR}}::invariant:BOOL ../Library/fmap.sa:180:9\n");
  8994.   exit(16);
  8995.  }
  8996. }
  8997.  
  8998.  
  8999. INT FLISTAM_GLOBAL_E(FLISTAM_GLOBAL_EXPR self) {
  9000.  INT noname5917 = ((INT) 0);
  9001.   return self->asize;
  9002.  fprintf(stderr,"Last statement wasn't return ../Library/aref.sa:20:8\n");
  9003.  exit(16);
  9004. }
  9005.  
  9006.  
  9007. INT FLISTAM_GLOBAL_E_5918(FLISTAM_GLOBAL_EXPR self) {
  9008.  INT noname5919 = ((INT) 0);
  9009.  if ((self==((FLISTAM_GLOBAL_EXPR) NULL))) {
  9010.   return 0;
  9011.  }
  9012.  return self->loc_17;
  9013.  if (!FLISTAM_GLOBAL_E_5920(self)) {
  9014.   fprintf(stderr,"Failed invariant FLIST{AM_GLOBAL_EXPR}::invariant:BOOL ../Library/flist.sa:50:7\n");
  9015.   exit(16);
  9016.  }
  9017. }
  9018.  
  9019.  
  9020. BOOL FLISTAM_GLOBAL_E_5921(FLISTAM_GLOBAL_EXPR self) {
  9021.  BOOL noname5922 = ((BOOL) 0);
  9022.  INT local0;
  9023.  local0 = FLISTAM_GLOBAL_E_5918(self);
  9024.  return (local0==0);
  9025.  if (!FLISTAM_GLOBAL_E_5920(self)) {
  9026.   fprintf(stderr,"Failed invariant FLIST{AM_GLOBAL_EXPR}::invariant:BOOL ../Library/flist.sa:113:11\n");
  9027.   exit(16);
  9028.  }
  9029. }
  9030.  
  9031.  
  9032. void FLISTAM_GLOBAL_E_5923(FLISTAM_GLOBAL_EXPR self) {
  9033.  AM_GLOBAL_EXPR nil = ((AM_GLOBAL_EXPR) NULL);
  9034.  FLISTAM_GLOBAL_EXPR noname5924;
  9035.  if (!((!((self==((FLISTAM_GLOBAL_EXPR) NULL)))))) {
  9036.   fprintf(stderr,"Violation of precondition ../Library/aref.sa:43:9\n");
  9037.   exit(16);
  9038.  }
  9039.  {
  9040.   struct FLISTAM_GLOBAL_E_5926_frame_struct temp5925_0;
  9041.   FLISTAM_GLOBAL_E_5926_frame 
  9042.   noname5927 = &temp5925_0;
  9043.   noname5927->state = 0;
  9044.   while (1) {
  9045.    if (noname5927->state == 0) {
  9046.     noname5924 = self;
  9047.     noname5927->arg0 = noname5924;
  9048.    }
  9049.    noname5927->arg1 = nil;
  9050.    FLISTAM_GLOBAL_E_5926(noname5927);
  9051.    if (noname5927->state == -1) goto after_loop;
  9052.    0 /* No return value from iter call */;
  9053.   }
  9054.  }
  9055.  after_loop: ;
  9056. }
  9057.  
  9058.  
  9059. void FLISTAM_GLOBAL_E_5928(FLISTAM_GLOBAL_EXPR self) {
  9060.  if (FLISTAM_GLOBAL_E_5921(self)) {
  9061.   return;
  9062.  }
  9063.  else {
  9064.   FLISTAM_GLOBAL_E_5923(self);
  9065.   self->loc_17 = 0;
  9066.  }
  9067.  if (!FLISTAM_GLOBAL_E_5920(self)) {
  9068.   fprintf(stderr,"Failed invariant FLIST{AM_GLOBAL_EXPR}::invariant:BOOL ../Library/flist.sa:117:8\n");
  9069.   exit(16);
  9070.  }
  9071. }
  9072.  
  9073.  
  9074. void FLISTAM_GLOBAL_E_5929(FLISTAM_GLOBAL_EXPR self, INT ind_5930, AM_GLOBAL_EXPR val_5931) {
  9075.  BOOL local0;
  9076.  INT local1;
  9077.  INT local2;
  9078.  if ((!((self==((FLISTAM_GLOBAL_EXPR) NULL))))) {
  9079.   local1 = 0;
  9080.   local2 = (self->asize);
  9081.   local0 = INT_is_bet_INT_I(ind_5930, local1, (c_INT_minus_INT_INT_chk(local2,1)));
  9082.  } else {
  9083.   local0 = FALSE;
  9084.  }
  9085.  if (!(local0)) {
  9086.   fprintf(stderr,"Violation of precondition ../Library/aref.sa:38:7\n");
  9087.   exit(16);
  9088.  }
  9089.  if (ind_5930<0||ind_5930>=self->asize) {
  9090.   fprintf(stderr,"Index out of bounds ../Library/aref.sa:38:7\n");
  9091.   exit(16);
  9092.  }
  9093.  self->arr_part[ind_5930] = val_5931;
  9094. }
  9095.  
  9096.  
  9097. void FLISTAM_GLOBAL_E_5932(FLISTAM_GLOBAL_EXPR self, INT ind_5933, AM_GLOBAL_EXPR val_5934) {
  9098.  BOOL local0;
  9099.  INT local1;
  9100.  if ((!((self==((FLISTAM_GLOBAL_EXPR) NULL))))) {
  9101.   local1 = 0;
  9102.   local0 = INT_is_bet_INT_I(ind_5933, local1, (c_INT_minus_INT_INT_chk(self->loc_17,1)));
  9103.  } else {
  9104.   local0 = FALSE;
  9105.  }
  9106.  if (!(local0)) {
  9107.   fprintf(stderr,"Violation of precondition ../Library/flist.sa:73:7\n");
  9108.   exit(16);
  9109.  }
  9110.  FLISTAM_GLOBAL_E_5929(self, ind_5933, val_5934);
  9111.  if (!FLISTAM_GLOBAL_E_5920(self)) {
  9112.   fprintf(stderr,"Failed invariant FLIST{AM_GLOBAL_EXPR}::invariant:BOOL ../Library/flist.sa:73:7\n");
  9113.   exit(16);
  9114.  }
  9115. }
  9116.  
  9117.  
  9118. FLISTAM_GLOBAL_EXPR FLISTAM_GLOBAL_E_5935(FLISTAM_GLOBAL_EXPR self, AM_GLOBAL_EXPR e_5936) {
  9119.  FLISTAM_GLOBAL_EXPR noname5937;
  9120.  FLISTAM_GLOBAL_EXPR r_5938 = ((FLISTAM_GLOBAL_EXPR) NULL);
  9121.  FLISTAM_GLOBAL_EXPR noname5939;
  9122.  FLISTAM_GLOBAL_EXPR noname5940;
  9123.  FLISTAM_GLOBAL_EXPR local0;
  9124.  INT local1;
  9125.  FLISTAM_GLOBAL_EXPR local2;
  9126.  INT local3;
  9127.  AM_GLOBAL_EXPR local4;
  9128.  INT local5;
  9129.  if ((self==((FLISTAM_GLOBAL_EXPR) NULL))) {
  9130.   local0 = ((FLISTAM_GLOBAL_EXPR) sbi_arr_alloc(sizeof(struct FLISTAM_GLOBAL_EXPR_struct), FLISTAM_GLOBAL_EXPR_tag, sizeof(AM_GLOBAL_EXPR) , 5));
  9131.   local0->asize = 5;
  9132.   r_5938 = local0;
  9133.  }
  9134.  else {
  9135.   local1 = self->loc_17;
  9136.   if ((local1<(self->asize))) {
  9137.    r_5938 = self;
  9138.   }
  9139.   else {
  9140.    local3 = 2;
  9141.    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)))));
  9142.    local2->asize = (c_INT_times_INT_INT_chk(local3,(self->asize)));
  9143.    r_5938 = local2;
  9144.    r_5938->loc_17 = self->loc_17;
  9145.    {
  9146.     struct FLISTAM_GLOBAL_E_5942_frame_struct temp5941_0;
  9147.     FLISTAM_GLOBAL_E_5942_frame 
  9148.     noname5943 = &temp5941_0;
  9149.     struct FLISTAM_GLOBAL_E_5926_frame_struct temp5941_1;
  9150.     FLISTAM_GLOBAL_E_5926_frame 
  9151.     noname5944 = &temp5941_1;
  9152.     noname5943->state = 0;
  9153.     noname5944->state = 0;
  9154.     while (1) {
  9155.      if (noname5944->state == 0) {
  9156.       noname5940 = r_5938;
  9157.       noname5944->arg0 = noname5940;
  9158.      }
  9159.      if (noname5943->state == 0) {
  9160.       noname5939 = self;
  9161.       noname5943->arg0 = noname5939;
  9162.      }
  9163.      local4 = FLISTAM_GLOBAL_E_5942(noname5943);
  9164.      if (noname5943->state == -1) goto after_loop;
  9165.      noname5944->arg1 = local4;
  9166.      FLISTAM_GLOBAL_E_5926(noname5944);
  9167.      if (noname5944->state == -1) goto after_loop;
  9168.      0 /* No return value from iter call */;
  9169.     }
  9170.    }
  9171.    after_loop: ;
  9172.    FLISTAM_GLOBAL_E_5928(self);
  9173.   }
  9174.  }
  9175.  r_5938->loc_17 = (c_INT_plus_INT_INT_chk(r_5938->loc_17,1));
  9176.  local5 = (c_INT_minus_INT_INT_chk(r_5938->loc_17,1));
  9177.  FLISTAM_GLOBAL_E_5932(r_5938, local5, e_5936);
  9178.  return r_5938;
  9179.  if (!FLISTAM_GLOBAL_E_5920(self)) {
  9180.   fprintf(stderr,"Failed invariant FLIST{AM_GLOBAL_EXPR}::invariant:BOOL ../Library/flist.sa:79:7\n");
  9181.   exit(16);
  9182.  }
  9183. }
  9184.  
  9185.  
  9186. void GLOBAL_TBL_inser(GLOBAL_TBL self, AM_GLOBAL_EXPR g_5945) {
  9187.  FMAPIDENTAM_GLOB m;
  9188.  m = FMAPTPFMAPIDENTA_5114(self->tbl, g_5945->class_tp);
  9189.  m = FMAPIDENTAM_GLOB_5863(m, g_5945->name_19, g_5945);
  9190.  self->tbl = FMAPTPFMAPIDENTA_5898(self->tbl, g_5945->class_tp, m);
  9191.  self->top_sort = FLISTAM_GLOBAL_E_5935(self->top_sort, g_5945);
  9192. }
  9193.  
  9194.  
  9195. AM_RETURN_STMT AM_RETURN_STMT_c(AM_RETURN_STMT self, SFILE_ID source_5946) {
  9196.  AM_RETURN_STMT noname5947;
  9197.  AM_RETURN_STMT r_5948;
  9198.  AM_RETURN_STMT local0;
  9199.  local0 = ((AM_RETURN_STMT) sbi_alloc(sizeof(struct AM_RETURN_STMT_struct), AM_RETURN_STMT_tag));
  9200.  r_5948 = local0;
  9201.  r_5948->source_38 = source_5946;
  9202.  return r_5948;
  9203. }
  9204.  
  9205.  
  9206. AM_ROUT_DEF TRANS_transform__5949(TRANS self, ELT e_5950, TR_CONST_DEF tr_5951) {
  9207.  AM_ROUT_DEF noname5952;
  9208.  AM_ROUT_DEF r_5953;
  9209.  AM_GLOBAL_EXPR g_5954;
  9210.  AM_RETURN_STMT ar;
  9211.  INT local0;
  9212.  AM_LOCAL_EXPR local1;
  9213.  SFILE_ID local2;
  9214.  IDENT local3;
  9215.  GLOBAL_TBL local4;
  9216.  IDENT local5;
  9217.  r_5953 = AM_ROUT_DEF_crea(((AM_ROUT_DEF) NULL), 1, tr_5951->source_38);
  9218.  self->cur_rout = r_5953;
  9219.  r_5953->srcsig = e_5950->srcsig;
  9220.  local0 = 0;
  9221.  local1 = ((AM_LOCAL_EXPR) NULL);
  9222.  local2 = tr_5951->source_38;
  9223.  local3 = self->prog->ident_builtin->self_ident;
  9224.  AM_ROUT_DEF_aset(r_5953, local0, AM_LOCAL_EXPR_cr(local1, local2, local3, ELT_tp_TP(e_5950)));
  9225.  r_5953->sig_6 = e_5950->sig_6;
  9226.  local4 = self->prog->global_tbl;
  9227.  local5 = ELT_name_IDENT(e_5950);
  9228.  g_5954 = GLOBAL_TBL_get_I(local4, local5, self->impl->tp);
  9229.  if ((g_5954==((AM_GLOBAL_EXPR) NULL))) {
  9230.   g_5954 = AM_GLOBAL_EXPR_c(((AM_GLOBAL_EXPR) NULL), tr_5951->source_38);
  9231.   g_5954->name_19 = ELT_name_IDENT(e_5950);
  9232.   g_5954->tp_at = ELT_ret_TP(e_5950);
  9233.   g_5954->class_tp = self->impl->tp;
  9234.   g_5954->is_const = TRUE;
  9235.   self->in_constant = TRUE;
  9236.   g_5954->init = TRANS_transform__5198(self, tr_5951->init, g_5954->tp_at);
  9237.   self->in_constant = FALSE;
  9238.   GLOBAL_TBL_inser(self->prog->global_tbl, g_5954);
  9239.  }
  9240.  ar = AM_RETURN_STMT_c(((AM_RETURN_STMT) NULL), tr_5951->source_38);
  9241.  ar->val_16 = ((AM_EXPR) g_5954);
  9242.  r_5953->code_56 = ((AM_STMT) ar);
  9243.  r_5953->is_clean = TRUE;
  9244.  return r_5953;
  9245. }
  9246.  
  9247.  
  9248. BOOL ELT_is_shared_re(ELT self) {
  9249.  BOOL noname5955 = ((BOOL) 0);
  9250.  TR_CLASS_ELT ltr;
  9251.  if ((!(SIG_is_reader_si(self->sig_6)))) {
  9252.   return FALSE;
  9253.  }
  9254.  ltr = self->tr;
  9255.  if (ltr==NULL) {
  9256.  } else
  9257.  switch (ltr->header.tag) {
  9258.   case TR_SHARED_DEF_tag:
  9259.    return TRUE; break;
  9260.   default: ;
  9261.  }
  9262.  return FALSE;
  9263. }
  9264.  
  9265.  
  9266. BOOL SIG_is_invariant(SIG self) {
  9267.  BOOL noname5956 = ((BOOL) 0);
  9268.  BOOL local0;
  9269.  BOOL local1;
  9270.  BOOL local2;
  9271.  if ((self->args_7==((ARRAYTP) NULL))) {
  9272.   local2 = (!((self->ret==((TP) NULL))));
  9273.  } else {
  9274.   local2 = FALSE;
  9275.  }
  9276.  if (local2) {
  9277.   local1 = TP_CLASS_is_eq_T(SIG_prog_PROG(self)->tp_builtin->bool_2, self->ret);
  9278.  } else {
  9279.   local1 = FALSE;
  9280.  }
  9281.  if (local1) {
  9282.   local0 = IDENT_is_eq_IDEN(self->name_19, SIG_prog_PROG(self)->ident_builtin->invariant_ident);
  9283.  } else {
  9284.   local0 = FALSE;
  9285.  }
  9286.  return local0;
  9287. }
  9288.  
  9289.  
  9290. BOOL ELT_is_invariant(ELT self) {
  9291.  BOOL noname5957 = ((BOOL) 0);
  9292.  return SIG_is_invariant(self->sig_6);
  9293. }
  9294.  
  9295.  
  9296. SIG IMPL_invariant_s(IMPL self) {
  9297.  SIG noname5958;
  9298.  ELT_TBL noname5959;
  9299.  IDENT noname5960 = IDENT_zero;
  9300.  ELT e_5961;
  9301.  ELT local0;
  9302.  {
  9303.   struct ELT_TBL_get_quer_frame_struct temp5962_0;
  9304.   ELT_TBL_get_quer_frame 
  9305.   noname5963 = &temp5962_0;
  9306.   noname5963->state = 0;
  9307.   while (1) {
  9308.    if (noname5963->state == 0) {
  9309.     noname5959 = self->elts;
  9310.     noname5960 = IMPL_prog_PROG(self)->ident_builtin->invariant_ident;
  9311.     noname5963->arg0 = noname5959;
  9312.     noname5963->arg1 = noname5960;
  9313.    }
  9314.    local0 = ELT_TBL_get_quer(noname5963);
  9315.    if (noname5963->state == -1) goto after_loop;
  9316.    e_5961 = local0;
  9317.    if (ELT_is_invariant(e_5961)) {
  9318.     return e_5961->sig_6;
  9319.    }
  9320.   }
  9321.  }
  9322.  after_loop: ;
  9323.  return ((SIG) NULL);
  9324. }
  9325.  
  9326.  
  9327. AM_INVARIANT_STMT AM_INVARIANT_STM(AM_INVARIANT_STMT self, SFILE_ID source_5964) {
  9328.  AM_INVARIANT_STMT noname5965;
  9329.  AM_INVARIANT_STMT r_5966;
  9330.  AM_INVARIANT_STMT local0;
  9331.  local0 = ((AM_INVARIANT_STMT) sbi_alloc(sizeof(struct AM_INVARIANT_STMT_struct), AM_INVARIANT_STMT_tag));
  9332.  r_5966 = local0;
  9333.  r_5966->source_38 = source_5964;
  9334.  return r_5966;
  9335. }
  9336.  
  9337.  
  9338. AM_ROUT_DEF TRANS_transform__5967(TRANS self, ELT e_5968, TR_SHARED_DEF tr_5969) {
  9339.  AM_ROUT_DEF noname5970;
  9340.  AM_ROUT_DEF r_5971;
  9341.  AM_GLOBAL_EXPR g_5972;
  9342.  AM_RETURN_STMT ar;
  9343.  AM_ROUT_DEF r_5973;
  9344.  AM_GLOBAL_EXPR g_5974;
  9345.  AM_ASSIGN_STMT ar_5975;
  9346.  AM_INVARIANT_STMT inv = ((AM_INVARIANT_STMT) NULL);
  9347.  SIG isig;
  9348.  AM_ROUT_CALL_EXPR icall;
  9349.  INT local0;
  9350.  AM_LOCAL_EXPR local1;
  9351.  SFILE_ID local2;
  9352.  IDENT local3;
  9353.  GLOBAL_TBL local4;
  9354.  IDENT local5;
  9355.  INT local6;
  9356.  AM_LOCAL_EXPR local7;
  9357.  SFILE_ID local8;
  9358.  IDENT local9;
  9359.  INT local10;
  9360.  AM_LOCAL_EXPR local11;
  9361.  SFILE_ID local12;
  9362.  IDENT local13;
  9363.  GLOBAL_TBL local14;
  9364.  IDENT local15;
  9365.  BOOL local16;
  9366.  AM_STMT local17;
  9367.  if (ELT_is_shared_re(e_5968)) {
  9368.   r_5971 = AM_ROUT_DEF_crea(((AM_ROUT_DEF) NULL), 1, tr_5969->source_38);
  9369.   self->cur_rout = r_5971;
  9370.   r_5971->srcsig = e_5968->srcsig;
  9371.   local0 = 0;
  9372.   local1 = ((AM_LOCAL_EXPR) NULL);
  9373.   local2 = tr_5969->source_38;
  9374.   local3 = self->prog->ident_builtin->self_ident;
  9375.   AM_ROUT_DEF_aset(r_5971, local0, AM_LOCAL_EXPR_cr(local1, local2, local3, ELT_tp_TP(e_5968)));
  9376.   r_5971->sig_6 = e_5968->sig_6;
  9377.   local4 = self->prog->global_tbl;
  9378.   local5 = ELT_name_IDENT(e_5968);
  9379.   g_5972 = GLOBAL_TBL_get_I(local4, local5, self->impl->tp);
  9380.   if ((g_5972==((AM_GLOBAL_EXPR) NULL))) {
  9381.    g_5972 = AM_GLOBAL_EXPR_c(((AM_GLOBAL_EXPR) NULL), tr_5969->source_38);
  9382.    g_5972->name_19 = ELT_name_IDENT(e_5968);
  9383.    g_5972->tp_at = ELT_ret_TP(e_5968);
  9384.    g_5972->class_tp = self->impl->tp;
  9385.    self->in_constant = TRUE;
  9386.    g_5972->init = TRANS_transform__5198(self, tr_5969->init, g_5972->tp_at);
  9387.    self->in_constant = FALSE;
  9388.    GLOBAL_TBL_inser(self->prog->global_tbl, g_5972);
  9389.   }
  9390.   g_5972->tp_at = e_5968->sig_6->ret;
  9391.   ar = AM_RETURN_STMT_c(((AM_RETURN_STMT) NULL), tr_5969->source_38);
  9392.   ar->val_16 = ((AM_EXPR) g_5972);
  9393.   r_5971->code_56 = ((AM_STMT) ar);
  9394.   r_5971->is_clean = TRUE;
  9395.   return r_5971;
  9396.  }
  9397.  r_5973 = AM_ROUT_DEF_crea(((AM_ROUT_DEF) NULL), 2, tr_5969->source_38);
  9398.  self->cur_rout = r_5973;
  9399.  r_5973->srcsig = e_5968->srcsig;
  9400.  local6 = 0;
  9401.  local7 = ((AM_LOCAL_EXPR) NULL);
  9402.  local8 = tr_5969->source_38;
  9403.  local9 = self->prog->ident_builtin->self_ident;
  9404.  AM_ROUT_DEF_aset(r_5973, local6, AM_LOCAL_EXPR_cr(local7, local8, local9, ELT_tp_TP(e_5968)));
  9405.  if ((e_5968->sig_6->args_7==((ARRAYTP) NULL))) {
  9406.   PROG_err_STR(self->prog, ((STR) &CompilererrorTRA_5976));
  9407.   return ((AM_ROUT_DEF) NULL);
  9408.  }
  9409.  local10 = 1;
  9410.  local11 = ((AM_LOCAL_EXPR) NULL);
  9411.  local12 = tr_5969->source_38;
  9412.  local13 = ELT_name_IDENT(e_5968);
  9413.  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)));
  9414.  r_5973->sig_6 = e_5968->sig_6;
  9415.  local14 = self->prog->global_tbl;
  9416.  local15 = ELT_name_IDENT(e_5968);
  9417.  g_5974 = GLOBAL_TBL_get_I(local14, local15, self->impl->tp);
  9418.  if ((g_5974==((AM_GLOBAL_EXPR) NULL))) {
  9419.   g_5974 = AM_GLOBAL_EXPR_c(((AM_GLOBAL_EXPR) NULL), tr_5969->source_38);
  9420.   g_5974->name_19 = ELT_name_IDENT(e_5968);
  9421.   g_5974->class_tp = self->impl->tp;
  9422.   self->in_constant = TRUE;
  9423.   g_5974->init = TRANS_transform__5198(self, tr_5969->init, g_5974->tp_at);
  9424.   self->in_constant = FALSE;
  9425.   GLOBAL_TBL_inser(self->prog->global_tbl, g_5974);
  9426.  }
  9427.  g_5974->tp_at = ARRAYTP_aget_INT_TP(e_5968->sig_6->args_7, 0);
  9428.  ar_5975 = AM_ASSIGN_STMT_c(((AM_ASSIGN_STMT) NULL), tr_5969->source_38);
  9429.  ar_5975->dest = ((AM_EXPR) g_5974);
  9430.  ar_5975->src_42 = ((AM_EXPR) AM_ROUT_DEF_aget(r_5973, 1));
  9431.  if ((!(e_5968->is_private))) {
  9432.   local16 = (!(self->in_invariant));
  9433.  } else {
  9434.   local16 = FALSE;
  9435.  }
  9436.  if (local16) {
  9437.   isig = IMPL_invariant_s(self->impl);
  9438.   if ((!((isig==((SIG) NULL))))) {
  9439.    inv = AM_INVARIANT_STM(((AM_INVARIANT_STMT) NULL), tr_5969->source_38);
  9440.    inv->sig_6 = isig;
  9441.    icall = AM_ROUT_CALL_EXP_5400(((AM_ROUT_CALL_EXPR) NULL), 1, tr_5969->source_38);
  9442.    icall->fun = isig;
  9443.    r_5973->calls_58 = FLISTAM_EXPR_pus(r_5973->calls_58, ((AM_EXPR) icall));
  9444.   }
  9445.  }
  9446.  r_5973->code_56 = ((AM_STMT) ar_5975);
  9447.  if ((r_5973->code_56==((AM_STMT) NULL))) {
  9448.   r_5973->code_56 = ((AM_STMT) inv);
  9449.  }
  9450.  else {
  9451.   local17 = r_5973->code_56;
  9452.   (*AM_STMT_append_A[local17->header.tag+AM_STMT_append_A_offset])(local17, ((AM_STMT) inv));
  9453.  }
  9454.  r_5973->is_clean = FALSE;
  9455.  return r_5973;
  9456. }
  9457.  
  9458.  
  9459. AM_ATTR_EXPR AM_ATTR_EXPR_cre(AM_ATTR_EXPR self, SFILE_ID source_5977) {
  9460.  AM_ATTR_EXPR noname5978;
  9461.  AM_ATTR_EXPR r_5979;
  9462.  AM_ATTR_EXPR local0;
  9463.  local0 = ((AM_ATTR_EXPR) sbi_alloc(sizeof(struct AM_ATTR_EXPR_struct), AM_ATTR_EXPR_tag));
  9464.  r_5979 = local0;
  9465.  r_5979->source_38 = source_5977;
  9466.  return r_5979;
  9467. }
  9468.  
  9469.  
  9470. AM_VATTR_ASSIGN_EXPR AM_VATTR_ASSIGN__5980(AM_VATTR_ASSIGN_EXPR self, SFILE_ID source_5981) {
  9471.  AM_VATTR_ASSIGN_EXPR noname5982;
  9472.  AM_VATTR_ASSIGN_EXPR r_5983;
  9473.  AM_VATTR_ASSIGN_EXPR local0;
  9474.  local0 = ((AM_VATTR_ASSIGN_EXPR) sbi_alloc(sizeof(struct AM_VATTR_ASSIGN_EXPR_struct), AM_VATTR_ASSIGN_EXPR_tag));
  9475.  r_5983 = local0;
  9476.  r_5983->source_38 = source_5981;
  9477.  return r_5983;
  9478. }
  9479.  
  9480.  
  9481. AM_ROUT_DEF TRANS_transform__5984(TRANS self, ELT e_5985, TR_ATTR_DEF tr_5986) {
  9482.  AM_ROUT_DEF noname5987;
  9483.  AM_ROUT_DEF r_5988 = ((AM_ROUT_DEF) NULL);
  9484.  AM_ATTR_EXPR ae;
  9485.  AM_RETURN_STMT ar;
  9486.  AM_VATTR_ASSIGN_EXPR av;
  9487.  AM_RETURN_STMT ar_5989;
  9488.  AM_ATTR_EXPR ae_5990;
  9489.  AM_ASSIGN_STMT ar_5991;
  9490.  AM_INVARIANT_STMT inv = ((AM_INVARIANT_STMT) NULL);
  9491.  SIG isig;
  9492.  AM_ROUT_CALL_EXPR icall;
  9493.  INT local0;
  9494.  AM_LOCAL_EXPR local1;
  9495.  SFILE_ID local2;
  9496.  IDENT local3;
  9497.  AM_EXPR local4;
  9498.  INT local5;
  9499.  AM_LOCAL_EXPR local6;
  9500.  SFILE_ID local7;
  9501.  IDENT local8;
  9502.  INT local9;
  9503.  AM_LOCAL_EXPR local10;
  9504.  SFILE_ID local11;
  9505.  IDENT local12;
  9506.  INT local13;
  9507.  AM_EXPR local14;
  9508.  BOOL local15;
  9509.  AM_STMT local16;
  9510.  if (ELT_is_attr_read(e_5985)) {
  9511.   r_5988 = AM_ROUT_DEF_crea(((AM_ROUT_DEF) NULL), 1, tr_5986->source_38);
  9512.   r_5988->srcsig = e_5985->srcsig;
  9513.   local0 = 0;
  9514.   local1 = ((AM_LOCAL_EXPR) NULL);
  9515.   local2 = tr_5986->source_38;
  9516.   local3 = self->prog->ident_builtin->self_ident;
  9517.   AM_ROUT_DEF_aset(r_5988, local0, AM_LOCAL_EXPR_cr(local1, local2, local3, ELT_tp_TP(e_5985)));
  9518.   r_5988->sig_6 = e_5985->sig_6;
  9519.   ae = AM_ATTR_EXPR_cre(((AM_ATTR_EXPR) NULL), tr_5986->source_38);
  9520.   ae->ob = ((AM_EXPR) AM_ROUT_DEF_aget(r_5988, 0));
  9521.   local4 = ae->ob;
  9522.   ae->self_tp = (*AM_EXPR_tp_TP[local4->header.tag+AM_EXPR_tp_TP_offset])(local4);
  9523.   ae->at = ELT_name_IDENT(e_5985);
  9524.   ae->tp_at = TRANS_tp_of_TR_T(self, tr_5986->tp);
  9525.   if ((ae->tp_at==((TP) NULL))) {
  9526.    PROG_err_loc_PRO(self->prog, ((PROG_ERR) tr_5986->tp));
  9527.    PROG_err_STR(self->prog, ((STR) &Cannottranslatetype));
  9528.    return ((AM_ROUT_DEF) NULL);
  9529.   }
  9530.   ar = AM_RETURN_STMT_c(((AM_RETURN_STMT) NULL), tr_5986->source_38);
  9531.   ar->val_16 = ((AM_EXPR) ae);
  9532.   r_5988->code_56 = ((AM_STMT) ar);
  9533.   r_5988->is_clean = TRUE;
  9534.  }
  9535.  else {
  9536.   r_5988 = AM_ROUT_DEF_crea(((AM_ROUT_DEF) NULL), 2, tr_5986->source_38);
  9537.   r_5988->srcsig = e_5985->srcsig;
  9538.   local5 = 0;
  9539.   local6 = ((AM_LOCAL_EXPR) NULL);
  9540.   local7 = tr_5986->source_38;
  9541.   local8 = self->prog->ident_builtin->self_ident;
  9542.   AM_ROUT_DEF_aset(r_5988, local5, AM_LOCAL_EXPR_cr(local6, local7, local8, ELT_tp_TP(e_5985)));
  9543.   if ((e_5985->sig_6->args_7==((ARRAYTP) NULL))) {
  9544.    PROG_err_STR(self->prog, ((STR) &CompilererrorTRA_5992));
  9545.    return ((AM_ROUT_DEF) NULL);
  9546.   }
  9547.   local9 = 1;
  9548.   local10 = ((AM_LOCAL_EXPR) NULL);
  9549.   local11 = tr_5986->source_38;
  9550.   local12 = ELT_name_IDENT(e_5985);
  9551.   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)));
  9552.   r_5988->sig_6 = e_5985->sig_6;
  9553.   local13 = PROG_tp_kind_TP_INT(self->prog, ((TP) self->tp_con->same_34));
  9554.   if ((local13==shared_TP_KIND_v)) {
  9555.    av = AM_VATTR_ASSIGN__5980(((AM_VATTR_ASSIGN_EXPR) NULL), tr_5986->source_38);
  9556.    av->ob = ((AM_EXPR) AM_ROUT_DEF_aget(r_5988, 0));
  9557.    av->at = ELT_name_IDENT(e_5985);
  9558.    av->val_16 = ((AM_EXPR) AM_ROUT_DEF_aget(r_5988, 1));
  9559.    ar_5989 = AM_RETURN_STMT_c(((AM_RETURN_STMT) NULL), tr_5986->source_38);
  9560.    ar_5989->val_16 = ((AM_EXPR) av);
  9561.    r_5988->code_56 = ((AM_STMT) ar_5989);
  9562.   }
  9563.   else {
  9564.    ae_5990 = AM_ATTR_EXPR_cre(((AM_ATTR_EXPR) NULL), tr_5986->source_38);
  9565.    ae_5990->ob = ((AM_EXPR) AM_ROUT_DEF_aget(r_5988, 0));
  9566.    local14 = ae_5990->ob;
  9567.    ae_5990->self_tp = (*AM_EXPR_tp_TP[local14->header.tag+AM_EXPR_tp_TP_offset])(local14);
  9568.    ae_5990->at = ELT_name_IDENT(e_5985);
  9569.    ae_5990->tp_at = TRANS_tp_of_TR_T(self, tr_5986->tp);
  9570.    if ((ae_5990->tp_at==((TP) NULL))) {
  9571.     PROG_err_loc_PRO(self->prog, ((PROG_ERR) tr_5986->tp));
  9572.     PROG_err_STR(self->prog, ((STR) &Cannottranslatet_5993));
  9573.     return ((AM_ROUT_DEF) NULL);
  9574.    }
  9575.    ar_5991 = AM_ASSIGN_STMT_c(((AM_ASSIGN_STMT) NULL), tr_5986->source_38);
  9576.    ar_5991->dest = ((AM_EXPR) ae_5990);
  9577.    ar_5991->src_42 = ((AM_EXPR) AM_ROUT_DEF_aget(r_5988, 1));
  9578.    r_5988->code_56 = ((AM_STMT) ar_5991);
  9579.   }
  9580.   if ((!(e_5985->is_private))) {
  9581.    local15 = (!(self->in_invariant));
  9582.   } else {
  9583.    local15 = FALSE;
  9584.   }
  9585.   if (local15) {
  9586.    isig = IMPL_invariant_s(self->impl);
  9587.    if ((!((isig==((SIG) NULL))))) {
  9588.     inv = AM_INVARIANT_STM(((AM_INVARIANT_STMT) NULL), tr_5986->source_38);
  9589.     inv->sig_6 = isig;
  9590.     icall = AM_ROUT_CALL_EXP_5400(((AM_ROUT_CALL_EXPR) NULL), 1, tr_5986->source_38);
  9591.     icall->fun = isig;
  9592.     r_5988->calls_58 = FLISTAM_EXPR_pus(r_5988->calls_58, ((AM_EXPR) icall));
  9593.    }
  9594.   }
  9595.   if ((r_5988->code_56==((AM_STMT) NULL))) {
  9596.    r_5988->code_56 = ((AM_STMT) inv);
  9597.   }
  9598.   else {
  9599.    local16 = r_5988->code_56;
  9600.    (*AM_STMT_append_A[local16->header.tag+AM_STMT_append_A_offset])(local16, ((AM_STMT) inv));
  9601.   }
  9602.   r_5988->is_clean = FALSE;
  9603.  }
  9604.  return r_5988;
  9605. }
  9606.  
  9607.  
  9608. BOOL BE_built_in_whic(BE self, SIG s_5994) {
  9609.  BOOL noname5995 = ((BOOL) 0);
  9610.  TUPSTRSTR tuple = TUPSTRSTR_zero;
  9611.  BOOL local0;
  9612.  BOOL local1;
  9613.  BOOL local2;
  9614.  FMAPSTRTUPSTRSTR local3;
  9615.  if ((!((self->prog->options_55->bounds_in==((FSETSTR) NULL))))) {
  9616.   local2 = TRUE;
  9617.  } else {
  9618.   local2 = self->prog->options_55->bounds_all;
  9619.  }
  9620.  if (local2) {
  9621.   local1 = TRUE;
  9622.  } else {
  9623.   local1 = (!((self->prog->options_55->arith_in==((FSETSTR) NULL))));
  9624.  }
  9625.  if (local1) {
  9626.   local0 = TRUE;
  9627.  } else {
  9628.   local0 = self->prog->options_55->arith_all;
  9629.  }
  9630.  if (local0) {
  9631.   local3 = self->built_in_routines;
  9632.   tuple = FMAPSTRTUPSTRSTR_4411(local3, SIG_str_STR(s_5994));
  9633.   if ((tuple.t1==(STR)0)&&(tuple.t2==(STR)0)) {
  9634.    return FALSE;
  9635.   }
  9636.   else {
  9637.    if (STR_is_eq_STR_BOOL(tuple.t2, ((STR) &nomacro_5996))) {
  9638.     return TRUE;
  9639.    }
  9640.    else {
  9641.     return FALSE;
  9642.    }
  9643.   }
  9644.  }
  9645.  return FALSE;
  9646. }
  9647.  
  9648.  
  9649. void TRANS_return_err(TRANS self) {
  9650.  PROG_err_STR(self->prog, ((STR) &Routinemusttermi));
  9651. }
  9652.  
  9653.  
  9654. void TRANS_check_stmt(TRANS self, TR_STMT t_5997) {
  9655.  TR_STMT s_5998;
  9656.  TR_CASE_WHEN wp;
  9657.  TR_TYPECASE_WHEN wp_5999;
  9658.  TR_PROTECT_WHEN wp_6000;
  9659.  TR_STMT local0;
  9660.  TR_STMT local1;
  9661.  OUT local2;
  9662.  OUT local3;
  9663.  if ((t_5997==((TR_STMT) NULL))) {
  9664.   TRANS_return_err(self);
  9665.   return;
  9666.  }
  9667.  s_5998 = t_5997;
  9668.  while (1) {
  9669.   local0 = s_5998;
  9670.   if (((*TR_STMT_next_TR_STMT[local0->header.tag+TR_STMT_next_TR_STMT_offset])(local0)==((TR_STMT) NULL))) {
  9671.    goto after_loop;
  9672.   }
  9673.   local1 = s_5998;
  9674.   s_5998 = (*TR_STMT_next_TR_STMT[local1->header.tag+TR_STMT_next_TR_STMT_offset])(local1);
  9675.  }
  9676.  after_loop: ;
  9677.  PROG_err_loc_PRO(self->prog, ((PROG_ERR) s_5998));
  9678.  if (s_5998==NULL) {
  9679.   local2 = OUT_create_OUT(((OUT) NULL));
  9680.   OUT_plus_STR(local2, ((STR) &CompilererrorTRA_6002));
  9681.  } else
  9682.  switch (s_5998->header.tag) {
  9683.   case TR_DEC_STMT_tag:
  9684.    TRANS_return_err(self); break;
  9685.   case TR_ASSIGN_STMT_tag:
  9686.    TRANS_return_err(self); break;
  9687.   case TR_IF_STMT_tag:
  9688.    TRANS_check_stmt(self, ((TR_IF_STMT) s_5998)->then_part);
  9689.    TRANS_check_stmt(self, ((TR_IF_STMT) s_5998)->else_part); break;
  9690.   case TR_LOOP_STMT_tag: break;
  9691.   case TR_RETURN_STMT_tag: break;
  9692.   case TR_YIELD_STMT_tag:
  9693.    TRANS_return_err(self); break;
  9694.   case TR_QUIT_STMT_tag:
  9695.    TRANS_return_err(self); break;
  9696.   case TR_CASE_STMT_tag:
  9697.    if ((!(((TR_CASE_STMT) s_5998)->no_else))) {
  9698.     TRANS_check_stmt(self, ((TR_CASE_STMT) s_5998)->else_part);
  9699.    }
  9700.    wp = ((TR_CASE_STMT) s_5998)->when_part;
  9701.    while (1) {
  9702.     if ((!((wp==((TR_CASE_WHEN) NULL))))) {
  9703.     }
  9704.     else {
  9705.      goto after_loop_6003;
  9706.     }
  9707.     TRANS_check_stmt(self, wp->then_part);
  9708.     wp = wp->next_8;
  9709.    }
  9710.    after_loop_6003: ; break;
  9711.   case TR_TYPECASE_STMT_tag:
  9712.    if ((!(((TR_TYPECASE_STMT) s_5998)->no_else))) {
  9713.     TRANS_check_stmt(self, ((TR_TYPECASE_STMT) s_5998)->else_part);
  9714.    }
  9715.    wp_5999 = ((TR_TYPECASE_STMT) s_5998)->when_part;
  9716.    while (1) {
  9717.     if ((!((wp_5999==((TR_TYPECASE_WHEN) NULL))))) {
  9718.     }
  9719.     else {
  9720.      goto after_loop_6005;
  9721.     }
  9722.     TRANS_check_stmt(self, wp_5999->then_part);
  9723.     wp_5999 = wp_5999->next_8;
  9724.    }
  9725.    after_loop_6005: ; break;
  9726.   case TR_ASSERT_STMT_tag:
  9727.    TRANS_return_err(self); break;
  9728.   case TR_PROTECT_STMT_tag:
  9729.    if ((!(((TR_PROTECT_STMT) s_5998)->no_else))) {
  9730.     TRANS_check_stmt(self, ((TR_PROTECT_STMT) s_5998)->else_part);
  9731.    }
  9732.    wp_6000 = ((TR_PROTECT_STMT) s_5998)->when_part;
  9733.    while (1) {
  9734.     if ((!((wp_6000==((TR_PROTECT_WHEN) NULL))))) {
  9735.     }
  9736.     else {
  9737.      goto after_loop_6007;
  9738.     }
  9739.     TRANS_check_stmt(self, wp_6000->then_part);
  9740.     wp_6000 = wp_6000->next_8;
  9741.    }
  9742.    after_loop_6007: ; break;
  9743.   case TR_RAISE_STMT_tag: break;
  9744.   case TR_EXPR_STMT_tag:
  9745.    TRANS_return_err(self); break;
  9746.   default: ;
  9747.    local3 = OUT_create_OUT(((OUT) NULL));
  9748.    OUT_plus_STR(local3, ((STR) &CompilererrorTRA_6009));
  9749.  }
  9750. }
  9751.  
  9752.  
  9753. void TRANS_check_retu(TRANS self, TR_ROUT_DEF t_6010) {
  9754.  if ((t_6010==((TR_ROUT_DEF) NULL))) {
  9755.   return;
  9756.  }
  9757.  if ((t_6010->ret_dec==((TR_TYPE_SPEC) NULL))) {
  9758.   return;
  9759.  }
  9760.  if (IDENT_is_iter_BOOL(t_6010->name_19)) {
  9761.   return;
  9762.  }
  9763.  PROG_err_loc_PRO(self->prog, ((PROG_ERR) t_6010));
  9764.  TRANS_check_stmt(self, t_6010->stmts);
  9765. }
  9766.  
  9767.  
  9768. AM_PRE_STMT AM_PRE_STMT_crea(AM_PRE_STMT self, SFILE_ID source_6011) {
  9769.  AM_PRE_STMT noname6012;
  9770.  AM_PRE_STMT r_6013;
  9771.  AM_PRE_STMT local0;
  9772.  local0 = ((AM_PRE_STMT) sbi_alloc(sizeof(struct AM_PRE_STMT_struct), AM_PRE_STMT_tag));
  9773.  r_6013 = local0;
  9774.  r_6013->source_38 = source_6011;
  9775.  return r_6013;
  9776. }
  9777.  
  9778.  
  9779. AM_POST_STMT AM_POST_STMT_cre(AM_POST_STMT self, SFILE_ID source_6014) {
  9780.  AM_POST_STMT noname6015;
  9781.  AM_POST_STMT r_6016;
  9782.  AM_POST_STMT local0;
  9783.  local0 = ((AM_POST_STMT) sbi_alloc(sizeof(struct AM_POST_STMT_struct), AM_POST_STMT_tag));
  9784.  r_6016 = local0;
  9785.  r_6016->source_38 = source_6014;
  9786.  return r_6016;
  9787. }
  9788.