home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / sa104os2.zip / SATHR104.ZIP / SATHER / BOOT / CS.COD / CODE2.C < prev    next >
C/C++ Source or Header  |  1995-02-15  |  283KB  |  10,162 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. TR_CLASS_DEF PROG_TR_TBL_get_(PROG_TR_TBL self, TUPIDENTINT q) {
  11.  TR_CLASS_DEF noname2035;
  12.  INT h = ((INT) 0);
  13.  TR_CLASS_DEF e_2036;
  14.  TR_CLASS_DEF e_2037;
  15.  INT local0;
  16.  INT local1;
  17.  INT local2;
  18.  INT local3;
  19.  if ((self==((PROG_TR_TBL) NULL))) {
  20.   return ((TR_CLASS_DEF) NULL);
  21.  }
  22.  local0 = PROG_TR_TBL_quer(self, q);
  23.  local1 = (self->asize);
  24.  h = (local0&(c_INT_minus_INT_INT_chk(local1,2)));
  25.  while (1) {
  26.   e_2036 = PROG_TR_TBL_aget(self, h);
  27.   if (PROG_TR_TBL_quer_2026(self, q, e_2036)) {
  28.    return e_2036;
  29.   }
  30.   else {
  31.    if (PROG_TR_TBL_elt__2031(self, e_2036, PROG_TR_TBL_elt_(self))) {
  32.     goto after_loop;
  33.    }
  34.   }
  35.   h = (c_INT_plus_INT_INT_chk(h,1));
  36.  }
  37.  after_loop: ;
  38.  local2 = (self->asize);
  39.  if ((h==(c_INT_minus_INT_INT_chk(local2,1)))) {
  40.   h = 0;
  41.   while (1) {
  42.    e_2037 = PROG_TR_TBL_aget(self, h);
  43.    if (PROG_TR_TBL_quer_2026(self, q, e_2037)) {
  44.     return e_2037;
  45.    }
  46.    else {
  47.     if (PROG_TR_TBL_elt__2031(self, e_2037, PROG_TR_TBL_elt_(self))) {
  48.      goto after_loop_2039;
  49.     }
  50.    }
  51.    h = (c_INT_plus_INT_INT_chk(h,1));
  52.   }
  53.   after_loop_2039: ;
  54.   local3 = (self->asize);
  55.   if (!((h!=(c_INT_minus_INT_INT_chk(local3,1))))) {
  56.    fprintf(stderr,"Violation of assertion ../Library/fqset.sa:142:15\n");
  57.    exit(16);
  58.   }
  59.  }
  60.  return PROG_TR_TBL_elt_(self);
  61.  if (!PROG_TR_TBL_inva(self)) {
  62.   fprintf(stderr,"Failed invariant PROG_TR_TBL::invariant:BOOL ../Library/fqset.sa:128:12\n");
  63.   exit(16);
  64.  }
  65. }
  66.  
  67.  
  68. BOOL PROG_TR_TBL_test(PROG_TR_TBL self, TUPIDENTINT q) {
  69.  BOOL noname2041 = ((BOOL) 0);
  70.  TR_CLASS_DEF local0;
  71.  local0 = PROG_TR_TBL_get_(self, q);
  72.  if (PROG_TR_TBL_elt__2031(self, local0, PROG_TR_TBL_elt_(self))) {
  73.   return FALSE;
  74.  }
  75.  return TRUE;
  76.  if (!PROG_TR_TBL_inva(self)) {
  77.   fprintf(stderr,"Failed invariant PROG_TR_TBL::invariant:BOOL ../Library/fqset.sa:145:13\n");
  78.   exit(16);
  79.  }
  80. }
  81.  
  82.  
  83. void PROG_PARSE_dup_c(PROG_PARSE self, TR_CLASS_DEF tcd) {
  84.  PROG local0;
  85.  STR local1;
  86.  STR local2;
  87.  STR local3;
  88.  PROG_err_loc_PRO(self->prog, ((PROG_ERR) tcd));
  89.  local0 = self->prog;
  90.  local1 = STR_plus_STR_STR(((STR) &Therearetwoclass), tcd->name_19.str_4);
  91.  local2 = STR_plus_STR_STR(local1, ((STR) &and_2042));
  92.  local3 = STR_plus_INT_STR(local2, TR_PARAM_DEC_siz(tcd->params));
  93.  PROG_err_STR(local0, STR_plus_STR_STR(local3, ((STR) ¶meters_2043)));
  94. }
  95.  
  96.  
  97. PROG_TR_TBL PROG_TR_TBL_allo(PROG_TR_TBL self, INT n_2044) {
  98.  PROG_TR_TBL noname2045;
  99.  PROG_TR_TBL r_2046;
  100.  PROG_TR_TBL noname2047;
  101.  PROG_TR_TBL local0;
  102.  local0 = ((PROG_TR_TBL) sbi_arr_alloc(sizeof(struct PROG_TR_TBL_struct), PROG_TR_TBL_tag, sizeof(TR_CLASS_DEF) , n_2044));
  103.  local0->asize = n_2044;
  104.  r_2046 = local0;
  105.  if ((!((PROG_TR_TBL_elt_(self)==((TR_CLASS_DEF) NULL))))) {
  106.   {
  107.    struct PROG_TR_TBL_aset_frame_struct temp2048_0;
  108.    PROG_TR_TBL_aset_frame 
  109.    noname2049 = &temp2048_0;
  110.    noname2049->state = 0;
  111.    while (1) {
  112.     if (noname2049->state == 0) {
  113.      noname2047 = r_2046;
  114.      noname2049->arg0 = noname2047;
  115.     }
  116.     noname2049->arg1 = PROG_TR_TBL_elt_(self);
  117.     PROG_TR_TBL_aset(noname2049);
  118.     if (noname2049->state == -1) goto after_loop;
  119.     0 /* No return value from iter call */;
  120.    }
  121.   }
  122.   after_loop: ;
  123.  }
  124.  return r_2046;
  125. }
  126.  
  127.  
  128. PROG_TR_TBL PROG_TR_TBL_doub(PROG_TR_TBL self) {
  129.  PROG_TR_TBL noname2050;
  130.  PROG_TR_TBL r_2051;
  131.  PROG_TR_TBL noname2052;
  132.  INT local0;
  133.  INT local1;
  134.  INT local2;
  135.  TR_CLASS_DEF local3;
  136.  if (!((!((self==((PROG_TR_TBL) NULL)))))) {
  137.   fprintf(stderr,"Violation of precondition ../Library/fqset.sa:190:22\n");
  138.   exit(16);
  139.  }
  140.  local0 = (self->asize);
  141.  local1 = (c_INT_minus_INT_INT_chk(local0,1));
  142.  local2 = (c_INT_times_INT_INT_chk(local1,2));
  143.  r_2051 = PROG_TR_TBL_allo(self, (c_INT_plus_INT_INT_chk(local2,1)));
  144.  {
  145.   struct PROG_TR_TBL_elt__2054_frame_struct temp2053_0;
  146.   PROG_TR_TBL_elt__2054_frame 
  147.   noname2055 = &temp2053_0;
  148.   noname2055->state = 0;
  149.   while (1) {
  150.    if (noname2055->state == 0) {
  151.     noname2052 = self;
  152.     noname2055->arg0 = noname2052;
  153.    }
  154.    local3 = PROG_TR_TBL_elt__2054(noname2055);
  155.    if (noname2055->state == -1) goto after_loop;
  156.    r_2051 = PROG_TR_TBL_inse(r_2051, local3);
  157.   }
  158.  }
  159.  after_loop: ;
  160.  return r_2051;
  161. }
  162.  
  163.  
  164. INT PROG_TR_TBL_elt__2056(PROG_TR_TBL self, TR_CLASS_DEF e_2057) {
  165.  INT noname2058 = ((INT) 0);
  166.  INT local0;
  167.  INT local1;
  168.  local0 = IDENT_hash_INT(e_2057->name_19);
  169.  local1 = 1111;
  170.  return (c_INT_plus_INT_INT_chk(local0,(c_INT_times_INT_INT_chk(local1,TR_PARAM_DEC_siz(e_2057->params)))));
  171.  if (!PROG_TR_TBL_inva(self)) {
  172.   fprintf(stderr,"Failed invariant PROG_TR_TBL::invariant:BOOL ./prog.sa:290:11\n");
  173.   exit(16);
  174.  }
  175. }
  176.  
  177.  
  178. void PROG_TR_TBL_aset_2059(PROG_TR_TBL self, INT ind_2060, TR_CLASS_DEF val_2061) {
  179.  BOOL local0;
  180.  INT local1;
  181.  INT local2;
  182.  if ((!((self==((PROG_TR_TBL) NULL))))) {
  183.   local1 = 0;
  184.   local2 = (self->asize);
  185.   local0 = INT_is_bet_INT_I(ind_2060, local1, (c_INT_minus_INT_INT_chk(local2,1)));
  186.  } else {
  187.   local0 = FALSE;
  188.  }
  189.  if (!(local0)) {
  190.   fprintf(stderr,"Violation of precondition ../Library/aref.sa:38:7\n");
  191.   exit(16);
  192.  }
  193.  if (ind_2060<0||ind_2060>=self->asize) {
  194.   fprintf(stderr,"Index out of bounds ../Library/aref.sa:38:7\n");
  195.   exit(16);
  196.  }
  197.  self->arr_part[ind_2060] = val_2061;
  198. }
  199.  
  200.  
  201. PROG_TR_TBL PROG_TR_TBL_inse(PROG_TR_TBL self, TR_CLASS_DEF e_2062) {
  202.  PROG_TR_TBL noname2063;
  203.  PROG_TR_TBL r_2064;
  204.  INT asz_2065 = ((INT) 0);
  205.  INT h = ((INT) 0);
  206.  TR_CLASS_DEF te;
  207.  TR_CLASS_DEF te_2066;
  208.  INT local0;
  209.  INT local1;
  210.  INT local2;
  211.  r_2064 = self;
  212.  if (PROG_TR_TBL_elt__2031(self, e_2062, PROG_TR_TBL_elt_(self))) {
  213.   return r_2064;
  214.  }
  215.  if ((r_2064==((PROG_TR_TBL) NULL))) {
  216.   r_2064 = PROG_TR_TBL_allo(self, 5);
  217.  }
  218.  else {
  219.   local0 = (c_INT_plus_INT_INT_chk(self->hsize,1));
  220.   local1 = (c_INT_times_INT_INT_chk(local0,2));
  221.   if ((local1>(self->asize))) {
  222.    r_2064 = PROG_TR_TBL_doub(r_2064);
  223.   }
  224.  }
  225.  asz_2065 = (r_2064->asize);
  226.  local2 = PROG_TR_TBL_elt__2056(r_2064, e_2062);
  227.  h = (local2&(c_INT_minus_INT_INT_chk(asz_2065,2)));
  228.  while (1) {
  229.   te = PROG_TR_TBL_aget(r_2064, h);
  230.   if (PROG_TR_TBL_elt__2031(self, te, PROG_TR_TBL_elt_(self))) {
  231.    goto after_loop;
  232.   }
  233.   else {
  234.    if (PROG_TR_TBL_elt__2031(self, te, e_2062)) {
  235.     PROG_TR_TBL_aset_2059(r_2064, h, e_2062);
  236.     return r_2064;
  237.    }
  238.   }
  239.   h = (c_INT_plus_INT_INT_chk(h,1));
  240.  }
  241.  after_loop: ;
  242.  if ((h==(c_INT_minus_INT_INT_chk(asz_2065,1)))) {
  243.   h = 0;
  244.   while (1) {
  245.    te_2066 = PROG_TR_TBL_aget(r_2064, h);
  246.    if (PROG_TR_TBL_elt__2031(self, te_2066, PROG_TR_TBL_elt_(self))) {
  247.     goto after_loop_2068;
  248.    }
  249.    else {
  250.     if (PROG_TR_TBL_elt__2031(self, te_2066, e_2062)) {
  251.      PROG_TR_TBL_aset_2059(r_2064, h, e_2062);
  252.      return r_2064;
  253.     }
  254.    }
  255.    h = (c_INT_plus_INT_INT_chk(h,1));
  256.   }
  257.   after_loop_2068: ;
  258.   if (!((h!=(c_INT_minus_INT_INT_chk(asz_2065,1))))) {
  259.    fprintf(stderr,"Violation of assertion ../Library/fqset.sa:218:15\n");
  260.    exit(16);
  261.   }
  262.  }
  263.  PROG_TR_TBL_aset_2059(r_2064, h, e_2062);
  264.  r_2064->hsize = (c_INT_plus_INT_INT_chk(r_2064->hsize,1));
  265.  return r_2064;
  266.  if (!PROG_TR_TBL_inva(self)) {
  267.   fprintf(stderr,"Failed invariant PROG_TR_TBL::invariant:BOOL ../Library/fqset.sa:198:9\n");
  268.   exit(16);
  269.  }
  270. }
  271.  
  272.  
  273. void PROG_PARSE_parse_STR(PROG_PARSE self, STR f_2070) {
  274.  PARSER parser;
  275.  TR_CLASS_DEF tcd;
  276.  TR_CLASS_DEF ntcd;
  277.  STR hf;
  278.  OUT local0;
  279.  OUT local1;
  280.  OUT local2;
  281.  OUT local3;
  282.  OUT local4;
  283.  OUT local5;
  284.  BOOL local6;
  285.  PROG_TR_TBL local7;
  286.  TUPIDENTINT local8;
  287.  IDENT local9;
  288.  BOOL local10;
  289.  if (FSETSTR_test_STR(self->parsed, f_2070)) {
  290.   return;
  291.  }
  292.  self->parsed = FSETSTR_insert_S(self->parsed, f_2070);
  293.  if (self->prog->show_parse_file) {
  294.   local0 = OUT_create_OUT(((OUT) NULL));
  295.   local1 = OUT_plus_STR_OUT(local0, ((STR) &Parse));
  296.   local2 = OUT_plus_STR_OUT(local1, f_2070);
  297.   OUT_plus_STR(local2, ((STR) &name_2071));
  298.  }
  299.  parser = PARSER_create_PR(((PARSER) NULL), self->prog, f_2070, self->prog->options_55->psather);
  300.  if ((!((parser==((PARSER) NULL))))) {
  301.   tcd = PARSER_source_fi(parser);
  302.   while (1) {
  303.    if ((tcd==((TR_CLASS_DEF) NULL))) {
  304.     goto after_loop;
  305.    }
  306.    if (self->prog->show_tr_insert) {
  307.     local3 = OUT_create_OUT(((OUT) NULL));
  308.     local4 = OUT_plus_STR_OUT(local3, ((STR) &Treefor));
  309.     local5 = OUT_plus_STR_OUT(local4, tcd->name_19.str_4);
  310.     OUT_plus_STR(local5, ((STR) &name_2073));
  311.    }
  312.    ntcd = tcd->next_8;
  313.    tcd->next_8 = ((TR_CLASS_DEF) NULL);
  314.    hf = FMAPSTRSTR_get_S(self->prog->options_55->has_13, tcd->name_19.str_4);
  315.    local7 = self->tr_tbl;
  316.    local8 = TUPIDENTINT_zero;
  317.    local9 = tcd->name_19;
  318.    if (PROG_TR_TBL_test(local7, TUPIDENTINT_crea(local8, local9, TR_PARAM_DEC_siz(tcd->params)))) {
  319.     local6 = TRUE;
  320.    } else {
  321.     if ((!((hf==((STR) NULL))))) {
  322.      local10 = STR_is_neq_STR_BOOL(hf, f_2070);
  323.     } else {
  324.      local10 = FALSE;
  325.     }
  326.     local6 = local10;
  327.    }
  328.    if (local6) {
  329.     PROG_PARSE_dup_c(self, tcd);
  330.    }
  331.    else {
  332.     self->tr_tbl = PROG_TR_TBL_inse(self->tr_tbl, tcd);
  333.    }
  334.    tcd = ntcd;
  335.   }
  336.   after_loop: ;
  337.  }
  338. }
  339.  
  340.  
  341. BOOL FSETTP_test_TP_BOOL(FSETTP self, TP e_2074) {
  342.  BOOL noname2075 = ((BOOL) 0);
  343.  INT h = ((INT) 0);
  344.  TP te;
  345.  TP te_2076;
  346.  INT local0;
  347.  INT local1;
  348.  INT local2;
  349.  INT local3;
  350.  if ((self==((FSETTP) NULL))) {
  351.   return FALSE;
  352.  }
  353.  local0 = FSETTP_elt_hash_(self, e_2074);
  354.  local1 = (self->asize);
  355.  h = (local0&(c_INT_minus_INT_INT_chk(local1,2)));
  356.  while (1) {
  357.   te = FSETTP_aget_INT_TP(self, h);
  358.   if (FSETTP_elt_eq_TP(self, te, e_2074)) {
  359.    return TRUE;
  360.   }
  361.   else {
  362.    if (FSETTP_elt_eq_TP(self, te, FSETTP_elt_nil_TP(self))) {
  363.     goto after_loop;
  364.    }
  365.   }
  366.   h = (c_INT_plus_INT_INT_chk(h,1));
  367.  }
  368.  after_loop: ;
  369.  local2 = (self->asize);
  370.  if ((h==(c_INT_minus_INT_INT_chk(local2,1)))) {
  371.   h = 0;
  372.   while (1) {
  373.    te_2076 = FSETTP_aget_INT_TP(self, h);
  374.    if (FSETTP_elt_eq_TP(self, te_2076, e_2074)) {
  375.     return TRUE;
  376.    }
  377.    else {
  378.     if (FSETTP_elt_eq_TP(self, te_2076, FSETTP_elt_nil_TP(self))) {
  379.      goto after_loop_2078;
  380.     }
  381.    }
  382.    h = (c_INT_plus_INT_INT_chk(h,1));
  383.   }
  384.   after_loop_2078: ;
  385.   local3 = (self->asize);
  386.   if (!((h!=(c_INT_minus_INT_INT_chk(local3,1))))) {
  387.    fprintf(stderr,"Violation of assertion ../Library/fset.sa:127:15\n");
  388.    exit(16);
  389.   }
  390.  }
  391.  return FALSE;
  392.  if (!FSETTP_invariant(self)) {
  393.   fprintf(stderr,"Failed invariant FSET{$TP}::invariant:BOOL ../Library/fset.sa:112:7\n");
  394.   exit(16);
  395.  }
  396. }
  397.  
  398.  
  399. TR_CLASS_DEF PROG_PARSE_tree_(PROG_PARSE self, IDENT nm_2080, INT num_2081) {
  400.  TR_CLASS_DEF noname2082;
  401.  TR_CLASS_DEF r_2083;
  402.  STR fn;
  403.  PROG_TR_TBL local0;
  404.  PROG_TR_TBL local1;
  405.  PROG local2;
  406.  STR local3;
  407.  STR local4;
  408.  STR local5;
  409.  local0 = self->tr_tbl;
  410.  r_2083 = PROG_TR_TBL_get_(local0, TUPIDENTINT_crea(TUPIDENTINT_zero, nm_2080, num_2081));
  411.  if ((r_2083==((TR_CLASS_DEF) NULL))) {
  412.   fn = FMAPSTRSTR_get_S(self->prog->options_55->has_13, nm_2080.str_4);
  413.   if ((!((fn==((STR) NULL))))) {
  414.    PROG_PARSE_parse_STR(self, fn);
  415.    local1 = self->tr_tbl;
  416.    r_2083 = PROG_TR_TBL_get_(local1, TUPIDENTINT_crea(TUPIDENTINT_zero, nm_2080, num_2081));
  417.   }
  418.  }
  419.  if ((r_2083==((TR_CLASS_DEF) NULL))) {
  420.   local2 = self->prog;
  421.   local3 = STR_plus_STR_STR(((STR) &Thereisnoclasswi), nm_2080.str_4);
  422.   local4 = STR_plus_STR_STR(local3, ((STR) &and_2084));
  423.   local5 = STR_plus_INT_STR(local4, num_2081);
  424.   PROG_err_STR(local2, STR_plus_STR_STR(local5, ((STR) ¶meters_2085)));
  425.  }
  426.  return r_2083;
  427. }
  428.  
  429.  
  430. TR_CLASS_DEF PROG_tree_for_ID(PROG self, IDENT nm_2086, INT num_2087) {
  431.  TR_CLASS_DEF noname2088;
  432.  return PROG_PARSE_tree_(self->prog_parse, nm_2086, num_2087);
  433. }
  434.  
  435.  
  436. ARRAYIDENT ARRAYIDENT_creat(ARRAYIDENT self, INT n_2089) {
  437.  ARRAYIDENT noname2090;
  438.  ARRAYIDENT local0;
  439.  if (!((n_2089>=0))) {
  440.   fprintf(stderr,"Violation of precondition ../Library/array.sa:56:9\n");
  441.   exit(16);
  442.  }
  443.  local0 = ((ARRAYIDENT) sbi_arr_alloc(sizeof(struct ARRAYIDENT_struct), ARRAYIDENT_tag, sizeof(IDENT) , n_2089));
  444.  local0->asize = n_2089;
  445.  return local0;
  446. }
  447.  
  448.  
  449. ARRAYIDENT PROG_pnames_for_(PROG self, TP_CLASS t_2091) {
  450.  ARRAYIDENT noname2092;
  451.  TR_CLASS_DEF tr_2093;
  452.  ARRAYIDENT r_2094;
  453.  TR_PARAM_DEC pd;
  454.  INT i = ((INT) 0);
  455.  ARRAYIDENT noname2095;
  456.  IDENT local0;
  457.  ARRAYIDENT local1;
  458.  if (!((!((t_2091==((TP_CLASS) NULL)))))) {
  459.   fprintf(stderr,"Violation of precondition ./prog.sa:135:13\n");
  460.   exit(16);
  461.  }
  462.  local0 = t_2091->name_19;
  463.  tr_2093 = PROG_tree_for_ID(self, local0, ARRAYTP_size_INT(t_2091->params));
  464.  if ((tr_2093==((TR_CLASS_DEF) NULL))) {
  465.   return ((ARRAYIDENT) NULL);
  466.  }
  467.  if ((tr_2093->params==((TR_PARAM_DEC) NULL))) {
  468.   return ((ARRAYIDENT) NULL);
  469.  }
  470.  local1 = ((ARRAYIDENT) NULL);
  471.  r_2094 = ARRAYIDENT_creat(local1, TR_PARAM_DEC_siz(tr_2093->params));
  472.  pd = tr_2093->params;
  473.  i = 0;
  474.  {
  475.   struct ARRAYIDENT_set_IDENT_frame_struct temp2096_0;
  476.   ARRAYIDENT_set_IDENT_frame 
  477.   noname2097 = &temp2096_0;
  478.   noname2097->state = 0;
  479.   while (1) {
  480.    if ((pd==((TR_PARAM_DEC) NULL))) {
  481.     goto after_loop;
  482.    }
  483.    if (noname2097->state == 0) {
  484.     noname2095 = r_2094;
  485.     noname2097->arg0 = noname2095;
  486.    }
  487.    noname2097->arg1 = pd->name_19;
  488.    ARRAYIDENT_set_IDENT(noname2097);
  489.    if (noname2097->state == -1) goto after_loop;
  490.    0 /* No return value from iter call */;
  491.    pd = pd->next_8;
  492.   }
  493.  }
  494.  after_loop: ;
  495.  return r_2094;
  496. }
  497.  
  498.  
  499. INT ARRAYIDENT_asize_INT(ARRAYIDENT self) {
  500.  INT noname2098 = ((INT) 0);
  501.   return self->asize;
  502.  fprintf(stderr,"Last statement wasn't return ../Library/aref.sa:20:8\n");
  503.  exit(16);
  504. }
  505.  
  506.  
  507. TP_CONTEXT TP_CONTEXT_creat(TP_CONTEXT self, TP_CLASS same_2099, ARRAYIDENT pnames_2100, ARRAYTP ptypes_2101, PROG prog_2102) {
  508.  TP_CONTEXT noname2103;
  509.  TP_CONTEXT r_2104;
  510.  TP_CONTEXT local0;
  511.  local0 = ((TP_CONTEXT) sbi_alloc(sizeof(struct TP_CONTEXT_struct), TP_CONTEXT_tag));
  512.  r_2104 = local0;
  513.  r_2104->same_34 = same_2099;
  514.  r_2104->pnames = pnames_2100;
  515.  r_2104->ptypes = ptypes_2101;
  516.  r_2104->prog = prog_2102;
  517.  return r_2104;
  518. }
  519.  
  520.  
  521. BOOL TP_CLASS_is_abst(TP_CLASS self) {
  522.  BOOL noname2105 = ((BOOL) 0);
  523.  CHAR local0;
  524.  if ((self==((TP_CLASS) NULL))) {
  525.   return FALSE;
  526.  }
  527.  local0 = STR_aget_INT_CHAR(self->name_19.str_4, 0);
  528.  return (local0=='$');
  529. }
  530.  
  531.  
  532. TP_CONTEXT PROG_tp_context_(PROG self, TP_CLASS t_2106) {
  533.  TP_CONTEXT noname2107;
  534.  ARRAYIDENT pn;
  535.  INT ps = ((INT) 0);
  536.  TP_CONTEXT r_2108;
  537.  if (!((!((t_2106==((TP_CLASS) NULL)))))) {
  538.   fprintf(stderr,"Violation of precondition ./prog.sa:146:17\n");
  539.   exit(16);
  540.  }
  541.  pn = PROG_pnames_for_(self, t_2106);
  542.  if ((!((pn==((ARRAYIDENT) NULL))))) {
  543.   ps = (pn->asize);
  544.  }
  545.  if ((ps!=ARRAYTP_size_INT(t_2106->params))) {
  546.   return ((TP_CONTEXT) NULL);
  547.  }
  548.  r_2108 = TP_CONTEXT_creat(((TP_CONTEXT) NULL), t_2106, pn, t_2106->params, self);
  549.  if (TP_CLASS_is_abst(t_2106)) {
  550.   r_2108->is_abs = TRUE;
  551.  }
  552.  return r_2108;
  553. }
  554.  
  555.  
  556. IDENT ARRAYIDENT_aget_(ARRAYIDENT self, INT ind_2109) {
  557.  IDENT noname2110 = IDENT_zero;
  558.  BOOL local0;
  559.  INT local1;
  560.  INT local2;
  561.  if ((!((self==((ARRAYIDENT) NULL))))) {
  562.   local1 = 0;
  563.   local2 = (self->asize);
  564.   local0 = INT_is_bet_INT_I(ind_2109, local1, (c_INT_minus_INT_INT_chk(local2,1)));
  565.  } else {
  566.   local0 = FALSE;
  567.  }
  568.  if (!(local0)) {
  569.   fprintf(stderr,"Violation of precondition ../Library/aref.sa:33:7\n");
  570.   exit(16);
  571.  }
  572.  if (ind_2109<0||ind_2109>=self->asize) {
  573.   fprintf(stderr,"Index out of bounds ../Library/aref.sa:33:7\n");
  574.   exit(16);
  575.  }
  576.  return self->arr_part[ind_2109];
  577. }
  578.  
  579.  
  580. TP ARRAYTP_aget_INT_TP(ARRAYTP self, INT ind_2111) {
  581.  TP noname2112;
  582.  BOOL local0;
  583.  INT local1;
  584.  INT local2;
  585.  if ((!((self==((ARRAYTP) NULL))))) {
  586.   local1 = 0;
  587.   local2 = (self->asize);
  588.   local0 = INT_is_bet_INT_I(ind_2111, local1, (c_INT_minus_INT_INT_chk(local2,1)));
  589.  } else {
  590.   local0 = FALSE;
  591.  }
  592.  if (!(local0)) {
  593.   fprintf(stderr,"Violation of precondition ../Library/aref.sa:33:7\n");
  594.   exit(16);
  595.  }
  596.  if (ind_2111<0||ind_2111>=self->asize) {
  597.   fprintf(stderr,"Index out of bounds ../Library/aref.sa:33:7\n");
  598.   exit(16);
  599.  }
  600.  return self->arr_part[ind_2111];
  601. }
  602.  
  603.  
  604. TP TP_CONTEXT_value(TP_CONTEXT self, IDENT s_2113) {
  605.  TP noname2114;
  606.  ARRAYIDENT noname2115;
  607.  INT i = ((INT) 0);
  608.  INT local0;
  609.  if ((self->pnames==((ARRAYIDENT) NULL))) {
  610.   return ((TP) NULL);
  611.  }
  612.  {
  613.   struct ARRAYIDENT_ind_INT_frame_struct temp2116_0;
  614.   ARRAYIDENT_ind_INT_frame 
  615.   noname2117 = &temp2116_0;
  616.   noname2117->state = 0;
  617.   while (1) {
  618.    if (noname2117->state == 0) {
  619.     noname2115 = self->pnames;
  620.     noname2117->arg0 = noname2115;
  621.    }
  622.    local0 = ARRAYIDENT_ind_INT(noname2117);
  623.    if (noname2117->state == -1) goto after_loop;
  624.    i = local0;
  625.    if (IDENT_is_eq_IDEN(s_2113, ARRAYIDENT_aget_(self->pnames, i))) {
  626.     return ARRAYTP_aget_INT_TP(self->ptypes, i);
  627.    }
  628.   }
  629.  }
  630.  after_loop: ;
  631.  return ((TP) NULL);
  632. }
  633.  
  634.  
  635. INT TR_TYPE_SPEC_siz(TR_TYPE_SPEC self) {
  636.  INT noname2118 = ((INT) 0);
  637.  INT r_2119 = ((INT) 0);
  638.  TR_TYPE_SPEC n_2120;
  639.  if ((self==((TR_TYPE_SPEC) NULL))) {
  640.   return 0;
  641.  }
  642.  r_2119 = 1;
  643.  n_2120 = self->next_8;
  644.  while (1) {
  645.   if ((n_2120==((TR_TYPE_SPEC) NULL))) {
  646.    goto after_loop;
  647.   }
  648.   r_2119 = (c_INT_plus_INT_INT_chk(r_2119,1));
  649.   n_2120 = n_2120->next_8;
  650.  }
  651.  after_loop: ;
  652.  return r_2119;
  653. }
  654.  
  655.  
  656. TP TP_CONTEXT_tp_cl(TP_CONTEXT self, TR_TYPE_SPEC t_2122) {
  657.  TP noname2123;
  658.  TP pv;
  659.  ARRAYTP ptps;
  660.  TR_TYPE_SPEC tpe;
  661.  ARRAYTP noname2124;
  662.  BOOL local0;
  663.  BOOL local1;
  664.  ARRAYTP local2;
  665.  if ((!((t_2122==((TR_TYPE_SPEC) NULL))))) {
  666.   local1 = (t_2122->kind==shared_TR_TYPE_S_1643);
  667.  } else {
  668.   local1 = FALSE;
  669.  }
  670.  if (local1) {
  671.   local0 = (t_2122->ret==((TR_TYPE_SPEC) NULL));
  672.  } else {
  673.   local0 = FALSE;
  674.  }
  675.  if (!(local0)) {
  676.   fprintf(stderr,"Violation of precondition ./tp.sa:405:14\n");
  677.   exit(16);
  678.  }
  679.  if ((t_2122->params==((TR_TYPE_SPEC) NULL))) {
  680.   pv = TP_CONTEXT_value(self, t_2122->name_19);
  681.   if ((!((pv==((TP) NULL))))) {
  682.    return pv;
  683.   }
  684.   return ((TP) TP_TBL_tp_class_(self->prog->tp_tbl, t_2122->name_19, ((ARRAYTP) NULL)));
  685.  }
  686.  local2 = ((ARRAYTP) NULL);
  687.  ptps = ARRAYTP_create_I(local2, TR_TYPE_SPEC_siz(t_2122->params));
  688.  tpe = t_2122->params;
  689.  {
  690.   struct ARRAYTP_set_TP_frame_struct temp2125_0;
  691.   ARRAYTP_set_TP_frame 
  692.   noname2126 = &temp2125_0;
  693.   noname2126->state = 0;
  694.   while (1) {
  695.    if ((tpe==((TR_TYPE_SPEC) NULL))) {
  696.     goto after_loop;
  697.    }
  698.    if (noname2126->state == 0) {
  699.     noname2124 = ptps;
  700.     noname2126->arg0 = noname2124;
  701.    }
  702.    noname2126->arg1 = TP_CONTEXT_tp_of(self, tpe);
  703.    ARRAYTP_set_TP(noname2126);
  704.    if (noname2126->state == -1) goto after_loop;
  705.    0 /* No return value from iter call */;
  706.    tpe = tpe->next_8;
  707.   }
  708.  }
  709.  after_loop: ;
  710.  return ((TP) TP_TBL_tp_class_(self->prog->tp_tbl, t_2122->name_19, ptps));
  711. }
  712.  
  713.  
  714. TP TP_CONTEXT_tp_ro(TP_CONTEXT self, TR_TYPE_SPEC t_2127) {
  715.  TP noname2128;
  716.  ARRAYTP args_2129;
  717.  TR_TYPE_SPEC tpe;
  718.  ARRAYTP noname2130;
  719.  BOOL local0;
  720.  TP_TBL local1;
  721.  ARRAYTP local2;
  722.  ARRAYTP local3;
  723.  TP_TBL local4;
  724.  if ((!((t_2127==((TR_TYPE_SPEC) NULL))))) {
  725.   local0 = (t_2127->kind==shared_TR_TYPE_S_1644);
  726.  } else {
  727.   local0 = FALSE;
  728.  }
  729.  if (!(local0)) {
  730.   fprintf(stderr,"Violation of precondition ./tp.sa:418:13\n");
  731.   exit(16);
  732.  }
  733.  if ((t_2127->params==((TR_TYPE_SPEC) NULL))) {
  734.   local1 = self->prog->tp_tbl;
  735.   local2 = ((ARRAYTP) NULL);
  736.   return ((TP) TP_TBL_tp_rout_f(local1, local2, TP_CONTEXT_tp_of(self, t_2127->ret)));
  737.  }
  738.  local3 = ((ARRAYTP) NULL);
  739.  args_2129 = ARRAYTP_create_I(local3, TR_TYPE_SPEC_siz(t_2127->params));
  740.  tpe = t_2127->params;
  741.  {
  742.   struct ARRAYTP_set_TP_frame_struct temp2131_0;
  743.   ARRAYTP_set_TP_frame 
  744.   noname2132 = &temp2131_0;
  745.   noname2132->state = 0;
  746.   while (1) {
  747.    if ((tpe==((TR_TYPE_SPEC) NULL))) {
  748.     goto after_loop;
  749.    }
  750.    if (noname2132->state == 0) {
  751.     noname2130 = args_2129;
  752.     noname2132->arg0 = noname2130;
  753.    }
  754.    noname2132->arg1 = TP_CONTEXT_tp_of(self, tpe);
  755.    ARRAYTP_set_TP(noname2132);
  756.    if (noname2132->state == -1) goto after_loop;
  757.    0 /* No return value from iter call */;
  758.    tpe = tpe->next_8;
  759.   }
  760.  }
  761.  after_loop: ;
  762.  local4 = self->prog->tp_tbl;
  763.  return ((TP) TP_TBL_tp_rout_f(local4, args_2129, TP_CONTEXT_tp_of(self, t_2127->ret)));
  764. }
  765.  
  766.  
  767. TUPARRAYTPARRAYB TUPARRAYTPARRAYB_2133(TUPARRAYTPARRAYB self, ARRAYTP t1_2134) {
  768.  TUPARRAYTPARRAYB local0;
  769.  local0 = self;
  770.  local0.t1 = t1_2134;
  771.  return local0;
  772. }
  773.  
  774.  
  775. TUPARRAYTPARRAYB TUPARRAYTPARRAYB_2135(TUPARRAYTPARRAYB self, ARRAYBOOL t2_2136) {
  776.  TUPARRAYTPARRAYB local0;
  777.  local0 = self;
  778.  local0.t2 = t2_2136;
  779.  return local0;
  780. }
  781.  
  782.  
  783. TUPARRAYTPARRAYB TUPARRAYTPARRAYB_2137(TUPARRAYTPARRAYB self, TP t3_2138) {
  784.  TUPARRAYTPARRAYB local0;
  785.  local0 = self;
  786.  local0.t3 = t3_2138;
  787.  return local0;
  788. }
  789.  
  790.  
  791. TUPARRAYTPARRAYB TUPARRAYTPARRAYB_2139(TUPARRAYTPARRAYB self, ARRAYTP at1, ARRAYBOOL at2, TP at3) {
  792.  TUPARRAYTPARRAYB noname2140 = TUPARRAYTPARRAYB_zero;
  793.  TUPARRAYTPARRAYB local0;
  794.  TUPARRAYTPARRAYB local1;
  795.  local0 = TUPARRAYTPARRAYB_2133(self, at1);
  796.  local1 = TUPARRAYTPARRAYB_2135(local0, at2);
  797.  return TUPARRAYTPARRAYB_2137(local1, at3);
  798. }
  799.  
  800.  
  801. INT TP_ITER_TBL_quer(TP_ITER_TBL self, TUPARRAYTPARRAYB q) {
  802.  INT noname2141 = ((INT) 0);
  803.  INT s_2142 = ((INT) 0);
  804.  INT r_2143 = ((INT) 0);
  805.  ARRAYTP noname2144;
  806.  ARRAYBOOL noname2145;
  807.  SYS local0;
  808.  TP local1;
  809.  INT local2;
  810.  SYS local3;
  811.  BOOL local4;
  812.  OB local5;
  813.  INT local6;
  814.  s_2142 = 3;
  815.  r_2143 = (c_SYS_id_OB_INT(((SYS) NULL),((OB) q.t3)));
  816.  {
  817.   struct ARRAYTP_elt_TP_frame_struct temp2146_0;
  818.   ARRAYTP_elt_TP_frame 
  819.   noname2147 = &temp2146_0;
  820.   noname2147->state = 0;
  821.   while (1) {
  822.    local0 = ((SYS) NULL);
  823.    if (noname2147->state == 0) {
  824.     noname2144 = q.t1;
  825.     noname2147->arg0 = noname2144;
  826.    }
  827.    local1 = ARRAYTP_elt_TP(noname2147);
  828.    if (noname2147->state == -1) goto after_loop;
  829.    local2 = (c_SYS_id_OB_INT(local0,((OB) local1)));
  830.    r_2143 = (r_2143^(c_INT_times_INT_INT_chk(local2,s_2142)));
  831.    s_2142 = (c_INT_plus_INT_INT_chk(s_2142,98));
  832.   }
  833.  }
  834.  after_loop: ;
  835.  {
  836.   struct ARRAYBOOL_elt_BOOL_frame_struct temp2149_0;
  837.   ARRAYBOOL_elt_BOOL_frame 
  838.   noname2150 = &temp2149_0;
  839.   noname2150->state = 0;
  840.   while (1) {
  841.    local3 = ((SYS) NULL);
  842.    if (noname2150->state == 0) {
  843.     noname2145 = q.t2;
  844.     noname2150->arg0 = noname2145;
  845.    }
  846.    local4 = ARRAYBOOL_elt_BOOL(noname2150);
  847.    if (noname2150->state == -1) goto after_loop_2148;
  848.    local5 = (OB)((BOOL_boxed) sbi_alloc_atomic(sizeof(struct BOOL_boxed_struct), BOOL_tag));
  849.    ((BOOL_boxed) local5)->value_part = local4;
  850.    local6 = (c_SYS_id_OB_INT(local3,local5));
  851.    r_2143 = (r_2143^(c_INT_times_INT_INT_chk(local6,s_2142)));
  852.    s_2142 = (c_INT_plus_INT_INT_chk(s_2142,98));
  853.   }
  854.  }
  855.  after_loop_2148: ;
  856.  return r_2143;
  857.  if (!TP_ITER_TBL_inva(self)) {
  858.   fprintf(stderr,"Failed invariant TP_ITER_TBL::invariant:BOOL ./tp.sa:631:13\n");
  859.   exit(16);
  860.  }
  861. }
  862.  
  863.  
  864. INT TP_ITER_TBL_asiz(TP_ITER_TBL self) {
  865.  INT noname2151 = ((INT) 0);
  866.   return self->asize;
  867.  fprintf(stderr,"Last statement wasn't return ../Library/aref.sa:20:8\n");
  868.  exit(16);
  869. }
  870.  
  871.  
  872. TP_ITER TP_ITER_TBL_aget(TP_ITER_TBL self, INT ind_2152) {
  873.  TP_ITER noname2153;
  874.  BOOL local0;
  875.  INT local1;
  876.  INT local2;
  877.  if ((!((self==((TP_ITER_TBL) NULL))))) {
  878.   local1 = 0;
  879.   local2 = (self->asize);
  880.   local0 = INT_is_bet_INT_I(ind_2152, local1, (c_INT_minus_INT_INT_chk(local2,1)));
  881.  } else {
  882.   local0 = FALSE;
  883.  }
  884.  if (!(local0)) {
  885.   fprintf(stderr,"Violation of precondition ../Library/aref.sa:33:7\n");
  886.   exit(16);
  887.  }
  888.  if (ind_2152<0||ind_2152>=self->asize) {
  889.   fprintf(stderr,"Index out of bounds ../Library/aref.sa:33:7\n");
  890.   exit(16);
  891.  }
  892.  return self->arr_part[ind_2152];
  893. }
  894.  
  895.  
  896. INT ARRAYBOOL_asize_INT(ARRAYBOOL self) {
  897.  INT noname2154 = ((INT) 0);
  898.   return self->asize;
  899.  fprintf(stderr,"Last statement wasn't return ../Library/aref.sa:20:8\n");
  900.  exit(16);
  901. }
  902.  
  903.  
  904. INT ARRAYBOOL_size_INT(ARRAYBOOL self) {
  905.  INT noname2155 = ((INT) 0);
  906.  if ((self==((ARRAYBOOL) NULL))) {
  907.   return 0;
  908.  }
  909.  return (self->asize);
  910. }
  911.  
  912.  
  913. BOOL TP_ITER_TBL_quer_2156(TP_ITER_TBL self, TUPARRAYTPARRAYB q, TP_ITER t_2157) {
  914.  BOOL noname2158 = ((BOOL) 0);
  915.  ARRAYTP noname2159;
  916.  ARRAYTP noname2160;
  917.  ARRAYBOOL noname2161;
  918.  ARRAYBOOL noname2162;
  919.  TP local0;
  920.  INT local1;
  921.  TP local2;
  922.  TP local3;
  923.  TP local4;
  924.  TP local5;
  925.  INT local6;
  926.  BOOL local7;
  927.  BOOL local8;
  928.  BOOL local9;
  929.  if ((t_2157==((TP_ITER) NULL))) {
  930.   return FALSE;
  931.  }
  932.  local0 = q.t3;
  933.  if ((*TP_is_neq_TP_BOOL[local0->header.tag+TP_is_neq_TP_BOOL_offset])(local0, t_2157->ret)) {
  934.   return FALSE;
  935.  }
  936.  local1 = ARRAYTP_size_INT(q.t1);
  937.  if ((local1!=ARRAYTP_size_INT(t_2157->args_7))) {
  938.   return FALSE;
  939.  }
  940.  {
  941.   struct ARRAYTP_elt_TP_frame_struct temp2163_0;
  942.   ARRAYTP_elt_TP_frame 
  943.   noname2164 = &temp2163_0;
  944.   struct ARRAYTP_elt_TP_frame_struct temp2163_1;
  945.   ARRAYTP_elt_TP_frame 
  946.   noname2165 = &temp2163_1;
  947.   noname2164->state = 0;
  948.   noname2165->state = 0;
  949.   while (1) {
  950.    if (noname2164->state == 0) {
  951.     noname2159 = q.t1;
  952.     noname2164->arg0 = noname2159;
  953.    }
  954.    local2 = ARRAYTP_elt_TP(noname2164);
  955.    if (noname2164->state == -1) goto after_loop;
  956.    local3 = local2;
  957.    if (noname2165->state == 0) {
  958.     noname2160 = t_2157->args_7;
  959.     noname2165->arg0 = noname2160;
  960.    }
  961.    local4 = ARRAYTP_elt_TP(noname2165);
  962.    if (noname2165->state == -1) goto after_loop;
  963.    local5 = local3;
  964.    if ((*TP_is_neq_TP_BOOL[local5->header.tag+TP_is_neq_TP_BOOL_offset])(local5, local4)) {
  965.     return FALSE;
  966.    }
  967.   }
  968.  }
  969.  after_loop: ;
  970.  local6 = ARRAYBOOL_size_INT(q.t2);
  971.  if ((local6!=ARRAYBOOL_size_INT(t_2157->hot))) {
  972.   return FALSE;
  973.  }
  974.  {
  975.   struct ARRAYBOOL_elt_BOOL_frame_struct temp2167_0;
  976.   ARRAYBOOL_elt_BOOL_frame 
  977.   noname2168 = &temp2167_0;
  978.   struct ARRAYBOOL_elt_BOOL_frame_struct temp2167_1;
  979.   ARRAYBOOL_elt_BOOL_frame 
  980.   noname2169 = &temp2167_1;
  981.   noname2168->state = 0;
  982.   noname2169->state = 0;
  983.   while (1) {
  984.    if (noname2168->state == 0) {
  985.     noname2161 = q.t2;
  986.     noname2168->arg0 = noname2161;
  987.    }
  988.    local7 = ARRAYBOOL_elt_BOOL(noname2168);
  989.    if (noname2168->state == -1) goto after_loop_2166;
  990.    local8 = local7;
  991.    if (noname2169->state == 0) {
  992.     noname2162 = t_2157->hot;
  993.     noname2169->arg0 = noname2162;
  994.    }
  995.    local9 = ARRAYBOOL_elt_BOOL(noname2169);
  996.    if (noname2169->state == -1) goto after_loop_2166;
  997.    if (((local8)!=(local9))) {
  998.     return FALSE;
  999.    }
  1000.   }
  1001.  }
  1002.  after_loop_2166: ;
  1003.  return TRUE;
  1004.  if (!TP_ITER_TBL_inva(self)) {
  1005.   fprintf(stderr,"Failed invariant TP_ITER_TBL::invariant:BOOL ./tp.sa:620:13\n");
  1006.   exit(16);
  1007.  }
  1008. }
  1009.  
  1010.  
  1011. TP_ITER TP_ITER_TBL_elt_(TP_ITER_TBL self) {
  1012.  TP_ITER noname2170;
  1013.  TP_ITER t_2171 = ((TP_ITER) NULL);
  1014.  return ((TP_ITER) NULL);
  1015.  if (!TP_ITER_TBL_inva(self)) {
  1016.   fprintf(stderr,"Failed invariant TP_ITER_TBL::invariant:BOOL ../Library/fqset.sa:69:10\n");
  1017.   exit(16);
  1018.  }
  1019. }
  1020.  
  1021.  
  1022. BOOL TP_ITER_TBL_elt__2172(TP_ITER_TBL self, TP_ITER e1_2173, TP_ITER e2_2174) {
  1023.  BOOL noname2175 = ((BOOL) 0);
  1024.  return c_SYS_ob_eq_OB_OB_BOOL(((OB) e1_2173),((OB) e2_2174));
  1025.  if (!TP_ITER_TBL_inva(self)) {
  1026.   fprintf(stderr,"Failed invariant TP_ITER_TBL::invariant:BOOL ../Library/fqset.sa:62:9\n");
  1027.   exit(16);
  1028.  }
  1029. }
  1030.  
  1031.  
  1032. TP_ITER TP_ITER_TBL_get_(TP_ITER_TBL self, TUPARRAYTPARRAYB q) {
  1033.  TP_ITER noname2176;
  1034.  INT h = ((INT) 0);
  1035.  TP_ITER e_2177;
  1036.  TP_ITER e_2178;
  1037.  INT local0;
  1038.  INT local1;
  1039.  INT local2;
  1040.  INT local3;
  1041.  if ((self==((TP_ITER_TBL) NULL))) {
  1042.   return ((TP_ITER) NULL);
  1043.  }
  1044.  local0 = TP_ITER_TBL_quer(self, q);
  1045.  local1 = (self->asize);
  1046.  h = (local0&(c_INT_minus_INT_INT_chk(local1,2)));
  1047.  while (1) {
  1048.   e_2177 = TP_ITER_TBL_aget(self, h);
  1049.   if (TP_ITER_TBL_quer_2156(self, q, e_2177)) {
  1050.    return e_2177;
  1051.   }
  1052.   else {
  1053.    if (TP_ITER_TBL_elt__2172(self, e_2177, TP_ITER_TBL_elt_(self))) {
  1054.     goto after_loop;
  1055.    }
  1056.   }
  1057.   h = (c_INT_plus_INT_INT_chk(h,1));
  1058.  }
  1059.  after_loop: ;
  1060.  local2 = (self->asize);
  1061.  if ((h==(c_INT_minus_INT_INT_chk(local2,1)))) {
  1062.   h = 0;
  1063.   while (1) {
  1064.    e_2178 = TP_ITER_TBL_aget(self, h);
  1065.    if (TP_ITER_TBL_quer_2156(self, q, e_2178)) {
  1066.     return e_2178;
  1067.    }
  1068.    else {
  1069.     if (TP_ITER_TBL_elt__2172(self, e_2178, TP_ITER_TBL_elt_(self))) {
  1070.      goto after_loop_2180;
  1071.     }
  1072.    }
  1073.    h = (c_INT_plus_INT_INT_chk(h,1));
  1074.   }
  1075.   after_loop_2180: ;
  1076.   local3 = (self->asize);
  1077.   if (!((h!=(c_INT_minus_INT_INT_chk(local3,1))))) {
  1078.    fprintf(stderr,"Violation of assertion ../Library/fqset.sa:142:15\n");
  1079.    exit(16);
  1080.   }
  1081.  }
  1082.  return TP_ITER_TBL_elt_(self);
  1083.  if (!TP_ITER_TBL_inva(self)) {
  1084.   fprintf(stderr,"Failed invariant TP_ITER_TBL::invariant:BOOL ../Library/fqset.sa:128:12\n");
  1085.   exit(16);
  1086.  }
  1087. }
  1088.  
  1089.  
  1090. TP_ITER TP_ITER_create_A(TP_ITER self, ARRAYTP args_2182, ARRAYBOOL hot_2183, TP ret_2184, PROG prog_2185) {
  1091.  TP_ITER noname2186;
  1092.  TP_ITER r_2187;
  1093.  TP_ITER local0;
  1094.  local0 = ((TP_ITER) sbi_alloc(sizeof(struct TP_ITER_struct), TP_ITER_tag));
  1095.  r_2187 = local0;
  1096.  r_2187->args_7 = args_2182;
  1097.  r_2187->hot = hot_2183;
  1098.  r_2187->ret = ret_2184;
  1099.  r_2187->prog = prog_2185;
  1100.  return r_2187;
  1101. }
  1102.  
  1103.  
  1104. TP_ITER_TBL TP_ITER_TBL_allo(TP_ITER_TBL self, INT n_2188) {
  1105.  TP_ITER_TBL noname2189;
  1106.  TP_ITER_TBL r_2190;
  1107.  TP_ITER_TBL noname2191;
  1108.  TP_ITER_TBL local0;
  1109.  local0 = ((TP_ITER_TBL) sbi_arr_alloc(sizeof(struct TP_ITER_TBL_struct), TP_ITER_TBL_tag, sizeof(TP_ITER) , n_2188));
  1110.  local0->asize = n_2188;
  1111.  r_2190 = local0;
  1112.  if ((!((TP_ITER_TBL_elt_(self)==((TP_ITER) NULL))))) {
  1113.   {
  1114.    struct TP_ITER_TBL_aset_frame_struct temp2192_0;
  1115.    TP_ITER_TBL_aset_frame 
  1116.    noname2193 = &temp2192_0;
  1117.    noname2193->state = 0;
  1118.    while (1) {
  1119.     if (noname2193->state == 0) {
  1120.      noname2191 = r_2190;
  1121.      noname2193->arg0 = noname2191;
  1122.     }
  1123.     noname2193->arg1 = TP_ITER_TBL_elt_(self);
  1124.     TP_ITER_TBL_aset(noname2193);
  1125.     if (noname2193->state == -1) goto after_loop;
  1126.     0 /* No return value from iter call */;
  1127.    }
  1128.   }
  1129.   after_loop: ;
  1130.  }
  1131.  return r_2190;
  1132. }
  1133.  
  1134.  
  1135. TP_ITER_TBL TP_ITER_TBL_doub(TP_ITER_TBL self) {
  1136.  TP_ITER_TBL noname2194;
  1137.  TP_ITER_TBL r_2195;
  1138.  TP_ITER_TBL noname2196;
  1139.  INT local0;
  1140.  INT local1;
  1141.  INT local2;
  1142.  TP_ITER local3;
  1143.  if (!((!((self==((TP_ITER_TBL) NULL)))))) {
  1144.   fprintf(stderr,"Violation of precondition ../Library/fqset.sa:190:22\n");
  1145.   exit(16);
  1146.  }
  1147.  local0 = (self->asize);
  1148.  local1 = (c_INT_minus_INT_INT_chk(local0,1));
  1149.  local2 = (c_INT_times_INT_INT_chk(local1,2));
  1150.  r_2195 = TP_ITER_TBL_allo(self, (c_INT_plus_INT_INT_chk(local2,1)));
  1151.  {
  1152.   struct TP_ITER_TBL_elt__2198_frame_struct temp2197_0;
  1153.   TP_ITER_TBL_elt__2198_frame 
  1154.   noname2199 = &temp2197_0;
  1155.   noname2199->state = 0;
  1156.   while (1) {
  1157.    if (noname2199->state == 0) {
  1158.     noname2196 = self;
  1159.     noname2199->arg0 = noname2196;
  1160.    }
  1161.    local3 = TP_ITER_TBL_elt__2198(noname2199);
  1162.    if (noname2199->state == -1) goto after_loop;
  1163.    r_2195 = TP_ITER_TBL_inse(r_2195, local3);
  1164.   }
  1165.  }
  1166.  after_loop: ;
  1167.  return r_2195;
  1168. }
  1169.  
  1170.  
  1171. INT TP_ITER_TBL_elt__2200(TP_ITER_TBL self, TP_ITER e_2201) {
  1172.  INT noname2202 = ((INT) 0);
  1173.  INT s_2203 = ((INT) 0);
  1174.  INT r_2204 = ((INT) 0);
  1175.  ARRAYTP noname2205;
  1176.  ARRAYBOOL noname2206;
  1177.  SYS local0;
  1178.  TP local1;
  1179.  INT local2;
  1180.  SYS local3;
  1181.  BOOL local4;
  1182.  OB local5;
  1183.  INT local6;
  1184.  s_2203 = 3;
  1185.  r_2204 = (c_SYS_id_OB_INT(((SYS) NULL),((OB) e_2201->ret)));
  1186.  {
  1187.   struct ARRAYTP_elt_TP_frame_struct temp2207_0;
  1188.   ARRAYTP_elt_TP_frame 
  1189.   noname2208 = &temp2207_0;
  1190.   noname2208->state = 0;
  1191.   while (1) {
  1192.    local0 = ((SYS) NULL);
  1193.    if (noname2208->state == 0) {
  1194.     noname2205 = e_2201->args_7;
  1195.     noname2208->arg0 = noname2205;
  1196.    }
  1197.    local1 = ARRAYTP_elt_TP(noname2208);
  1198.    if (noname2208->state == -1) goto after_loop;
  1199.    local2 = (c_SYS_id_OB_INT(local0,((OB) local1)));
  1200.    r_2204 = (r_2204^(c_INT_times_INT_INT_chk(local2,s_2203)));
  1201.    s_2203 = (c_INT_plus_INT_INT_chk(s_2203,98));
  1202.   }
  1203.  }
  1204.  after_loop: ;
  1205.  {
  1206.   struct ARRAYBOOL_elt_BOOL_frame_struct temp2210_0;
  1207.   ARRAYBOOL_elt_BOOL_frame 
  1208.   noname2211 = &temp2210_0;
  1209.   noname2211->state = 0;
  1210.   while (1) {
  1211.    local3 = ((SYS) NULL);
  1212.    if (noname2211->state == 0) {
  1213.     noname2206 = e_2201->hot;
  1214.     noname2211->arg0 = noname2206;
  1215.    }
  1216.    local4 = ARRAYBOOL_elt_BOOL(noname2211);
  1217.    if (noname2211->state == -1) goto after_loop_2209;
  1218.    local5 = (OB)((BOOL_boxed) sbi_alloc_atomic(sizeof(struct BOOL_boxed_struct), BOOL_tag));
  1219.    ((BOOL_boxed) local5)->value_part = local4;
  1220.    local6 = (c_SYS_id_OB_INT(local3,local5));
  1221.    r_2204 = (r_2204^(c_INT_times_INT_INT_chk(local6,s_2203)));
  1222.    s_2203 = (c_INT_plus_INT_INT_chk(s_2203,98));
  1223.   }
  1224.  }
  1225.  after_loop_2209: ;
  1226.  return r_2204;
  1227.  if (!TP_ITER_TBL_inva(self)) {
  1228.   fprintf(stderr,"Failed invariant TP_ITER_TBL::invariant:BOOL ./tp.sa:639:11\n");
  1229.   exit(16);
  1230.  }
  1231. }
  1232.  
  1233.  
  1234. void TP_ITER_TBL_aset_2212(TP_ITER_TBL self, INT ind_2213, TP_ITER val_2214) {
  1235.  BOOL local0;
  1236.  INT local1;
  1237.  INT local2;
  1238.  if ((!((self==((TP_ITER_TBL) NULL))))) {
  1239.   local1 = 0;
  1240.   local2 = (self->asize);
  1241.   local0 = INT_is_bet_INT_I(ind_2213, local1, (c_INT_minus_INT_INT_chk(local2,1)));
  1242.  } else {
  1243.   local0 = FALSE;
  1244.  }
  1245.  if (!(local0)) {
  1246.   fprintf(stderr,"Violation of precondition ../Library/aref.sa:38:7\n");
  1247.   exit(16);
  1248.  }
  1249.  if (ind_2213<0||ind_2213>=self->asize) {
  1250.   fprintf(stderr,"Index out of bounds ../Library/aref.sa:38:7\n");
  1251.   exit(16);
  1252.  }
  1253.  self->arr_part[ind_2213] = val_2214;
  1254. }
  1255.  
  1256.  
  1257. TP_ITER_TBL TP_ITER_TBL_inse(TP_ITER_TBL self, TP_ITER e_2215) {
  1258.  TP_ITER_TBL noname2216;
  1259.  TP_ITER_TBL r_2217;
  1260.  INT asz_2218 = ((INT) 0);
  1261.  INT h = ((INT) 0);
  1262.  TP_ITER te;
  1263.  TP_ITER te_2219;
  1264.  INT local0;
  1265.  INT local1;
  1266.  INT local2;
  1267.  r_2217 = self;
  1268.  if (TP_ITER_TBL_elt__2172(self, e_2215, TP_ITER_TBL_elt_(self))) {
  1269.   return r_2217;
  1270.  }
  1271.  if ((r_2217==((TP_ITER_TBL) NULL))) {
  1272.   r_2217 = TP_ITER_TBL_allo(self, 5);
  1273.  }
  1274.  else {
  1275.   local0 = (c_INT_plus_INT_INT_chk(self->hsize,1));
  1276.   local1 = (c_INT_times_INT_INT_chk(local0,2));
  1277.   if ((local1>(self->asize))) {
  1278.    r_2217 = TP_ITER_TBL_doub(r_2217);
  1279.   }
  1280.  }
  1281.  asz_2218 = (r_2217->asize);
  1282.  local2 = TP_ITER_TBL_elt__2200(r_2217, e_2215);
  1283.  h = (local2&(c_INT_minus_INT_INT_chk(asz_2218,2)));
  1284.  while (1) {
  1285.   te = TP_ITER_TBL_aget(r_2217, h);
  1286.   if (TP_ITER_TBL_elt__2172(self, te, TP_ITER_TBL_elt_(self))) {
  1287.    goto after_loop;
  1288.   }
  1289.   else {
  1290.    if (TP_ITER_TBL_elt__2172(self, te, e_2215)) {
  1291.     TP_ITER_TBL_aset_2212(r_2217, h, e_2215);
  1292.     return r_2217;
  1293.    }
  1294.   }
  1295.   h = (c_INT_plus_INT_INT_chk(h,1));
  1296.  }
  1297.  after_loop: ;
  1298.  if ((h==(c_INT_minus_INT_INT_chk(asz_2218,1)))) {
  1299.   h = 0;
  1300.   while (1) {
  1301.    te_2219 = TP_ITER_TBL_aget(r_2217, h);
  1302.    if (TP_ITER_TBL_elt__2172(self, te_2219, TP_ITER_TBL_elt_(self))) {
  1303.     goto after_loop_2221;
  1304.    }
  1305.    else {
  1306.     if (TP_ITER_TBL_elt__2172(self, te_2219, e_2215)) {
  1307.      TP_ITER_TBL_aset_2212(r_2217, h, e_2215);
  1308.      return r_2217;
  1309.     }
  1310.    }
  1311.    h = (c_INT_plus_INT_INT_chk(h,1));
  1312.   }
  1313.   after_loop_2221: ;
  1314.   if (!((h!=(c_INT_minus_INT_INT_chk(asz_2218,1))))) {
  1315.    fprintf(stderr,"Violation of assertion ../Library/fqset.sa:218:15\n");
  1316.    exit(16);
  1317.   }
  1318.  }
  1319.  TP_ITER_TBL_aset_2212(r_2217, h, e_2215);
  1320.  r_2217->hsize = (c_INT_plus_INT_INT_chk(r_2217->hsize,1));
  1321.  return r_2217;
  1322.  if (!TP_ITER_TBL_inva(self)) {
  1323.   fprintf(stderr,"Failed invariant TP_ITER_TBL::invariant:BOOL ../Library/fqset.sa:198:9\n");
  1324.   exit(16);
  1325.  }
  1326. }
  1327.  
  1328.  
  1329. TP_ITER TP_TBL_tp_iter_f(TP_TBL self, ARRAYTP args_2223, ARRAYBOOL hot_2224, TP ret_2225) {
  1330.  TP_ITER noname2226;
  1331.  TP_ITER r_2227;
  1332.  TP_ITER_TBL local0;
  1333.  local0 = self->iter_tbl;
  1334.  r_2227 = TP_ITER_TBL_get_(local0, TUPARRAYTPARRAYB_2139(TUPARRAYTPARRAYB_zero, args_2223, hot_2224, ret_2225));
  1335.  if ((r_2227==((TP_ITER) NULL))) {
  1336.   r_2227 = TP_ITER_create_A(((TP_ITER) NULL), args_2223, hot_2224, ret_2225, self->prog);
  1337.   self->iter_tbl = TP_ITER_TBL_inse(self->iter_tbl, r_2227);
  1338.  }
  1339.  return r_2227;
  1340. }
  1341.  
  1342.  
  1343. ARRAYBOOL ARRAYBOOL_create(ARRAYBOOL self, INT n_2228) {
  1344.  ARRAYBOOL noname2229;
  1345.  ARRAYBOOL local0;
  1346.  if (!((n_2228>=0))) {
  1347.   fprintf(stderr,"Violation of precondition ../Library/array.sa:56:9\n");
  1348.   exit(16);
  1349.  }
  1350.  local0 = ((ARRAYBOOL) sbi_arr_alloc_atomic(sizeof(struct ARRAYBOOL_struct), ARRAYBOOL_tag, sizeof(BOOL) , n_2228));
  1351.  local0->asize = n_2228;
  1352.  return local0;
  1353. }
  1354.  
  1355.  
  1356. BOOL ARRAYBOOL_elt_eq(ARRAYBOOL self, BOOL e1_2230, BOOL e2_2231) {
  1357.  BOOL noname2232 = ((BOOL) 0);
  1358.  OB local0;
  1359.  OB local1;
  1360.  local0 = (OB)((BOOL_boxed) sbi_alloc_atomic(sizeof(struct BOOL_boxed_struct), BOOL_tag));
  1361.  ((BOOL_boxed) local0)->value_part = e1_2230;
  1362.  local1 = (OB)((BOOL_boxed) sbi_alloc_atomic(sizeof(struct BOOL_boxed_struct), BOOL_tag));
  1363.  ((BOOL_boxed) local1)->value_part = e2_2231;
  1364.  return c_SYS_ob_eq_OB_OB_BOOL(local0,local1);
  1365. }
  1366.  
  1367.  
  1368. BOOL ARRAYBOOL_contai(ARRAYBOOL self, BOOL e_2233) {
  1369.  BOOL noname2234 = ((BOOL) 0);
  1370.  ARRAYBOOL noname2235;
  1371.  BOOL local0;
  1372.  BOOL local1;
  1373.  if ((self==((ARRAYBOOL) NULL))) {
  1374.   return FALSE;
  1375.  }
  1376.  {
  1377.   struct ARRAYBOOL_elt_BOOL_frame_struct temp2236_0;
  1378.   ARRAYBOOL_elt_BOOL_frame 
  1379.   noname2237 = &temp2236_0;
  1380.   noname2237->state = 0;
  1381.   while (1) {
  1382.    if (noname2237->state == 0) {
  1383.     noname2235 = self;
  1384.     noname2237->arg0 = noname2235;
  1385.    }
  1386.    local0 = ARRAYBOOL_elt_BOOL(noname2237);
  1387.    if (noname2237->state == -1) goto after_loop;
  1388.    local1 = local0;
  1389.    if (ARRAYBOOL_elt_eq(self, local1, e_2233)) {
  1390.     return TRUE;
  1391.    }
  1392.   }
  1393.  }
  1394.  after_loop: ;
  1395.  return FALSE;
  1396. }
  1397.  
  1398.  
  1399. TP TP_CONTEXT_tp_it(TP_CONTEXT self, TR_TYPE_SPEC t_2238) {
  1400.  TP noname2239;
  1401.  ARRAYTP args_2240;
  1402.  TR_TYPE_SPEC tpa;
  1403.  ARRAYTP noname2241;
  1404.  ARRAYBOOL hot_2242;
  1405.  ARRAYBOOL noname2243;
  1406.  BOOL local0;
  1407.  TP_TBL local1;
  1408.  ARRAYTP local2;
  1409.  ARRAYBOOL local3;
  1410.  ARRAYTP local4;
  1411.  ARRAYBOOL local5;
  1412.  TP_TBL local6;
  1413.  if ((!((t_2238==((TR_TYPE_SPEC) NULL))))) {
  1414.   local0 = (t_2238->kind==shared_TR_TYPE_S_1645);
  1415.  } else {
  1416.   local0 = FALSE;
  1417.  }
  1418.  if (!(local0)) {
  1419.   fprintf(stderr,"Violation of precondition ./tp.sa:429:13\n");
  1420.   exit(16);
  1421.  }
  1422.  if ((t_2238->params==((TR_TYPE_SPEC) NULL))) {
  1423.   local1 = self->prog->tp_tbl;
  1424.   local2 = ((ARRAYTP) NULL);
  1425.   local3 = ((ARRAYBOOL) NULL);
  1426.   return ((TP) TP_TBL_tp_iter_f(local1, local2, local3, TP_CONTEXT_tp_of(self, t_2238->ret)));
  1427.  }
  1428.  local4 = ((ARRAYTP) NULL);
  1429.  args_2240 = ARRAYTP_create_I(local4, TR_TYPE_SPEC_siz(t_2238->params));
  1430.  tpa = t_2238->params;
  1431.  {
  1432.   struct ARRAYTP_set_TP_frame_struct temp2244_0;
  1433.   ARRAYTP_set_TP_frame 
  1434.   noname2245 = &temp2244_0;
  1435.   noname2245->state = 0;
  1436.   while (1) {
  1437.    if ((tpa==((TR_TYPE_SPEC) NULL))) {
  1438.     goto after_loop;
  1439.    }
  1440.    if (noname2245->state == 0) {
  1441.     noname2241 = args_2240;
  1442.     noname2245->arg0 = noname2241;
  1443.    }
  1444.    noname2245->arg1 = TP_CONTEXT_tp_of(self, tpa);
  1445.    ARRAYTP_set_TP(noname2245);
  1446.    if (noname2245->state == -1) goto after_loop;
  1447.    0 /* No return value from iter call */;
  1448.    tpa = tpa->next_8;
  1449.   }
  1450.  }
  1451.  after_loop: ;
  1452.  local5 = ((ARRAYBOOL) NULL);
  1453.  hot_2242 = ARRAYBOOL_create(local5, ARRAYTP_size_INT(args_2240));
  1454.  tpa = t_2238->params;
  1455.  {
  1456.   struct ARRAYBOOL_set_BOOL_frame_struct temp2247_0;
  1457.   ARRAYBOOL_set_BOOL_frame 
  1458.   noname2248 = &temp2247_0;
  1459.   noname2248->state = 0;
  1460.   while (1) {
  1461.    if ((tpa==((TR_TYPE_SPEC) NULL))) {
  1462.     goto after_loop_2246;
  1463.    }
  1464.    if (noname2248->state == 0) {
  1465.     noname2243 = hot_2242;
  1466.     noname2248->arg0 = noname2243;
  1467.    }
  1468.    noname2248->arg1 = tpa->is_hot;
  1469.    ARRAYBOOL_set_BOOL(noname2248);
  1470.    if (noname2248->state == -1) goto after_loop_2246;
  1471.    0 /* No return value from iter call */;
  1472.    tpa = tpa->next_8;
  1473.   }
  1474.  }
  1475.  after_loop_2246: ;
  1476.  if ((!(ARRAYBOOL_contai(hot_2242, TRUE)))) {
  1477.   hot_2242 = ((ARRAYBOOL) NULL);
  1478.  }
  1479.  local6 = self->prog->tp_tbl;
  1480.  return ((TP) TP_TBL_tp_iter_f(local6, args_2240, hot_2242, TP_CONTEXT_tp_of(self, t_2238->ret)));
  1481. }
  1482.  
  1483.  
  1484. TP TP_CONTEXT_tp_of(TP_CONTEXT self, TR_TYPE_SPEC t_2249) {
  1485.  TP noname2250;
  1486.  INT noname2251 = ((INT) 0);
  1487.  if ((t_2249==((TR_TYPE_SPEC) NULL))) {
  1488.   return ((TP) NULL);
  1489.  }
  1490.  noname2251 = t_2249->kind;
  1491.  switch (noname2251) {
  1492.   case 0:
  1493.    return TP_CONTEXT_tp_cl(self, t_2249);
  1494.    break;
  1495.   case 1:
  1496.    return TP_CONTEXT_tp_ro(self, t_2249);
  1497.    break;
  1498.   case 2:
  1499.    return TP_CONTEXT_tp_it(self, t_2249);
  1500.    break;
  1501.   case 3:
  1502.    if (self->is_abs) {
  1503.     PROG_err_loc_PRO(self->prog, ((PROG_ERR) t_2249));
  1504.     PROG_err_STR(self->prog, ((STR) &SAMEisnotallowed));
  1505.    }
  1506.    return ((TP) self->same_34);
  1507.    break;
  1508.   default: ;
  1509.    fprintf(stderr,"No applicable target in case statement ./tp.sa:396:23\n");
  1510.    exit(16);
  1511.  }
  1512.  return ((TP) NULL);
  1513. }
  1514.  
  1515.  
  1516. TR_CLASS_DEF PROG_FIND_TYPES__2252(PROG_FIND_TYPES self, IDENT nm_2253, INT num_2254) {
  1517.  TR_CLASS_DEF noname2255;
  1518.  return PROG_PARSE_tree_(self->prog->prog_parse, nm_2253, num_2254);
  1519. }
  1520.  
  1521.  
  1522. INT FSETIDENT_elt_ha(FSETIDENT self, IDENT e_2256) {
  1523.  INT noname2257 = ((INT) 0);
  1524.  OB local0;
  1525.  return IDENT_hash_INT(e_2256);
  1526.  local0 = (OB)((IDENT_boxed) sbi_alloc(sizeof(struct IDENT_boxed_struct), IDENT_tag));
  1527.  ((IDENT_boxed) local0)->value_part = e_2256;
  1528.  return (c_SYS_id_OB_INT(((SYS) NULL),local0));
  1529.  if (!FSETIDENT_invari(self)) {
  1530.   fprintf(stderr,"Failed invariant FSET{IDENT}::invariant:BOOL ../Library/fset.sa:63:11\n");
  1531.   exit(16);
  1532.  }
  1533. }
  1534.  
  1535.  
  1536. INT FSETIDENT_asize_INT(FSETIDENT self) {
  1537.  INT noname2258 = ((INT) 0);
  1538.   return self->asize;
  1539.  fprintf(stderr,"Last statement wasn't return ../Library/aref.sa:20:8\n");
  1540.  exit(16);
  1541. }
  1542.  
  1543.  
  1544. IDENT FSETIDENT_aget_I(FSETIDENT self, INT ind_2259) {
  1545.  IDENT noname2260 = IDENT_zero;
  1546.  BOOL local0;
  1547.  INT local1;
  1548.  INT local2;
  1549.  if ((!((self==((FSETIDENT) NULL))))) {
  1550.   local1 = 0;
  1551.   local2 = (self->asize);
  1552.   local0 = INT_is_bet_INT_I(ind_2259, local1, (c_INT_minus_INT_INT_chk(local2,1)));
  1553.  } else {
  1554.   local0 = FALSE;
  1555.  }
  1556.  if (!(local0)) {
  1557.   fprintf(stderr,"Violation of precondition ../Library/aref.sa:33:7\n");
  1558.   exit(16);
  1559.  }
  1560.  if (ind_2259<0||ind_2259>=self->asize) {
  1561.   fprintf(stderr,"Index out of bounds ../Library/aref.sa:33:7\n");
  1562.   exit(16);
  1563.  }
  1564.  return self->arr_part[ind_2259];
  1565.  if (!FSETIDENT_invari(self)) {
  1566.   fprintf(stderr,"Failed invariant FSET{IDENT}::invariant:BOOL ../Library/aref.sa:33:7\n");
  1567.   exit(16);
  1568.  }
  1569. }
  1570.  
  1571.  
  1572. BOOL FSETIDENT_elt_eq(FSETIDENT self, IDENT e1_2261, IDENT e2_2262) {
  1573.  BOOL noname2263 = ((BOOL) 0);
  1574.  OB local0;
  1575.  OB local1;
  1576.  return IDENT_is_eq_IDEN(e1_2261, e2_2262);
  1577.  local0 = (OB)((IDENT_boxed) sbi_alloc(sizeof(struct IDENT_boxed_struct), IDENT_tag));
  1578.  ((IDENT_boxed) local0)->value_part = e1_2261;
  1579.  local1 = (OB)((IDENT_boxed) sbi_alloc(sizeof(struct IDENT_boxed_struct), IDENT_tag));
  1580.  ((IDENT_boxed) local1)->value_part = e2_2262;
  1581.  return c_SYS_ob_eq_OB_OB_BOOL(local0,local1);
  1582.  if (!FSETIDENT_invari(self)) {
  1583.   fprintf(stderr,"Failed invariant FSET{IDENT}::invariant:BOOL ../Library/fset.sa:44:9\n");
  1584.   exit(16);
  1585.  }
  1586. }
  1587.  
  1588.  
  1589. IDENT FSETIDENT_elt_ni(FSETIDENT self) {
  1590.  IDENT noname2264 = IDENT_zero;
  1591.  IDENT t_2265 = IDENT_zero;
  1592.  return IDENT_zero;
  1593.  if (!FSETIDENT_invari(self)) {
  1594.   fprintf(stderr,"Failed invariant FSET{IDENT}::invariant:BOOL ../Library/fset.sa:53:10\n");
  1595.   exit(16);
  1596.  }
  1597. }
  1598.  
  1599.  
  1600. BOOL FSETIDENT_test_I(FSETIDENT self, IDENT e_2266) {
  1601.  BOOL noname2267 = ((BOOL) 0);
  1602.  INT h = ((INT) 0);
  1603.  IDENT te = IDENT_zero;
  1604.  IDENT te_2268 = IDENT_zero;
  1605.  INT local0;
  1606.  INT local1;
  1607.  INT local2;
  1608.  INT local3;
  1609.  if ((self==((FSETIDENT) NULL))) {
  1610.   return FALSE;
  1611.  }
  1612.  local0 = FSETIDENT_elt_ha(self, e_2266);
  1613.  local1 = (self->asize);
  1614.  h = (local0&(c_INT_minus_INT_INT_chk(local1,2)));
  1615.  while (1) {
  1616.   te = FSETIDENT_aget_I(self, h);
  1617.   if (FSETIDENT_elt_eq(self, te, e_2266)) {
  1618.    return TRUE;
  1619.   }
  1620.   else {
  1621.    if (FSETIDENT_elt_eq(self, te, FSETIDENT_elt_ni(self))) {
  1622.     goto after_loop;
  1623.    }
  1624.   }
  1625.   h = (c_INT_plus_INT_INT_chk(h,1));
  1626.  }
  1627.  after_loop: ;
  1628.  local2 = (self->asize);
  1629.  if ((h==(c_INT_minus_INT_INT_chk(local2,1)))) {
  1630.   h = 0;
  1631.   while (1) {
  1632.    te_2268 = FSETIDENT_aget_I(self, h);
  1633.    if (FSETIDENT_elt_eq(self, te_2268, e_2266)) {
  1634.     return TRUE;
  1635.    }
  1636.    else {
  1637.     if (FSETIDENT_elt_eq(self, te_2268, FSETIDENT_elt_ni(self))) {
  1638.      goto after_loop_2270;
  1639.     }
  1640.    }
  1641.    h = (c_INT_plus_INT_INT_chk(h,1));
  1642.   }
  1643.   after_loop_2270: ;
  1644.   local3 = (self->asize);
  1645.   if (!((h!=(c_INT_minus_INT_INT_chk(local3,1))))) {
  1646.    fprintf(stderr,"Violation of assertion ../Library/fset.sa:127:15\n");
  1647.    exit(16);
  1648.   }
  1649.  }
  1650.  return FALSE;
  1651.  if (!FSETIDENT_invari(self)) {
  1652.   fprintf(stderr,"Failed invariant FSET{IDENT}::invariant:BOOL ../Library/fset.sa:112:7\n");
  1653.   exit(16);
  1654.  }
  1655. }
  1656.  
  1657.  
  1658. STR TP_CLASS_str_STR(TP_CLASS self) {
  1659.  STR noname2272;
  1660.  FSTR s_2273;
  1661.  ARRAYTP noname2274;
  1662.  STR noname2275;
  1663.  FSTR local0;
  1664.  FSTR local1;
  1665.  STR local2;
  1666.  TP local3;
  1667.  TP local4;
  1668.  if ((!((self->str_cache==((STR) NULL))))) {
  1669.   return self->str_cache;
  1670.  }
  1671.  if ((self==((TP_CLASS) NULL))) {
  1672.   return ((STR) &void_2276);
  1673.  }
  1674.  if ((self->params==((ARRAYTP) NULL))) {
  1675.   self->str_cache = self->name_19.str_4;
  1676.  }
  1677.  else {
  1678.   local0 = FSTR_create_FSTR(((FSTR) NULL));
  1679.   local1 = FSTR_plus_STR_FSTR(local0, self->name_19.str_4);
  1680.   s_2273 = FSTR_plus_CHAR_FSTR(local1, '{');
  1681.   {
  1682.    struct ARRAYTP_elt_TP_frame_struct temp2277_0;
  1683.    ARRAYTP_elt_TP_frame 
  1684.    noname2278 = &temp2277_0;
  1685.    struct STR_separate_STR_STR_frame_struct temp2277_1;
  1686.    STR_separate_STR_STR_frame 
  1687.    noname2279 = &temp2277_1;
  1688.    noname2278->state = 0;
  1689.    noname2279->state = 0;
  1690.    while (1) {
  1691.     if (noname2279->state == 0) {
  1692.      noname2275 = ((STR) &name_2280);
  1693.      noname2279->arg0 = noname2275;
  1694.     }
  1695.     if (noname2278->state == 0) {
  1696.      noname2274 = self->params;
  1697.      noname2278->arg0 = noname2274;
  1698.     }
  1699.     local3 = ARRAYTP_elt_TP(noname2278);
  1700.     if (noname2278->state == -1) goto after_loop;
  1701.     local4 = local3;
  1702.     noname2279->arg1 = (*TP_str_STR[local4->header.tag+TP_str_STR_offset])(local4);
  1703.     local2 = STR_separate_STR_STR(noname2279);
  1704.     if (noname2279->state == -1) goto after_loop;
  1705.     s_2273 = FSTR_plus_STR_FSTR(s_2273, local2);
  1706.    }
  1707.   }
  1708.   after_loop: ;
  1709.   s_2273 = FSTR_plus_CHAR_FSTR(s_2273, '}');
  1710.   self->str_cache = FSTR_str_STR(s_2273);
  1711.  }
  1712.  return self->str_cache;
  1713. }
  1714.  
  1715.  
  1716. FSETIDENT FSETIDENT_alloca(FSETIDENT self, INT n_2281) {
  1717.  FSETIDENT noname2282;
  1718.  FSETIDENT r_2283;
  1719.  FSETIDENT noname2284;
  1720.  FSETIDENT local0;
  1721.  local0 = ((FSETIDENT) sbi_arr_alloc(sizeof(struct FSETIDENT_struct), FSETIDENT_tag, sizeof(IDENT) , n_2281));
  1722.  local0->asize = n_2281;
  1723.  r_2283 = local0;
  1724.  if ((!(((IDENT_blob=FSETIDENT_elt_ni(self)).str_4==(STR)0)))) {
  1725.   {
  1726.    struct FSETIDENT_aset_IDENT_frame_struct temp2285_0;
  1727.    FSETIDENT_aset_IDENT_frame 
  1728.    noname2286 = &temp2285_0;
  1729.    noname2286->state = 0;
  1730.    while (1) {
  1731.     if (noname2286->state == 0) {
  1732.      noname2284 = r_2283;
  1733.      noname2286->arg0 = noname2284;
  1734.     }
  1735.     noname2286->arg1 = FSETIDENT_elt_ni(self);
  1736.     FSETIDENT_aset_IDENT(noname2286);
  1737.     if (noname2286->state == -1) goto after_loop;
  1738.     0 /* No return value from iter call */;
  1739.    }
  1740.   }
  1741.   after_loop: ;
  1742.  }
  1743.  return r_2283;
  1744. }
  1745.  
  1746.  
  1747. FSETIDENT FSETIDENT_double(FSETIDENT self) {
  1748.  FSETIDENT noname2287;
  1749.  FSETIDENT r_2288;
  1750.  FSETIDENT noname2289;
  1751.  INT local0;
  1752.  INT local1;
  1753.  INT local2;
  1754.  IDENT local3;
  1755.  if (!((!((self==((FSETIDENT) NULL)))))) {
  1756.   fprintf(stderr,"Violation of precondition ../Library/fset.sa:150:22\n");
  1757.   exit(16);
  1758.  }
  1759.  local0 = (self->asize);
  1760.  local1 = (c_INT_minus_INT_INT_chk(local0,1));
  1761.  local2 = (c_INT_times_INT_INT_chk(local1,2));
  1762.  r_2288 = FSETIDENT_alloca(self, (c_INT_plus_INT_INT_chk(local2,1)));
  1763.  {
  1764.   struct FSETIDENT_elt_IDENT_frame_struct temp2290_0;
  1765.   FSETIDENT_elt_IDENT_frame 
  1766.   noname2291 = &temp2290_0;
  1767.   noname2291->state = 0;
  1768.   while (1) {
  1769.    if (noname2291->state == 0) {
  1770.     noname2289 = self;
  1771.     noname2291->arg0 = noname2289;
  1772.    }
  1773.    local3 = FSETIDENT_elt_IDENT(noname2291);
  1774.    if (noname2291->state == -1) goto after_loop;
  1775.    r_2288 = FSETIDENT_insert(r_2288, local3);
  1776.   }
  1777.  }
  1778.  after_loop: ;
  1779.  return r_2288;
  1780. }
  1781.  
  1782.  
  1783. void FSETIDENT_aset_I(FSETIDENT self, INT ind_2292, IDENT val_2293) {
  1784.  BOOL local0;
  1785.  INT local1;
  1786.  INT local2;
  1787.  if ((!((self==((FSETIDENT) NULL))))) {
  1788.   local1 = 0;
  1789.   local2 = (self->asize);
  1790.   local0 = INT_is_bet_INT_I(ind_2292, local1, (c_INT_minus_INT_INT_chk(local2,1)));
  1791.  } else {
  1792.   local0 = FALSE;
  1793.  }
  1794.  if (!(local0)) {
  1795.   fprintf(stderr,"Violation of precondition ../Library/aref.sa:38:7\n");
  1796.   exit(16);
  1797.  }
  1798.  if (ind_2292<0||ind_2292>=self->asize) {
  1799.   fprintf(stderr,"Index out of bounds ../Library/aref.sa:38:7\n");
  1800.   exit(16);
  1801.  }
  1802.  self->arr_part[ind_2292] = val_2293;
  1803.  if (!FSETIDENT_invari(self)) {
  1804.   fprintf(stderr,"Failed invariant FSET{IDENT}::invariant:BOOL ../Library/aref.sa:38:7\n");
  1805.   exit(16);
  1806.  }
  1807. }
  1808.  
  1809.  
  1810. FSETIDENT FSETIDENT_insert(FSETIDENT self, IDENT e_2294) {
  1811.  FSETIDENT noname2295;
  1812.  FSETIDENT r_2296;
  1813.  INT asz_2297 = ((INT) 0);
  1814.  INT h = ((INT) 0);
  1815.  IDENT te = IDENT_zero;
  1816.  IDENT te_2298 = IDENT_zero;
  1817.  INT local0;
  1818.  INT local1;
  1819.  INT local2;
  1820.  r_2296 = self;
  1821.  if ((r_2296==((FSETIDENT) NULL))) {
  1822.   r_2296 = FSETIDENT_alloca(self, 5);
  1823.  }
  1824.  else {
  1825.   local0 = (c_INT_plus_INT_INT_chk(self->hsize,1));
  1826.   local1 = (c_INT_times_INT_INT_chk(local0,2));
  1827.   if ((local1>(self->asize))) {
  1828.    r_2296 = FSETIDENT_double(self);
  1829.   }
  1830.  }
  1831.  asz_2297 = (r_2296->asize);
  1832.  local2 = FSETIDENT_elt_ha(r_2296, e_2294);
  1833.  h = (local2&(c_INT_minus_INT_INT_chk(asz_2297,2)));
  1834.  while (1) {
  1835.   te = FSETIDENT_aget_I(r_2296, h);
  1836.   if (FSETIDENT_elt_eq(self, te, FSETIDENT_elt_ni(self))) {
  1837.    goto after_loop;
  1838.   }
  1839.   else {
  1840.    if (FSETIDENT_elt_eq(self, te, e_2294)) {
  1841.     FSETIDENT_aset_I(r_2296, h, e_2294);
  1842.     return r_2296;
  1843.    }
  1844.   }
  1845.   h = (c_INT_plus_INT_INT_chk(h,1));
  1846.  }
  1847.  after_loop: ;
  1848.  if ((h==(c_INT_minus_INT_INT_chk(asz_2297,1)))) {
  1849.   h = 0;
  1850.   while (1) {
  1851.    te_2298 = FSETIDENT_aget_I(r_2296, h);
  1852.    if (FSETIDENT_elt_eq(self, te_2298, FSETIDENT_elt_ni(self))) {
  1853.     goto after_loop_2300;
  1854.    }
  1855.    else {
  1856.     if (FSETIDENT_elt_eq(self, te_2298, e_2294)) {
  1857.      FSETIDENT_aset_I(r_2296, h, e_2294);
  1858.      return r_2296;
  1859.     }
  1860.    }
  1861.    h = (c_INT_plus_INT_INT_chk(h,1));
  1862.   }
  1863.   after_loop_2300: ;
  1864.   if (!((h!=(c_INT_minus_INT_INT_chk(asz_2297,1))))) {
  1865.    fprintf(stderr,"Violation of assertion ../Library/fset.sa:177:15\n");
  1866.    exit(16);
  1867.   }
  1868.  }
  1869.  FSETIDENT_aset_I(r_2296, h, e_2294);
  1870.  r_2296->hsize = (c_INT_plus_INT_INT_chk(r_2296->hsize,1));
  1871.  return r_2296;
  1872.  if (!FSETIDENT_invari(self)) {
  1873.   fprintf(stderr,"Failed invariant FSET{IDENT}::invariant:BOOL ../Library/fset.sa:158:9\n");
  1874.   exit(16);
  1875.  }
  1876. }
  1877.  
  1878.  
  1879. void PROG_FIND_TYPES__2302(PROG_FIND_TYPES self, TP t_2303) {
  1880.  IDENT nm_2304 = IDENT_zero;
  1881.  INT pnum = ((INT) 0);
  1882.  INT i = ((INT) 0);
  1883.  INT i_2305 = ((INT) 0);
  1884.  INT i_2306 = ((INT) 0);
  1885.  PROG local0;
  1886.  STR local1;
  1887.  if (!((!((t_2303==((TP) NULL)))))) {
  1888.   fprintf(stderr,"Violation of precondition ./prog.sa:430:13\n");
  1889.   exit(16);
  1890.  }
  1891.  if (t_2303==NULL) {
  1892.  } else
  1893.  switch (t_2303->header.tag) {
  1894.   case TP_CLASS_tag:
  1895.    nm_2304 = ((TP_CLASS) t_2303)->name_19;
  1896.    pnum = ARRAYTP_size_INT(((TP_CLASS) t_2303)->params);
  1897.    if ((PROG_FIND_TYPES__2252(self, nm_2304, pnum)==((TR_CLASS_DEF) NULL))) {
  1898.     if ((!(FSETIDENT_test_I(self->err_names, nm_2304)))) {
  1899.      local0 = self->prog;
  1900.      local1 = ((STR) &Thereisnosourcec);
  1901.      PROG_err_STR(local0, STR_plus_STR_STR(local1, TP_CLASS_str_STR(((TP_CLASS) t_2303))));
  1902.      self->err_names = FSETIDENT_insert(self->err_names, nm_2304);
  1903.     }
  1904.    }
  1905.    else {
  1906.     if ((pnum>0)) {
  1907.      if ((!(FSETTP_test_TP_BOOL(self->tp_done, t_2303)))) {
  1908.       self->tp_todo = FSETTP_insert_TP(self->tp_todo, t_2303);
  1909.       i = 0;
  1910.       while (1) {
  1911.        if ((i<pnum)) {
  1912.        }
  1913.        else {
  1914.         goto after_loop;
  1915.        }
  1916.        PROG_FIND_TYPES__2302(self, ARRAYTP_aget_INT_TP(((TP_CLASS) t_2303)->params, i));
  1917.        i = (c_INT_plus_INT_INT_chk(i,1));
  1918.       }
  1919.       after_loop: ;
  1920.      }
  1921.     }
  1922.    } break;
  1923.   case TP_ROUT_tag:
  1924.    if ((!(FSETTP_test_TP_BOOL(self->tp_done, t_2303)))) {
  1925.     self->tp_done = FSETTP_insert_TP(self->tp_done, t_2303);
  1926.     i_2305 = 0;
  1927.     if ((!((((TP_ROUT) t_2303)->args_7==((ARRAYTP) NULL))))) {
  1928.      while (1) {
  1929.       if ((i_2305<ARRAYTP_size_INT(((TP_ROUT) t_2303)->args_7))) {
  1930.       }
  1931.       else {
  1932.        goto after_loop_2308;
  1933.       }
  1934.       PROG_FIND_TYPES__2302(self, ARRAYTP_aget_INT_TP(((TP_ROUT) t_2303)->args_7, i_2305));
  1935.       i_2305 = (c_INT_plus_INT_INT_chk(i_2305,1));
  1936.      }
  1937.      after_loop_2308: ;
  1938.     }
  1939.     if ((!((((TP_ROUT) t_2303)->ret==((TP) NULL))))) {
  1940.      PROG_FIND_TYPES__2302(self, ((TP_ROUT) t_2303)->ret);
  1941.     }
  1942.    } break;
  1943.   case TP_ITER_tag:
  1944.    if ((!(FSETTP_test_TP_BOOL(self->tp_done, t_2303)))) {
  1945.     self->tp_done = FSETTP_insert_TP(self->tp_done, t_2303);
  1946.     i_2306 = 0;
  1947.     if ((!((((TP_ITER) t_2303)->args_7==((ARRAYTP) NULL))))) {
  1948.      while (1) {
  1949.       if ((i_2306<ARRAYTP_size_INT(((TP_ITER) t_2303)->args_7))) {
  1950.       }
  1951.       else {
  1952.        goto after_loop_2310;
  1953.       }
  1954.       PROG_FIND_TYPES__2302(self, ARRAYTP_aget_INT_TP(((TP_ITER) t_2303)->args_7, i_2306));
  1955.       i_2306 = (c_INT_plus_INT_INT_chk(i_2306,1));
  1956.      }
  1957.      after_loop_2310: ;
  1958.     }
  1959.     if ((!((((TP_ITER) t_2303)->ret==((TP) NULL))))) {
  1960.      PROG_FIND_TYPES__2302(self, ((TP_ITER) t_2303)->ret);
  1961.     }
  1962.    } break;
  1963.   default: ;
  1964.    fprintf(stderr,"No applicable type in typecase ./prog.sa:437:14\n");
  1965.    exit(16);
  1966.  }
  1967. }
  1968.  
  1969.  
  1970. void PROG_FIND_TYPES__2312(PROG_FIND_TYPES self, TR_NODE tr_2313) {
  1971.  TR_CLASS_ELT b_2314;
  1972.  TR_CLASS_ELT local0;
  1973.  if ((tr_2313==((TR_NODE) NULL))) {
  1974.   return;
  1975.  }
  1976.  PROG_err_loc_PRO(self->prog, ((PROG_ERR) tr_2313));
  1977.  if (tr_2313==NULL) {
  1978.  } else
  1979.  switch (tr_2313->header.tag) {
  1980.   case TR_CLASS_DEF_tag:
  1981.    PROG_FIND_TYPES__2312(self, ((TR_NODE) ((TR_CLASS_DEF) tr_2313)->params));
  1982.    PROG_FIND_TYPES__2312(self, ((TR_NODE) ((TR_CLASS_DEF) tr_2313)->under));
  1983.    PROG_FIND_TYPES__2312(self, ((TR_NODE) ((TR_CLASS_DEF) tr_2313)->over));
  1984.    b_2314 = ((TR_CLASS_DEF) tr_2313)->body;
  1985.    while (1) {
  1986.     if ((!((b_2314==((TR_CLASS_ELT) NULL))))) {
  1987.     }
  1988.     else {
  1989.      goto after_loop;
  1990.     }
  1991.     if (b_2314==NULL) {
  1992.     } else
  1993.     switch (b_2314->header.tag) {
  1994.      case TR_INCLUDE_CLAUSE_tag:
  1995.       PROG_FIND_TYPES__2312(self, ((TR_NODE) b_2314)); break;
  1996.      default: ;
  1997.     }
  1998.     local0 = b_2314;
  1999.     b_2314 = (*TR_CLASS_ELT_nex[local0->header.tag+TR_CLASS_ELT_nex_offset])(local0);
  2000.    }
  2001.    after_loop: ; break;
  2002.   case TR_PARAM_DEC_tag:
  2003.    PROG_FIND_TYPES__2312(self, ((TR_NODE) ((TR_PARAM_DEC) tr_2313)->type_constraint));
  2004.    PROG_FIND_TYPES__2312(self, ((TR_NODE) ((TR_PARAM_DEC) tr_2313)->next_8)); break;
  2005.   case TR_TYPE_SPEC_tag:
  2006.    PROG_FIND_TYPES__2302(self, TP_CONTEXT_tp_of(self->con, ((TR_TYPE_SPEC) tr_2313)));
  2007.    PROG_FIND_TYPES__2312(self, ((TR_NODE) ((TR_TYPE_SPEC) tr_2313)->next_8)); break;
  2008.   case TR_CONST_DEF_tag:
  2009.    PROG_FIND_TYPES__2312(self, ((TR_NODE) ((TR_CONST_DEF) tr_2313)->tp));
  2010.    PROG_FIND_TYPES__2312(self, ((TR_NODE) ((TR_CONST_DEF) tr_2313)->init)); break;
  2011.   case TR_SHARED_DEF_tag:
  2012.    PROG_FIND_TYPES__2312(self, ((TR_NODE) ((TR_SHARED_DEF) tr_2313)->tp));
  2013.    PROG_FIND_TYPES__2312(self, ((TR_NODE) ((TR_SHARED_DEF) tr_2313)->init)); break;
  2014.   case TR_ATTR_DEF_tag:
  2015.    PROG_FIND_TYPES__2312(self, ((TR_NODE) ((TR_ATTR_DEF) tr_2313)->tp)); break;
  2016.   case TR_ROUT_DEF_tag:
  2017.    PROG_FIND_TYPES__2312(self, ((TR_NODE) ((TR_ROUT_DEF) tr_2313)->args_dec));
  2018.    PROG_FIND_TYPES__2312(self, ((TR_NODE) ((TR_ROUT_DEF) tr_2313)->ret_dec));
  2019.    PROG_FIND_TYPES__2312(self, ((TR_NODE) ((TR_ROUT_DEF) tr_2313)->pre_e));
  2020.    PROG_FIND_TYPES__2312(self, ((TR_NODE) ((TR_ROUT_DEF) tr_2313)->post_e));
  2021.    PROG_FIND_TYPES__2312(self, ((TR_NODE) ((TR_ROUT_DEF) tr_2313)->stmts)); break;
  2022.   case TR_ARG_DEC_tag:
  2023.    PROG_FIND_TYPES__2312(self, ((TR_NODE) ((TR_ARG_DEC) tr_2313)->tp));
  2024.    PROG_FIND_TYPES__2312(self, ((TR_NODE) ((TR_ARG_DEC) tr_2313)->next_8)); break;
  2025.   case TR_INCLUDE_CLAUSE_tag:
  2026.    PROG_FIND_TYPES__2312(self, ((TR_NODE) ((TR_INCLUDE_CLAUSE) tr_2313)->tp)); break;
  2027.   case TR_DEC_STMT_tag:
  2028.    PROG_FIND_TYPES__2312(self, ((TR_NODE) ((TR_DEC_STMT) tr_2313)->tp));
  2029.    PROG_FIND_TYPES__2312(self, ((TR_NODE) ((TR_DEC_STMT) tr_2313)->next_8)); break;
  2030.   case TR_ASSIGN_STMT_tag:
  2031.    PROG_FIND_TYPES__2312(self, ((TR_NODE) ((TR_ASSIGN_STMT) tr_2313)->lhs_expr));
  2032.    PROG_FIND_TYPES__2312(self, ((TR_NODE) ((TR_ASSIGN_STMT) tr_2313)->tp));
  2033.    PROG_FIND_TYPES__2312(self, ((TR_NODE) ((TR_ASSIGN_STMT) tr_2313)->rhs));
  2034.    PROG_FIND_TYPES__2312(self, ((TR_NODE) ((TR_ASSIGN_STMT) tr_2313)->next_8)); break;
  2035.   case TR_IF_STMT_tag:
  2036.    PROG_FIND_TYPES__2312(self, ((TR_NODE) ((TR_IF_STMT) tr_2313)->test_40));
  2037.    PROG_FIND_TYPES__2312(self, ((TR_NODE) ((TR_IF_STMT) tr_2313)->then_part));
  2038.    PROG_FIND_TYPES__2312(self, ((TR_NODE) ((TR_IF_STMT) tr_2313)->else_part));
  2039.    PROG_FIND_TYPES__2312(self, ((TR_NODE) ((TR_IF_STMT) tr_2313)->next_8)); break;
  2040.   case TR_LOOP_STMT_tag:
  2041.    PROG_FIND_TYPES__2312(self, ((TR_NODE) ((TR_LOOP_STMT) tr_2313)->body));
  2042.    PROG_FIND_TYPES__2312(self, ((TR_NODE) ((TR_LOOP_STMT) tr_2313)->next_8)); break;
  2043.   case TR_RETURN_STMT_tag:
  2044.    PROG_FIND_TYPES__2312(self, ((TR_NODE) ((TR_RETURN_STMT) tr_2313)->val_16));
  2045.    PROG_FIND_TYPES__2312(self, ((TR_NODE) ((TR_RETURN_STMT) tr_2313)->next_8)); break;
  2046.   case TR_YIELD_STMT_tag:
  2047.    PROG_FIND_TYPES__2312(self, ((TR_NODE) ((TR_YIELD_STMT) tr_2313)->val_16));
  2048.    PROG_FIND_TYPES__2312(self, ((TR_NODE) ((TR_YIELD_STMT) tr_2313)->next_8)); break;
  2049.   case TR_QUIT_STMT_tag:
  2050.    PROG_FIND_TYPES__2312(self, ((TR_NODE) ((TR_QUIT_STMT) tr_2313)->next_8)); break;
  2051.   case TR_CASE_STMT_tag:
  2052.    PROG_FIND_TYPES__2312(self, ((TR_NODE) ((TR_CASE_STMT) tr_2313)->test_40));
  2053.    PROG_FIND_TYPES__2312(self, ((TR_NODE) ((TR_CASE_STMT) tr_2313)->when_part));
  2054.    PROG_FIND_TYPES__2312(self, ((TR_NODE) ((TR_CASE_STMT) tr_2313)->else_part));
  2055.    PROG_FIND_TYPES__2312(self, ((TR_NODE) ((TR_CASE_STMT) tr_2313)->next_8)); break;
  2056.   case TR_CASE_WHEN_tag:
  2057.    PROG_FIND_TYPES__2312(self, ((TR_NODE) ((TR_CASE_WHEN) tr_2313)->val_16));
  2058.    PROG_FIND_TYPES__2312(self, ((TR_NODE) ((TR_CASE_WHEN) tr_2313)->then_part));
  2059.    PROG_FIND_TYPES__2312(self, ((TR_NODE) ((TR_CASE_WHEN) tr_2313)->next_8)); break;
  2060.   case TR_TYPECASE_STMT_tag:
  2061.    PROG_FIND_TYPES__2312(self, ((TR_NODE) ((TR_TYPECASE_STMT) tr_2313)->when_part));
  2062.    PROG_FIND_TYPES__2312(self, ((TR_NODE) ((TR_TYPECASE_STMT) tr_2313)->else_part));
  2063.    PROG_FIND_TYPES__2312(self, ((TR_NODE) ((TR_TYPECASE_STMT) tr_2313)->next_8)); break;
  2064.   case TR_TYPECASE_WHEN_tag:
  2065.    PROG_FIND_TYPES__2312(self, ((TR_NODE) ((TR_TYPECASE_WHEN) tr_2313)->tp));
  2066.    PROG_FIND_TYPES__2312(self, ((TR_NODE) ((TR_TYPECASE_WHEN) tr_2313)->then_part));
  2067.    PROG_FIND_TYPES__2312(self, ((TR_NODE) ((TR_TYPECASE_WHEN) tr_2313)->next_8)); break;
  2068.   case TR_ASSERT_STMT_tag:
  2069.    PROG_FIND_TYPES__2312(self, ((TR_NODE) ((TR_ASSERT_STMT) tr_2313)->test_40));
  2070.    PROG_FIND_TYPES__2312(self, ((TR_NODE) ((TR_ASSERT_STMT) tr_2313)->next_8)); break;
  2071.   case TR_PROTECT_STMT_tag:
  2072.    PROG_FIND_TYPES__2312(self, ((TR_NODE) ((TR_PROTECT_STMT) tr_2313)->stmts));
  2073.    PROG_FIND_TYPES__2312(self, ((TR_NODE) ((TR_PROTECT_STMT) tr_2313)->when_part));
  2074.    PROG_FIND_TYPES__2312(self, ((TR_NODE) ((TR_PROTECT_STMT) tr_2313)->else_part));
  2075.    PROG_FIND_TYPES__2312(self, ((TR_NODE) ((TR_PROTECT_STMT) tr_2313)->next_8)); break;
  2076.   case TR_PROTECT_WHEN_tag:
  2077.    PROG_FIND_TYPES__2312(self, ((TR_NODE) ((TR_PROTECT_WHEN) tr_2313)->tp));
  2078.    PROG_FIND_TYPES__2312(self, ((TR_NODE) ((TR_PROTECT_WHEN) tr_2313)->then_part));
  2079.    PROG_FIND_TYPES__2312(self, ((TR_NODE) ((TR_PROTECT_WHEN) tr_2313)->next_8)); break;
  2080.   case TR_RAISE_STMT_tag:
  2081.    PROG_FIND_TYPES__2312(self, ((TR_NODE) ((TR_RAISE_STMT) tr_2313)->val_16));
  2082.    PROG_FIND_TYPES__2312(self, ((TR_NODE) ((TR_RAISE_STMT) tr_2313)->next_8)); break;
  2083.   case TR_EXPR_STMT_tag:
  2084.    PROG_FIND_TYPES__2312(self, ((TR_NODE) ((TR_EXPR_STMT) tr_2313)->e));
  2085.    PROG_FIND_TYPES__2312(self, ((TR_NODE) ((TR_EXPR_STMT) tr_2313)->next_8)); break;
  2086.   case TR_SELF_EXPR_tag:
  2087.    PROG_FIND_TYPES__2312(self, ((TR_NODE) ((TR_SELF_EXPR) tr_2313)->next_8)); break;
  2088.   case TR_CALL_EXPR_tag:
  2089.    PROG_FIND_TYPES__2312(self, ((TR_NODE) ((TR_CALL_EXPR) tr_2313)->ob));
  2090.    PROG_FIND_TYPES__2312(self, ((TR_NODE) ((TR_CALL_EXPR) tr_2313)->tp));
  2091.    PROG_FIND_TYPES__2312(self, ((TR_NODE) ((TR_CALL_EXPR) tr_2313)->args_7));
  2092.    PROG_FIND_TYPES__2312(self, ((TR_NODE) ((TR_CALL_EXPR) tr_2313)->next_8)); break;
  2093.   case TR_VOID_EXPR_tag:
  2094.    PROG_FIND_TYPES__2312(self, ((TR_NODE) ((TR_VOID_EXPR) tr_2313)->next_8)); break;
  2095.   case TR_IS_VOID_EXPR_tag:
  2096.    PROG_FIND_TYPES__2312(self, ((TR_NODE) ((TR_IS_VOID_EXPR) tr_2313)->arg_51)); break;
  2097.   case TR_ARRAY_EXPR_tag:
  2098.    PROG_FIND_TYPES__2312(self, ((TR_NODE) ((TR_ARRAY_EXPR) tr_2313)->elts));
  2099.    PROG_FIND_TYPES__2312(self, ((TR_NODE) ((TR_ARRAY_EXPR) tr_2313)->next_8)); break;
  2100.   case TR_CREATE_EXPR_tag:
  2101.    PROG_FIND_TYPES__2312(self, ((TR_NODE) ((TR_CREATE_EXPR) tr_2313)->tp));
  2102.    PROG_FIND_TYPES__2312(self, ((TR_NODE) ((TR_CREATE_EXPR) tr_2313)->elts));
  2103.    PROG_FIND_TYPES__2312(self, ((TR_NODE) ((TR_CREATE_EXPR) tr_2313)->next_8)); break;
  2104.   case TR_BOUND_CREATE_EXPR_tag:
  2105.    PROG_FIND_TYPES__2312(self, ((TR_NODE) ((TR_BOUND_CREATE_EXPR) tr_2313)->call_43));
  2106.    PROG_FIND_TYPES__2312(self, ((TR_NODE) ((TR_BOUND_CREATE_EXPR) tr_2313)->ret));
  2107.    PROG_FIND_TYPES__2312(self, ((TR_NODE) ((TR_BOUND_CREATE_EXPR) tr_2313)->next_8)); break;
  2108.   case TR_UNDERSCORE_ARG_tag:
  2109.    PROG_FIND_TYPES__2312(self, ((TR_NODE) ((TR_UNDERSCORE_ARG) tr_2313)->tp));
  2110.    PROG_FIND_TYPES__2312(self, ((TR_NODE) ((TR_UNDERSCORE_ARG) tr_2313)->next_8)); break;
  2111.   case TR_AND_EXPR_tag:
  2112.    PROG_FIND_TYPES__2312(self, ((TR_NODE) ((TR_AND_EXPR) tr_2313)->e1));
  2113.    PROG_FIND_TYPES__2312(self, ((TR_NODE) ((TR_AND_EXPR) tr_2313)->e2));
  2114.    PROG_FIND_TYPES__2312(self, ((TR_NODE) ((TR_AND_EXPR) tr_2313)->next_8)); break;
  2115.   case TR_OR_EXPR_tag:
  2116.    PROG_FIND_TYPES__2312(self, ((TR_NODE) ((TR_OR_EXPR) tr_2313)->e1));
  2117.    PROG_FIND_TYPES__2312(self, ((TR_NODE) ((TR_OR_EXPR) tr_2313)->e2));
  2118.    PROG_FIND_TYPES__2312(self, ((TR_NODE) ((TR_OR_EXPR) tr_2313)->next_8)); break;
  2119.   case TR_EXCEPT_EXPR_tag:
  2120.    PROG_FIND_TYPES__2312(self, ((TR_NODE) ((TR_EXCEPT_EXPR) tr_2313)->next_8)); break;
  2121.   case TR_NEW_EXPR_tag:
  2122.    PROG_FIND_TYPES__2312(self, ((TR_NODE) ((TR_NEW_EXPR) tr_2313)->arg_51));
  2123.    PROG_FIND_TYPES__2312(self, ((TR_NODE) ((TR_NEW_EXPR) tr_2313)->next_8)); break;
  2124.   case TR_INITIAL_EXPR_tag:
  2125.    PROG_FIND_TYPES__2312(self, ((TR_NODE) ((TR_INITIAL_EXPR) tr_2313)->e));
  2126.    PROG_FIND_TYPES__2312(self, ((TR_NODE) ((TR_INITIAL_EXPR) tr_2313)->next_8)); break;
  2127.   case TR_BREAK_EXPR_tag:
  2128.    PROG_FIND_TYPES__2312(self, ((TR_NODE) ((TR_BREAK_EXPR) tr_2313)->next_8)); break;
  2129.   case TR_RESULT_EXPR_tag:
  2130.    PROG_FIND_TYPES__2312(self, ((TR_NODE) ((TR_RESULT_EXPR) tr_2313)->next_8)); break;
  2131.   case TR_BOOL_LIT_EXPR_tag:
  2132.    PROG_FIND_TYPES__2312(self, ((TR_NODE) ((TR_BOOL_LIT_EXPR) tr_2313)->next_8)); break;
  2133.   case TR_CHAR_LIT_EXPR_tag:
  2134.    PROG_FIND_TYPES__2312(self, ((TR_NODE) ((TR_CHAR_LIT_EXPR) tr_2313)->next_8)); break;
  2135.   case TR_STR_LIT_EXPR_tag:
  2136.    PROG_FIND_TYPES__2312(self, ((TR_NODE) ((TR_STR_LIT_EXPR) tr_2313)->next_8)); break;
  2137.   case TR_INT_LIT_EXPR_tag:
  2138.    PROG_FIND_TYPES__2312(self, ((TR_NODE) ((TR_INT_LIT_EXPR) tr_2313)->next_8)); break;
  2139.   case TR_FLT_LIT_EXPR_tag:
  2140.    PROG_FIND_TYPES__2312(self, ((TR_NODE) ((TR_FLT_LIT_EXPR) tr_2313)->next_8)); break;
  2141.   default: ;
  2142.    fprintf(stderr,"No applicable type in typecase ./prog.sa:480:14\n");
  2143.    exit(16);
  2144.  }
  2145. }
  2146.  
  2147.  
  2148. void PROG_FIND_TYPES__2316(PROG_FIND_TYPES self, TR_CLASS_DEF tcd) {
  2149.  TR_CLASS_ELT tb;
  2150.  TR_CLASS_ELT local0;
  2151.  tb = tcd->body;
  2152.  while (1) {
  2153.   if ((tb==((TR_CLASS_ELT) NULL))) {
  2154.    goto after_loop;
  2155.   }
  2156.   PROG_FIND_TYPES__2312(self, ((TR_NODE) tb));
  2157.   local0 = tb;
  2158.   tb = (*TR_CLASS_ELT_nex[local0->header.tag+TR_CLASS_ELT_nex_offset])(local0);
  2159.  }
  2160.  after_loop: ;
  2161. }
  2162.  
  2163.  
  2164. INT FMAPTPIMPL_key_h(FMAPTPIMPL self, TP k) {
  2165.  INT noname2318 = ((INT) 0);
  2166.  HASH local0;
  2167.  if (k==NULL) {
  2168.  } else
  2169.  switch (k->header.tag) {
  2170.   case TUPIMPL_INCLUDEI_tag:
  2171.   case TUPAM_BND_CREATE_tag:
  2172.   case TUPIFCIFC_tag:
  2173.   case TUPSTRITER_INLINE_tag:
  2174.   case TUPAM_GLOBAL_EXP_tag:
  2175.   case FSTR_tag:
  2176.   case TUPSIGSIG_tag:
  2177.   case CHAR_tag:
  2178.   case INT_tag:
  2179.   case TUPTP_CLASSFSETTP_tag:
  2180.   case TUPSTRSTR_tag:
  2181.   case TUPINTINTINT_tag:
  2182.   case STR_tag:
  2183.   case TUPSFILE_IDSFILE_ID_tag:
  2184.   case TUPAM_ITER_CALL__tag:
  2185.   case TUPTR_EXPRTR_EXPR_tag:
  2186.   case TUPTPFMAPIDENTAM_tag:
  2187.   case TUPARRAYTPTP_tag:
  2188.   case TUPAM_CONSTAM_CONST_tag:
  2189.   case TUPSTRTUPSTRSTR_tag:
  2190.   case TUPTPIMPL_tag:
  2191.   case TUPSIGAM_ROUT_DEF_tag:
  2192.   case TUPARRAYTPARRAYB_tag:
  2193.   case TUPIDENTAM_GLOBA_tag:
  2194.   case TUPAM_BND_ITER_C_tag:
  2195.   case TUPAM_LOCAL_EXPR_tag:
  2196.   case TUPSTRFSETSTR_tag:
  2197.   case TUPAM_ROUT_DEFAM_tag:
  2198.   case TUPTPTP_tag:
  2199.   case IDENT_tag:
  2200.   case TUPTPINT_tag:
  2201.   case TUPIDENTINT_tag:
  2202.   case TUPIDENTIDENT_tag:
  2203.   case TUPTP_CLASSFSETT_tag:
  2204.   case TUPCHARCHAR_tag:
  2205.   case TUPIDENTTP_tag:
  2206.   case TUPIDENTARRAYTP_tag:
  2207.   case TUPAM_EXPRAM_EXPR_tag:
  2208.   case TUPTPIFC_tag:
  2209.   case TUPTP_CLASSTP_CLASS_tag:
  2210.   case TUPAM_STMTAM_STMT_tag:
  2211.   case TUPINTINT_tag:
  2212.   case TUPOBSTR_tag:
  2213.   case TUPFLISTAM_CONST_tag:
  2214.   case TUPAM_EXPRTP_tag:
  2215.   case TUPBOOLINTIINTBOOL_tag:
  2216.    local0 = ((HASH) k);
  2217.    return (*HASH_hash_INT[local0->header.tag+HASH_hash_INT_offset])(local0); break;
  2218.   default: ;
  2219.  }
  2220.  return (c_SYS_id_OB_INT(((SYS) NULL),((OB) k)));
  2221.  if (!FMAPTPIMPL_invar(self)) {
  2222.   fprintf(stderr,"Failed invariant FMAP{$TP,IMPL}::invariant:BOOL ../Library/fmap.sa:64:11\n");
  2223.   exit(16);
  2224.  }
  2225. }
  2226.  
  2227.  
  2228. INT FMAPTPIMPL_asize_INT(FMAPTPIMPL self) {
  2229.  INT noname2319 = ((INT) 0);
  2230.   return self->asize;
  2231.  fprintf(stderr,"Last statement wasn't return ../Library/aref.sa:20:8\n");
  2232.  exit(16);
  2233. }
  2234.  
  2235.  
  2236. TUPTPIMPL FMAPTPIMPL_aget_(FMAPTPIMPL self, INT ind_2320) {
  2237.  TUPTPIMPL noname2321 = TUPTPIMPL_zero;
  2238.  BOOL local0;
  2239.  INT local1;
  2240.  INT local2;
  2241.  if ((!((self==((FMAPTPIMPL) NULL))))) {
  2242.   local1 = 0;
  2243.   local2 = (self->asize);
  2244.   local0 = INT_is_bet_INT_I(ind_2320, local1, (c_INT_minus_INT_INT_chk(local2,1)));
  2245.  } else {
  2246.   local0 = FALSE;
  2247.  }
  2248.  if (!(local0)) {
  2249.   fprintf(stderr,"Violation of precondition ../Library/aref.sa:33:7\n");
  2250.   exit(16);
  2251.  }
  2252.  if (ind_2320<0||ind_2320>=self->asize) {
  2253.   fprintf(stderr,"Index out of bounds ../Library/aref.sa:33:7\n");
  2254.   exit(16);
  2255.  }
  2256.  return self->arr_part[ind_2320];
  2257. }
  2258.  
  2259.  
  2260. BOOL FMAPTPIMPL_key_e(FMAPTPIMPL self, TP k1, TP k2) {
  2261.  BOOL noname2322 = ((BOOL) 0);
  2262.  if (k1==NULL) {
  2263.  } else
  2264.  switch (k1->header.tag) {
  2265.   default: ;
  2266.  }
  2267.  return c_SYS_ob_eq_OB_OB_BOOL(((OB) k1),((OB) k2));
  2268.  if (!FMAPTPIMPL_invar(self)) {
  2269.   fprintf(stderr,"Failed invariant FMAP{$TP,IMPL}::invariant:BOOL ../Library/fmap.sa:44:9\n");
  2270.   exit(16);
  2271.  }
  2272. }
  2273.  
  2274.  
  2275. TP FMAPTPIMPL_key_n(FMAPTPIMPL self) {
  2276.  TP noname2323;
  2277.  TP k = ((TP) NULL);
  2278.  if (k==NULL) {
  2279.  } else
  2280.  switch (k->header.tag) {
  2281.   default: ;
  2282.  }
  2283.  return ((TP) NULL);
  2284.  if (!FMAPTPIMPL_invar(self)) {
  2285.   fprintf(stderr,"Failed invariant FMAP{$TP,IMPL}::invariant:BOOL ../Library/fmap.sa:54:10\n");
  2286.   exit(16);
  2287.  }
  2288. }
  2289.  
  2290.  
  2291. IMPL FMAPTPIMPL_get_T(FMAPTPIMPL self, TP k) {
  2292.  IMPL noname2324;
  2293.  INT h = ((INT) 0);
  2294.  TP tk;
  2295.  TP tk_2325;
  2296.  INT local0;
  2297.  INT local1;
  2298.  INT local2;
  2299.  INT local3;
  2300.  if ((self==((FMAPTPIMPL) NULL))) {
  2301.   return ((IMPL) NULL);
  2302.  }
  2303.  local0 = FMAPTPIMPL_key_h(self, k);
  2304.  local1 = (self->asize);
  2305.  h = (local0&(c_INT_minus_INT_INT_chk(local1,2)));
  2306.  while (1) {
  2307.   tk = (TUPTPIMPL_blob=FMAPTPIMPL_aget_(self, h)).t1;
  2308.   if (FMAPTPIMPL_key_e(self, tk, k)) {
  2309.    return (TUPTPIMPL_blob=FMAPTPIMPL_aget_(self, h)).t2;
  2310.   }
  2311.   else {
  2312.    if (FMAPTPIMPL_key_e(self, tk, FMAPTPIMPL_key_n(self))) {
  2313.     goto after_loop;
  2314.    }
  2315.   }
  2316.   h = (c_INT_plus_INT_INT_chk(h,1));
  2317.  }
  2318.  after_loop: ;
  2319.  local2 = (self->asize);
  2320.  if ((h==(c_INT_minus_INT_INT_chk(local2,1)))) {
  2321.   h = 0;
  2322.   while (1) {
  2323.    tk_2325 = (TUPTPIMPL_blob=FMAPTPIMPL_aget_(self, h)).t1;
  2324.    if (FMAPTPIMPL_key_e(self, tk_2325, k)) {
  2325.     return (TUPTPIMPL_blob=FMAPTPIMPL_aget_(self, h)).t2;
  2326.    }
  2327.    else {
  2328.     if (FMAPTPIMPL_key_e(self, tk_2325, FMAPTPIMPL_key_n(self))) {
  2329.      goto after_loop_2327;
  2330.     }
  2331.    }
  2332.    h = (c_INT_plus_INT_INT_chk(h,1));
  2333.   }
  2334.   after_loop_2327: ;
  2335.   local3 = (self->asize);
  2336.   if (!((h!=(c_INT_minus_INT_INT_chk(local3,1))))) {
  2337.    fprintf(stderr,"Violation of assertion ../Library/fmap.sa:150:15\n");
  2338.    exit(16);
  2339.   }
  2340.  }
  2341.  return ((IMPL) NULL);
  2342.  if (!FMAPTPIMPL_invar(self)) {
  2343.   fprintf(stderr,"Failed invariant FMAP{$TP,IMPL}::invariant:BOOL ../Library/fmap.sa:136:6\n");
  2344.   exit(16);
  2345.  }
  2346. }
  2347.  
  2348.  
  2349. INT INT_hash_INT(INT self) {
  2350.  INT noname2329 = ((INT) 0);
  2351.  return self;
  2352. }
  2353.  
  2354.  
  2355. INT TUPIDENTINT_hash_INT(TUPIDENTINT self) {
  2356.  INT noname2330 = ((INT) 0);
  2357.  INT h1 = ((INT) 0);
  2358.  INT h2 = ((INT) 0);
  2359.  IDENT lt1 = IDENT_zero;
  2360.  INT lt2 = ((INT) 0);
  2361.  lt1 = self.t1;
  2362.  lt2 = self.t2;
  2363.  h1 = IDENT_hash_INT(lt1);
  2364.  h2 = INT_hash_INT(lt2);
  2365.  return (h1^(h2<<2));
  2366. }
  2367.  
  2368.  
  2369. INT FSETTUPIDENTINT_(FSETTUPIDENTINT self, TUPIDENTINT e_2331) {
  2370.  INT noname2332 = ((INT) 0);
  2371.  OB local0;
  2372.  return TUPIDENTINT_hash_INT(e_2331);
  2373.  local0 = (OB)((TUPIDENTINT_boxed) sbi_alloc(sizeof(struct TUPIDENTINT_boxed_struct), TUPIDENTINT_tag));
  2374.  ((TUPIDENTINT_boxed) local0)->value_part = e_2331;
  2375.  return (c_SYS_id_OB_INT(((SYS) NULL),local0));
  2376.  if (!FSETTUPIDENTINT__2333(self)) {
  2377.   fprintf(stderr,"Failed invariant FSET{TUP{IDENT,INT}}::invariant:BOOL ../Library/fset.sa:63:11\n");
  2378.   exit(16);
  2379.  }
  2380. }
  2381.  
  2382.  
  2383. INT FSETTUPIDENTINT__2334(FSETTUPIDENTINT self) {
  2384.  INT noname2335 = ((INT) 0);
  2385.   return self->asize;
  2386.  fprintf(stderr,"Last statement wasn't return ../Library/aref.sa:20:8\n");
  2387.  exit(16);
  2388. }
  2389.  
  2390.  
  2391. TUPIDENTINT FSETTUPIDENTINT__2336(FSETTUPIDENTINT self, INT ind_2337) {
  2392.  TUPIDENTINT noname2338 = TUPIDENTINT_zero;
  2393.  BOOL local0;
  2394.  INT local1;
  2395.  INT local2;
  2396.  if ((!((self==((FSETTUPIDENTINT) NULL))))) {
  2397.   local1 = 0;
  2398.   local2 = (self->asize);
  2399.   local0 = INT_is_bet_INT_I(ind_2337, local1, (c_INT_minus_INT_INT_chk(local2,1)));
  2400.  } else {
  2401.   local0 = FALSE;
  2402.  }
  2403.  if (!(local0)) {
  2404.   fprintf(stderr,"Violation of precondition ../Library/aref.sa:33:7\n");
  2405.   exit(16);
  2406.  }
  2407.  if (ind_2337<0||ind_2337>=self->asize) {
  2408.   fprintf(stderr,"Index out of bounds ../Library/aref.sa:33:7\n");
  2409.   exit(16);
  2410.  }
  2411.  return self->arr_part[ind_2337];
  2412.  if (!FSETTUPIDENTINT__2333(self)) {
  2413.   fprintf(stderr,"Failed invariant FSET{TUP{IDENT,INT}}::invariant:BOOL ../Library/aref.sa:33:7\n");
  2414.   exit(16);
  2415.  }
  2416. }
  2417.  
  2418.  
  2419. BOOL TUPIDENTINT_is_e(TUPIDENTINT self, TUPIDENTINT e_2339) {
  2420.  BOOL noname2340 = ((BOOL) 0);
  2421.  IDENT lt1 = IDENT_zero;
  2422.  INT lt2 = ((INT) 0);
  2423.  lt1 = self.t1;
  2424.  if ((!(IDENT_is_eq_IDEN(lt1, e_2339.t1)))) {
  2425.   return FALSE;
  2426.  }
  2427.  lt2 = self.t2;
  2428.  if ((!((lt2==e_2339.t2)))) {
  2429.   return FALSE;
  2430.  }
  2431.  return TRUE;
  2432. }
  2433.  
  2434.  
  2435. BOOL FSETTUPIDENTINT__2341(FSETTUPIDENTINT self, TUPIDENTINT e1_2342, TUPIDENTINT e2_2343) {
  2436.  BOOL noname2344 = ((BOOL) 0);
  2437.  OB local0;
  2438.  OB local1;
  2439.  return TUPIDENTINT_is_e(e1_2342, e2_2343);
  2440.  local0 = (OB)((TUPIDENTINT_boxed) sbi_alloc(sizeof(struct TUPIDENTINT_boxed_struct), TUPIDENTINT_tag));
  2441.  ((TUPIDENTINT_boxed) local0)->value_part = e1_2342;
  2442.  local1 = (OB)((TUPIDENTINT_boxed) sbi_alloc(sizeof(struct TUPIDENTINT_boxed_struct), TUPIDENTINT_tag));
  2443.  ((TUPIDENTINT_boxed) local1)->value_part = e2_2343;
  2444.  return c_SYS_ob_eq_OB_OB_BOOL(local0,local1);
  2445.  if (!FSETTUPIDENTINT__2333(self)) {
  2446.   fprintf(stderr,"Failed invariant FSET{TUP{IDENT,INT}}::invariant:BOOL ../Library/fset.sa:44:9\n");
  2447.   exit(16);
  2448.  }
  2449. }
  2450.  
  2451.  
  2452. TUPIDENTINT FSETTUPIDENTINT__2345(FSETTUPIDENTINT self) {
  2453.  TUPIDENTINT noname2346 = TUPIDENTINT_zero;
  2454.  TUPIDENTINT t_2347 = TUPIDENTINT_zero;
  2455.  return TUPIDENTINT_zero;
  2456.  if (!FSETTUPIDENTINT__2333(self)) {
  2457.   fprintf(stderr,"Failed invariant FSET{TUP{IDENT,INT}}::invariant:BOOL ../Library/fset.sa:53:10\n");
  2458.   exit(16);
  2459.  }
  2460. }
  2461.  
  2462.  
  2463. BOOL FSETTUPIDENTINT__2348(FSETTUPIDENTINT self, TUPIDENTINT e_2349) {
  2464.  BOOL noname2350 = ((BOOL) 0);
  2465.  INT h = ((INT) 0);
  2466.  TUPIDENTINT te = TUPIDENTINT_zero;
  2467.  TUPIDENTINT te_2351 = TUPIDENTINT_zero;
  2468.  INT local0;
  2469.  INT local1;
  2470.  INT local2;
  2471.  INT local3;
  2472.  if ((self==((FSETTUPIDENTINT) NULL))) {
  2473.   return FALSE;
  2474.  }
  2475.  local0 = FSETTUPIDENTINT_(self, e_2349);
  2476.  local1 = (self->asize);
  2477.  h = (local0&(c_INT_minus_INT_INT_chk(local1,2)));
  2478.  while (1) {
  2479.   te = FSETTUPIDENTINT__2336(self, h);
  2480.   if (FSETTUPIDENTINT__2341(self, te, e_2349)) {
  2481.    return TRUE;
  2482.   }
  2483.   else {
  2484.    if (FSETTUPIDENTINT__2341(self, te, FSETTUPIDENTINT__2345(self))) {
  2485.     goto after_loop;
  2486.    }
  2487.   }
  2488.   h = (c_INT_plus_INT_INT_chk(h,1));
  2489.  }
  2490.  after_loop: ;
  2491.  local2 = (self->asize);
  2492.  if ((h==(c_INT_minus_INT_INT_chk(local2,1)))) {
  2493.   h = 0;
  2494.   while (1) {
  2495.    te_2351 = FSETTUPIDENTINT__2336(self, h);
  2496.    if (FSETTUPIDENTINT__2341(self, te_2351, e_2349)) {
  2497.     return TRUE;
  2498.    }
  2499.    else {
  2500.     if (FSETTUPIDENTINT__2341(self, te_2351, FSETTUPIDENTINT__2345(self))) {
  2501.      goto after_loop_2353;
  2502.     }
  2503.    }
  2504.    h = (c_INT_plus_INT_INT_chk(h,1));
  2505.   }
  2506.   after_loop_2353: ;
  2507.   local3 = (self->asize);
  2508.   if (!((h!=(c_INT_minus_INT_INT_chk(local3,1))))) {
  2509.    fprintf(stderr,"Violation of assertion ../Library/fset.sa:127:15\n");
  2510.    exit(16);
  2511.   }
  2512.  }
  2513.  return FALSE;
  2514.  if (!FSETTUPIDENTINT__2333(self)) {
  2515.   fprintf(stderr,"Failed invariant FSET{TUP{IDENT,INT}}::invariant:BOOL ../Library/fset.sa:112:7\n");
  2516.   exit(16);
  2517.  }
  2518. }
  2519.  
  2520.  
  2521. STR IMPL_TBL_tup_str(IMPL_TBL self, TUPIDENTINT t_2355) {
  2522.  STR noname2356;
  2523.  STR r_2357;
  2524.  INT noname2358 = ((INT) 0);
  2525.  STR noname2359;
  2526.  INT local0;
  2527.  INT noname2362t;
  2528.  STR local1;
  2529.  r_2357 = t_2355.t1.str_4;
  2530.  if ((t_2355.t2==0)) {
  2531.   return r_2357;
  2532.  }
  2533.  r_2357 = STR_plus_STR_STR(r_2357, ((STR) &name_2360));
  2534.  {
  2535.   BOOL noname2362 = TRUE;
  2536.   struct STR_separate_STR_STR_frame_struct temp2361_0;
  2537.   STR_separate_STR_STR_frame 
  2538.   noname2363 = &temp2361_0;
  2539.   noname2363->state = 0;
  2540.   while (1) {
  2541.    if (noname2362) {
  2542.     noname2362 = FALSE;
  2543.     noname2358 = t_2355.t2;
  2544.     local0 = noname2358;
  2545.     noname2362t = local0;
  2546.    } else {
  2547.     noname2362t--;
  2548.    }
  2549.    if (noname2362t<=0) goto after_loop;
  2550.    0 /* no return value from inlined iter */;
  2551.    if (noname2363->state == 0) {
  2552.     noname2359 = ((STR) &name_2364);
  2553.     noname2363->arg0 = noname2359;
  2554.    }
  2555.    noname2363->arg1 = ((STR) &S_);
  2556.    local1 = STR_separate_STR_STR(noname2363);
  2557.    if (noname2363->state == -1) goto after_loop;
  2558.    r_2357 = STR_plus_STR_STR(r_2357, local1);
  2559.   }
  2560.  }
  2561.  after_loop: ;
  2562.  r_2357 = STR_plus_STR_STR(r_2357, ((STR) &name_2365));
  2563.  return r_2357;
  2564. }
  2565.  
  2566.  
  2567. void IMPL_TBL_cycle_err(IMPL_TBL self) {
  2568.  STR s_2366;
  2569.  FSETTUPIDENTINT noname2367;
  2570.  STR noname2368;
  2571.  STR local0;
  2572.  TUPIDENTINT local1;
  2573.  s_2366 = ((STR) &Cycledetectedini);
  2574.  {
  2575.   struct FSETTUPIDENTINT__2370_frame_struct temp2369_0;
  2576.   FSETTUPIDENTINT__2370_frame 
  2577.   noname2371 = &temp2369_0;
  2578.   struct STR_separate_STR_STR_frame_struct temp2369_1;
  2579.   STR_separate_STR_STR_frame 
  2580.   noname2372 = &temp2369_1;
  2581.   noname2371->state = 0;
  2582.   noname2372->state = 0;
  2583.   while (1) {
  2584.    if (noname2372->state == 0) {
  2585.     noname2368 = ((STR) &name_2373);
  2586.     noname2372->arg0 = noname2368;
  2587.    }
  2588.    if (noname2371->state == 0) {
  2589.     noname2367 = self->cur;
  2590.     noname2371->arg0 = noname2367;
  2591.    }
  2592.    local1 = FSETTUPIDENTINT__2370(noname2371);
  2593.    if (noname2371->state == -1) goto after_loop;
  2594.    noname2372->arg1 = IMPL_TBL_tup_str(self, local1);
  2595.    local0 = STR_separate_STR_STR(noname2372);
  2596.    if (noname2372->state == -1) goto after_loop;
  2597.    s_2366 = STR_plus_STR_STR(s_2366, local0);
  2598.   }
  2599.  }
  2600.  after_loop: ;
  2601.  PROG_err_STR(self->prog, s_2366);
  2602. }
  2603.  
  2604.  
  2605. FSETTUPIDENTINT FSETTUPIDENTINT__2374(FSETTUPIDENTINT self) {
  2606.  FSETTUPIDENTINT noname2375;
  2607.  FSETTUPIDENTINT r_2376;
  2608.  FSETTUPIDENTINT noname2377;
  2609.  INT local0;
  2610.  if ((self==((FSETTUPIDENTINT) NULL))) {
  2611.   return ((FSETTUPIDENTINT) NULL);
  2612.  }
  2613.  local0 = (self->asize);
  2614.  if ((local0<=17)) {
  2615.   r_2376 = self;
  2616.   r_2376->hsize = 0;
  2617.   {
  2618.    struct FSETTUPIDENTINT__2379_frame_struct temp2378_0;
  2619.    FSETTUPIDENTINT__2379_frame 
  2620.    noname2380 = &temp2378_0;
  2621.    noname2380->state = 0;
  2622.    while (1) {
  2623.     if (noname2380->state == 0) {
  2624.      noname2377 = r_2376;
  2625.      noname2380->arg0 = noname2377;
  2626.     }
  2627.     noname2380->arg1 = FSETTUPIDENTINT__2345(self);
  2628.     FSETTUPIDENTINT__2379(noname2380);
  2629.     if (noname2380->state == -1) goto after_loop;
  2630.     0 /* No return value from iter call */;
  2631.    }
  2632.   }
  2633.   after_loop: ;
  2634.   return r_2376;
  2635.  }
  2636.  return ((FSETTUPIDENTINT) NULL);
  2637.  if (!FSETTUPIDENTINT__2333(self)) {
  2638.   fprintf(stderr,"Failed invariant FSET{TUP{IDENT,INT}}::invariant:BOOL ../Library/fset.sa:216:8\n");
  2639.   exit(16);
  2640.  }
  2641. }
  2642.  
  2643.  
  2644. FSETTUPIDENTINT FSETTUPIDENTINT__2381(FSETTUPIDENTINT self, INT n_2382) {
  2645.  FSETTUPIDENTINT noname2383;
  2646.  FSETTUPIDENTINT r_2384;
  2647.  FSETTUPIDENTINT noname2385;
  2648.  FSETTUPIDENTINT local0;
  2649.  local0 = ((FSETTUPIDENTINT) sbi_arr_alloc(sizeof(struct FSETTUPIDENTINT_struct), FSETTUPIDENTINT_tag, sizeof(TUPIDENTINT) , n_2382));
  2650.  local0->asize = n_2382;
  2651.  r_2384 = local0;
  2652.  if ((!(((TUPIDENTINT_blob=FSETTUPIDENTINT__2345(self)).t1.str_4==(STR)0)&&((TUPIDENTINT_blob=FSETTUPIDENTINT__2345(self)).t2==(INT)0)))) {
  2653.   {
  2654.    struct FSETTUPIDENTINT__2379_frame_struct temp2386_0;
  2655.    FSETTUPIDENTINT__2379_frame 
  2656.    noname2387 = &temp2386_0;
  2657.    noname2387->state = 0;
  2658.    while (1) {
  2659.     if (noname2387->state == 0) {
  2660.      noname2385 = r_2384;
  2661.      noname2387->arg0 = noname2385;
  2662.     }
  2663.     noname2387->arg1 = FSETTUPIDENTINT__2345(self);
  2664.     FSETTUPIDENTINT__2379(noname2387);
  2665.     if (noname2387->state == -1) goto after_loop;
  2666.     0 /* No return value from iter call */;
  2667.    }
  2668.   }
  2669.   after_loop: ;
  2670.  }
  2671.  return r_2384;
  2672. }
  2673.  
  2674.  
  2675. FSETTUPIDENTINT FSETTUPIDENTINT__2388(FSETTUPIDENTINT self) {
  2676.  FSETTUPIDENTINT noname2389;
  2677.  FSETTUPIDENTINT r_2390;
  2678.  FSETTUPIDENTINT noname2391;
  2679.  INT local0;
  2680.  INT local1;
  2681.  INT local2;
  2682.  TUPIDENTINT local3;
  2683.  if (!((!((self==((FSETTUPIDENTINT) NULL)))))) {
  2684.   fprintf(stderr,"Violation of precondition ../Library/fset.sa:150:22\n");
  2685.   exit(16);
  2686.  }
  2687.  local0 = (self->asize);
  2688.  local1 = (c_INT_minus_INT_INT_chk(local0,1));
  2689.  local2 = (c_INT_times_INT_INT_chk(local1,2));
  2690.  r_2390 = FSETTUPIDENTINT__2381(self, (c_INT_plus_INT_INT_chk(local2,1)));
  2691.  {
  2692.   struct FSETTUPIDENTINT__2370_frame_struct temp2392_0;
  2693.   FSETTUPIDENTINT__2370_frame 
  2694.   noname2393 = &temp2392_0;
  2695.   noname2393->state = 0;
  2696.   while (1) {
  2697.    if (noname2393->state == 0) {
  2698.     noname2391 = self;
  2699.     noname2393->arg0 = noname2391;
  2700.    }
  2701.    local3 = FSETTUPIDENTINT__2370(noname2393);
  2702.    if (noname2393->state == -1) goto after_loop;
  2703.    r_2390 = FSETTUPIDENTINT__2394(r_2390, local3);
  2704.   }
  2705.  }
  2706.  after_loop: ;
  2707.  return r_2390;
  2708. }
  2709.  
  2710.  
  2711. void FSETTUPIDENTINT__2395(FSETTUPIDENTINT self, INT ind_2396, TUPIDENTINT val_2397) {
  2712.  BOOL local0;
  2713.  INT local1;
  2714.  INT local2;
  2715.  if ((!((self==((FSETTUPIDENTINT) NULL))))) {
  2716.   local1 = 0;
  2717.   local2 = (self->asize);
  2718.   local0 = INT_is_bet_INT_I(ind_2396, local1, (c_INT_minus_INT_INT_chk(local2,1)));
  2719.  } else {
  2720.   local0 = FALSE;
  2721.  }
  2722.  if (!(local0)) {
  2723.   fprintf(stderr,"Violation of precondition ../Library/aref.sa:38:7\n");
  2724.   exit(16);
  2725.  }
  2726.  if (ind_2396<0||ind_2396>=self->asize) {
  2727.   fprintf(stderr,"Index out of bounds ../Library/aref.sa:38:7\n");
  2728.   exit(16);
  2729.  }
  2730.  self->arr_part[ind_2396] = val_2397;
  2731.  if (!FSETTUPIDENTINT__2333(self)) {
  2732.   fprintf(stderr,"Failed invariant FSET{TUP{IDENT,INT}}::invariant:BOOL ../Library/aref.sa:38:7\n");
  2733.   exit(16);
  2734.  }
  2735. }
  2736.  
  2737.  
  2738. FSETTUPIDENTINT FSETTUPIDENTINT__2394(FSETTUPIDENTINT self, TUPIDENTINT e_2398) {
  2739.  FSETTUPIDENTINT noname2399;
  2740.  FSETTUPIDENTINT r_2400;
  2741.  INT asz_2401 = ((INT) 0);
  2742.  INT h = ((INT) 0);
  2743.  TUPIDENTINT te = TUPIDENTINT_zero;
  2744.  TUPIDENTINT te_2402 = TUPIDENTINT_zero;
  2745.  INT local0;
  2746.  INT local1;
  2747.  INT local2;
  2748.  r_2400 = self;
  2749.  if ((r_2400==((FSETTUPIDENTINT) NULL))) {
  2750.   r_2400 = FSETTUPIDENTINT__2381(self, 5);
  2751.  }
  2752.  else {
  2753.   local0 = (c_INT_plus_INT_INT_chk(self->hsize,1));
  2754.   local1 = (c_INT_times_INT_INT_chk(local0,2));
  2755.   if ((local1>(self->asize))) {
  2756.    r_2400 = FSETTUPIDENTINT__2388(self);
  2757.   }
  2758.  }
  2759.  asz_2401 = (r_2400->asize);
  2760.  local2 = FSETTUPIDENTINT_(r_2400, e_2398);
  2761.  h = (local2&(c_INT_minus_INT_INT_chk(asz_2401,2)));
  2762.  while (1) {
  2763.   te = FSETTUPIDENTINT__2336(r_2400, h);
  2764.   if (FSETTUPIDENTINT__2341(self, te, FSETTUPIDENTINT__2345(self))) {
  2765.    goto after_loop;
  2766.   }
  2767.   else {
  2768.    if (FSETTUPIDENTINT__2341(self, te, e_2398)) {
  2769.     FSETTUPIDENTINT__2395(r_2400, h, e_2398);
  2770.     return r_2400;
  2771.    }
  2772.   }
  2773.   h = (c_INT_plus_INT_INT_chk(h,1));
  2774.  }
  2775.  after_loop: ;
  2776.  if ((h==(c_INT_minus_INT_INT_chk(asz_2401,1)))) {
  2777.   h = 0;
  2778.   while (1) {
  2779.    te_2402 = FSETTUPIDENTINT__2336(r_2400, h);
  2780.    if (FSETTUPIDENTINT__2341(self, te_2402, FSETTUPIDENTINT__2345(self))) {
  2781.     goto after_loop_2404;
  2782.    }
  2783.    else {
  2784.     if (FSETTUPIDENTINT__2341(self, te_2402, e_2398)) {
  2785.      FSETTUPIDENTINT__2395(r_2400, h, e_2398);
  2786.      return r_2400;
  2787.     }
  2788.    }
  2789.    h = (c_INT_plus_INT_INT_chk(h,1));
  2790.   }
  2791.   after_loop_2404: ;
  2792.   if (!((h!=(c_INT_minus_INT_INT_chk(asz_2401,1))))) {
  2793.    fprintf(stderr,"Violation of assertion ../Library/fset.sa:177:15\n");
  2794.    exit(16);
  2795.   }
  2796.  }
  2797.  FSETTUPIDENTINT__2395(r_2400, h, e_2398);
  2798.  r_2400->hsize = (c_INT_plus_INT_INT_chk(r_2400->hsize,1));
  2799.  return r_2400;
  2800.  if (!FSETTUPIDENTINT__2333(self)) {
  2801.   fprintf(stderr,"Failed invariant FSET{TUP{IDENT,INT}}::invariant:BOOL ../Library/fset.sa:158:9\n");
  2802.   exit(16);
  2803.  }
  2804. }
  2805.  
  2806.  
  2807. PROG IMPL_prog_PROG(IMPL self) {
  2808.  PROG noname2406;
  2809.  TP local0;
  2810.  local0 = self->tp;
  2811.  return (*TP_prog_PROG[local0->header.tag+TP_prog_PROG_offset])(local0);
  2812. }
  2813.  
  2814.  
  2815. INT PROG_tp_kind_TP_INT(PROG self, TP t_2407) {
  2816.  INT noname2408 = ((INT) 0);
  2817.  TR_CLASS_DEF tr_2409;
  2818.  PROG_PARSE local0;
  2819.  IDENT local1;
  2820.  if (t_2407==NULL) {
  2821.  } else
  2822.  switch (t_2407->header.tag) {
  2823.   case TP_CLASS_tag:
  2824.    local0 = self->prog_parse;
  2825.    local1 = ((TP_CLASS) t_2407)->name_19;
  2826.    tr_2409 = PROG_PARSE_tree_(local0, local1, ARRAYTP_size_INT(((TP_CLASS) t_2407)->params));
  2827.    if ((tr_2409==((TR_CLASS_DEF) NULL))) {
  2828.     return shared_TP_KIND_m;
  2829.    }
  2830.    return tr_2409->kind; break;
  2831.   case TP_ROUT_tag:
  2832.    return shared_TP_KIND_r; break;
  2833.   case TP_ITER_tag:
  2834.    return shared_TP_KIND_i; break;
  2835.   default: ;
  2836.    fprintf(stderr,"No applicable type in typecase ./prog.sa:163:14\n");
  2837.    exit(16);
  2838.  }
  2839.  return 0;
  2840. }
  2841.  
  2842.  
  2843. PROG IMPL_CREATE_prog(IMPL_CREATE self) {
  2844.  PROG noname2410;
  2845.  return self->tp->prog;
  2846. }
  2847.  
  2848.  
  2849. PROG SIG_prog_PROG(SIG self) {
  2850.  PROG noname2411;
  2851.  TP local0;
  2852.  local0 = self->tp;
  2853.  return (*TP_prog_PROG[local0->header.tag+TP_prog_PROG_offset])(local0);
  2854. }
  2855.  
  2856.  
  2857. STR SIG_str_STR(SIG self) {
  2858.  STR noname2412;
  2859.  FSTR s_2413;
  2860.  ARRAYTP noname2414;
  2861.  STR noname2415;
  2862.  ARRAYBOOL noname2416;
  2863.  FSTR local0;
  2864.  TP local1;
  2865.  FSTR local2;
  2866.  FSTR local3;
  2867.  STR local4;
  2868.  TP local5;
  2869.  TP local6;
  2870.  BOOL local7;
  2871.  BOOL local8;
  2872.  FSTR local9;
  2873.  TP local10;
  2874.  if ((self==((SIG) NULL))) {
  2875.   return ((STR) &void_2417);
  2876.  }
  2877.  if ((!((self->string_47==((STR) NULL))))) {
  2878.   return self->string_47;
  2879.  }
  2880.  local0 = FSTR_create_FSTR(((FSTR) NULL));
  2881.  local1 = self->tp;
  2882.  local2 = FSTR_plus_STR_FSTR(local0, (*TP_str_STR[local1->header.tag+TP_str_STR_offset])(local1));
  2883.  local3 = FSTR_plus_STR_FSTR(local2, ((STR) &name_2418));
  2884.  s_2413 = FSTR_plus_STR_FSTR(local3, self->name_19.str_4);
  2885.  if ((!((self->args_7==((ARRAYTP) NULL))))) {
  2886.   s_2413 = FSTR_plus_CHAR_FSTR(s_2413, '(');
  2887.   {
  2888.    struct ARRAYTP_elt_TP_frame_struct temp2419_0;
  2889.    ARRAYTP_elt_TP_frame 
  2890.    noname2420 = &temp2419_0;
  2891.    struct STR_separate_STR_STR_frame_struct temp2419_1;
  2892.    STR_separate_STR_STR_frame 
  2893.    noname2421 = &temp2419_1;
  2894.    struct ARRAYBOOL_elt_BOOL_frame_struct temp2419_2;
  2895.    ARRAYBOOL_elt_BOOL_frame 
  2896.    noname2422 = &temp2419_2;
  2897.    noname2420->state = 0;
  2898.    noname2421->state = 0;
  2899.    noname2422->state = 0;
  2900.    while (1) {
  2901.     if (noname2421->state == 0) {
  2902.      noname2415 = ((STR) &name_2423);
  2903.      noname2421->arg0 = noname2415;
  2904.     }
  2905.     if (noname2420->state == 0) {
  2906.      noname2414 = self->args_7;
  2907.      noname2420->arg0 = noname2414;
  2908.     }
  2909.     local5 = ARRAYTP_elt_TP(noname2420);
  2910.     if (noname2420->state == -1) goto after_loop;
  2911.     local6 = local5;
  2912.     noname2421->arg1 = (*TP_str_STR[local6->header.tag+TP_str_STR_offset])(local6);
  2913.     local4 = STR_separate_STR_STR(noname2421);
  2914.     if (noname2421->state == -1) goto after_loop;
  2915.     s_2413 = FSTR_plus_STR_FSTR(s_2413, local4);
  2916.     if ((!((self->hot==((ARRAYBOOL) NULL))))) {
  2917.      if (noname2422->state == 0) {
  2918.       noname2416 = self->hot;
  2919.       noname2422->arg0 = noname2416;
  2920.      }
  2921.      local8 = ARRAYBOOL_elt_BOOL(noname2422);
  2922.      if (noname2422->state == -1) goto after_loop;
  2923.      local7 = local8;
  2924.     } else {
  2925.      local7 = FALSE;
  2926.     }
  2927.     if (local7) {
  2928.      s_2413 = FSTR_plus_CHAR_FSTR(s_2413, '!');
  2929.     }
  2930.    }
  2931.   }
  2932.   after_loop: ;
  2933.   s_2413 = FSTR_plus_CHAR_FSTR(s_2413, ')');
  2934.  }
  2935.  if ((!((self->ret==((TP) NULL))))) {
  2936.   local9 = FSTR_plus_CHAR_FSTR(s_2413, ':');
  2937.   local10 = self->ret;
  2938.   s_2413 = FSTR_plus_STR_FSTR(local9, (*TP_str_STR[local10->header.tag+TP_str_STR_offset])(local10));
  2939.  }
  2940.  self->string_47 = FSTR_str_STR(s_2413);
  2941.  return FSTR_str_STR(s_2413);
  2942. }
  2943.  
  2944.  
  2945. BOOL FMAPSTRTUPSTRSTR_2424(FMAPSTRTUPSTRSTR self, STR k) {
  2946.  BOOL noname2425 = ((BOOL) 0);
  2947.  INT h = ((INT) 0);
  2948.  STR tk;
  2949.  STR tk_2426;
  2950.  INT local0;
  2951.  INT local1;
  2952.  INT local2;
  2953.  INT local3;
  2954.  if ((self==((FMAPSTRTUPSTRSTR) NULL))) {
  2955.   return FALSE;
  2956.  }
  2957.  local0 = FMAPSTRTUPSTRSTR_1082(self, k);
  2958.  local1 = (self->asize);
  2959.  h = (local0&(c_INT_minus_INT_INT_chk(local1,2)));
  2960.  while (1) {
  2961.   tk = (TUPSTRTUPSTRSTR_blob=FMAPSTRTUPSTRSTR_1084(self, h)).t1;
  2962.   if (FMAPSTRTUPSTRSTR_1087(self, tk, k)) {
  2963.    return TRUE;
  2964.   }
  2965.   else {
  2966.    if (FMAPSTRTUPSTRSTR_1087(self, tk, FMAPSTRTUPSTRSTR_1055(self))) {
  2967.     goto after_loop;
  2968.    }
  2969.   }
  2970.   h = (c_INT_plus_INT_INT_chk(h,1));
  2971.  }
  2972.  after_loop: ;
  2973.  local2 = (self->asize);
  2974.  if ((h==(c_INT_minus_INT_INT_chk(local2,1)))) {
  2975.   h = 0;
  2976.   while (1) {
  2977.    tk_2426 = (TUPSTRTUPSTRSTR_blob=FMAPSTRTUPSTRSTR_1084(self, h)).t1;
  2978.    if (FMAPSTRTUPSTRSTR_1087(self, tk_2426, k)) {
  2979.     return TRUE;
  2980.    }
  2981.    else {
  2982.     if (FMAPSTRTUPSTRSTR_1087(self, tk_2426, FMAPSTRTUPSTRSTR_1055(self))) {
  2983.      goto after_loop_2428;
  2984.     }
  2985.    }
  2986.    h = (c_INT_plus_INT_INT_chk(h,1));
  2987.   }
  2988.   after_loop_2428: ;
  2989.   local3 = (self->asize);
  2990.   if (!((h!=(c_INT_minus_INT_INT_chk(local3,1))))) {
  2991.    fprintf(stderr,"Violation of assertion ../Library/fmap.sa:133:15\n");
  2992.    exit(16);
  2993.   }
  2994.  }
  2995.  return FALSE;
  2996.  if (!FMAPSTRTUPSTRSTR_1035(self)) {
  2997.   fprintf(stderr,"Failed invariant FMAP{STR,TUP{STR,STR}}::invariant:BOOL ../Library/fmap.sa:119:7\n");
  2998.   exit(16);
  2999.  }
  3000. }
  3001.  
  3002.  
  3003. BOOL BE_is_built_in_r(BE self, SIG s_2430) {
  3004.  BOOL noname2431 = ((BOOL) 0);
  3005.  FMAPSTRTUPSTRSTR local0;
  3006.  local0 = self->built_in_routines;
  3007.  return FMAPSTRTUPSTRSTR_2424(local0, SIG_str_STR(s_2430));
  3008. }
  3009.  
  3010.  
  3011. void SIG_do_is_builtin(SIG self) {
  3012.  self->is_builtin = BE_is_built_in_r(SIG_prog_PROG(self)->back_end, self);
  3013. }
  3014.  
  3015.  
  3016. SIG SIG_const_reader(SIG self, TR_CONST_DEF tr_2432, IDENT nm_2433, TP_CONTEXT con_2434) {
  3017.  SIG noname2435;
  3018.  SIG r_2436;
  3019.  BOOL local0;
  3020.  BOOL local1;
  3021.  SIG local2;
  3022.  if ((!((tr_2432==((TR_CONST_DEF) NULL))))) {
  3023.   local1 = (!((nm_2433.str_4==(STR)0)));
  3024.  } else {
  3025.   local1 = FALSE;
  3026.  }
  3027.  if (local1) {
  3028.   local0 = (!((con_2434==((TP_CONTEXT) NULL))));
  3029.  } else {
  3030.   local0 = FALSE;
  3031.  }
  3032.  if (!(local0)) {
  3033.   fprintf(stderr,"Violation of precondition ./sig.sa:207:19\n");
  3034.   exit(16);
  3035.  }
  3036.  local2 = ((SIG) sbi_alloc(sizeof(struct SIG_struct), SIG_tag));
  3037.  r_2436 = local2;
  3038.  r_2436->tp = ((TP) con_2434->same_34);
  3039.  r_2436->name_19 = nm_2433;
  3040.  if ((!((tr_2432->tp==((TR_TYPE_SPEC) NULL))))) {
  3041.   r_2436->ret = TP_CONTEXT_tp_of(con_2434, tr_2432->tp);
  3042.  }
  3043.  else {
  3044.   r_2436->ret = ((TP) con_2434->prog->tp_builtin->int_1);
  3045.  }
  3046.  SIG_do_is_builtin(r_2436);
  3047.  return r_2436;
  3048. }
  3049.  
  3050.  
  3051. SIG SIG_shared_reade(SIG self, TR_SHARED_DEF tr_2437, IDENT nm_2438, TP_CONTEXT con_2439) {
  3052.  SIG noname2440;
  3053.  SIG r_2441;
  3054.  BOOL local0;
  3055.  BOOL local1;
  3056.  SIG local2;
  3057.  if ((!((tr_2437==((TR_SHARED_DEF) NULL))))) {
  3058.   local1 = (!((nm_2438.str_4==(STR)0)));
  3059.  } else {
  3060.   local1 = FALSE;
  3061.  }
  3062.  if (local1) {
  3063.   local0 = (!((con_2439==((TP_CONTEXT) NULL))));
  3064.  } else {
  3065.   local0 = FALSE;
  3066.  }
  3067.  if (!(local0)) {
  3068.   fprintf(stderr,"Violation of precondition ./sig.sa:219:20\n");
  3069.   exit(16);
  3070.  }
  3071.  local2 = ((SIG) sbi_alloc(sizeof(struct SIG_struct), SIG_tag));
  3072.  r_2441 = local2;
  3073.  r_2441->tp = ((TP) con_2439->same_34);
  3074.  r_2441->name_19 = nm_2438;
  3075.  r_2441->ret = TP_CONTEXT_tp_of(con_2439, tr_2437->tp);
  3076.  SIG_do_is_builtin(r_2441);
  3077.  return r_2441;
  3078. }
  3079.  
  3080.  
  3081. SIG SIG_attr_reader_(SIG self, TR_ATTR_DEF tr_2442, IDENT nm_2443, TP_CONTEXT con_2444) {
  3082.  SIG noname2445;
  3083.  SIG r_2446;
  3084.  BOOL local0;
  3085.  BOOL local1;
  3086.  SIG local2;
  3087.  if ((!((tr_2442==((TR_ATTR_DEF) NULL))))) {
  3088.   local1 = (!((nm_2443.str_4==(STR)0)));
  3089.  } else {
  3090.   local1 = FALSE;
  3091.  }
  3092.  if (local1) {
  3093.   local0 = (!((con_2444==((TP_CONTEXT) NULL))));
  3094.  } else {
  3095.   local0 = FALSE;
  3096.  }
  3097.  if (!(local0)) {
  3098.   fprintf(stderr,"Violation of precondition ./sig.sa:236:18\n");
  3099.   exit(16);
  3100.  }
  3101.  local2 = ((SIG) sbi_alloc(sizeof(struct SIG_struct), SIG_tag));
  3102.  r_2446 = local2;
  3103.  r_2446->tp = ((TP) con_2444->same_34);
  3104.  r_2446->name_19 = nm_2443;
  3105.  r_2446->ret = TP_CONTEXT_tp_of(con_2444, tr_2442->tp);
  3106.  SIG_do_is_builtin(r_2446);
  3107.  return r_2446;
  3108. }
  3109.  
  3110.  
  3111. INT TR_ARG_DEC_size_INT(TR_ARG_DEC self) {
  3112.  INT noname2447 = ((INT) 0);
  3113.  INT r_2448 = ((INT) 0);
  3114.  TR_ARG_DEC n_2449;
  3115.  if ((self==((TR_ARG_DEC) NULL))) {
  3116.   return 0;
  3117.  }
  3118.  r_2448 = 1;
  3119.  n_2449 = self->next_8;
  3120.  while (1) {
  3121.   if ((n_2449==((TR_ARG_DEC) NULL))) {
  3122.    goto after_loop;
  3123.   }
  3124.   r_2448 = (c_INT_plus_INT_INT_chk(r_2448,1));
  3125.   n_2449 = n_2449->next_8;
  3126.  }
  3127.  after_loop: ;
  3128.  return r_2448;
  3129. }
  3130.  
  3131.  
  3132. SIG SIG_rout_sig_TR_(SIG self, TR_ROUT_DEF tr_2451, IDENT nm_2452, TP_CONTEXT con_2453) {
  3133.  SIG noname2454;
  3134.  SIG r_2455;
  3135.  INT na = ((INT) 0);
  3136.  TR_ARG_DEC ad;
  3137.  ARRAYTP noname2456;
  3138.  BOOL dohot = ((BOOL) 0);
  3139.  TR_ARG_DEC tae;
  3140.  TR_ARG_DEC ad_2457;
  3141.  ARRAYBOOL noname2458;
  3142.  BOOL local0;
  3143.  BOOL local1;
  3144.  SIG local2;
  3145.  if ((!((tr_2451==((TR_ROUT_DEF) NULL))))) {
  3146.   local1 = (!((nm_2452.str_4==(STR)0)));
  3147.  } else {
  3148.   local1 = FALSE;
  3149.  }
  3150.  if (local1) {
  3151.   local0 = (!((con_2453==((TP_CONTEXT) NULL))));
  3152.  } else {
  3153.   local0 = FALSE;
  3154.  }
  3155.  if (!(local0)) {
  3156.   fprintf(stderr,"Violation of precondition ./sig.sa:186:11\n");
  3157.   exit(16);
  3158.  }
  3159.  local2 = ((SIG) sbi_alloc(sizeof(struct SIG_struct), SIG_tag));
  3160.  r_2455 = local2;
  3161.  r_2455->tp = ((TP) con_2453->same_34);
  3162.  r_2455->name_19 = nm_2452;
  3163.  na = TR_ARG_DEC_size_INT(tr_2451->args_dec);
  3164.  if ((na!=0)) {
  3165.   r_2455->args_7 = ARRAYTP_create_I(((ARRAYTP) NULL), na);
  3166.   ad = tr_2451->args_dec;
  3167.   {
  3168.    struct ARRAYTP_set_TP_frame_struct temp2459_0;
  3169.    ARRAYTP_set_TP_frame 
  3170.    noname2460 = &temp2459_0;
  3171.    noname2460->state = 0;
  3172.    while (1) {
  3173.     if ((ad==((TR_ARG_DEC) NULL))) {
  3174.      goto after_loop;
  3175.     }
  3176.     if (noname2460->state == 0) {
  3177.      noname2456 = r_2455->args_7;
  3178.      noname2460->arg0 = noname2456;
  3179.     }
  3180.     noname2460->arg1 = TP_CONTEXT_tp_of(con_2453, ad->tp);
  3181.     ARRAYTP_set_TP(noname2460);
  3182.     if (noname2460->state == -1) goto after_loop;
  3183.     0 /* No return value from iter call */;
  3184.     ad = ad->next_8;
  3185.    }
  3186.   }
  3187.   after_loop: ;
  3188.  }
  3189.  tae = tr_2451->args_dec;
  3190.  while (1) {
  3191.   if ((tae==((TR_ARG_DEC) NULL))) {
  3192.    goto after_loop_2461;
  3193.   }
  3194.   if (tae->is_hot) {
  3195.    dohot = TRUE;
  3196.   }
  3197.   tae = tae->next_8;
  3198.  }
  3199.  after_loop_2461: ;
  3200.  if (dohot) {
  3201.   r_2455->hot = ARRAYBOOL_create(((ARRAYBOOL) NULL), na);
  3202.   ad_2457 = tr_2451->args_dec;
  3203.   {
  3204.    struct ARRAYBOOL_set_BOOL_frame_struct temp2464_0;
  3205.    ARRAYBOOL_set_BOOL_frame 
  3206.    noname2465 = &temp2464_0;
  3207.    noname2465->state = 0;
  3208.    while (1) {
  3209.     if ((ad_2457==((TR_ARG_DEC) NULL))) {
  3210.      goto after_loop_2463;
  3211.     }
  3212.     if (noname2465->state == 0) {
  3213.      noname2458 = r_2455->hot;
  3214.      noname2465->arg0 = noname2458;
  3215.     }
  3216.     noname2465->arg1 = ad_2457->is_hot;
  3217.     ARRAYBOOL_set_BOOL(noname2465);
  3218.     if (noname2465->state == -1) goto after_loop_2463;
  3219.     0 /* No return value from iter call */;
  3220.     ad_2457 = ad_2457->next_8;
  3221.    }
  3222.   }
  3223.   after_loop_2463: ;
  3224.  }
  3225.  r_2455->ret = TP_CONTEXT_tp_of(con_2453, tr_2451->ret_dec);
  3226.  SIG_do_is_builtin(r_2455);
  3227.  return r_2455;
  3228. }
  3229.  
  3230.  
  3231. BOOL SIG_is_base_type(SIG self, TP tp_2466) {
  3232.  BOOL noname2467 = ((BOOL) 0);
  3233.  TP noname2468;
  3234.  TP local0;
  3235.  TP local1;
  3236.  TP local2;
  3237.  TP local3;
  3238.  TP local4;
  3239.  TP local5;
  3240.  TP local6;
  3241.  TP local7;
  3242.  noname2468 = tp_2466;
  3243.  local0 = noname2468;
  3244.  if ((*TP_is_eq_TP_BOOL[local0->header.tag+TP_is_eq_TP_BOOL_offset])(local0, ((TP) SIG_prog_PROG(self)->tp_builtin->bool_2))) {
  3245.   return TRUE;
  3246.  }
  3247.  else {
  3248.   local1 = noname2468;
  3249.   if ((*TP_is_eq_TP_BOOL[local1->header.tag+TP_is_eq_TP_BOOL_offset])(local1, ((TP) SIG_prog_PROG(self)->tp_builtin->char_5))) {
  3250.    return TRUE;
  3251.   }
  3252.   else {
  3253.    local2 = noname2468;
  3254.    if ((*TP_is_eq_TP_BOOL[local2->header.tag+TP_is_eq_TP_BOOL_offset])(local2, ((TP) SIG_prog_PROG(self)->tp_builtin->int_1))) {
  3255.     return TRUE;
  3256.    }
  3257.    else {
  3258.     local3 = noname2468;
  3259.     if ((*TP_is_eq_TP_BOOL[local3->header.tag+TP_is_eq_TP_BOOL_offset])(local3, ((TP) SIG_prog_PROG(self)->tp_builtin->flt))) {
  3260.      return TRUE;
  3261.     }
  3262.     else {
  3263.      local4 = noname2468;
  3264.      if ((*TP_is_eq_TP_BOOL[local4->header.tag+TP_is_eq_TP_BOOL_offset])(local4, ((TP) SIG_prog_PROG(self)->tp_builtin->fltd))) {
  3265.       return TRUE;
  3266.      }
  3267.      else {
  3268.       local5 = noname2468;
  3269.       if ((*TP_is_eq_TP_BOOL[local5->header.tag+TP_is_eq_TP_BOOL_offset])(local5, ((TP) SIG_prog_PROG(self)->tp_builtin->fltx))) {
  3270.        return TRUE;
  3271.       }
  3272.       else {
  3273.        local6 = noname2468;
  3274.        if ((*TP_is_eq_TP_BOOL[local6->header.tag+TP_is_eq_TP_BOOL_offset])(local6, ((TP) SIG_prog_PROG(self)->tp_builtin->fltdx))) {
  3275.         return TRUE;
  3276.        }
  3277.        else {
  3278.         local7 = noname2468;
  3279.         if ((*TP_is_eq_TP_BOOL[local7->header.tag+TP_is_eq_TP_BOOL_offset])(local7, ((TP) SIG_prog_PROG(self)->tp_builtin->ext_ob))) {
  3280.          return TRUE;
  3281.         }
  3282.        }
  3283.       }
  3284.      }
  3285.     }
  3286.    }
  3287.   }
  3288.  }
  3289.  return FALSE;
  3290. }
  3291.  
  3292.  
  3293. BOOL SIG_is_base_aref(SIG self, TP tp_2469) {
  3294.  BOOL noname2470 = ((BOOL) 0);
  3295.  IMPL im;
  3296.  TP_CLASS ar;
  3297.  TP noname2471;
  3298.  OUT local0;
  3299.  INT local1;
  3300.  OUT local2;
  3301.  TP local3;
  3302.  TP local4;
  3303.  TP local5;
  3304.  TP local6;
  3305.  TP local7;
  3306.  TP local8;
  3307.  TP local9;
  3308.  if (tp_2469==NULL) {
  3309.  } else
  3310.  switch (tp_2469->header.tag) {
  3311.   case TP_CLASS_tag:
  3312.    im = IMPL_TBL_impl_of(SIG_prog_PROG(self)->impl_tbl, tp_2469);
  3313.    if ((im==((IMPL) NULL))) {
  3314.     return FALSE;
  3315.    }
  3316.    ar = im->arr;
  3317.    if ((ar==((TP_CLASS) NULL))) {
  3318.     return FALSE;
  3319.    }
  3320.    if (IDENT_is_neq_IDE(ar->name_19, SIG_prog_PROG(self)->ident_builtin->AREF_ident)) {
  3321.     return FALSE;
  3322.    }
  3323.    if ((ar->params==((ARRAYTP) NULL))) {
  3324.     local0 = OUT_create_OUT(((OUT) NULL));
  3325.     OUT_plus_STR(local0, ((STR) &CompilererrorSIG));
  3326.     return FALSE;
  3327.    }
  3328.    local1 = ARRAYTP_size_INT(ar->params);
  3329.    if ((local1!=1)) {
  3330.     local2 = OUT_create_OUT(((OUT) NULL));
  3331.     OUT_plus_STR(local2, ((STR) &CompilererrorSIG_2472));
  3332.     return FALSE;
  3333.    }
  3334.    noname2471 = ARRAYTP_aget_INT_TP(ar->params, 0);
  3335.    local3 = noname2471;
  3336.    if ((*TP_is_eq_TP_BOOL[local3->header.tag+TP_is_eq_TP_BOOL_offset])(local3, ((TP) SIG_prog_PROG(self)->tp_builtin->char_5))) {
  3337.     return TRUE;
  3338.    }
  3339.    else {
  3340.     local4 = noname2471;
  3341.     if ((*TP_is_eq_TP_BOOL[local4->header.tag+TP_is_eq_TP_BOOL_offset])(local4, ((TP) SIG_prog_PROG(self)->tp_builtin->int_1))) {
  3342.      return TRUE;
  3343.     }
  3344.     else {
  3345.      local5 = noname2471;
  3346.      if ((*TP_is_eq_TP_BOOL[local5->header.tag+TP_is_eq_TP_BOOL_offset])(local5, ((TP) SIG_prog_PROG(self)->tp_builtin->flt))) {
  3347.       return TRUE;
  3348.      }
  3349.      else {
  3350.       local6 = noname2471;
  3351.       if ((*TP_is_eq_TP_BOOL[local6->header.tag+TP_is_eq_TP_BOOL_offset])(local6, ((TP) SIG_prog_PROG(self)->tp_builtin->fltd))) {
  3352.        return TRUE;
  3353.       }
  3354.       else {
  3355.        local7 = noname2471;
  3356.        if ((*TP_is_eq_TP_BOOL[local7->header.tag+TP_is_eq_TP_BOOL_offset])(local7, ((TP) SIG_prog_PROG(self)->tp_builtin->fltx))) {
  3357.         return TRUE;
  3358.        }
  3359.        else {
  3360.         local8 = noname2471;
  3361.         if ((*TP_is_eq_TP_BOOL[local8->header.tag+TP_is_eq_TP_BOOL_offset])(local8, ((TP) SIG_prog_PROG(self)->tp_builtin->fltdx))) {
  3362.          return TRUE;
  3363.         }
  3364.         else {
  3365.          local9 = noname2471;
  3366.          if ((*TP_is_eq_TP_BOOL[local9->header.tag+TP_is_eq_TP_BOOL_offset])(local9, ((TP) SIG_prog_PROG(self)->tp_builtin->ext_ob))) {
  3367.           return TRUE;
  3368.          }
  3369.          else {
  3370.           return FALSE;
  3371.          }
  3372.         }
  3373.        }
  3374.       }
  3375.      }
  3376.     }
  3377.    } break;
  3378.   default: ;
  3379.  }
  3380.  return FALSE;
  3381. }
  3382.  
  3383.  
  3384. BOOL SIG_is_legal_ext(SIG self) {
  3385.  BOOL noname2473 = ((BOOL) 0);
  3386.  ARRAYTP noname2474;
  3387.  TP a_2475;
  3388.  PROG local0;
  3389.  STR local1;
  3390.  STR local2;
  3391.  TP local3;
  3392.  PROG local4;
  3393.  STR local5;
  3394.  STR local6;
  3395.  STR local7;
  3396.  TP local8;
  3397.  STR local9;
  3398.  BOOL local10;
  3399.  PROG local11;
  3400.  STR local12;
  3401.  STR local13;
  3402.  STR local14;
  3403.  TP local15;
  3404.  STR local16;
  3405.  if (!((!((self==((SIG) NULL)))))) {
  3406.   fprintf(stderr,"Violation of precondition ./sig.sa:317:19\n");
  3407.   exit(16);
  3408.  }
  3409.  if (IDENT_is_iter_BOOL(self->name_19)) {
  3410.   local0 = SIG_prog_PROG(self);
  3411.   local1 = ((STR) &Theitersignature);
  3412.   local2 = STR_plus_STR_STR(local1, SIG_str_STR(self));
  3413.   PROG_err_STR(local0, STR_plus_STR_STR(local2, ((STR) &isntallowedinane)));
  3414.   return FALSE;
  3415.  }
  3416.  {
  3417.   struct ARRAYTP_elt_TP_frame_struct temp2476_0;
  3418.   ARRAYTP_elt_TP_frame 
  3419.   noname2477 = &temp2476_0;
  3420.   noname2477->state = 0;
  3421.   while (1) {
  3422.    if (noname2477->state == 0) {
  3423.     noname2474 = self->args_7;
  3424.     noname2477->arg0 = noname2474;
  3425.    }
  3426.    local3 = ARRAYTP_elt_TP(noname2477);
  3427.    if (noname2477->state == -1) goto after_loop;
  3428.    a_2475 = local3;
  3429.    if (SIG_is_base_type(self, a_2475)) {
  3430.    }
  3431.    else {
  3432.     if (SIG_is_base_aref(self, a_2475)) {
  3433.     }
  3434.     else {
  3435.      local4 = SIG_prog_PROG(self);
  3436.      local5 = ((STR) &Thesignature);
  3437.      local6 = STR_plus_STR_STR(local5, SIG_str_STR(self));
  3438.      local7 = STR_plus_STR_STR(local6, ((STR) &isnotlegalforaro));
  3439.      local8 = a_2475;
  3440.      local9 = STR_plus_STR_STR(local7, (*TP_str_STR[local8->header.tag+TP_str_STR_offset])(local8));
  3441.      PROG_err_STR(local4, STR_plus_STR_STR(local9, ((STR) &isnotoftherighttype)));
  3442.      return FALSE;
  3443.     }
  3444.    }
  3445.   }
  3446.  }
  3447.  after_loop: ;
  3448.  if ((!((self->ret==((TP) NULL))))) {
  3449.   local10 = (!(SIG_is_base_type(self, self->ret)));
  3450.  } else {
  3451.   local10 = FALSE;
  3452.  }
  3453.  if (local10) {
  3454.   local11 = SIG_prog_PROG(self);
  3455.   local12 = ((STR) &Thesignature_2478);
  3456.   local13 = STR_plus_STR_STR(local12, SIG_str_STR(self));
  3457.   local14 = STR_plus_STR_STR(local13, ((STR) &isnotlegalforaro_2479));
  3458.   local15 = self->ret;
  3459.   local16 = STR_plus_STR_STR(local14, (*TP_str_STR[local15->header.tag+TP_str_STR_offset])(local15));
  3460.   PROG_err_STR(local11, STR_plus_STR_STR(local16, ((STR) &isnotoftherightt_2480)));
  3461.   return FALSE;
  3462.  }
  3463.  return TRUE;
  3464. }
  3465.  
  3466.  
  3467. ELT ELT_create_SIG_S(ELT self, SIG sig_2481, SIG srcsig_2482, TR_CLASS_ELT tr_2483, TP_CONTEXT con_2484, BOOL is_private_2485) {
  3468.  ELT noname2486;
  3469.  ELT r_2487;
  3470.  BOOL local0;
  3471.  BOOL local1;
  3472.  BOOL local2;
  3473.  ELT local3;
  3474.  if ((!((sig_2481==((SIG) NULL))))) {
  3475.   local2 = (!((srcsig_2482==((SIG) NULL))));
  3476.  } else {
  3477.   local2 = FALSE;
  3478.  }
  3479.  if (local2) {
  3480.   local1 = (!((tr_2483==((TR_CLASS_ELT) NULL))));
  3481.  } else {
  3482.   local1 = FALSE;
  3483.  }
  3484.  if (local1) {
  3485.   local0 = (!((con_2484==((TP_CONTEXT) NULL))));
  3486.  } else {
  3487.   local0 = FALSE;
  3488.  }
  3489.  if (!(local0)) {
  3490.   fprintf(stderr,"Violation of precondition ./elt.sa:34:9\n");
  3491.   exit(16);
  3492.  }
  3493.  local3 = ((ELT) sbi_alloc(sizeof(struct ELT_struct), ELT_tag));
  3494.  r_2487 = local3;
  3495.  r_2487->sig_6 = sig_2481;
  3496.  r_2487->srcsig = srcsig_2482;
  3497.  r_2487->tr = tr_2483;
  3498.  r_2487->con = con_2484;
  3499.  r_2487->is_private = is_private_2485;
  3500.  return r_2487;
  3501. }
  3502.  
  3503.  
  3504. BOOL SIG_is_legal_ext_2488(SIG self) {
  3505.  BOOL noname2489 = ((BOOL) 0);
  3506.  ARRAYTP noname2490;
  3507.  TP a_2491;
  3508.  PROG local0;
  3509.  STR local1;
  3510.  STR local2;
  3511.  TP local3;
  3512.  PROG local4;
  3513.  STR local5;
  3514.  STR local6;
  3515.  STR local7;
  3516.  TP local8;
  3517.  STR local9;
  3518.  BOOL local10;
  3519.  PROG local11;
  3520.  STR local12;
  3521.  STR local13;
  3522.  STR local14;
  3523.  TP local15;
  3524.  STR local16;
  3525.  if (!((!((self==((SIG) NULL)))))) {
  3526.   fprintf(stderr,"Violation of precondition ./sig.sa:340:19\n");
  3527.   exit(16);
  3528.  }
  3529.  if (IDENT_is_iter_BOOL(self->name_19)) {
  3530.   local0 = SIG_prog_PROG(self);
  3531.   local1 = ((STR) &Theitersignature_2492);
  3532.   local2 = STR_plus_STR_STR(local1, SIG_str_STR(self));
  3533.   PROG_err_STR(local0, STR_plus_STR_STR(local2, ((STR) &isntallowedinane_2493)));
  3534.   return FALSE;
  3535.  }
  3536.  {
  3537.   struct ARRAYTP_elt_TP_frame_struct temp2494_0;
  3538.   ARRAYTP_elt_TP_frame 
  3539.   noname2495 = &temp2494_0;
  3540.   noname2495->state = 0;
  3541.   while (1) {
  3542.    if (noname2495->state == 0) {
  3543.     noname2490 = self->args_7;
  3544.     noname2495->arg0 = noname2490;
  3545.    }
  3546.    local3 = ARRAYTP_elt_TP(noname2495);
  3547.    if (noname2495->state == -1) goto after_loop;
  3548.    a_2491 = local3;
  3549.    if (SIG_is_base_type(self, a_2491)) {
  3550.    }
  3551.    else {
  3552.     local4 = SIG_prog_PROG(self);
  3553.     local5 = ((STR) &Thesignature_2496);
  3554.     local6 = STR_plus_STR_STR(local5, SIG_str_STR(self));
  3555.     local7 = STR_plus_STR_STR(local6, ((STR) &isnotlegalforaro_2497));
  3556.     local8 = a_2491;
  3557.     local9 = STR_plus_STR_STR(local7, (*TP_str_STR[local8->header.tag+TP_str_STR_offset])(local8));
  3558.     PROG_err_STR(local4, STR_plus_STR_STR(local9, ((STR) &isnotoftherightt_2498)));
  3559.     return FALSE;
  3560.    }
  3561.   }
  3562.  }
  3563.  after_loop: ;
  3564.  if ((!((self->ret==((TP) NULL))))) {
  3565.   local10 = (!(SIG_is_base_type(self, self->ret)));
  3566.  } else {
  3567.   local10 = FALSE;
  3568.  }
  3569.  if (local10) {
  3570.   local11 = SIG_prog_PROG(self);
  3571.   local12 = ((STR) &Thesignature_2499);
  3572.   local13 = STR_plus_STR_STR(local12, SIG_str_STR(self));
  3573.   local14 = STR_plus_STR_STR(local13, ((STR) &isnotlegalforaro_2500));
  3574.   local15 = self->ret;
  3575.   local16 = STR_plus_STR_STR(local14, (*TP_str_STR[local15->header.tag+TP_str_STR_offset])(local15));
  3576.   PROG_err_STR(local11, STR_plus_STR_STR(local16, ((STR) &isnotoftherightt_2501)));
  3577.   return FALSE;
  3578.  }
  3579.  return TRUE;
  3580. }
  3581.  
  3582.  
  3583. ELT IMPL_CREATE_read(IMPL_CREATE self, TR_CLASS_ELT t_2502) {
  3584.  ELT noname2503;
  3585.  SIG sig_2504 = ((SIG) NULL);
  3586.  ELT r_2505 = ((ELT) NULL);
  3587.  PROG local0;
  3588.  PROG local1;
  3589.  PROG local2;
  3590.  PROG local3;
  3591.  PROG local4;
  3592.  PROG local5;
  3593.  PROG local6;
  3594.  PROG local7;
  3595.  ELT local8;
  3596.  TP_CONTEXT local9;
  3597.  TR_CLASS_ELT local10;
  3598.  if (!((!((t_2502==((TR_CLASS_ELT) NULL)))))) {
  3599.   fprintf(stderr,"Violation of precondition ./impl.sa:492:17\n");
  3600.   exit(16);
  3601.  }
  3602.  if (t_2502==NULL) {
  3603.   return ((ELT) NULL);
  3604.  } else
  3605.  switch (t_2502->header.tag) {
  3606.   case TR_CONST_DEF_tag:
  3607.    if (self->is_external) {
  3608.     local0 = IMPL_CREATE_prog(self);
  3609.     PROG_err_loc_PRO(local0, ((PROG_ERR) t_2502));
  3610.     local1 = IMPL_CREATE_prog(self);
  3611.     PROG_err_STR(local1, ((STR) &Externalclassesm));
  3612.     return ((ELT) NULL);
  3613.    }
  3614.    sig_2504 = SIG_const_reader(((SIG) NULL), ((TR_CONST_DEF) t_2502), ((TR_CONST_DEF) t_2502)->name_19, self->con); break;
  3615.   case TR_SHARED_DEF_tag:
  3616.    if (self->is_external) {
  3617.     local2 = IMPL_CREATE_prog(self);
  3618.     PROG_err_loc_PRO(local2, ((PROG_ERR) t_2502));
  3619.     local3 = IMPL_CREATE_prog(self);
  3620.     PROG_err_STR(local3, ((STR) &Externalclassesm_2506));
  3621.     return ((ELT) NULL);
  3622.    }
  3623.    sig_2504 = SIG_shared_reade(((SIG) NULL), ((TR_SHARED_DEF) t_2502), ((TR_SHARED_DEF) t_2502)->name_19, self->con); break;
  3624.   case TR_ATTR_DEF_tag:
  3625.    if (self->is_external) {
  3626.     local4 = IMPL_CREATE_prog(self);
  3627.     PROG_err_loc_PRO(local4, ((PROG_ERR) t_2502));
  3628.     local5 = IMPL_CREATE_prog(self);
  3629.     PROG_err_STR(local5, ((STR) &Externalclassesm_2507));
  3630.     return ((ELT) NULL);
  3631.    }
  3632.    sig_2504 = SIG_attr_reader_(((SIG) NULL), ((TR_ATTR_DEF) t_2502), ((TR_ATTR_DEF) t_2502)->name_19, self->con); break;
  3633.   case TR_ROUT_DEF_tag:
  3634.    sig_2504 = SIG_rout_sig_TR_(((SIG) NULL), ((TR_ROUT_DEF) t_2502), ((TR_ROUT_DEF) t_2502)->name_19, self->con);
  3635.    if (((TR_ROUT_DEF) t_2502)->is_abstract) {
  3636.     if (self->is_external) {
  3637.      if ((!(SIG_is_legal_ext(sig_2504)))) {
  3638.       return ((ELT) NULL);
  3639.      }
  3640.      r_2505 = ELT_create_SIG_S(((ELT) NULL), sig_2504, sig_2504, t_2502, self->con, ((TR_ROUT_DEF) t_2502)->is_private);
  3641.      r_2505->is_external = TRUE;
  3642.      return r_2505;
  3643.     }
  3644.     else {
  3645.      local6 = IMPL_CREATE_prog(self);
  3646.      PROG_err_loc_PRO(local6, ((PROG_ERR) t_2502));
  3647.      local7 = IMPL_CREATE_prog(self);
  3648.      PROG_err_STR(local7, ((STR) &Onlyexternalclas));
  3649.      return ((ELT) NULL);
  3650.     }
  3651.    }
  3652.    else {
  3653.     if (self->is_external) {
  3654.      if ((!(SIG_is_legal_ext_2488(sig_2504)))) {
  3655.       return ((ELT) NULL);
  3656.      }
  3657.      r_2505 = ELT_create_SIG_S(((ELT) NULL), sig_2504, sig_2504, t_2502, self->con, ((TR_ROUT_DEF) t_2502)->is_private);
  3658.      r_2505->is_external = TRUE;
  3659.      return r_2505;
  3660.     }
  3661.    } break;
  3662.   default: ;
  3663.    return ((ELT) NULL);
  3664.  }
  3665.  if ((sig_2504==((SIG) NULL))) {
  3666.   return ((ELT) NULL);
  3667.  }
  3668.  local8 = ((ELT) NULL);
  3669.  local9 = self->con;
  3670.  local10 = t_2502;
  3671.  r_2505 = ELT_create_SIG_S(local8, sig_2504, sig_2504, t_2502, local9, (*TR_CLASS_ELT_is_[local10->header.tag+TR_CLASS_ELT_is__offset])(local10));
  3672.  return r_2505;
  3673. }
  3674.  
  3675.  
  3676. IDENT ELT_name_IDENT(ELT self) {
  3677.  IDENT noname2508 = IDENT_zero;
  3678.  if (!((!((self==((ELT) NULL)))))) {
  3679.   fprintf(stderr,"Violation of precondition ./elt.sa:48:7\n");
  3680.   exit(16);
  3681.  }
  3682.  return self->sig_6->name_19;
  3683. }
  3684.  
  3685.  
  3686. ELT ELT_TBL_elt_same(ELT_TBL self, ELT e_2509) {
  3687.  ELT noname2510;
  3688.  ELT_TBL noname2511;
  3689.  IDENT noname2512 = IDENT_zero;
  3690.  ELT local0;
  3691.  if (!((!((e_2509==((ELT) NULL)))))) {
  3692.   fprintf(stderr,"Violation of precondition ./elt.sa:187:19\n");
  3693.   exit(16);
  3694.  }
  3695.  {
  3696.   struct ELT_TBL_get_quer_frame_struct temp2513_0;
  3697.   ELT_TBL_get_quer_frame 
  3698.   noname2514 = &temp2513_0;
  3699.   noname2514->state = 0;
  3700.   while (1) {
  3701.    if (noname2514->state == 0) {
  3702.     noname2511 = self;
  3703.     noname2512 = ELT_name_IDENT(e_2509);
  3704.     noname2514->arg0 = noname2511;
  3705.     noname2514->arg1 = noname2512;
  3706.    }
  3707.    local0 = ELT_TBL_get_quer(noname2514);
  3708.    if (noname2514->state == -1) goto after_loop;
  3709.    return local0;
  3710.   }
  3711.  }
  3712.  after_loop: ;
  3713.  return ((ELT) NULL);
  3714.  if (!ELT_TBL_invarian(self)) {
  3715.   fprintf(stderr,"Failed invariant ELT_TBL::invariant:BOOL ./elt.sa:187:19\n");
  3716.   exit(16);
  3717.  }
  3718. }
  3719.  
  3720.  
  3721. void IMPL_CREATE_ext_(IMPL_CREATE self, ELT er, ELT f_2515) {
  3722.  PROG local0;
  3723.  PROG local1;
  3724.  STR local2;
  3725.  STR local3;
  3726.  STR local4;
  3727.  STR local5;
  3728.  local0 = IMPL_CREATE_prog(self);
  3729.  PROG_err_loc_PRO(local0, ((PROG_ERR) er->tr));
  3730.  local1 = IMPL_CREATE_prog(self);
  3731.  local2 = ((STR) &Thesignature_2516);
  3732.  local3 = STR_plus_STR_STR(local2, SIG_str_STR(er->sig_6));
  3733.  local4 = STR_plus_STR_STR(local3, ((STR) &hasthesamenameas));
  3734.  local5 = STR_plus_STR_STR(local4, SIG_str_STR(f_2515->sig_6));
  3735.  PROG_err_STR(local1, STR_plus_STR_STR(local5, ((STR) &inanexternalclass)));
  3736. }
  3737.  
  3738.  
  3739. ELT ELT_TBL_elt_nil_ELT(ELT_TBL self) {
  3740.  ELT noname2517;
  3741.  ELT t_2518 = ((ELT) NULL);
  3742.  return ((ELT) NULL);
  3743.  if (!ELT_TBL_invarian(self)) {
  3744.   fprintf(stderr,"Failed invariant ELT_TBL::invariant:BOOL ../Library/fqset.sa:69:10\n");
  3745.   exit(16);
  3746.  }
  3747. }
  3748.  
  3749.  
  3750. BOOL ELT_TBL_elt_eq_E(ELT_TBL self, ELT e1_2519, ELT e2_2520) {
  3751.  BOOL noname2521 = ((BOOL) 0);
  3752.  return c_SYS_ob_eq_OB_OB_BOOL(((OB) e1_2519),((OB) e2_2520));
  3753.  if (!ELT_TBL_invarian(self)) {
  3754.   fprintf(stderr,"Failed invariant ELT_TBL::invariant:BOOL ../Library/fqset.sa:62:9\n");
  3755.   exit(16);
  3756.  }
  3757. }
  3758.  
  3759.  
  3760. ELT_TBL ELT_TBL_allocate(ELT_TBL self, INT n_2522) {
  3761.  ELT_TBL noname2523;
  3762.  ELT_TBL r_2524;
  3763.  ELT_TBL noname2525;
  3764.  ELT_TBL local0;
  3765.  local0 = ((ELT_TBL) sbi_arr_alloc(sizeof(struct ELT_TBL_struct), ELT_TBL_tag, sizeof(ELT) , n_2522));
  3766.  local0->asize = n_2522;
  3767.  r_2524 = local0;
  3768.  if ((!((ELT_TBL_elt_nil_ELT(self)==((ELT) NULL))))) {
  3769.   {
  3770.    struct ELT_TBL_aset_ELT_frame_struct temp2526_0;
  3771.    ELT_TBL_aset_ELT_frame 
  3772.    noname2527 = &temp2526_0;
  3773.    noname2527->state = 0;
  3774.    while (1) {
  3775.     if (noname2527->state == 0) {
  3776.      noname2525 = r_2524;
  3777.      noname2527->arg0 = noname2525;
  3778.     }
  3779.     noname2527->arg1 = ELT_TBL_elt_nil_ELT(self);
  3780.     ELT_TBL_aset_ELT(noname2527);
  3781.     if (noname2527->state == -1) goto after_loop;
  3782.     0 /* No return value from iter call */;
  3783.    }
  3784.   }
  3785.   after_loop: ;
  3786.  }
  3787.  return r_2524;
  3788. }
  3789.  
  3790.  
  3791. INT ELT_TBL_asize_INT(ELT_TBL self) {
  3792.  INT noname2528 = ((INT) 0);
  3793.   return self->asize;
  3794.  fprintf(stderr,"Last statement wasn't return ../Library/aref.sa:20:8\n");
  3795.  exit(16);
  3796. }
  3797.  
  3798.  
  3799. ELT_TBL ELT_TBL_double_s(ELT_TBL self) {
  3800.  ELT_TBL noname2529;
  3801.  ELT_TBL r_2530;
  3802.  ELT_TBL noname2531;
  3803.  INT local0;
  3804.  INT local1;
  3805.  INT local2;
  3806.  ELT local3;
  3807.  if (!((!((self==((ELT_TBL) NULL)))))) {
  3808.   fprintf(stderr,"Violation of precondition ../Library/fqset.sa:190:22\n");
  3809.   exit(16);
  3810.  }
  3811.  local0 = (self->asize);
  3812.  local1 = (c_INT_minus_INT_INT_chk(local0,1));
  3813.  local2 = (c_INT_times_INT_INT_chk(local1,2));
  3814.  r_2530 = ELT_TBL_allocate(self, (c_INT_plus_INT_INT_chk(local2,1)));
  3815.  {
  3816.   struct ELT_TBL_elt_ELT_frame_struct temp2532_0;
  3817.   ELT_TBL_elt_ELT_frame 
  3818.   noname2533 = &temp2532_0;
  3819.   noname2533->state = 0;
  3820.   while (1) {
  3821.    if (noname2533->state == 0) {
  3822.     noname2531 = self;
  3823.     noname2533->arg0 = noname2531;
  3824.    }
  3825.    local3 = ELT_TBL_elt_ELT(noname2533);
  3826.    if (noname2533->state == -1) goto after_loop;
  3827.    r_2530 = ELT_TBL_insert_E(r_2530, local3);
  3828.   }
  3829.  }
  3830.  after_loop: ;
  3831.  return r_2530;
  3832. }
  3833.  
  3834.  
  3835. INT ELT_TBL_elt_hash(ELT_TBL self, ELT e_2534) {
  3836.  INT noname2535 = ((INT) 0);
  3837.  return IDENT_hash_INT(e_2534->sig_6->name_19);
  3838.  if (!ELT_TBL_invarian(self)) {
  3839.   fprintf(stderr,"Failed invariant ELT_TBL::invariant:BOOL ./elt.sa:174:11\n");
  3840.   exit(16);
  3841.  }
  3842. }
  3843.  
  3844.  
  3845. ELT ELT_TBL_aget_INT_ELT(ELT_TBL self, INT ind_2536) {
  3846.  ELT noname2537;
  3847.  BOOL local0;
  3848.  INT local1;
  3849.  INT local2;
  3850.  if ((!((self==((ELT_TBL) NULL))))) {
  3851.   local1 = 0;
  3852.   local2 = (self->asize);
  3853.   local0 = INT_is_bet_INT_I(ind_2536, local1, (c_INT_minus_INT_INT_chk(local2,1)));
  3854.  } else {
  3855.   local0 = FALSE;
  3856.  }
  3857.  if (!(local0)) {
  3858.   fprintf(stderr,"Violation of precondition ../Library/aref.sa:33:7\n");
  3859.   exit(16);
  3860.  }
  3861.  if (ind_2536<0||ind_2536>=self->asize) {
  3862.   fprintf(stderr,"Index out of bounds ../Library/aref.sa:33:7\n");
  3863.   exit(16);
  3864.  }
  3865.  return self->arr_part[ind_2536];
  3866. }
  3867.  
  3868.  
  3869. void ELT_TBL_aset_INT_ELT(ELT_TBL self, INT ind_2538, ELT val_2539) {
  3870.  BOOL local0;
  3871.  INT local1;
  3872.  INT local2;
  3873.  if ((!((self==((ELT_TBL) NULL))))) {
  3874.   local1 = 0;
  3875.   local2 = (self->asize);
  3876.   local0 = INT_is_bet_INT_I(ind_2538, local1, (c_INT_minus_INT_INT_chk(local2,1)));
  3877.  } else {
  3878.   local0 = FALSE;
  3879.  }
  3880.  if (!(local0)) {
  3881.   fprintf(stderr,"Violation of precondition ../Library/aref.sa:38:7\n");
  3882.   exit(16);
  3883.  }
  3884.  if (ind_2538<0||ind_2538>=self->asize) {
  3885.   fprintf(stderr,"Index out of bounds ../Library/aref.sa:38:7\n");
  3886.   exit(16);
  3887.  }
  3888.  self->arr_part[ind_2538] = val_2539;
  3889. }
  3890.  
  3891.  
  3892. ELT_TBL ELT_TBL_insert_E(ELT_TBL self, ELT e_2540) {
  3893.  ELT_TBL noname2541;
  3894.  ELT_TBL r_2542;
  3895.  INT asz_2543 = ((INT) 0);
  3896.  INT h = ((INT) 0);
  3897.  ELT te;
  3898.  ELT te_2544;
  3899.  INT local0;
  3900.  INT local1;
  3901.  INT local2;
  3902.  r_2542 = self;
  3903.  if (ELT_TBL_elt_eq_E(self, e_2540, ELT_TBL_elt_nil_ELT(self))) {
  3904.   return r_2542;
  3905.  }
  3906.  if ((r_2542==((ELT_TBL) NULL))) {
  3907.   r_2542 = ELT_TBL_allocate(self, 5);
  3908.  }
  3909.  else {
  3910.   local0 = (c_INT_plus_INT_INT_chk(self->hsize,1));
  3911.   local1 = (c_INT_times_INT_INT_chk(local0,2));
  3912.   if ((local1>(self->asize))) {
  3913.    r_2542 = ELT_TBL_double_s(r_2542);
  3914.   }
  3915.  }
  3916.  asz_2543 = (r_2542->asize);
  3917.  local2 = ELT_TBL_elt_hash(r_2542, e_2540);
  3918.  h = (local2&(c_INT_minus_INT_INT_chk(asz_2543,2)));
  3919.  while (1) {
  3920.   te = ELT_TBL_aget_INT_ELT(r_2542, h);
  3921.   if (ELT_TBL_elt_eq_E(self, te, ELT_TBL_elt_nil_ELT(self))) {
  3922.    goto after_loop;
  3923.   }
  3924.   else {
  3925.    if (ELT_TBL_elt_eq_E(self, te, e_2540)) {
  3926.     ELT_TBL_aset_INT_ELT(r_2542, h, e_2540);
  3927.     return r_2542;
  3928.    }
  3929.   }
  3930.   h = (c_INT_plus_INT_INT_chk(h,1));
  3931.  }
  3932.  after_loop: ;
  3933.  if ((h==(c_INT_minus_INT_INT_chk(asz_2543,1)))) {
  3934.   h = 0;
  3935.   while (1) {
  3936.    te_2544 = ELT_TBL_aget_INT_ELT(r_2542, h);
  3937.    if (ELT_TBL_elt_eq_E(self, te_2544, ELT_TBL_elt_nil_ELT(self))) {
  3938.     goto after_loop_2546;
  3939.    }
  3940.    else {
  3941.     if (ELT_TBL_elt_eq_E(self, te_2544, e_2540)) {
  3942.      ELT_TBL_aset_INT_ELT(r_2542, h, e_2540);
  3943.      return r_2542;
  3944.     }
  3945.    }
  3946.    h = (c_INT_plus_INT_INT_chk(h,1));
  3947.   }
  3948.   after_loop_2546: ;
  3949.   if (!((h!=(c_INT_minus_INT_INT_chk(asz_2543,1))))) {
  3950.    fprintf(stderr,"Violation of assertion ../Library/fqset.sa:218:15\n");
  3951.    exit(16);
  3952.   }
  3953.  }
  3954.  ELT_TBL_aset_INT_ELT(r_2542, h, e_2540);
  3955.  r_2542->hsize = (c_INT_plus_INT_INT_chk(r_2542->hsize,1));
  3956.  return r_2542;
  3957.  if (!ELT_TBL_invarian(self)) {
  3958.   fprintf(stderr,"Failed invariant ELT_TBL::invariant:BOOL ../Library/fqset.sa:198:9\n");
  3959.   exit(16);
  3960.  }
  3961. }
  3962.  
  3963.  
  3964. BOOL SIG_has_ret_BOOL(SIG self) {
  3965.  BOOL noname2548 = ((BOOL) 0);
  3966.  return (!((self->ret==((TP) NULL))));
  3967. }
  3968.  
  3969.  
  3970. BOOL SIG_conflicts_wi(SIG self, SIG s_2549) {
  3971.  BOOL noname2550 = ((BOOL) 0);
  3972.  ARRAYTP noname2551;
  3973.  TP t_2552;
  3974.  ARRAYTP noname2553;
  3975.  TP st;
  3976.  BOOL local0;
  3977.  BOOL local1;
  3978.  BOOL local2;
  3979.  INT local3;
  3980.  BOOL local4;
  3981.  TP local5;
  3982.  TP local6;
  3983.  BOOL local7;
  3984.  BOOL local8;
  3985.  BOOL local9;
  3986.  BOOL local10;
  3987.  TP local11;
  3988.  TP local12;
  3989.  TP local13;
  3990.  TP local14;
  3991.  TP local15;
  3992.  if ((!((self==((SIG) NULL))))) {
  3993.   local0 = (!((s_2549==((SIG) NULL))));
  3994.  } else {
  3995.   local0 = FALSE;
  3996.  }
  3997.  if (!(local0)) {
  3998.   fprintf(stderr,"Violation of precondition ./sig.sa:107:17\n");
  3999.   exit(16);
  4000.  }
  4001.  if (IDENT_is_neq_IDE(self->name_19, s_2549->name_19)) {
  4002.   local2 = TRUE;
  4003.  } else {
  4004.   local3 = ARRAYTP_size_INT(self->args_7);
  4005.   local2 = (local3!=ARRAYTP_size_INT(s_2549->args_7));
  4006.  }
  4007.  if (local2) {
  4008.   local1 = TRUE;
  4009.  } else {
  4010.   local4 = SIG_has_ret_BOOL(self);
  4011.   local1 = ((local4)!=(SIG_has_ret_BOOL(s_2549)));
  4012.  }
  4013.  if (local1) {
  4014.   return FALSE;
  4015.  }
  4016.  {
  4017.   struct ARRAYTP_elt_TP_frame_struct temp2554_0;
  4018.   ARRAYTP_elt_TP_frame 
  4019.   noname2555 = &temp2554_0;
  4020.   struct ARRAYTP_elt_TP_frame_struct temp2554_1;
  4021.   ARRAYTP_elt_TP_frame 
  4022.   noname2556 = &temp2554_1;
  4023.   noname2555->state = 0;
  4024.   noname2556->state = 0;
  4025.   while (1) {
  4026.    if (noname2555->state == 0) {
  4027.     noname2551 = self->args_7;
  4028.     noname2555->arg0 = noname2551;
  4029.    }
  4030.    local5 = ARRAYTP_elt_TP(noname2555);
  4031.    if (noname2555->state == -1) goto after_loop;
  4032.    t_2552 = local5;
  4033.    if (noname2556->state == 0) {
  4034.     noname2553 = s_2549->args_7;
  4035.     noname2556->arg0 = noname2553;
  4036.    }
  4037.    local6 = ARRAYTP_elt_TP(noname2556);
  4038.    if (noname2556->state == -1) goto after_loop;
  4039.    st = local6;
  4040.    local11 = t_2552;
  4041.    if ((*TP_is_neq_TP_BOOL[local11->header.tag+TP_is_neq_TP_BOOL_offset])(local11, st)) {
  4042.     local12 = t_2552;
  4043.     local10 = (!((*TP_is_abstract_BOOL[local12->header.tag+TP_is_abstract_BOOL_offset])(local12)));
  4044.    } else {
  4045.     local10 = FALSE;
  4046.    }
  4047.    if (local10) {
  4048.     local13 = t_2552;
  4049.     local9 = (!((*TP_is_bound_BOOL[local13->header.tag+TP_is_bound_BOOL_offset])(local13)));
  4050.    } else {
  4051.     local9 = FALSE;
  4052.    }
  4053.    if (local9) {
  4054.     local14 = st;
  4055.     local8 = (!((*TP_is_abstract_BOOL[local14->header.tag+TP_is_abstract_BOOL_offset])(local14)));
  4056.    } else {
  4057.     local8 = FALSE;
  4058.    }
  4059.    if (local8) {
  4060.     local15 = st;
  4061.     local7 = (!((*TP_is_bound_BOOL[local15->header.tag+TP_is_bound_BOOL_offset])(local15)));
  4062.    } else {
  4063.     local7 = FALSE;
  4064.    }
  4065.    if (local7) {
  4066.     return FALSE;
  4067.    }
  4068.   }
  4069.  }
  4070.  after_loop: ;
  4071.  return TRUE;
  4072. }
  4073.  
  4074.  
  4075. BOOL ELT_conflicts_wi(ELT self, ELT e_2557) {
  4076.  BOOL noname2558 = ((BOOL) 0);
  4077.  return SIG_conflicts_wi(self->sig_6, e_2557->sig_6);
  4078. }
  4079.  
  4080.  
  4081. ELT ELT_TBL_elt_conf(ELT_TBL self, ELT e_2559) {
  4082.  ELT noname2560;
  4083.  ELT_TBL noname2561;
  4084.  IDENT noname2562 = IDENT_zero;
  4085.  ELT r_2563;
  4086.  ELT local0;
  4087.  if (!((!((e_2559==((ELT) NULL)))))) {
  4088.   fprintf(stderr,"Violation of precondition ./elt.sa:179:23\n");
  4089.   exit(16);
  4090.  }
  4091.  {
  4092.   struct ELT_TBL_get_quer_frame_struct temp2564_0;
  4093.   ELT_TBL_get_quer_frame 
  4094.   noname2565 = &temp2564_0;
  4095.   noname2565->state = 0;
  4096.   while (1) {
  4097.    if (noname2565->state == 0) {
  4098.     noname2561 = self;
  4099.     noname2562 = ELT_name_IDENT(e_2559);
  4100.     noname2565->arg0 = noname2561;
  4101.     noname2565->arg1 = noname2562;
  4102.    }
  4103.    local0 = ELT_TBL_get_quer(noname2565);
  4104.    if (noname2565->state == -1) goto after_loop;
  4105.    r_2563 = local0;
  4106.    if (ELT_conflicts_wi(r_2563, e_2559)) {
  4107.     return r_2563;
  4108.    }
  4109.   }
  4110.  }
  4111.  after_loop: ;
  4112.  return ((ELT) NULL);
  4113.  if (!ELT_TBL_invarian(self)) {
  4114.   fprintf(stderr,"Failed invariant ELT_TBL::invariant:BOOL ./elt.sa:179:23\n");
  4115.   exit(16);
  4116.  }
  4117. }
  4118.  
  4119.  
  4120. void IMPL_CREATE_read_2566(IMPL_CREATE self, ELT er, ELT f_2567) {
  4121.  PROG local0;
  4122.  PROG local1;
  4123.  STR local2;
  4124.  STR local3;
  4125.  STR local4;
  4126.  STR local5;
  4127.  local0 = IMPL_CREATE_prog(self);
  4128.  PROG_err_loc_PRO(local0, ((PROG_ERR) er->tr));
  4129.  local1 = IMPL_CREATE_prog(self);
  4130.  local2 = ((STR) &Thesignature_2568);
  4131.  local3 = STR_plus_STR_STR(local2, SIG_str_STR(er->sig_6));
  4132.  local4 = STR_plus_STR_STR(local3, ((STR) &ofthereaderrouti));
  4133.  local5 = STR_plus_STR_STR(local4, SIG_str_STR(f_2567->sig_6));
  4134.  PROG_err_STR(local1, STR_plus_CHAR_STR(local5, '.'));
  4135. }
  4136.  
  4137.  
  4138. SIG SIG_shared_write(SIG self, TR_SHARED_DEF tr_2569, IDENT nm_2570, TP_CONTEXT con_2571) {
  4139.  SIG noname2572;
  4140.  SIG r_2573;
  4141.  BOOL local0;
  4142.  BOOL local1;
  4143.  SIG local2;
  4144.  ARRAYTP local3;
  4145.  INT local4;
  4146.  if ((!((tr_2569==((TR_SHARED_DEF) NULL))))) {
  4147.   local1 = (!((nm_2570.str_4==(STR)0)));
  4148.  } else {
  4149.   local1 = FALSE;
  4150.  }
  4151.  if (local1) {
  4152.   local0 = (!((con_2571==((TP_CONTEXT) NULL))));
  4153.  } else {
  4154.   local0 = FALSE;
  4155.  }
  4156.  if (!(local0)) {
  4157.   fprintf(stderr,"Violation of precondition ./sig.sa:227:20\n");
  4158.   exit(16);
  4159.  }
  4160.  local2 = ((SIG) sbi_alloc(sizeof(struct SIG_struct), SIG_tag));
  4161.  r_2573 = local2;
  4162.  r_2573->tp = ((TP) con_2571->same_34);
  4163.  r_2573->name_19 = nm_2570;
  4164.  r_2573->args_7 = ARRAYTP_create_I(((ARRAYTP) NULL), 1);
  4165.  local3 = r_2573->args_7;
  4166.  local4 = 0;
  4167.  ARRAYTP_aset_INT_TP(local3, local4, TP_CONTEXT_tp_of(con_2571, tr_2569->tp));
  4168.  SIG_do_is_builtin(r_2573);
  4169.  return r_2573;
  4170. }
  4171.  
  4172.  
  4173. SIG SIG_attr_writer_(SIG self, TR_ATTR_DEF tr_2574, IDENT nm_2575, TP_CONTEXT con_2576) {
  4174.  SIG noname2577;
  4175.  SIG r_2578;
  4176.  BOOL local0;
  4177.  BOOL local1;
  4178.  SIG local2;
  4179.  ARRAYTP local3;
  4180.  INT local4;
  4181.  TP local5;
  4182.  INT local6;
  4183.  if ((!((tr_2574==((TR_ATTR_DEF) NULL))))) {
  4184.   local1 = (!((nm_2575.str_4==(STR)0)));
  4185.  } else {
  4186.   local1 = FALSE;
  4187.  }
  4188.  if (local1) {
  4189.   local0 = (!((con_2576==((TP_CONTEXT) NULL))));
  4190.  } else {
  4191.   local0 = FALSE;
  4192.  }
  4193.  if (!(local0)) {
  4194.   fprintf(stderr,"Violation of precondition ./sig.sa:244:18\n");
  4195.   exit(16);
  4196.  }
  4197.  local2 = ((SIG) sbi_alloc(sizeof(struct SIG_struct), SIG_tag));
  4198.  r_2578 = local2;
  4199.  r_2578->tp = ((TP) con_2576->same_34);
  4200.  r_2578->name_19 = nm_2575;
  4201.  r_2578->args_7 = ARRAYTP_create_I(((ARRAYTP) NULL), 1);
  4202.  local3 = r_2578->args_7;
  4203.  local4 = 0;
  4204.  ARRAYTP_aset_INT_TP(local3, local4, TP_CONTEXT_tp_of(con_2576, tr_2574->tp));
  4205.  local5 = r_2578->tp;
  4206.  local6 = (*TP_kind_INT[local5->header.tag+TP_kind_INT_offset])(local5);
  4207.  if ((local6==shared_TP_KIND_v)) {
  4208.   r_2578->ret = r_2578->tp;
  4209.  }
  4210.  SIG_do_is_builtin(r_2578);
  4211.  return r_2578;
  4212. }
  4213.  
  4214.  
  4215. ELT IMPL_CREATE_writ(IMPL_CREATE self, TR_CLASS_ELT t_2579) {
  4216.  ELT noname2580;
  4217.  SIG sig_2581 = ((SIG) NULL);
  4218.  BOOL pri_2582 = ((BOOL) 0);
  4219.  BOOL local0;
  4220.  BOOL local1;
  4221.  if (self->is_external) {
  4222.   return ((ELT) NULL);
  4223.  }
  4224.  if (t_2579==NULL) {
  4225.   return ((ELT) NULL);
  4226.  } else
  4227.  switch (t_2579->header.tag) {
  4228.   case TR_SHARED_DEF_tag:
  4229.    sig_2581 = SIG_shared_write(((SIG) NULL), ((TR_SHARED_DEF) t_2579), ((TR_SHARED_DEF) t_2579)->name_19, self->con);
  4230.    if (((TR_SHARED_DEF) t_2579)->is_private) {
  4231.     local0 = TRUE;
  4232.    } else {
  4233.     local0 = ((TR_SHARED_DEF) t_2579)->is_readonly;
  4234.    }
  4235.    pri_2582 = local0; break;
  4236.   case TR_ATTR_DEF_tag:
  4237.    sig_2581 = SIG_attr_writer_(((SIG) NULL), ((TR_ATTR_DEF) t_2579), ((TR_ATTR_DEF) t_2579)->name_19, self->con);
  4238.    if (((TR_ATTR_DEF) t_2579)->is_private) {
  4239.     local1 = TRUE;
  4240.    } else {
  4241.     local1 = ((TR_ATTR_DEF) t_2579)->is_readonly;
  4242.    }
  4243.    pri_2582 = local1; break;
  4244.   default: ;
  4245.    return ((ELT) NULL);
  4246.  }
  4247.  if ((sig_2581==((SIG) NULL))) {
  4248.   return ((ELT) NULL);
  4249.  }
  4250.  return ELT_create_SIG_S(((ELT) NULL), sig_2581, sig_2581, t_2579, self->con, pri_2582);
  4251. }
  4252.  
  4253.  
  4254. void IMPL_CREATE_writ_2583(IMPL_CREATE self, ELT ew, ELT f_2584) {
  4255.  PROG local0;
  4256.  PROG local1;
  4257.  STR local2;
  4258.  STR local3;
  4259.  STR local4;
  4260.  STR local5;
  4261.  local0 = IMPL_CREATE_prog(self);
  4262.  PROG_err_loc_PRO(local0, ((PROG_ERR) ew->tr));
  4263.  local1 = IMPL_CREATE_prog(self);
  4264.  local2 = ((STR) &Thesignature_2585);
  4265.  local3 = STR_plus_STR_STR(local2, SIG_str_STR(ew->sig_6));
  4266.  local4 = STR_plus_STR_STR(local3, ((STR) &ofthewriterrouti));
  4267.  local5 = STR_plus_STR_STR(local4, SIG_str_STR(f_2584->sig_6));
  4268.  PROG_err_STR(local1, STR_plus_CHAR_STR(local5, '.'));
  4269. }
  4270.  
  4271.  
  4272. ELT_TBL IMPL_CREATE_expl(IMPL_CREATE self) {
  4273.  ELT_TBL noname2586;
  4274.  TR_CLASS_ELT t_2587;
  4275.  ELT_TBL r_2588 = ((ELT_TBL) NULL);
  4276.  ELT er;
  4277.  ELT f_2589;
  4278.  ELT f_2590;
  4279.  ELT ew;
  4280.  ELT f_2591;
  4281.  TR_CLASS_ELT local0;
  4282.  t_2587 = self->tr->body;
  4283.  while (1) {
  4284.   if ((!((t_2587==((TR_CLASS_ELT) NULL))))) {
  4285.   }
  4286.   else {
  4287.    goto after_loop;
  4288.   }
  4289.   er = IMPL_CREATE_read(self, t_2587);
  4290.   if ((!((er==((ELT) NULL))))) {
  4291.    if (self->is_external) {
  4292.     f_2589 = ELT_TBL_elt_same(r_2588, er);
  4293.     if ((!((f_2589==((ELT) NULL))))) {
  4294.      IMPL_CREATE_ext_(self, er, f_2589);
  4295.     }
  4296.     else {
  4297.      r_2588 = ELT_TBL_insert_E(r_2588, er);
  4298.     }
  4299.    }
  4300.    else {
  4301.     f_2590 = ELT_TBL_elt_conf(r_2588, er);
  4302.     if ((!((f_2590==((ELT) NULL))))) {
  4303.      IMPL_CREATE_read_2566(self, er, f_2590);
  4304.     }
  4305.     else {
  4306.      r_2588 = ELT_TBL_insert_E(r_2588, er);
  4307.     }
  4308.    }
  4309.   }
  4310.   ew = IMPL_CREATE_writ(self, t_2587);
  4311.   if ((!((ew==((ELT) NULL))))) {
  4312.    f_2591 = ELT_TBL_elt_conf(r_2588, ew);
  4313.    if ((!((f_2591==((ELT) NULL))))) {
  4314.     IMPL_CREATE_writ_2583(self, ew, f_2591);
  4315.    }
  4316.    else {
  4317.     r_2588 = ELT_TBL_insert_E(r_2588, ew);
  4318.    }
  4319.   }
  4320.   local0 = t_2587;
  4321.   t_2587 = (*TR_CLASS_ELT_nex[local0->header.tag+TR_CLASS_ELT_nex_offset])(local0);
  4322.  }
  4323.  after_loop: ;
  4324.  return r_2588;
  4325. }
  4326.  
  4327.  
  4328. PROG IMPL_INCLUDE_pro(IMPL_INCLUDE self) {
  4329.  PROG noname2593;
  4330.  return self->tp->prog;
  4331. }
  4332.  
  4333.  
  4334. BOOL ARRAYIDENT_elt_e(ARRAYIDENT self, IDENT e1_2594, IDENT e2_2595) {
  4335.  BOOL noname2596 = ((BOOL) 0);
  4336.  OB local0;
  4337.  OB local1;
  4338.  return IDENT_is_eq_IDEN(e1_2594, e2_2595);
  4339.  local0 = (OB)((IDENT_boxed) sbi_alloc(sizeof(struct IDENT_boxed_struct), IDENT_tag));
  4340.  ((IDENT_boxed) local0)->value_part = e1_2594;
  4341.  local1 = (OB)((IDENT_boxed) sbi_alloc(sizeof(struct IDENT_boxed_struct), IDENT_tag));
  4342.  ((IDENT_boxed) local1)->value_part = e2_2595;
  4343.  return c_SYS_ob_eq_OB_OB_BOOL(local0,local1);
  4344. }
  4345.  
  4346.  
  4347. BOOL ARRAYIDENT_conta(ARRAYIDENT self, IDENT e_2597) {
  4348.  BOOL noname2598 = ((BOOL) 0);
  4349.  ARRAYIDENT noname2599;
  4350.  IDENT local0;
  4351.  IDENT local1;
  4352.  if ((self==((ARRAYIDENT) NULL))) {
  4353.   return FALSE;
  4354.  }
  4355.  {
  4356.   struct ARRAYIDENT_elt_IDENT_frame_struct temp2600_0;
  4357.   ARRAYIDENT_elt_IDENT_frame 
  4358.   noname2601 = &temp2600_0;
  4359.   noname2601->state = 0;
  4360.   while (1) {
  4361.    if (noname2601->state == 0) {
  4362.     noname2599 = self;
  4363.     noname2601->arg0 = noname2599;
  4364.    }
  4365.    local0 = ARRAYIDENT_elt_IDENT(noname2601);
  4366.    if (noname2601->state == -1) goto after_loop;
  4367.    local1 = local0;
  4368.    if (ARRAYIDENT_elt_e(self, local1, e_2597)) {
  4369.     return TRUE;
  4370.    }
  4371.   }
  4372.  }
  4373.  after_loop: ;
  4374.  return FALSE;
  4375. }
  4376.  
  4377.  
  4378. BOOL TP_CONTEXT_type_(TP_CONTEXT self, TR_TYPE_SPEC t_2602) {
  4379.  BOOL noname2603 = ((BOOL) 0);
  4380.  BOOL local0;
  4381.  if (!((!((t_2602==((TR_TYPE_SPEC) NULL)))))) {
  4382.   fprintf(stderr,"Violation of precondition ./tp.sa:455:21\n");
  4383.   exit(16);
  4384.  }
  4385.  if ((t_2602->kind!=shared_TR_TYPE_S_1643)) {
  4386.   local0 = TRUE;
  4387.  } else {
  4388.   local0 = (!((t_2602->params==((TR_TYPE_SPEC) NULL))));
  4389.  }
  4390.  if (local0) {
  4391.   return FALSE;
  4392.  }
  4393.  return ARRAYIDENT_conta(self->pnames, t_2602->name_19);
  4394. }
  4395.  
  4396.  
  4397. void IMPL_INCLUDE_par(IMPL_INCLUDE self, TR_CLASS_ELT t_2604) {
  4398.  PROG local0;
  4399.  PROG local1;
  4400.  local0 = IMPL_INCLUDE_pro(self);
  4401.  PROG_err_loc_PRO(local0, ((PROG_ERR) t_2604));
  4402.  local1 = IMPL_INCLUDE_pro(self);
  4403.  PROG_err_STR(local1, ((STR) &Typespecifiersin));
  4404. }
  4405.  
  4406.  
  4407. void IMPL_INCLUDE_inc(IMPL_INCLUDE self, TR_CLASS_ELT t_2605) {
  4408.  PROG local0;
  4409.  PROG local1;
  4410.  local0 = IMPL_INCLUDE_pro(self);
  4411.  PROG_err_loc_PRO(local0, ((PROG_ERR) t_2605));
  4412.  local1 = IMPL_INCLUDE_pro(self);
  4413.  PROG_err_STR(local1, ((STR) &Classesmaynotinc));
  4414. }
  4415.  
  4416.  
  4417. void IMPL_INCLUDE_inc_2606(IMPL_INCLUDE self, TR_CLASS_ELT t_2607) {
  4418.  PROG local0;
  4419.  PROG local1;
  4420.  local0 = IMPL_INCLUDE_pro(self);
  4421.  PROG_err_loc_PRO(local0, ((PROG_ERR) t_2607));
  4422.  local1 = IMPL_INCLUDE_pro(self);
  4423.  PROG_err_STR(local1, ((STR) &Classesmaynotinc_2608));
  4424. }
  4425.  
  4426.  
  4427. TP_CLASS IMPL_INCLUDE_inc_2609(IMPL_INCLUDE self) {
  4428.  TP_CLASS noname2610;
  4429.  TP_CONTEXT con_2611;
  4430.  TP r_2612;
  4431.  PROG local0;
  4432.  PROG local1;
  4433.  PROG local2;
  4434.  PROG local3;
  4435.  INT local4;
  4436.  local0 = IMPL_INCLUDE_pro(self);
  4437.  con_2611 = PROG_tp_context_(local0, self->tp);
  4438.  if (TP_CONTEXT_type_(con_2611, self->tr->tp)) {
  4439.   IMPL_INCLUDE_par(self, ((TR_CLASS_ELT) self->tr));
  4440.   return ((TP_CLASS) NULL);
  4441.  }
  4442.  r_2612 = TP_CONTEXT_tp_of(con_2611, self->tr->tp);
  4443.  if (r_2612==NULL) {
  4444.  } else
  4445.  switch (r_2612->header.tag) {
  4446.   case TP_CLASS_tag:
  4447.    if (TP_CLASS_is_abst(((TP_CLASS) r_2612))) {
  4448.     local1 = IMPL_INCLUDE_pro(self);
  4449.     PROG_err_loc_PRO(local1, ((PROG_ERR) self->tr));
  4450.     local2 = IMPL_INCLUDE_pro(self);
  4451.     PROG_err_STR(local2, ((STR) &Classesmaynotinc_2613));
  4452.     return ((TP_CLASS) NULL);
  4453.    }
  4454.    local3 = IMPL_INCLUDE_pro(self);
  4455.    local4 = PROG_tp_kind_TP_INT(local3, r_2612);
  4456.    if ((local4==shared_TP_KIND_e)) {
  4457.     IMPL_INCLUDE_inc(self, ((TR_CLASS_ELT) self->tr));
  4458.     return ((TP_CLASS) NULL);
  4459.    }
  4460.    return ((TP_CLASS) r_2612); break;
  4461.   case TP_ROUT_tag:
  4462.    IMPL_INCLUDE_inc_2606(self, ((TR_CLASS_ELT) self->tr));
  4463.    return ((TP_CLASS) NULL); break;
  4464.   case TP_ITER_tag:
  4465.    IMPL_INCLUDE_inc_2606(self, ((TR_CLASS_ELT) self->tr));
  4466.    return ((TP_CLASS) NULL); break;
  4467.   default: ;
  4468.    fprintf(stderr,"No applicable type in typecase ./impl.sa:263:14\n");
  4469.    exit(16);
  4470.  }
  4471.  return ((TP_CLASS) NULL);
  4472. }
  4473.  
  4474.  
  4475. IMPL IMPL_INCLUDE_inc_2614(IMPL_INCLUDE self) {
  4476.  IMPL noname2615;
  4477.  PROG local0;
  4478.  local0 = IMPL_INCLUDE_pro(self);
  4479.  PROG_err_loc_PRO(local0, ((PROG_ERR) self->tr));
  4480.  return IMPL_TBL_impl_of(IMPL_INCLUDE_pro(self)->impl_tbl, ((TP) self->itp));
  4481. }
  4482.  
  4483.  
  4484. BOOL IMPL_INCLUDE_tes(IMPL_INCLUDE self) {
  4485.  BOOL noname2616 = ((BOOL) 0);
  4486.  INT k = ((INT) 0);
  4487.  PROG local0;
  4488.  BOOL local1;
  4489.  PROG local2;
  4490.  PROG local3;
  4491.  STR local4;
  4492.  STR local5;
  4493.  STR local6;
  4494.  STR local7;
  4495.  BOOL local8;
  4496.  PROG local9;
  4497.  PROG local10;
  4498.  STR local11;
  4499.  STR local12;
  4500.  STR local13;
  4501.  STR local14;
  4502.  local0 = IMPL_INCLUDE_pro(self);
  4503.  k = PROG_tp_kind_TP_INT(local0, ((TP) self->tp));
  4504.  if ((self->impl->arr==((TP_CLASS) NULL))) {
  4505.   return FALSE;
  4506.  }
  4507.  if ((k==shared_TP_KIND_v)) {
  4508.   local1 = IDENT_is_eq_IDEN(self->impl->arr->name_19, IMPL_INCLUDE_pro(self)->ident_builtin->AREF_ident);
  4509.  } else {
  4510.   local1 = FALSE;
  4511.  }
  4512.  if (local1) {
  4513.   local2 = IMPL_INCLUDE_pro(self);
  4514.   PROG_err_loc_PRO(local2, ((PROG_ERR) self->tr));
  4515.   local3 = IMPL_INCLUDE_pro(self);
  4516.   local4 = ((STR) &Thevaluetype);
  4517.   local5 = STR_plus_STR_STR(local4, TP_CLASS_str_STR(self->tp));
  4518.   local6 = STR_plus_STR_STR(local5, ((STR) &maynothaveanincl));
  4519.   local7 = STR_plus_STR_STR(local6, TP_CLASS_str_STR(self->impl->arr));
  4520.   PROG_err_STR(local3, STR_plus_CHAR_STR(local7, '.'));
  4521.   return TRUE;
  4522.  }
  4523.  else {
  4524.   if ((k==shared_TP_KIND_r_2617)) {
  4525.    local8 = IDENT_is_eq_IDEN(self->impl->arr->name_19, IMPL_INCLUDE_pro(self)->ident_builtin->AVAL_ident);
  4526.   } else {
  4527.    local8 = FALSE;
  4528.   }
  4529.   if (local8) {
  4530.    local9 = IMPL_INCLUDE_pro(self);
  4531.    PROG_err_loc_PRO(local9, ((PROG_ERR) self->tr));
  4532.    local10 = IMPL_INCLUDE_pro(self);
  4533.    local11 = ((STR) &Thereferencetype);
  4534.    local12 = STR_plus_STR_STR(local11, TP_CLASS_str_STR(self->tp));
  4535.    local13 = STR_plus_STR_STR(local12, ((STR) &maynothaveanincl_2618));
  4536.    local14 = STR_plus_STR_STR(local13, TP_CLASS_str_STR(self->impl->arr));
  4537.    PROG_err_STR(local10, STR_plus_CHAR_STR(local14, '.'));
  4538.    return TRUE;
  4539.   }
  4540.  }
  4541.  return FALSE;
  4542. }
  4543.  
  4544.  
  4545. BOOL IMPL_INCLUDE_tes_2619(IMPL_INCLUDE self) {
  4546.  BOOL noname2620 = ((BOOL) 0);
  4547.  TR_FEAT_MOD m1;
  4548.  TR_FEAT_MOD m2;
  4549.  BOOL local0;
  4550.  PROG local1;
  4551.  PROG local2;
  4552.  STR local3;
  4553.  m1 = self->tr->mods;
  4554.  while (1) {
  4555.   if ((m1==((TR_FEAT_MOD) NULL))) {
  4556.    goto after_loop;
  4557.   }
  4558.   m2 = self->tr->mods;
  4559.   while (1) {
  4560.    if ((m2==((TR_FEAT_MOD) NULL))) {
  4561.     goto after_loop_2622;
  4562.    }
  4563.    if ((!(c_SYS_ob_eq_OB_OB_BOOL(((OB) m1),((OB) m2))))) {
  4564.     local0 = IDENT_is_eq_IDEN(m1->name_19, m2->name_19);
  4565.    } else {
  4566.     local0 = FALSE;
  4567.    }
  4568.    if (local0) {
  4569.     local1 = IMPL_INCLUDE_pro(self);
  4570.     PROG_err_loc_PRO(local1, ((PROG_ERR) m1));
  4571.     local2 = IMPL_INCLUDE_pro(self);
  4572.     local3 = STR_plus_STR_STR(((STR) &Therearetwofeatu), m1->name_19.str_4);
  4573.     PROG_err_STR(local2, STR_plus_STR_STR(local3, ((STR) &name_2624)));
  4574.     return TRUE;
  4575.    }
  4576.    m2 = m2->next_8;
  4577.   }
  4578.   after_loop_2622: ;
  4579.   m1 = m1->next_8;
  4580.  }
  4581.  after_loop: ;
  4582.  return FALSE;
  4583. }
  4584.  
  4585.  
  4586. TR_FEAT_MOD FSETTR_FEAT_MOD_(FSETTR_FEAT_MOD self) {
  4587.  TR_FEAT_MOD noname2625;
  4588.  TR_FEAT_MOD t_2626 = ((TR_FEAT_MOD) NULL);
  4589.  return ((TR_FEAT_MOD) NULL);
  4590.  if (!FSETTR_FEAT_MOD__2627(self)) {
  4591.   fprintf(stderr,"Failed invariant FSET{TR_FEAT_MOD}::invariant:BOOL ../Library/fset.sa:53:10\n");
  4592.   exit(16);
  4593.  }
  4594. }
  4595.  
  4596.  
  4597. FSETTR_FEAT_MOD FSETTR_FEAT_MOD__2628(FSETTR_FEAT_MOD self, INT n_2629) {
  4598.  FSETTR_FEAT_MOD noname2630;
  4599.  FSETTR_FEAT_MOD r_2631;
  4600.  FSETTR_FEAT_MOD noname2632;
  4601.  FSETTR_FEAT_MOD local0;
  4602.  local0 = ((FSETTR_FEAT_MOD) sbi_arr_alloc(sizeof(struct FSETTR_FEAT_MOD_struct), FSETTR_FEAT_MOD_tag, sizeof(TR_FEAT_MOD) , n_2629));
  4603.  local0->asize = n_2629;
  4604.  r_2631 = local0;
  4605.  if ((!((FSETTR_FEAT_MOD_(self)==((TR_FEAT_MOD) NULL))))) {
  4606.   {
  4607.    struct FSETTR_FEAT_MOD__2634_frame_struct temp2633_0;
  4608.    FSETTR_FEAT_MOD__2634_frame 
  4609.    noname2635 = &temp2633_0;
  4610.    noname2635->state = 0;
  4611.    while (1) {
  4612.     if (noname2635->state == 0) {
  4613.      noname2632 = r_2631;
  4614.      noname2635->arg0 = noname2632;
  4615.     }
  4616.     noname2635->arg1 = FSETTR_FEAT_MOD_(self);
  4617.     FSETTR_FEAT_MOD__2634(noname2635);
  4618.     if (noname2635->state == -1) goto after_loop;
  4619.     0 /* No return value from iter call */;
  4620.    }
  4621.   }
  4622.   after_loop: ;
  4623.  }
  4624.  return r_2631;
  4625. }
  4626.  
  4627.  
  4628. INT FSETTR_FEAT_MOD__2636(FSETTR_FEAT_MOD self) {
  4629.  INT noname2637 = ((INT) 0);
  4630.   return self->asize;
  4631.  fprintf(stderr,"Last statement wasn't return ../Library/aref.sa:20:8\n");
  4632.  exit(16);
  4633. }
  4634.  
  4635.  
  4636. FSETTR_FEAT_MOD FSETTR_FEAT_MOD__2638(FSETTR_FEAT_MOD self) {
  4637.  FSETTR_FEAT_MOD noname2639;
  4638.  FSETTR_FEAT_MOD r_2640;
  4639.  FSETTR_FEAT_MOD noname2641;
  4640.  INT local0;
  4641.  INT local1;
  4642.  INT local2;
  4643.  TR_FEAT_MOD local3;
  4644.  if (!((!((self==((FSETTR_FEAT_MOD) NULL)))))) {
  4645.   fprintf(stderr,"Violation of precondition ../Library/fset.sa:150:22\n");
  4646.   exit(16);
  4647.  }
  4648.  local0 = (self->asize);
  4649.  local1 = (c_INT_minus_INT_INT_chk(local0,1));
  4650.  local2 = (c_INT_times_INT_INT_chk(local1,2));
  4651.  r_2640 = FSETTR_FEAT_MOD__2628(self, (c_INT_plus_INT_INT_chk(local2,1)));
  4652.  {
  4653.   struct FSETTR_FEAT_MOD__2643_frame_struct temp2642_0;
  4654.   FSETTR_FEAT_MOD__2643_frame 
  4655.   noname2644 = &temp2642_0;
  4656.   noname2644->state = 0;
  4657.   while (1) {
  4658.    if (noname2644->state == 0) {
  4659.     noname2641 = self;
  4660.     noname2644->arg0 = noname2641;
  4661.    }
  4662.    local3 = FSETTR_FEAT_MOD__2643(noname2644);
  4663.    if (noname2644->state == -1) goto after_loop;
  4664.    r_2640 = FSETTR_FEAT_MOD__2645(r_2640, local3);
  4665.   }
  4666.  }
  4667.  after_loop: ;
  4668.  return r_2640;
  4669. }
  4670.  
  4671.  
  4672. INT FSETTR_FEAT_MOD__2646(FSETTR_FEAT_MOD self, TR_FEAT_MOD e_2647) {
  4673.  INT noname2648 = ((INT) 0);
  4674.  return (c_SYS_id_OB_INT(((SYS) NULL),((OB) e_2647)));
  4675.  if (!FSETTR_FEAT_MOD__2627(self)) {
  4676.   fprintf(stderr,"Failed invariant FSET{TR_FEAT_MOD}::invariant:BOOL ../Library/fset.sa:63:11\n");
  4677.   exit(16);
  4678.  }
  4679. }
  4680.  
  4681.  
  4682. TR_FEAT_MOD FSETTR_FEAT_MOD__2649(FSETTR_FEAT_MOD self, INT ind_2650) {
  4683.  TR_FEAT_MOD noname2651;
  4684.  BOOL local0;
  4685.  INT local1;
  4686.  INT local2;
  4687.  if ((!((self==((FSETTR_FEAT_MOD) NULL))))) {
  4688.   local1 = 0;
  4689.   local2 = (self->asize);
  4690.   local0 = INT_is_bet_INT_I(ind_2650, local1, (c_INT_minus_INT_INT_chk(local2,1)));
  4691.  } else {
  4692.   local0 = FALSE;
  4693.  }
  4694.  if (!(local0)) {
  4695.   fprintf(stderr,"Violation of precondition ../Library/aref.sa:33:7\n");
  4696.   exit(16);
  4697.  }
  4698.  if (ind_2650<0||ind_2650>=self->asize) {
  4699.   fprintf(stderr,"Index out of bounds ../Library/aref.sa:33:7\n");
  4700.   exit(16);
  4701.  }
  4702.  return self->arr_part[ind_2650];
  4703.  if (!FSETTR_FEAT_MOD__2627(self)) {
  4704.   fprintf(stderr,"Failed invariant FSET{TR_FEAT_MOD}::invariant:BOOL ../Library/aref.sa:33:7\n");
  4705.   exit(16);
  4706.  }
  4707. }
  4708.  
  4709.  
  4710. BOOL FSETTR_FEAT_MOD__2652(FSETTR_FEAT_MOD self, TR_FEAT_MOD e1_2653, TR_FEAT_MOD e2_2654) {
  4711.  BOOL noname2655 = ((BOOL) 0);
  4712.  return c_SYS_ob_eq_OB_OB_BOOL(((OB) e1_2653),((OB) e2_2654));
  4713.  if (!FSETTR_FEAT_MOD__2627(self)) {
  4714.   fprintf(stderr,"Failed invariant FSET{TR_FEAT_MOD}::invariant:BOOL ../Library/fset.sa:44:9\n");
  4715.   exit(16);
  4716.  }
  4717. }
  4718.  
  4719.  
  4720. void FSETTR_FEAT_MOD__2656(FSETTR_FEAT_MOD self, INT ind_2657, TR_FEAT_MOD val_2658) {
  4721.  BOOL local0;
  4722.  INT local1;
  4723.  INT local2;
  4724.  if ((!((self==((FSETTR_FEAT_MOD) NULL))))) {
  4725.   local1 = 0;
  4726.   local2 = (self->asize);
  4727.   local0 = INT_is_bet_INT_I(ind_2657, local1, (c_INT_minus_INT_INT_chk(local2,1)));
  4728.  } else {
  4729.   local0 = FALSE;
  4730.  }
  4731.  if (!(local0)) {
  4732.   fprintf(stderr,"Violation of precondition ../Library/aref.sa:38:7\n");
  4733.   exit(16);
  4734.  }
  4735.  if (ind_2657<0||ind_2657>=self->asize) {
  4736.   fprintf(stderr,"Index out of bounds ../Library/aref.sa:38:7\n");
  4737.   exit(16);
  4738.  }
  4739.  self->arr_part[ind_2657] = val_2658;
  4740.  if (!FSETTR_FEAT_MOD__2627(self)) {
  4741.   fprintf(stderr,"Failed invariant FSET{TR_FEAT_MOD}::invariant:BOOL ../Library/aref.sa:38:7\n");
  4742.   exit(16);
  4743.  }
  4744. }
  4745.  
  4746.  
  4747. FSETTR_FEAT_MOD FSETTR_FEAT_MOD__2645(FSETTR_FEAT_MOD self, TR_FEAT_MOD e_2659) {
  4748.  FSETTR_FEAT_MOD noname2660;
  4749.  FSETTR_FEAT_MOD r_2661;
  4750.  INT asz_2662 = ((INT) 0);
  4751.  INT h = ((INT) 0);
  4752.  TR_FEAT_MOD te;
  4753.  TR_FEAT_MOD te_2663;
  4754.  INT local0;
  4755.  INT local1;
  4756.  INT local2;
  4757.  r_2661 = self;
  4758.  if ((r_2661==((FSETTR_FEAT_MOD) NULL))) {
  4759.   r_2661 = FSETTR_FEAT_MOD__2628(self, 5);
  4760.  }
  4761.  else {
  4762.   local0 = (c_INT_plus_INT_INT_chk(self->hsize,1));
  4763.   local1 = (c_INT_times_INT_INT_chk(local0,2));
  4764.   if ((local1>(self->asize))) {
  4765.    r_2661 = FSETTR_FEAT_MOD__2638(self);
  4766.   }
  4767.  }
  4768.  asz_2662 = (r_2661->asize);
  4769.  local2 = FSETTR_FEAT_MOD__2646(r_2661, e_2659);
  4770.  h = (local2&(c_INT_minus_INT_INT_chk(asz_2662,2)));
  4771.  while (1) {
  4772.   te = FSETTR_FEAT_MOD__2649(r_2661, h);
  4773.   if (FSETTR_FEAT_MOD__2652(self, te, FSETTR_FEAT_MOD_(self))) {
  4774.    goto after_loop;
  4775.   }
  4776.   else {
  4777.    if (FSETTR_FEAT_MOD__2652(self, te, e_2659)) {
  4778.     FSETTR_FEAT_MOD__2656(r_2661, h, e_2659);
  4779.     return r_2661;
  4780.    }
  4781.   }
  4782.   h = (c_INT_plus_INT_INT_chk(h,1));
  4783.  }
  4784.  after_loop: ;
  4785.  if ((h==(c_INT_minus_INT_INT_chk(asz_2662,1)))) {
  4786.   h = 0;
  4787.   while (1) {
  4788.    te_2663 = FSETTR_FEAT_MOD__2649(r_2661, h);
  4789.    if (FSETTR_FEAT_MOD__2652(self, te_2663, FSETTR_FEAT_MOD_(self))) {
  4790.     goto after_loop_2665;
  4791.    }
  4792.    else {
  4793.     if (FSETTR_FEAT_MOD__2652(self, te_2663, e_2659)) {
  4794.      FSETTR_FEAT_MOD__2656(r_2661, h, e_2659);
  4795.      return r_2661;
  4796.     }
  4797.    }
  4798.    h = (c_INT_plus_INT_INT_chk(h,1));
  4799.   }
  4800.   after_loop_2665: ;
  4801.   if (!((h!=(c_INT_minus_INT_INT_chk(asz_2662,1))))) {
  4802.    fprintf(stderr,"Violation of assertion ../Library/fset.sa:177:15\n");
  4803.    exit(16);
  4804.   }
  4805.  }
  4806.  FSETTR_FEAT_MOD__2656(r_2661, h, e_2659);
  4807.  r_2661->hsize = (c_INT_plus_INT_INT_chk(r_2661->hsize,1));
  4808.  return r_2661;
  4809.  if (!FSETTR_FEAT_MOD__2627(self)) {
  4810.   fprintf(stderr,"Failed invariant FSET{TR_FEAT_MOD}::invariant:BOOL ../Library/fset.sa:158:9\n");
  4811.   exit(16);
  4812.  }
  4813. }
  4814.  
  4815.  
  4816. TR_FEAT_MOD IMPL_INCLUDE_mod(IMPL_INCLUDE self, IDENT i) {
  4817.  TR_FEAT_MOD noname2667;
  4818.  TR_FEAT_MOD e_2668;
  4819.  e_2668 = self->tr->mods;
  4820.  while (1) {
  4821.   if ((e_2668==((TR_FEAT_MOD) NULL))) {
  4822.    goto after_loop;
  4823.   }
  4824.   if (IDENT_is_eq_IDEN(e_2668->name_19, i)) {
  4825.    self->used_mods = FSETTR_FEAT_MOD__2645(self->used_mods, e_2668);
  4826.    return e_2668;
  4827.   }
  4828.   e_2668 = e_2668->next_8;
  4829.  }
  4830.  after_loop: ;
  4831.  return ((TR_FEAT_MOD) NULL);
  4832. }
  4833.  
  4834.  
  4835. BOOL SIG_is_shared_wr(SIG self) {
  4836.  BOOL noname2670 = ((BOOL) 0);
  4837.  BOOL local0;
  4838.  INT local1;
  4839.  local1 = ARRAYTP_size_INT(self->args_7);
  4840.  if ((local1==1)) {
  4841.   local0 = (self->ret==((TP) NULL));
  4842.  } else {
  4843.   local0 = FALSE;
  4844.  }
  4845.  return local0;
  4846. }
  4847.  
  4848.  
  4849. BOOL ELT_is_shared_wr(ELT self) {
  4850.  BOOL noname2671 = ((BOOL) 0);
  4851.  TR_CLASS_ELT ltr;
  4852.  if ((!(SIG_is_shared_wr(self->sig_6)))) {
  4853.   return FALSE;
  4854.  }
  4855.  ltr = self->tr;
  4856.  if (ltr==NULL) {
  4857.  } else
  4858.  switch (ltr->header.tag) {
  4859.   case TR_SHARED_DEF_tag:
  4860.    return TRUE; break;
  4861.   default: ;
  4862.  }
  4863.  return FALSE;
  4864. }
  4865.  
  4866.  
  4867. BOOL SIG_is_attr_writ(SIG self) {
  4868.  BOOL noname2672 = ((BOOL) 0);
  4869.  TP local0;
  4870.  INT local1;
  4871.  BOOL local2;
  4872.  INT local3;
  4873.  TP local4;
  4874.  BOOL local5;
  4875.  INT local6;
  4876.  local0 = self->tp;
  4877.  local1 = (*TP_kind_INT[local0->header.tag+TP_kind_INT_offset])(local0);
  4878.  if ((local1==shared_TP_KIND_v)) {
  4879.   local3 = ARRAYTP_size_INT(self->args_7);
  4880.   if ((local3==1)) {
  4881.    local4 = self->tp;
  4882.    local2 = (*TP_is_eq_TP_BOOL[local4->header.tag+TP_is_eq_TP_BOOL_offset])(local4, self->ret);
  4883.   } else {
  4884.    local2 = FALSE;
  4885.   }
  4886.   return local2;
  4887.  }
  4888.  local6 = ARRAYTP_size_INT(self->args_7);
  4889.  if ((local6==1)) {
  4890.   local5 = (self->ret==((TP) NULL));
  4891.  } else {
  4892.   local5 = FALSE;
  4893.  }
  4894.  return local5;
  4895. }
  4896.  
  4897.  
  4898. BOOL ELT_is_attr_writ(ELT self) {
  4899.  BOOL noname2673 = ((BOOL) 0);
  4900.  TR_CLASS_ELT ltr;
  4901.  if ((!(SIG_is_attr_writ(self->sig_6)))) {
  4902.   return FALSE;
  4903.  }
  4904.  ltr = self->tr;
  4905.  if (ltr==NULL) {
  4906.  } else
  4907.  switch (ltr->header.tag) {
  4908.   case TR_ATTR_DEF_tag:
  4909.    return TRUE; break;
  4910.   default: ;
  4911.  }
  4912.  return FALSE;
  4913. }
  4914.  
  4915.  
  4916. ELT IMPL_INCLUDE_mod_2674(IMPL_INCLUDE self, ELT e_2675) {
  4917.  ELT noname2676;
  4918.  TP_CONTEXT con_2677;
  4919.  IDENT name_2678 = IDENT_zero;
  4920.  BOOL read_pri = ((BOOL) 0);
  4921.  BOOL write_pri = ((BOOL) 0);
  4922.  TR_FEAT_MOD m;
  4923.  SIG sig_2679 = ((SIG) NULL);
  4924.  BOOL pri_2680 = ((BOOL) 0);
  4925.  TR_CLASS_ELT etr;
  4926.  TP_CONTEXT local0;
  4927.  TP_CLASS local1;
  4928.  ARRAYIDENT local2;
  4929.  ARRAYTP local3;
  4930.  IDENT local4;
  4931.  BOOL local5;
  4932.  BOOL local6;
  4933.  if (!((!((e_2675==((ELT) NULL)))))) {
  4934.   fprintf(stderr,"Violation of precondition ./impl.sa:371:13\n");
  4935.   exit(16);
  4936.  }
  4937.  local0 = ((TP_CONTEXT) NULL);
  4938.  local1 = self->tp;
  4939.  local2 = e_2675->con->pnames;
  4940.  local3 = e_2675->con->ptypes;
  4941.  con_2677 = TP_CONTEXT_creat(local0, local1, local2, local3, IMPL_INCLUDE_pro(self));
  4942.  if ((con_2677==((TP_CONTEXT) NULL))) {
  4943.   return ((ELT) NULL);
  4944.  }
  4945.  m = IMPL_INCLUDE_mod(self, ELT_name_IDENT(e_2675));
  4946.  if ((!((m==((TR_FEAT_MOD) NULL))))) {
  4947.   local4 = m->new_name;
  4948.   if (IDENT_is_eq_IDEN(local4, IDENT_create_STR(IDENT_zero, ((STR) NULL)))) {
  4949.    return ((ELT) NULL);
  4950.   }
  4951.   name_2678 = m->new_name;
  4952.   read_pri = m->is_private;
  4953.   if (m->is_private) {
  4954.    local5 = TRUE;
  4955.   } else {
  4956.    local5 = m->is_readonly;
  4957.   }
  4958.   write_pri = local5;
  4959.  }
  4960.  else {
  4961.   name_2678 = ELT_name_IDENT(e_2675);
  4962.   if (self->tr->is_private) {
  4963.    local6 = TRUE;
  4964.   } else {
  4965.    local6 = e_2675->is_private;
  4966.   }
  4967.   read_pri = local6;
  4968.   write_pri = read_pri;
  4969.  }
  4970.  etr = e_2675->tr;
  4971.  if (etr==NULL) {
  4972.  } else
  4973.  switch (etr->header.tag) {
  4974.   case TR_CONST_DEF_tag:
  4975.    sig_2679 = SIG_const_reader(((SIG) NULL), ((TR_CONST_DEF) etr), name_2678, con_2677);
  4976.    pri_2680 = read_pri; break;
  4977.   case TR_SHARED_DEF_tag:
  4978.    if (ELT_is_shared_wr(e_2675)) {
  4979.     sig_2679 = SIG_shared_write(((SIG) NULL), ((TR_SHARED_DEF) etr), name_2678, con_2677);
  4980.     pri_2680 = write_pri;
  4981.    }
  4982.    else {
  4983.     sig_2679 = SIG_shared_reade(((SIG) NULL), ((TR_SHARED_DEF) etr), name_2678, con_2677);
  4984.     pri_2680 = read_pri;
  4985.    } break;
  4986.   case TR_ATTR_DEF_tag:
  4987.    if (ELT_is_attr_writ(e_2675)) {
  4988.     sig_2679 = SIG_attr_writer_(((SIG) NULL), ((TR_ATTR_DEF) etr), name_2678, con_2677);
  4989.     pri_2680 = write_pri;
  4990.    }
  4991.    else {
  4992.     sig_2679 = SIG_attr_reader_(((SIG) NULL), ((TR_ATTR_DEF) etr), name_2678, con_2677);
  4993.     pri_2680 = read_pri;
  4994.    } break;
  4995.   case TR_ROUT_DEF_tag:
  4996.    sig_2679 = SIG_rout_sig_TR_(((SIG) NULL), ((TR_ROUT_DEF) etr), name_2678, con_2677);
  4997.    pri_2680 = read_pri; break;
  4998.   default: ;
  4999.    fprintf(stderr,"No applicable type in typecase ./impl.sa:391:26\n");
  5000.    exit(16);
  5001.  }
  5002.  if ((sig_2679==((SIG) NULL))) {
  5003.   return ((ELT) NULL);
  5004.  }
  5005.  return ELT_create_SIG_S(((ELT) NULL), sig_2679, e_2675->srcsig, e_2675->tr, con_2677, pri_2680);
  5006. }
  5007.  
  5008.  
  5009. void IMPL_INCLUDE_inc_2681(IMPL_INCLUDE self, ELT en, ELT f_2682) {
  5010.  PROG local0;
  5011.  PROG local1;
  5012.  STR local2;
  5013.  STR local3;
  5014.  STR local4;
  5015.  STR local5;
  5016.  local0 = IMPL_INCLUDE_pro(self);
  5017.  PROG_err_loc_PRO(local0, ((PROG_ERR) self->tr));
  5018.  local1 = IMPL_INCLUDE_pro(self);
  5019.  local2 = ((STR) &Twooftheincluded);
  5020.  local3 = STR_plus_STR_STR(local2, SIG_str_STR(en->sig_6));
  5021.  local4 = STR_plus_STR_STR(local3, ((STR) &and_2683));
  5022.  local5 = STR_plus_STR_STR(local4, SIG_str_STR(f_2682->sig_6));
  5023.  PROG_err_STR(local1, STR_plus_STR_STR(local5, ((STR) &name_2684)));
  5024. }
  5025.  
  5026.  
  5027. INT FSETTR_FEAT_MOD__2685(FSETTR_FEAT_MOD self) {
  5028.  INT noname2686 = ((INT) 0);
  5029.  if ((self==((FSETTR_FEAT_MOD) NULL))) {
  5030.   return 0;
  5031.  }
  5032.  return self->hsize;
  5033.  if (!FSETTR_FEAT_MOD__2627(self)) {
  5034.   fprintf(stderr,"Failed invariant FSET{TR_FEAT_MOD}::invariant:BOOL ../Library/fset.sa:89:7\n");
  5035.   exit(16);
  5036.  }
  5037. }
  5038.  
  5039.  
  5040. INT TR_FEAT_MOD_size_INT(TR_FEAT_MOD self) {
  5041.  INT noname2687 = ((INT) 0);
  5042.  INT r_2688 = ((INT) 0);
  5043.  TR_FEAT_MOD n_2689;
  5044.  if ((self==((TR_FEAT_MOD) NULL))) {
  5045.   return 0;
  5046.  }
  5047.  r_2688 = 1;
  5048.  n_2689 = self->next_8;
  5049.  while (1) {
  5050.   if ((n_2689==((TR_FEAT_MOD) NULL))) {
  5051.    goto after_loop;
  5052.   }
  5053.   r_2688 = (c_INT_plus_INT_INT_chk(r_2688,1));
  5054.   n_2689 = n_2689->next_8;
  5055.  }
  5056.  after_loop: ;
  5057.  return r_2688;
  5058. }
  5059.  
  5060.  
  5061. BOOL FSETTR_FEAT_MOD__2691(FSETTR_FEAT_MOD self, TR_FEAT_MOD e_2692) {
  5062.  BOOL noname2693 = ((BOOL) 0);
  5063.  INT h = ((INT) 0);
  5064.  TR_FEAT_MOD te;
  5065.  TR_FEAT_MOD te_2694;
  5066.  INT local0;
  5067.  INT local1;
  5068.  INT local2;
  5069.  INT local3;
  5070.  if ((self==((FSETTR_FEAT_MOD) NULL))) {
  5071.   return FALSE;
  5072.  }
  5073.  local0 = FSETTR_FEAT_MOD__2646(self, e_2692);
  5074.  local1 = (self->asize);
  5075.  h = (local0&(c_INT_minus_INT_INT_chk(local1,2)));
  5076.  while (1) {
  5077.   te = FSETTR_FEAT_MOD__2649(self, h);
  5078.   if (FSETTR_FEAT_MOD__2652(self, te, e_2692)) {
  5079.    return TRUE;
  5080.   }
  5081.   else {
  5082.    if (FSETTR_FEAT_MOD__2652(self, te, FSETTR_FEAT_MOD_(self))) {
  5083.     goto after_loop;
  5084.    }
  5085.   }
  5086.   h = (c_INT_plus_INT_INT_chk(h,1));
  5087.  }
  5088.  after_loop: ;
  5089.  local2 = (self->asize);
  5090.  if ((h==(c_INT_minus_INT_INT_chk(local2,1)))) {
  5091.   h = 0;
  5092.   while (1) {
  5093.    te_2694 = FSETTR_FEAT_MOD__2649(self, h);
  5094.    if (FSETTR_FEAT_MOD__2652(self, te_2694, e_2692)) {
  5095.     return TRUE;
  5096.    }
  5097.    else {
  5098.     if (FSETTR_FEAT_MOD__2652(self, te_2694, FSETTR_FEAT_MOD_(self))) {
  5099.      goto after_loop_2696;
  5100.     }
  5101.    }
  5102.    h = (c_INT_plus_INT_INT_chk(h,1));
  5103.   }
  5104.   after_loop_2696: ;
  5105.   local3 = (self->asize);
  5106.   if (!((h!=(c_INT_minus_INT_INT_chk(local3,1))))) {
  5107.    fprintf(stderr,"Violation of assertion ../Library/fset.sa:127:15\n");
  5108.    exit(16);
  5109.   }
  5110.  }
  5111.  return FALSE;
  5112.  if (!FSETTR_FEAT_MOD__2627(self)) {
  5113.   fprintf(stderr,"Failed invariant FSET{TR_FEAT_MOD}::invariant:BOOL ../Library/fset.sa:112:7\n");
  5114.   exit(16);
  5115.  }
  5116. }
  5117.  
  5118.  
  5119. void IMPL_INCLUDE_unu(IMPL_INCLUDE self, TR_FEAT_MOD t_2698) {
  5120.  PROG local0;
  5121.  PROG local1;
  5122.  STR local2;
  5123.  local0 = IMPL_INCLUDE_pro(self);
  5124.  PROG_err_loc_PRO(local0, ((PROG_ERR) t_2698));
  5125.  local1 = IMPL_INCLUDE_pro(self);
  5126.  local2 = STR_plus_STR_STR(((STR) &Therearenofeatur), t_2698->name_19.str_4);
  5127.  PROG_err_STR(local1, STR_plus_STR_STR(local2, ((STR) &name_2699)));
  5128. }
  5129.  
  5130.  
  5131. ELT_TBL IMPL_INCLUDE_inc_2700(IMPL_INCLUDE self) {
  5132.  ELT_TBL noname2701;
  5133.  ELT_TBL r_2702 = ((ELT_TBL) NULL);
  5134.  ELT_TBL noname2703;
  5135.  ELT e_2704;
  5136.  ELT en;
  5137.  ELT f_2705;
  5138.  TR_FEAT_MOD m;
  5139.  ELT local0;
  5140.  INT local1;
  5141.  {
  5142.   struct ELT_TBL_elt_ELT_frame_struct temp2706_0;
  5143.   ELT_TBL_elt_ELT_frame 
  5144.   noname2707 = &temp2706_0;
  5145.   noname2707->state = 0;
  5146.   while (1) {
  5147.    if (noname2707->state == 0) {
  5148.     noname2703 = self->impl->elts;
  5149.     noname2707->arg0 = noname2703;
  5150.    }
  5151.    local0 = ELT_TBL_elt_ELT(noname2707);
  5152.    if (noname2707->state == -1) goto after_loop;
  5153.    e_2704 = local0;
  5154.    en = IMPL_INCLUDE_mod_2674(self, e_2704);
  5155.    if ((!((en==((ELT) NULL))))) {
  5156.     f_2705 = ELT_TBL_elt_conf(r_2702, en);
  5157.     if ((!((f_2705==((ELT) NULL))))) {
  5158.      IMPL_INCLUDE_inc_2681(self, en, f_2705);
  5159.     }
  5160.     else {
  5161.      r_2702 = ELT_TBL_insert_E(r_2702, en);
  5162.     }
  5163.    }
  5164.   }
  5165.  }
  5166.  after_loop: ;
  5167.  local1 = FSETTR_FEAT_MOD__2685(self->used_mods);
  5168.  if ((local1!=TR_FEAT_MOD_size_INT(self->tr->mods))) {
  5169.   m = self->tr->mods;
  5170.   while (1) {
  5171.    if ((m==((TR_FEAT_MOD) NULL))) {
  5172.     goto after_loop_2708;
  5173.    }
  5174.    if ((!(FSETTR_FEAT_MOD__2691(self->used_mods, m)))) {
  5175.     IMPL_INCLUDE_unu(self, m);
  5176.    }
  5177.    m = m->next_8;
  5178.   }
  5179.   after_loop_2708: ;
  5180.  }
  5181.  return r_2702;
  5182. }
  5183.  
  5184.  
  5185. IMPL_INCLUDE IMPL_INCLUDE_cre(IMPL_INCLUDE self, TP_CLASS tp_2710, TR_INCLUDE_CLAUSE tr_2711) {
  5186.  IMPL_INCLUDE noname2712;
  5187.  IMPL_INCLUDE r_2713;
  5188.  BOOL local0;
  5189.  IMPL_INCLUDE local1;
  5190.  OUT local2;
  5191.  OUT local3;
  5192.  OUT local4;
  5193.  OUT local5;
  5194.  OUT local6;
  5195.  if ((!((tp_2710==((TP_CLASS) NULL))))) {
  5196.   local0 = (!((tr_2711==((TR_INCLUDE_CLAUSE) NULL))));
  5197.  } else {
  5198.   local0 = FALSE;
  5199.  }
  5200.  if (!(local0)) {
  5201.   fprintf(stderr,"Violation of precondition ./impl.sa:236:9\n");
  5202.   exit(16);
  5203.  }
  5204.  local1 = ((IMPL_INCLUDE) sbi_alloc(sizeof(struct IMPL_INCLUDE_struct), IMPL_INCLUDE_tag));
  5205.  r_2713 = local1;
  5206.  r_2713->tp = tp_2710;
  5207.  r_2713->tr = tr_2711;
  5208.  r_2713->itp = IMPL_INCLUDE_inc_2609(r_2713);
  5209.  if ((r_2713->itp==((TP_CLASS) NULL))) {
  5210.   return ((IMPL_INCLUDE) NULL);
  5211.  }
  5212.  if (tp_2710->prog->show_include) {
  5213.   local2 = OUT_create_OUT(((OUT) NULL));
  5214.   local3 = OUT_plus_STR_OUT(local2, ((STR) &Including));
  5215.   local4 = OUT_plus_STR_OUT(local3, TP_CLASS_str_STR(r_2713->itp));
  5216.   local5 = OUT_plus_STR_OUT(local4, ((STR) &in_2714));
  5217.   local6 = OUT_plus_STR_OUT(local5, TP_CLASS_str_STR(tp_2710));
  5218.   OUT_plus_STR(local6, ((STR) &name_2715));
  5219.  }
  5220.  r_2713->impl = IMPL_INCLUDE_inc_2614(r_2713);
  5221.  if ((r_2713->impl==((IMPL) NULL))) {
  5222.   return ((IMPL_INCLUDE) NULL);
  5223.  }
  5224.  if (IMPL_INCLUDE_tes(r_2713)) {
  5225.   return ((IMPL_INCLUDE) NULL);
  5226.  }
  5227.  if (IMPL_INCLUDE_tes_2619(r_2713)) {
  5228.   return ((IMPL_INCLUDE) NULL);
  5229.  }
  5230.  r_2713->elt_tbl = IMPL_INCLUDE_inc_2700(r_2713);
  5231.  if ((r_2713->elt_tbl==((ELT_TBL) NULL))) {
  5232.   return ((IMPL_INCLUDE) NULL);
  5233.  }
  5234.  return r_2713;
  5235. }
  5236.  
  5237.  
  5238. INT FLISTIMPL_INCLUD(FLISTIMPL_INCLUDE self) {
  5239.  INT noname2716 = ((INT) 0);
  5240.   return self->asize;
  5241.  fprintf(stderr,"Last statement wasn't return ../Library/aref.sa:20:8\n");
  5242.  exit(16);
  5243. }
  5244.  
  5245.  
  5246. INT FLISTIMPL_INCLUD_2717(FLISTIMPL_INCLUDE self) {
  5247.  INT noname2718 = ((INT) 0);
  5248.  if ((self==((FLISTIMPL_INCLUDE) NULL))) {
  5249.   return 0;
  5250.  }
  5251.  return self->loc_17;
  5252.  if (!FLISTIMPL_INCLUD_2719(self)) {
  5253.   fprintf(stderr,"Failed invariant FLIST{IMPL_INCLUDE}::invariant:BOOL ../Library/flist.sa:50:7\n");
  5254.   exit(16);
  5255.  }
  5256. }
  5257.  
  5258.  
  5259. BOOL FLISTIMPL_INCLUD_2720(FLISTIMPL_INCLUDE self) {
  5260.  BOOL noname2721 = ((BOOL) 0);
  5261.  INT local0;
  5262.  local0 = FLISTIMPL_INCLUD_2717(self);
  5263.  return (local0==0);
  5264.  if (!FLISTIMPL_INCLUD_2719(self)) {
  5265.   fprintf(stderr,"Failed invariant FLIST{IMPL_INCLUDE}::invariant:BOOL ../Library/flist.sa:113:11\n");
  5266.   exit(16);
  5267.  }
  5268. }
  5269.  
  5270.  
  5271. void FLISTIMPL_INCLUD_2722(FLISTIMPL_INCLUDE self) {
  5272.  IMPL_INCLUDE nil = ((IMPL_INCLUDE) NULL);
  5273.  FLISTIMPL_INCLUDE noname2723;
  5274.  if (!((!((self==((FLISTIMPL_INCLUDE) NULL)))))) {
  5275.   fprintf(stderr,"Violation of precondition ../Library/aref.sa:43:9\n");
  5276.   exit(16);
  5277.  }
  5278.  {
  5279.   struct FLISTIMPL_INCLUD_2725_frame_struct temp2724_0;
  5280.   FLISTIMPL_INCLUD_2725_frame 
  5281.   noname2726 = &temp2724_0;
  5282.   noname2726->state = 0;
  5283.   while (1) {
  5284.    if (noname2726->state == 0) {
  5285.     noname2723 = self;
  5286.     noname2726->arg0 = noname2723;
  5287.    }
  5288.    noname2726->arg1 = nil;
  5289.    FLISTIMPL_INCLUD_2725(noname2726);
  5290.    if (noname2726->state == -1) goto after_loop;
  5291.    0 /* No return value from iter call */;
  5292.   }
  5293.  }
  5294.  after_loop: ;
  5295. }
  5296.  
  5297.  
  5298. void FLISTIMPL_INCLUD_2727(FLISTIMPL_INCLUDE self) {
  5299.  if (FLISTIMPL_INCLUD_2720(self)) {
  5300.   return;
  5301.  }
  5302.  else {
  5303.   FLISTIMPL_INCLUD_2722(self);
  5304.   self->loc_17 = 0;
  5305.  }
  5306.  if (!FLISTIMPL_INCLUD_2719(self)) {
  5307.   fprintf(stderr,"Failed invariant FLIST{IMPL_INCLUDE}::invariant:BOOL ../Library/flist.sa:117:8\n");
  5308.   exit(16);
  5309.  }
  5310. }
  5311.  
  5312.  
  5313. void FLISTIMPL_INCLUD_2728(FLISTIMPL_INCLUDE self, INT ind_2729, IMPL_INCLUDE val_2730) {
  5314.  BOOL local0;
  5315.  INT local1;
  5316.  INT local2;
  5317.  if ((!((self==((FLISTIMPL_INCLUDE) NULL))))) {
  5318.   local1 = 0;
  5319.   local2 = (self->asize);
  5320.   local0 = INT_is_bet_INT_I(ind_2729, local1, (c_INT_minus_INT_INT_chk(local2,1)));
  5321.  } else {
  5322.   local0 = FALSE;
  5323.  }
  5324.  if (!(local0)) {
  5325.   fprintf(stderr,"Violation of precondition ../Library/aref.sa:38:7\n");
  5326.   exit(16);
  5327.  }
  5328.  if (ind_2729<0||ind_2729>=self->asize) {
  5329.   fprintf(stderr,"Index out of bounds ../Library/aref.sa:38:7\n");
  5330.   exit(16);
  5331.  }
  5332.  self->arr_part[ind_2729] = val_2730;
  5333. }
  5334.  
  5335.  
  5336. void FLISTIMPL_INCLUD_2731(FLISTIMPL_INCLUDE self, INT ind_2732, IMPL_INCLUDE val_2733) {
  5337.  BOOL local0;
  5338.  INT local1;
  5339.  if ((!((self==((FLISTIMPL_INCLUDE) NULL))))) {
  5340.   local1 = 0;
  5341.   local0 = INT_is_bet_INT_I(ind_2732, local1, (c_INT_minus_INT_INT_chk(self->loc_17,1)));
  5342.  } else {
  5343.   local0 = FALSE;
  5344.  }
  5345.  if (!(local0)) {
  5346.   fprintf(stderr,"Violation of precondition ../Library/flist.sa:73:7\n");
  5347.   exit(16);
  5348.  }
  5349.  FLISTIMPL_INCLUD_2728(self, ind_2732, val_2733);
  5350.  if (!FLISTIMPL_INCLUD_2719(self)) {
  5351.   fprintf(stderr,"Failed invariant FLIST{IMPL_INCLUDE}::invariant:BOOL ../Library/flist.sa:73:7\n");
  5352.   exit(16);
  5353.  }
  5354. }
  5355.  
  5356.  
  5357. FLISTIMPL_INCLUDE FLISTIMPL_INCLUD_2734(FLISTIMPL_INCLUDE self, IMPL_INCLUDE e_2735) {
  5358.  FLISTIMPL_INCLUDE noname2736;
  5359.  FLISTIMPL_INCLUDE r_2737 = ((FLISTIMPL_INCLUDE) NULL);
  5360.  FLISTIMPL_INCLUDE noname2738;
  5361.  FLISTIMPL_INCLUDE noname2739;
  5362.  FLISTIMPL_INCLUDE local0;
  5363.  INT local1;
  5364.  FLISTIMPL_INCLUDE local2;
  5365.  INT local3;
  5366.  IMPL_INCLUDE local4;
  5367.  INT local5;
  5368.  if ((self==((FLISTIMPL_INCLUDE) NULL))) {
  5369.   local0 = ((FLISTIMPL_INCLUDE) sbi_arr_alloc(sizeof(struct FLISTIMPL_INCLUDE_struct), FLISTIMPL_INCLUDE_tag, sizeof(IMPL_INCLUDE) , 5));
  5370.   local0->asize = 5;
  5371.   r_2737 = local0;
  5372.  }
  5373.  else {
  5374.   local1 = self->loc_17;
  5375.   if ((local1<(self->asize))) {
  5376.    r_2737 = self;
  5377.   }
  5378.   else {
  5379.    local3 = 2;
  5380.    local2 = ((FLISTIMPL_INCLUDE) sbi_arr_alloc(sizeof(struct FLISTIMPL_INCLUDE_struct), FLISTIMPL_INCLUDE_tag, sizeof(IMPL_INCLUDE) , (c_INT_times_INT_INT_chk(local3,(self->asize)))));
  5381.    local2->asize = (c_INT_times_INT_INT_chk(local3,(self->asize)));
  5382.    r_2737 = local2;
  5383.    r_2737->loc_17 = self->loc_17;
  5384.    {
  5385.     struct FLISTIMPL_INCLUD_2741_frame_struct temp2740_0;
  5386.     FLISTIMPL_INCLUD_2741_frame 
  5387.     noname2742 = &temp2740_0;
  5388.     struct FLISTIMPL_INCLUD_2725_frame_struct temp2740_1;
  5389.     FLISTIMPL_INCLUD_2725_frame 
  5390.     noname2743 = &temp2740_1;
  5391.     noname2742->state = 0;
  5392.     noname2743->state = 0;
  5393.     while (1) {
  5394.      if (noname2743->state == 0) {
  5395.       noname2739 = r_2737;
  5396.       noname2743->arg0 = noname2739;
  5397.      }
  5398.      if (noname2742->state == 0) {
  5399.       noname2738 = self;
  5400.       noname2742->arg0 = noname2738;
  5401.      }
  5402.      local4 = FLISTIMPL_INCLUD_2741(noname2742);
  5403.      if (noname2742->state == -1) goto after_loop;
  5404.      noname2743->arg1 = local4;
  5405.      FLISTIMPL_INCLUD_2725(noname2743);
  5406.      if (noname2743->state == -1) goto after_loop;
  5407.      0 /* No return value from iter call */;
  5408.     }
  5409.    }
  5410.    after_loop: ;
  5411.    FLISTIMPL_INCLUD_2727(self);
  5412.   }
  5413.  }
  5414.  r_2737->loc_17 = (c_INT_plus_INT_INT_chk(r_2737->loc_17,1));
  5415.  local5 = (c_INT_minus_INT_INT_chk(r_2737->loc_17,1));
  5416.  FLISTIMPL_INCLUD_2731(r_2737, local5, e_2735);
  5417.  return r_2737;
  5418.  if (!FLISTIMPL_INCLUD_2719(self)) {
  5419.   fprintf(stderr,"Failed invariant FLIST{IMPL_INCLUDE}::invariant:BOOL ../Library/flist.sa:79:7\n");
  5420.   exit(16);
  5421.  }
  5422. }
  5423.  
  5424.  
  5425. void IMPL_CREATE_do_incs(IMPL_CREATE self) {
  5426.  TR_CLASS_ELT e_2744;
  5427.  IMPL_INCLUDE ii;
  5428.  PROG local0;
  5429.  PROG local1;
  5430.  TR_CLASS_ELT local2;
  5431.  e_2744 = self->tr->body;
  5432.  while (1) {
  5433.   if ((!((e_2744==((TR_CLASS_ELT) NULL))))) {
  5434.   }
  5435.   else {
  5436.    goto after_loop;
  5437.   }
  5438.   if (e_2744==NULL) {
  5439.   } else
  5440.   switch (e_2744->header.tag) {
  5441.    case TR_INCLUDE_CLAUSE_tag:
  5442.     if (self->is_external) {
  5443.      local0 = IMPL_CREATE_prog(self);
  5444.      PROG_err_loc_PRO(local0, ((PROG_ERR) e_2744));
  5445.      local1 = IMPL_CREATE_prog(self);
  5446.      PROG_err_STR(local1, ((STR) &Externalclassesm_2746));
  5447.     }
  5448.     else {
  5449.      ii = IMPL_INCLUDE_cre(((IMPL_INCLUDE) NULL), self->tp, ((TR_INCLUDE_CLAUSE) e_2744));
  5450.      if ((!((ii==((IMPL_INCLUDE) NULL))))) {
  5451.       self->incs = FLISTIMPL_INCLUD_2734(self->incs, ii);
  5452.      }
  5453.     } break;
  5454.    default: ;
  5455.   }
  5456.   local2 = e_2744;
  5457.   e_2744 = (*TR_CLASS_ELT_nex[local2->header.tag+TR_CLASS_ELT_nex_offset])(local2);
  5458.  }
  5459.  after_loop: ;
  5460. }
  5461.  
  5462.  
  5463. IMPL IMPL_create_IMPL(IMPL self) {
  5464.  IMPL noname2747;
  5465.  IMPL local0;
  5466.  local0 = ((IMPL) sbi_alloc(sizeof(struct IMPL_struct), IMPL_tag));
  5467.  return local0;
  5468. }
  5469.  
  5470.  
  5471. BOOL TP_CLASS_is_eq_T(TP_CLASS self, TP t_2748) {
  5472.  BOOL noname2749 = ((BOOL) 0);
  5473.  return c_SYS_ob_eq_OB_OB_BOOL(((OB) self),((OB) t_2748));
  5474. }
  5475.  
  5476.  
  5477. void IMPL_CREATE_arra(IMPL_CREATE self, IMPL_INCLUDE inc, TP_CLASS a1, TP_CLASS a2) {
  5478.  PROG local0;
  5479.  PROG local1;
  5480.  STR local2;
  5481.  STR local3;
  5482.  STR local4;
  5483.  STR local5;
  5484.  local0 = IMPL_CREATE_prog(self);
  5485.  PROG_err_loc_PRO(local0, ((PROG_ERR) inc->tr));
  5486.  local1 = IMPL_CREATE_prog(self);
  5487.  local2 = ((STR) &Thisclasshasincl);
  5488.  local3 = STR_plus_STR_STR(local2, TP_CLASS_str_STR(a1));
  5489.  local4 = STR_plus_STR_STR(local3, ((STR) &and_2750));
  5490.  local5 = STR_plus_STR_STR(local4, TP_CLASS_str_STR(a2));
  5491.  PROG_err_STR(local1, STR_plus_CHAR_STR(local5, '.'));
  5492. }
  5493.  
  5494.  
  5495. TP_CLASS IMPL_CREATE_get_(IMPL_CREATE self) {
  5496.  TP_CLASS noname2751;
  5497.  TP_CLASS r_2752 = ((TP_CLASS) NULL);
  5498.  FLISTIMPL_INCLUDE noname2753;
  5499.  IMPL_INCLUDE inc;
  5500.  TP_CLASS a_2754;
  5501.  BOOL local0;
  5502.  INT local1;
  5503.  BOOL local2;
  5504.  INT local3;
  5505.  IMPL_INCLUDE local4;
  5506.  if (IDENT_is_eq_IDEN(self->tp->name_19, IMPL_CREATE_prog(self)->ident_builtin->AREF_ident)) {
  5507.   local1 = ARRAYTP_size_INT(self->tp->params);
  5508.   local0 = (local1==1);
  5509.  } else {
  5510.   local0 = FALSE;
  5511.  }
  5512.  if (local0) {
  5513.   return self->tp;
  5514.  }
  5515.  if (IDENT_is_eq_IDEN(self->tp->name_19, IMPL_CREATE_prog(self)->ident_builtin->AVAL_ident)) {
  5516.   local3 = ARRAYTP_size_INT(self->tp->params);
  5517.   local2 = (local3==1);
  5518.  } else {
  5519.   local2 = FALSE;
  5520.  }
  5521.  if (local2) {
  5522.   return self->tp;
  5523.  }
  5524.  {
  5525.   struct FLISTIMPL_INCLUD_2741_frame_struct temp2755_0;
  5526.   FLISTIMPL_INCLUD_2741_frame 
  5527.   noname2756 = &temp2755_0;
  5528.   noname2756->state = 0;
  5529.   while (1) {
  5530.    if (noname2756->state == 0) {
  5531.     noname2753 = self->incs;
  5532.     noname2756->arg0 = noname2753;
  5533.    }
  5534.    local4 = FLISTIMPL_INCLUD_2741(noname2756);
  5535.    if (noname2756->state == -1) goto after_loop;
  5536.    inc = local4;
  5537.    a_2754 = inc->impl->arr;
  5538.    if ((!((a_2754==((TP_CLASS) NULL))))) {
  5539.     if ((r_2752==((TP_CLASS) NULL))) {
  5540.      r_2752 = a_2754;
  5541.     }
  5542.     else {
  5543.      if (TP_CLASS_is_eq_T(r_2752, ((TP) a_2754))) {
  5544.      }
  5545.      else {
  5546.       IMPL_CREATE_arra(self, inc, r_2752, a_2754);
  5547.      }
  5548.     }
  5549.    }
  5550.   }
  5551.  }
  5552.  after_loop: ;
  5553.  return r_2752;
  5554. }
  5555.  
  5556.  
  5557. IMPL_INCLUDE FLISTIMPL_INCLUD_2757(FLISTIMPL_INCLUDE self, INT ind_2758) {
  5558.  IMPL_INCLUDE noname2759;
  5559.  BOOL local0;
  5560.  INT local1;
  5561.  INT local2;
  5562.  if ((!((self==((FLISTIMPL_INCLUDE) NULL))))) {
  5563.   local1 = 0;
  5564.   local2 = (self->asize);
  5565.   local0 = INT_is_bet_INT_I(ind_2758, local1, (c_INT_minus_INT_INT_chk(local2,1)));
  5566.  } else {
  5567.   local0 = FALSE;
  5568.  }
  5569.  if (!(local0)) {
  5570.   fprintf(stderr,"Violation of precondition ../Library/aref.sa:33:7\n");
  5571.   exit(16);
  5572.  }
  5573.  if (ind_2758<0||ind_2758>=self->asize) {
  5574.   fprintf(stderr,"Index out of bounds ../Library/aref.sa:33:7\n");
  5575.   exit(16);
  5576.  }
  5577.  return self->arr_part[ind_2758];
  5578. }
  5579.  
  5580.  
  5581. IMPL_INCLUDE FLISTIMPL_INCLUD_2760(FLISTIMPL_INCLUDE self, INT ind_2761) {
  5582.  IMPL_INCLUDE noname2762;
  5583.  BOOL local0;
  5584.  INT local1;
  5585.  if ((!((self==((FLISTIMPL_INCLUDE) NULL))))) {
  5586.   local1 = 0;
  5587.   local0 = INT_is_bet_INT_I(ind_2761, local1, (c_INT_minus_INT_INT_chk(self->loc_17,1)));
  5588.  } else {
  5589.   local0 = FALSE;
  5590.  }
  5591.  if (!(local0)) {
  5592.   fprintf(stderr,"Violation of precondition ../Library/flist.sa:68:7\n");
  5593.   exit(16);
  5594.  }
  5595.  return FLISTIMPL_INCLUD_2757(self, ind_2761);
  5596.  if (!FLISTIMPL_INCLUD_2719(self)) {
  5597.   fprintf(stderr,"Failed invariant FLIST{IMPL_INCLUDE}::invariant:BOOL ../Library/flist.sa:68:7\n");
  5598.   exit(16);
  5599.  }
  5600. }
  5601.  
  5602.  
  5603. IMPL_INCLUDE FLISTIMPL_INCLUD_2763(FLISTIMPL_INCLUDE self) {
  5604.  IMPL_INCLUDE noname2764;
  5605.  IMPL_INCLUDE r_2765;
  5606.  INT local0;
  5607.  INT local1;
  5608.  local0 = FLISTIMPL_INCLUD_2717(self);
  5609.  if ((local0==0)) {
  5610.   return ((IMPL_INCLUDE) NULL);
  5611.  }
  5612.  r_2765 = FLISTIMPL_INCLUD_2760(self, (c_INT_minus_INT_INT_chk(self->loc_17,1)));
  5613.  local1 = (c_INT_minus_INT_INT_chk(self->loc_17,1));
  5614.  FLISTIMPL_INCLUD_2731(self, local1, ((IMPL_INCLUDE) NULL));
  5615.  self->loc_17 = (c_INT_minus_INT_INT_chk(self->loc_17,1));
  5616.  return r_2765;
  5617.  if (!FLISTIMPL_INCLUD_2719(self)) {
  5618.   fprintf(stderr,"Failed invariant FLIST{IMPL_INCLUDE}::invariant:BOOL ../Library/flist.sa:90:6\n");
  5619.   exit(16);
  5620.  }
  5621. }
  5622.  
  5623.  
  5624. BOOL ELT_is_attr_acce(ELT self) {
  5625.  BOOL noname2766 = ((BOOL) 0);
  5626.  TR_CLASS_ELT ltr;
  5627.  ltr = self->tr;
  5628.  if (ltr==NULL) {
  5629.  } else
  5630.  switch (ltr->header.tag) {
  5631.   case TR_SHARED_DEF_tag:
  5632.    return TRUE; break;
  5633.   case TR_CONST_DEF_tag:
  5634.    return TRUE; break;
  5635.   case TR_ATTR_DEF_tag:
  5636.    return TRUE; break;
  5637.   default: ;
  5638.  }
  5639.  return FALSE;
  5640. }
  5641.  
  5642.  
  5643. void IMPL_CREATE_attr(IMPL_CREATE self, ELT e_2767, ELT f_2768, IMPL_INCLUDE inc) {
  5644.  PROG local0;
  5645.  PROG local1;
  5646.  STR local2;
  5647.  STR local3;
  5648.  STR local4;
  5649.  STR local5;
  5650.  local0 = IMPL_CREATE_prog(self);
  5651.  PROG_err_loc_PRO(local0, ((PROG_ERR) f_2768->tr));
  5652.  local1 = IMPL_CREATE_prog(self);
  5653.  local2 = ((STR) &Thisexplicitlyde);
  5654.  local3 = STR_plus_STR_STR(local2, SIG_str_STR(e_2767->sig_6));
  5655.  local4 = STR_plus_STR_STR(local3, ((STR) &whichisincludedfrom));
  5656.  local5 = STR_plus_STR_STR(local4, TP_CLASS_str_STR(inc->itp));
  5657.  PROG_err_STR(local1, STR_plus_STR_STR(local5, ((STR) &name_2769)));
  5658. }
  5659.  
  5660.  
  5661. BOOL ELT_is_abstract_BOOL(ELT self) {
  5662.  BOOL noname2770 = ((BOOL) 0);
  5663.  TR_CLASS_ELT ltr;
  5664.  ltr = self->tr;
  5665.  if (ltr==NULL) {
  5666.  } else
  5667.  switch (ltr->header.tag) {
  5668.   case TR_ROUT_DEF_tag:
  5669.    return ((TR_ROUT_DEF) ltr)->is_abstract; break;
  5670.   default: ;
  5671.  }
  5672.  return FALSE;
  5673. }
  5674.  
  5675.  
  5676. void IMPL_CREATE_incl(IMPL_CREATE self, IMPL_INCLUDE inc, IMPL_INCLUDE inc2, ELT e_2771, ELT g_2772) {
  5677.  PROG local0;
  5678.  PROG local1;
  5679.  STR local2;
  5680.  STR local3;
  5681.  STR local4;
  5682.  STR local5;
  5683.  STR local6;
  5684.  STR local7;
  5685.  local0 = IMPL_CREATE_prog(self);
  5686.  PROG_err_loc_PRO(local0, ((PROG_ERR) inc->tr));
  5687.  local1 = IMPL_CREATE_prog(self);
  5688.  local2 = ((STR) &Thisincludesthef);
  5689.  local3 = STR_plus_STR_STR(local2, SIG_str_STR(e_2771->sig_6));
  5690.  local4 = STR_plus_STR_STR(local3, ((STR) &whichconflictswith));
  5691.  local5 = STR_plus_STR_STR(local4, SIG_str_STR(g_2772->sig_6));
  5692.  local6 = STR_plus_STR_STR(local5, ((STR) &whichisincludedf_2773));
  5693.  local7 = STR_plus_STR_STR(local6, TP_CLASS_str_STR(inc2->itp));
  5694.  PROG_err_STR(local1, STR_plus_STR_STR(local7, ((STR) &name_2774)));
  5695. }
  5696.  
  5697.  
  5698. ELT_TBL IMPL_CREATE_elt_(IMPL_CREATE self) {
  5699.  ELT_TBL noname2775;
  5700.  ELT_TBL r_2776 = ((ELT_TBL) NULL);
  5701.  ELT_TBL noname2777;
  5702.  IMPL_INCLUDE inc;
  5703.  ELT_TBL noname2778;
  5704.  ELT e_2779;
  5705.  ELT f_2780;
  5706.  FLISTIMPL_INCLUDE noname2781;
  5707.  IMPL_INCLUDE inc2;
  5708.  ELT g_2782;
  5709.  ELT local0;
  5710.  ELT local1;
  5711.  BOOL local2;
  5712.  BOOL local3;
  5713.  BOOL local4;
  5714.  BOOL local5;
  5715.  IMPL_INCLUDE local6;
  5716.  {
  5717.   struct ELT_TBL_elt_ELT_frame_struct temp2783_0;
  5718.   ELT_TBL_elt_ELT_frame 
  5719.   noname2784 = &temp2783_0;
  5720.   noname2784->state = 0;
  5721.   while (1) {
  5722.    if (noname2784->state == 0) {
  5723.     noname2777 = self->class_elts;
  5724.     noname2784->arg0 = noname2777;
  5725.    }
  5726.    local0 = ELT_TBL_elt_ELT(noname2784);
  5727.    if (noname2784->state == -1) goto after_loop;
  5728.    r_2776 = ELT_TBL_insert_E(r_2776, local0);
  5729.   }
  5730.  }
  5731.  after_loop: ;
  5732.  while (1) {
  5733.   if ((!(FLISTIMPL_INCLUD_2720(self->incs)))) {
  5734.   }
  5735.   else {
  5736.    goto after_loop_2785;
  5737.   }
  5738.   inc = FLISTIMPL_INCLUD_2763(self->incs);
  5739.   {
  5740.    struct ELT_TBL_elt_ELT_frame_struct temp2788_0;
  5741.    ELT_TBL_elt_ELT_frame 
  5742.    noname2789 = &temp2788_0;
  5743.    noname2789->state = 0;
  5744.    while (1) {
  5745.     if (noname2789->state == 0) {
  5746.      noname2778 = inc->elt_tbl;
  5747.      noname2789->arg0 = noname2778;
  5748.     }
  5749.     local1 = ELT_TBL_elt_ELT(noname2789);
  5750.     if (noname2789->state == -1) goto after_loop_2787;
  5751.     e_2779 = local1;
  5752.     f_2780 = ELT_TBL_elt_conf(r_2776, e_2779);
  5753.     if ((!((f_2780==((ELT) NULL))))) {
  5754.      local3 = ELT_is_attr_acce(e_2779);
  5755.     } else {
  5756.      local3 = FALSE;
  5757.     }
  5758.     if (local3) {
  5759.      local2 = (!(ELT_is_attr_acce(f_2780)));
  5760.     } else {
  5761.      local2 = FALSE;
  5762.     }
  5763.     if (local2) {
  5764.      IMPL_CREATE_attr(self, e_2779, f_2780, inc);
  5765.     }
  5766.     if ((f_2780==((ELT) NULL))) {
  5767.      if ((!(ELT_is_abstract_BOOL(e_2779)))) {
  5768.       local5 = TRUE;
  5769.      } else {
  5770.       local5 = TP_CLASS_is_abst(self->tp);
  5771.      }
  5772.      local4 = local5;
  5773.     } else {
  5774.      local4 = FALSE;
  5775.     }
  5776.     if (local4) {
  5777.      {
  5778.       struct FLISTIMPL_INCLUD_2741_frame_struct temp2791_0;
  5779.       FLISTIMPL_INCLUD_2741_frame 
  5780.       noname2792 = &temp2791_0;
  5781.       noname2792->state = 0;
  5782.       while (1) {
  5783.        if (noname2792->state == 0) {
  5784.         noname2781 = self->incs;
  5785.         noname2792->arg0 = noname2781;
  5786.        }
  5787.        local6 = FLISTIMPL_INCLUD_2741(noname2792);
  5788.        if (noname2792->state == -1) goto after_loop_2790;
  5789.        inc2 = local6;
  5790.        g_2782 = ELT_TBL_elt_conf(inc2->elt_tbl, e_2779);
  5791.        if ((!((g_2782==((ELT) NULL))))) {
  5792.         IMPL_CREATE_incl(self, inc, inc2, e_2779, g_2782);
  5793.        }
  5794.       }
  5795.      }
  5796.      after_loop_2790: ;
  5797.      r_2776 = ELT_TBL_insert_E(r_2776, e_2779);
  5798.     }
  5799.    }
  5800.   }
  5801.   after_loop_2787: ;
  5802.  }
  5803.  after_loop_2785: ;
  5804.  return r_2776;
  5805. }
  5806.  
  5807.  
  5808. SIG SIG_TBL_elt_nil_SIG(SIG_TBL self) {
  5809.  SIG noname2793;
  5810.  SIG t_2794 = ((SIG) NULL);
  5811.  return ((SIG) NULL);
  5812.  if (!SIG_TBL_invarian(self)) {
  5813.   fprintf(stderr,"Failed invariant SIG_TBL::invariant:BOOL ../Library/fqset.sa:69:10\n");
  5814.   exit(16);
  5815.  }
  5816. }
  5817.  
  5818.  
  5819. BOOL SIG_is_eq_SIG_BOOL(SIG self, SIG s_2795) {
  5820.  BOOL noname2796 = ((BOOL) 0);
  5821.  ARRAYTP noname2797;
  5822.  ARRAYTP noname2798;
  5823.  ARRAYBOOL noname2799;
  5824.  ARRAYBOOL noname2800;
  5825.  BOOL local0;
  5826.  BOOL local1;
  5827.  BOOL local2;
  5828.  BOOL local3;
  5829.  TP local4;
  5830.  INT local5;
  5831.  INT local6;
  5832.  BOOL local7;
  5833.  TP local8;
  5834.  TP local9;
  5835.  TP local10;
  5836.  TP local11;
  5837.  BOOL local12;
  5838.  BOOL local13;
  5839.  BOOL local14;
  5840.  BOOL local15;
  5841.  TP local16;
  5842.  if ((self==((SIG) NULL))) {
  5843.   return (s_2795==((SIG) NULL));
  5844.  }
  5845.  else {
  5846.   if ((s_2795==((SIG) NULL))) {
  5847.    return FALSE;
  5848.   }
  5849.  }
  5850.  if (c_SYS_ob_eq_OB_OB_BOOL(((OB) self),((OB) s_2795))) {
  5851.   return TRUE;
  5852.  }
  5853.  local4 = self->tp;
  5854.  if ((*TP_is_neq_TP_BOOL[local4->header.tag+TP_is_neq_TP_BOOL_offset])(local4, s_2795->tp)) {
  5855.   local3 = TRUE;
  5856.  } else {
  5857.   local3 = IDENT_is_neq_IDE(self->name_19, s_2795->name_19);
  5858.  }
  5859.  if (local3) {
  5860.   local2 = TRUE;
  5861.  } else {
  5862.   local5 = ARRAYTP_size_INT(self->args_7);
  5863.   local2 = (local5!=ARRAYTP_size_INT(s_2795->args_7));
  5864.  }
  5865.  if (local2) {
  5866.   local1 = TRUE;
  5867.  } else {
  5868.   local6 = ARRAYBOOL_size_INT(self->hot);
  5869.   local1 = (local6!=ARRAYBOOL_size_INT(s_2795->hot));
  5870.  }
  5871.  if (local1) {
  5872.   local0 = TRUE;
  5873.  } else {
  5874.   local7 = SIG_has_ret_BOOL(self);
  5875.   local0 = ((local7)!=(SIG_has_ret_BOOL(s_2795)));
  5876.  }
  5877.  if (local0) {
  5878.   return FALSE;
  5879.  }
  5880.  {
  5881.   struct ARRAYTP_elt_TP_frame_struct temp2801_0;
  5882.   ARRAYTP_elt_TP_frame 
  5883.   noname2802 = &temp2801_0;
  5884.   struct ARRAYTP_elt_TP_frame_struct temp2801_1;
  5885.   ARRAYTP_elt_TP_frame 
  5886.   noname2803 = &temp2801_1;
  5887.   noname2802->state = 0;
  5888.   noname2803->state = 0;
  5889.   while (1) {
  5890.    if (noname2802->state == 0) {
  5891.     noname2797 = self->args_7;
  5892.     noname2802->arg0 = noname2797;
  5893.    }
  5894.    local8 = ARRAYTP_elt_TP(noname2802);
  5895.    if (noname2802->state == -1) goto after_loop;
  5896.    local9 = local8;
  5897.    if (noname2803->state == 0) {
  5898.     noname2798 = s_2795->args_7;
  5899.     noname2803->arg0 = noname2798;
  5900.    }
  5901.    local10 = ARRAYTP_elt_TP(noname2803);
  5902.    if (noname2803->state == -1) goto after_loop;
  5903.    local11 = local9;
  5904.    if ((*TP_is_neq_TP_BOOL[local11->header.tag+TP_is_neq_TP_BOOL_offset])(local11, local10)) {
  5905.     return FALSE;
  5906.    }
  5907.   }
  5908.  }
  5909.  after_loop: ;
  5910.  {
  5911.   struct ARRAYBOOL_elt_BOOL_frame_struct temp2805_0;
  5912.   ARRAYBOOL_elt_BOOL_frame 
  5913.   noname2806 = &temp2805_0;
  5914.   struct ARRAYBOOL_elt_BOOL_frame_struct temp2805_1;
  5915.   ARRAYBOOL_elt_BOOL_frame 
  5916.   noname2807 = &temp2805_1;
  5917.   noname2806->state = 0;
  5918.   noname2807->state = 0;
  5919.   while (1) {
  5920.    if (noname2806->state == 0) {
  5921.     noname2799 = self->hot;
  5922.     noname2806->arg0 = noname2799;
  5923.    }
  5924.    local12 = ARRAYBOOL_elt_BOOL(noname2806);
  5925.    if (noname2806->state == -1) goto after_loop_2804;
  5926.    local13 = local12;
  5927.    if (noname2807->state == 0) {
  5928.     noname2800 = s_2795->hot;
  5929.     noname2807->arg0 = noname2800;
  5930.    }
  5931.    local14 = ARRAYBOOL_elt_BOOL(noname2807);
  5932.    if (noname2807->state == -1) goto after_loop_2804;
  5933.    if (((local13)!=(local14))) {
  5934.     return FALSE;
  5935.    }
  5936.   }
  5937.  }
  5938.  after_loop_2804: ;
  5939.  if (SIG_has_ret_BOOL(self)) {
  5940.   local16 = self->ret;
  5941.   local15 = (*TP_is_neq_TP_BOOL[local16->header.tag+TP_is_neq_TP_BOOL_offset])(local16, s_2795->ret);
  5942.  } else {
  5943.   local15 = FALSE;
  5944.  }
  5945.  if (local15) {
  5946.   return FALSE;
  5947.  }
  5948.  return TRUE;
  5949. }
  5950.  
  5951.  
  5952. BOOL SIG_TBL_elt_eq_S(SIG_TBL self, SIG e1_2808, SIG e2_2809) {
  5953.  BOOL noname2810 = ((BOOL) 0);
  5954.  return SIG_is_eq_SIG_BOOL(e1_2808, e2_2809);
  5955.  return c_SYS_ob_eq_OB_OB_BOOL(((OB) e1_2808),((OB) e2_2809));
  5956.  if (!SIG_TBL_invarian(self)) {
  5957.   fprintf(stderr,"Failed invariant SIG_TBL::invariant:BOOL ../Library/fqset.sa:62:9\n");
  5958.   exit(16);
  5959.  }
  5960. }
  5961.  
  5962.  
  5963. SIG_TBL SIG_TBL_allocate(SIG_TBL self, INT n_2811) {
  5964.  SIG_TBL noname2812;
  5965.  SIG_TBL r_2813;
  5966.  SIG_TBL noname2814;
  5967.  SIG_TBL local0;
  5968.  local0 = ((SIG_TBL) sbi_arr_alloc(sizeof(struct SIG_TBL_struct), SIG_TBL_tag, sizeof(SIG) , n_2811));
  5969.  local0->asize = n_2811;
  5970.  r_2813 = local0;
  5971.  if ((!((SIG_TBL_elt_nil_SIG(self)==((SIG) NULL))))) {
  5972.   {
  5973.    struct SIG_TBL_aset_SIG_frame_struct temp2815_0;
  5974.    SIG_TBL_aset_SIG_frame 
  5975.    noname2816 = &temp2815_0;
  5976.    noname2816->state = 0;
  5977.    while (1) {
  5978.     if (noname2816->state == 0) {
  5979.      noname2814 = r_2813;
  5980.      noname2816->arg0 = noname2814;
  5981.     }
  5982.     noname2816->arg1 = SIG_TBL_elt_nil_SIG(self);
  5983.     SIG_TBL_aset_SIG(noname2816);
  5984.     if (noname2816->state == -1) goto after_loop;
  5985.     0 /* No return value from iter call */;
  5986.    }
  5987.   }
  5988.   after_loop: ;
  5989.  }
  5990.  return r_2813;
  5991. }
  5992.  
  5993.  
  5994. INT SIG_TBL_asize_INT(SIG_TBL self) {
  5995.  INT noname2817 = ((INT) 0);
  5996.   return self->asize;
  5997.  fprintf(stderr,"Last statement wasn't return ../Library/aref.sa:20:8\n");
  5998.  exit(16);
  5999. }
  6000.  
  6001.  
  6002. SIG_TBL SIG_TBL_double_s(SIG_TBL self) {
  6003.  SIG_TBL noname2818;
  6004.  SIG_TBL r_2819;
  6005.  SIG_TBL noname2820;
  6006.  INT local0;
  6007.  INT local1;
  6008.  INT local2;
  6009.  SIG local3;
  6010.  if (!((!((self==((SIG_TBL) NULL)))))) {
  6011.   fprintf(stderr,"Violation of precondition ../Library/fqset.sa:190:22\n");
  6012.   exit(16);
  6013.  }
  6014.  local0 = (self->asize);
  6015.  local1 = (c_INT_minus_INT_INT_chk(local0,1));
  6016.  local2 = (c_INT_times_INT_INT_chk(local1,2));
  6017.  r_2819 = SIG_TBL_allocate(self, (c_INT_plus_INT_INT_chk(local2,1)));
  6018.  {
  6019.   struct SIG_TBL_elt_SIG_frame_struct temp2821_0;
  6020.   SIG_TBL_elt_SIG_frame 
  6021.   noname2822 = &temp2821_0;
  6022.   noname2822->state = 0;
  6023.   while (1) {
  6024.    if (noname2822->state == 0) {
  6025.     noname2820 = self;
  6026.     noname2822->arg0 = noname2820;
  6027.    }
  6028.    local3 = SIG_TBL_elt_SIG(noname2822);
  6029.    if (noname2822->state == -1) goto after_loop;
  6030.    r_2819 = SIG_TBL_insert_S(r_2819, local3);
  6031.   }
  6032.  }
  6033.  after_loop: ;
  6034.  return r_2819;
  6035. }
  6036.  
  6037.  
  6038. INT SIG_TBL_elt_hash(SIG_TBL self, SIG s_2823) {
  6039.  INT noname2824 = ((INT) 0);
  6040.  return IDENT_hash_INT(s_2823->name_19);
  6041.  if (!SIG_TBL_invarian(self)) {
  6042.   fprintf(stderr,"Failed invariant SIG_TBL::invariant:BOOL ./sig.sa:384:11\n");
  6043.   exit(16);
  6044.  }
  6045. }
  6046.  
  6047.  
  6048. SIG SIG_TBL_aget_INT_SIG(SIG_TBL self, INT ind_2825) {
  6049.  SIG noname2826;
  6050.  BOOL local0;
  6051.  INT local1;
  6052.  INT local2;
  6053.  if ((!((self==((SIG_TBL) NULL))))) {
  6054.   local1 = 0;
  6055.   local2 = (self->asize);
  6056.   local0 = INT_is_bet_INT_I(ind_2825, local1, (c_INT_minus_INT_INT_chk(local2,1)));
  6057.  } else {
  6058.   local0 = FALSE;
  6059.  }
  6060.  if (!(local0)) {
  6061.   fprintf(stderr,"Violation of precondition ../Library/aref.sa:33:7\n");
  6062.   exit(16);
  6063.  }
  6064.  if (ind_2825<0||ind_2825>=self->asize) {
  6065.   fprintf(stderr,"Index out of bounds ../Library/aref.sa:33:7\n");
  6066.   exit(16);
  6067.  }
  6068.  return self->arr_part[ind_2825];
  6069. }
  6070.  
  6071.  
  6072. void SIG_TBL_aset_INT_SIG(SIG_TBL self, INT ind_2827, SIG val_2828) {
  6073.  BOOL local0;
  6074.  INT local1;
  6075.  INT local2;
  6076.  if ((!((self==((SIG_TBL) NULL))))) {
  6077.   local1 = 0;
  6078.   local2 = (self->asize);
  6079.   local0 = INT_is_bet_INT_I(ind_2827, local1, (c_INT_minus_INT_INT_chk(local2,1)));
  6080.  } else {
  6081.   local0 = FALSE;
  6082.  }
  6083.  if (!(local0)) {
  6084.   fprintf(stderr,"Violation of precondition ../Library/aref.sa:38:7\n");
  6085.   exit(16);
  6086.  }
  6087.  if (ind_2827<0||ind_2827>=self->asize) {
  6088.   fprintf(stderr,"Index out of bounds ../Library/aref.sa:38:7\n");
  6089.   exit(16);
  6090.  }
  6091.  self->arr_part[ind_2827] = val_2828;
  6092. }
  6093.  
  6094.  
  6095. SIG_TBL SIG_TBL_insert_S(SIG_TBL self, SIG e_2829) {
  6096.  SIG_TBL noname2830;
  6097.  SIG_TBL r_2831;
  6098.  INT asz_2832 = ((INT) 0);
  6099.  INT h = ((INT) 0);
  6100.  SIG te;
  6101.  SIG te_2833;
  6102.  INT local0;
  6103.  INT local1;
  6104.  INT local2;
  6105.  r_2831 = self;
  6106.  if (SIG_TBL_elt_eq_S(self, e_2829, SIG_TBL_elt_nil_SIG(self))) {
  6107.   return r_2831;
  6108.  }
  6109.  if ((r_2831==((SIG_TBL) NULL))) {
  6110.   r_2831 = SIG_TBL_allocate(self, 5);
  6111.  }
  6112.  else {
  6113.   local0 = (c_INT_plus_INT_INT_chk(self->hsize,1));
  6114.   local1 = (c_INT_times_INT_INT_chk(local0,2));
  6115.   if ((local1>(self->asize))) {
  6116.    r_2831 = SIG_TBL_double_s(r_2831);
  6117.   }
  6118.  }
  6119.  asz_2832 = (r_2831->asize);
  6120.  local2 = SIG_TBL_elt_hash(r_2831, e_2829);
  6121.  h = (local2&(c_INT_minus_INT_INT_chk(asz_2832,2)));
  6122.  while (1) {
  6123.   te = SIG_TBL_aget_INT_SIG(r_2831, h);
  6124.   if (SIG_TBL_elt_eq_S(self, te, SIG_TBL_elt_nil_SIG(self))) {
  6125.    goto after_loop;
  6126.   }
  6127.   else {
  6128.    if (SIG_TBL_elt_eq_S(self, te, e_2829)) {
  6129.     SIG_TBL_aset_INT_SIG(r_2831, h, e_2829);
  6130.     return r_2831;
  6131.    }
  6132.   }
  6133.   h = (c_INT_plus_INT_INT_chk(h,1));
  6134.  }
  6135.  after_loop: ;
  6136.  if ((h==(c_INT_minus_INT_INT_chk(asz_2832,1)))) {
  6137.   h = 0;
  6138.   while (1) {
  6139.    te_2833 = SIG_TBL_aget_INT_SIG(r_2831, h);
  6140.    if (SIG_TBL_elt_eq_S(self, te_2833, SIG_TBL_elt_nil_SIG(self))) {
  6141.     goto after_loop_2835;
  6142.    }
  6143.    else {
  6144.     if (SIG_TBL_elt_eq_S(self, te_2833, e_2829)) {
  6145.      SIG_TBL_aset_INT_SIG(r_2831, h, e_2829);
  6146.      return r_2831;
  6147.     }
  6148.    }
  6149.    h = (c_INT_plus_INT_INT_chk(h,1));
  6150.   }
  6151.   after_loop_2835: ;
  6152.   if (!((h!=(c_INT_minus_INT_INT_chk(asz_2832,1))))) {
  6153.    fprintf(stderr,"Violation of assertion ../Library/fqset.sa:218:15\n");
  6154.    exit(16);
  6155.   }
  6156.  }
  6157.  SIG_TBL_aset_INT_SIG(r_2831, h, e_2829);
  6158.  r_2831->hsize = (c_INT_plus_INT_INT_chk(r_2831->hsize,1));
  6159.  return r_2831;
  6160.  if (!SIG_TBL_invarian(self)) {
  6161.   fprintf(stderr,"Failed invariant SIG_TBL::invariant:BOOL ../Library/fqset.sa:198:9\n");
  6162.   exit(16);
  6163.  }
  6164. }
  6165.  
  6166.  
  6167. IFC IFC_create_SIG_T(IFC self, SIG_TBL sigs_2837, TP tp_2838) {
  6168.  IFC noname2839;
  6169.  IFC r_2840;
  6170.  IFC local0;
  6171.  local0 = ((IFC) sbi_alloc(sizeof(struct IFC_struct), IFC_tag));
  6172.  r_2840 = local0;
  6173.  r_2840->sigs = sigs_2837;
  6174.  r_2840->tp = tp_2838;
  6175.  return r_2840;
  6176. }
  6177.  
  6178.  
  6179. IFC ELT_TBL_public_i(ELT_TBL self) {
  6180.  IFC noname2841;
  6181.  SIG_TBL st = ((SIG_TBL) NULL);
  6182.  ELT e_2842 = ((ELT) NULL);
  6183.  ELT_TBL noname2843;
  6184.  BOOL local0;
  6185.  ELT local1;
  6186.  if ((self==((ELT_TBL) NULL))) {
  6187.   local0 = TRUE;
  6188.  } else {
  6189.   local0 = (self->hsize==0);
  6190.  }
  6191.  if (local0) {
  6192.   return ((IFC) NULL);
  6193.  }
  6194.  {
  6195.   struct ELT_TBL_elt_ELT_frame_struct temp2844_0;
  6196.   ELT_TBL_elt_ELT_frame 
  6197.   noname2845 = &temp2844_0;
  6198.   noname2845->state = 0;
  6199.   while (1) {
  6200.    if (noname2845->state == 0) {
  6201.     noname2843 = self;
  6202.     noname2845->arg0 = noname2843;
  6203.    }
  6204.    local1 = ELT_TBL_elt_ELT(noname2845);
  6205.    if (noname2845->state == -1) goto after_loop;
  6206.    e_2842 = local1;
  6207.    if ((!(e_2842->is_private))) {
  6208.     st = SIG_TBL_insert_S(st, e_2842->sig_6);
  6209.    }
  6210.   }
  6211.  }
  6212.  after_loop: ;
  6213.  return IFC_create_SIG_T(((IFC) NULL), st, e_2842->sig_6->tp);
  6214.  if (!ELT_TBL_invarian(self)) {
  6215.   fprintf(stderr,"Failed invariant ELT_TBL::invariant:BOOL ./elt.sa:201:13\n");
  6216.   exit(16);
  6217.  }
  6218. }
  6219.  
  6220.  
  6221. IMPL IMPL_CREATE_impl(IMPL_CREATE self, TP_CLASS t_2846) {
  6222.  IMPL noname2847;
  6223.  IMPL_CREATE ic;
  6224.  IMPL r_2848;
  6225.  OUT local0;
  6226.  OUT local1;
  6227.  OUT local2;
  6228.  IMPL_CREATE local3;
  6229.  INT local4;
  6230.  PROG local5;
  6231.  PROG local6;
  6232.  IDENT local7;
  6233.  if (!((!((t_2846==((TP_CLASS) NULL)))))) {
  6234.   fprintf(stderr,"Violation of precondition ./impl.sa:425:10\n");
  6235.   exit(16);
  6236.  }
  6237.  if (t_2846->prog->show_impl_create) {
  6238.   local0 = OUT_create_OUT(((OUT) NULL));
  6239.   local1 = OUT_plus_STR_OUT(local0, ((STR) &Implcreate));
  6240.   local2 = OUT_plus_STR_OUT(local1, TP_CLASS_str_STR(t_2846));
  6241.   OUT_plus_STR(local2, ((STR) &name_2849));
  6242.  }
  6243.  local3 = ((IMPL_CREATE) sbi_alloc(sizeof(struct IMPL_CREATE_struct), IMPL_CREATE_tag));
  6244.  ic = local3;
  6245.  ic->tp = t_2846;
  6246.  local4 = PROG_tp_kind_TP_INT(t_2846->prog, ((TP) t_2846));
  6247.  ic->is_external = (local4==shared_TP_KIND_e);
  6248.  local5 = IMPL_CREATE_prog(ic);
  6249.  ic->con = PROG_tp_context_(local5, t_2846);
  6250.  if ((ic->con==((TP_CONTEXT) NULL))) {
  6251.   return ((IMPL) NULL);
  6252.  }
  6253.  local6 = IMPL_CREATE_prog(ic);
  6254.  local7 = t_2846->name_19;
  6255.  ic->tr = PROG_tree_for_ID(local6, local7, ARRAYTP_size_INT(t_2846->params));
  6256.  if ((ic->tr==((TR_CLASS_DEF) NULL))) {
  6257.   return ((IMPL) NULL);
  6258.  }
  6259.  ic->class_elts = IMPL_CREATE_expl(ic);
  6260.  IMPL_CREATE_do_incs(ic);
  6261.  r_2848 = IMPL_create_IMPL(((IMPL) NULL));
  6262.  r_2848->tp = ((TP) t_2846);
  6263.  r_2848->arr = IMPL_CREATE_get_(ic);
  6264.  r_2848->elts = IMPL_CREATE_elt_(ic);
  6265.  r_2848->ifc = ELT_TBL_public_i(r_2848->elts);
  6266.  if ((r_2848->ifc==((IFC) NULL))) {
  6267.   r_2848->ifc = IFC_create_SIG_T(((IFC) NULL), ((SIG_TBL) NULL), ((TP) t_2846));
  6268.  }
  6269.  return r_2848;
  6270. }
  6271.  
  6272.  
  6273. IMPL IMPL_create_for_(IMPL self, TP t_2850) {
  6274.  IMPL noname2851;
  6275.  TP local0;
  6276.  PROG local1;
  6277.  PROG local2;
  6278.  STR local3;
  6279.  TP local4;
  6280.  PROG local5;
  6281.  if (!((!((t_2850==((TP) NULL)))))) {
  6282.   fprintf(stderr,"Violation of precondition ./impl.sa:28:16\n");
  6283.   exit(16);
  6284.  }
  6285.  if (t_2850==NULL) {
  6286.   local0 = t_2850;
  6287.   local1 = (*TP_prog_PROG[local0->header.tag+TP_prog_PROG_offset])(local0);
  6288.   PROG_err_STR(local1, ((STR) &CompilererrorIMP));
  6289.  } else
  6290.  switch (t_2850->header.tag) {
  6291.   case TP_CLASS_tag:
  6292.    if (TP_CLASS_is_abst(((TP_CLASS) t_2850))) {
  6293.     local2 = IMPL_prog_PROG(self);
  6294.     local3 = ((STR) &CompilererrorImp);
  6295.     PROG_err_STR(local2, STR_plus_STR_STR(local3, TP_CLASS_str_STR(((TP_CLASS) t_2850))));
  6296.     return ((IMPL) NULL);
  6297.    }
  6298.    return IMPL_CREATE_impl(((IMPL_CREATE) NULL), ((TP_CLASS) t_2850)); break;
  6299.   default: ;
  6300.    local4 = t_2850;
  6301.    local5 = (*TP_prog_PROG[local4->header.tag+TP_prog_PROG_offset])(local4);
  6302.    PROG_err_STR(local5, ((STR) &CompilererrorIMP_2852));
  6303.  }
  6304.  return ((IMPL) NULL);
  6305. }
  6306.  
  6307.  
  6308. TUPTPIMPL TUPTPIMPL_t1_TP_(TUPTPIMPL self, TP t1_2853) {
  6309.  TUPTPIMPL local0;
  6310.  local0 = self;
  6311.  local0.t1 = t1_2853;
  6312.  return local0;
  6313. }
  6314.  
  6315.  
  6316. TUPTPIMPL TUPTPIMPL_t2_IMP(TUPTPIMPL self, IMPL t2_2854) {
  6317.  TUPTPIMPL local0;
  6318.  local0 = self;
  6319.  local0.t2 = t2_2854;
  6320.  return local0;
  6321. }
  6322.  
  6323.  
  6324. TUPTPIMPL TUPTPIMPL_create(TUPTPIMPL self, TP at1, IMPL at2) {
  6325.  TUPTPIMPL noname2855 = TUPTPIMPL_zero;
  6326.  TUPTPIMPL local0;
  6327.  local0 = TUPTPIMPL_t1_TP_(self, at1);
  6328.  return TUPTPIMPL_t2_IMP(local0, at2);
  6329. }
  6330.  
  6331.  
  6332. FMAPTPIMPL FMAPTPIMPL_alloc(FMAPTPIMPL self, INT n_2856) {
  6333.  FMAPTPIMPL noname2857;
  6334.  FMAPTPIMPL r_2858;
  6335.  FMAPTPIMPL noname2859;
  6336.  FMAPTPIMPL local0;
  6337.  TUPTPIMPL local1;
  6338.  TP local2;
  6339.  local0 = ((FMAPTPIMPL) sbi_arr_alloc(sizeof(struct FMAPTPIMPL_struct), FMAPTPIMPL_tag, sizeof(TUPTPIMPL) , n_2856));
  6340.  local0->asize = n_2856;
  6341.  r_2858 = local0;
  6342.  if ((!((FMAPTPIMPL_key_n(self)==((TP) NULL))))) {
  6343.   {
  6344.    struct FMAPTPIMPL_aset__frame_struct temp2860_0;
  6345.    FMAPTPIMPL_aset__frame 
  6346.    noname2861 = &temp2860_0;
  6347.    noname2861->state = 0;
  6348.    while (1) {
  6349.     if (noname2861->state == 0) {
  6350.      noname2859 = r_2858;
  6351.      noname2861->arg0 = noname2859;
  6352.     }
  6353.     local1 = TUPTPIMPL_zero;
  6354.     local2 = FMAPTPIMPL_key_n(self);
  6355.     noname2861->arg1 = TUPTPIMPL_create(local1, local2, ((IMPL) NULL));
  6356.     FMAPTPIMPL_aset_(noname2861);
  6357.     if (noname2861->state == -1) goto after_loop;
  6358.     0 /* No return value from iter call */;
  6359.    }
  6360.   }
  6361.   after_loop: ;
  6362.  }
  6363.  return r_2858;
  6364. }
  6365.  
  6366.  
  6367. FMAPTPIMPL FMAPTPIMPL_inser(FMAPTPIMPL self, TUPTPIMPL p) {
  6368.  FMAPTPIMPL noname2862;
  6369.  return FMAPTPIMPL_inser_2863(self, p.t1, p.t2);
  6370.  if (!FMAPTPIMPL_invar(self)) {
  6371.   fprintf(stderr,"Failed invariant FMAP{$TP,IMPL}::invariant:BOOL ../Library/fmap.sa:202:14\n");
  6372.   exit(16);
  6373.  }
  6374. }
  6375.  
  6376.  
  6377. FMAPTPIMPL FMAPTPIMPL_doubl(FMAPTPIMPL self) {
  6378.  FMAPTPIMPL noname2864;
  6379.  INT ns = ((INT) 0);
  6380.  FMAPTPIMPL r_2865;
  6381.  FMAPTPIMPL noname2866;
  6382.  INT local0;
  6383.  INT local1;
  6384.  INT local2;
  6385.  TUPTPIMPL local3;
  6386.  if (!((!((self==((FMAPTPIMPL) NULL)))))) {
  6387.   fprintf(stderr,"Violation of precondition ../Library/fmap.sa:172:22\n");
  6388.   exit(16);
  6389.  }
  6390.  local0 = (self->asize);
  6391.  local1 = (c_INT_minus_INT_INT_chk(local0,1));
  6392.  local2 = (c_INT_times_INT_INT_chk(local1,2));
  6393.  ns = (c_INT_plus_INT_INT_chk(local2,1));
  6394.  r_2865 = FMAPTPIMPL_alloc(self, ns);
  6395.  {
  6396.   struct FMAPTPIMPL_pairs_frame_struct temp2867_0;
  6397.   FMAPTPIMPL_pairs_frame 
  6398.   noname2868 = &temp2867_0;
  6399.   noname2868->state = 0;
  6400.   while (1) {
  6401.    if (noname2868->state == 0) {
  6402.     noname2866 = self;
  6403.     noname2868->arg0 = noname2866;
  6404.    }
  6405.    local3 = FMAPTPIMPL_pairs(noname2868);
  6406.    if (noname2868->state == -1) goto after_loop;
  6407.    r_2865 = FMAPTPIMPL_inser(r_2865, local3);
  6408.   }
  6409.  }
  6410.  after_loop: ;
  6411.  return r_2865;
  6412. }
  6413.  
  6414.  
  6415. void FMAPTPIMPL_aset__2869(FMAPTPIMPL self, INT ind_2870, TUPTPIMPL val_2871) {
  6416.  BOOL local0;
  6417.  INT local1;
  6418.  INT local2;
  6419.  if ((!((self==((FMAPTPIMPL) NULL))))) {
  6420.   local1 = 0;
  6421.   local2 = (self->asize);
  6422.   local0 = INT_is_bet_INT_I(ind_2870, local1, (c_INT_minus_INT_INT_chk(local2,1)));
  6423.  } else {
  6424.   local0 = FALSE;
  6425.  }
  6426.  if (!(local0)) {
  6427.   fprintf(stderr,"Violation of precondition ../Library/aref.sa:38:7\n");
  6428.   exit(16);
  6429.  }
  6430.  if (ind_2870<0||ind_2870>=self->asize) {
  6431.   fprintf(stderr,"Index out of bounds ../Library/aref.sa:38:7\n");
  6432.   exit(16);
  6433.  }
  6434.  self->arr_part[ind_2870] = val_2871;
  6435. }
  6436.  
  6437.  
  6438. FMAPTPIMPL FMAPTPIMPL_inser_2863(FMAPTPIMPL self, TP k, IMPL t_2872) {
  6439.  FMAPTPIMPL noname2873;
  6440.  FMAPTPIMPL r_2874;
  6441.  INT h = ((INT) 0);
  6442.  INT asm_2875 = ((INT) 0);
  6443.  TP tk;
  6444.  TP tk_2876;
  6445.  INT local0;
  6446.  INT local1;
  6447.  INT local2;
  6448.  INT local3;
  6449.  INT local4;
  6450.  r_2874 = self;
  6451.  if ((r_2874==((FMAPTPIMPL) NULL))) {
  6452.   r_2874 = FMAPTPIMPL_alloc(self, 5);
  6453.  }
  6454.  else {
  6455.   local0 = (c_INT_plus_INT_INT_chk(self->hsize,1));
  6456.   local1 = (c_INT_times_INT_INT_chk(local0,2));
  6457.   if ((local1>(self->asize))) {
  6458.    r_2874 = FMAPTPIMPL_doubl(self);
  6459.   }
  6460.  }
  6461.  local2 = FMAPTPIMPL_key_h(r_2874, k);
  6462.  local3 = (r_2874->asize);
  6463.  h = (local2&(c_INT_minus_INT_INT_chk(local3,2)));
  6464.  local4 = (r_2874->asize);
  6465.  asm_2875 = (c_INT_minus_INT_INT_chk(local4,1));
  6466.  while (1) {
  6467.   tk = (TUPTPIMPL_blob=FMAPTPIMPL_aget_(r_2874, h)).t1;
  6468.   if (FMAPTPIMPL_key_e(self, tk, FMAPTPIMPL_key_n(self))) {
  6469.    goto after_loop;
  6470.   }
  6471.   if (FMAPTPIMPL_key_e(self, tk, k)) {
  6472.    FMAPTPIMPL_aset__2869(r_2874, h, TUPTPIMPL_create(TUPTPIMPL_zero, k, t_2872));
  6473.    return r_2874;
  6474.   }
  6475.   h = (c_INT_plus_INT_INT_chk(h,1));
  6476.  }
  6477.  after_loop: ;
  6478.  if ((h==asm_2875)) {
  6479.   h = 0;
  6480.   while (1) {
  6481.    tk_2876 = (TUPTPIMPL_blob=FMAPTPIMPL_aget_(r_2874, h)).t1;
  6482.    if (FMAPTPIMPL_key_e(self, tk_2876, FMAPTPIMPL_key_n(self))) {
  6483.     goto after_loop_2878;
  6484.    }
  6485.    if (FMAPTPIMPL_key_e(self, tk_2876, k)) {
  6486.     FMAPTPIMPL_aset__2869(r_2874, h, TUPTPIMPL_create(TUPTPIMPL_zero, k, t_2872));
  6487.     return r_2874;
  6488.    }
  6489.    h = (c_INT_plus_INT_INT_chk(h,1));
  6490.   }
  6491.   after_loop_2878: ;
  6492.   if (!((h!=asm_2875))) {
  6493.    fprintf(stderr,"Violation of assertion ../Library/fmap.sa:199:15\n");
  6494.    exit(16);
  6495.   }
  6496.  }
  6497.  FMAPTPIMPL_aset__2869(r_2874, h, TUPTPIMPL_create(TUPTPIMPL_zero, k, t_2872));
  6498.  r_2874->hsize = (c_INT_plus_INT_INT_chk(r_2874->hsize,1));
  6499.  return r_2874;
  6500.  if (!FMAPTPIMPL_invar(self)) {
  6501.   fprintf(stderr,"Failed invariant FMAP{$TP,IMPL}::invariant:BOOL ../Library/fmap.sa:180:9\n");
  6502.   exit(16);
  6503.  }
  6504. }
  6505.  
  6506.  
  6507. FSETTUPIDENTINT FSETTUPIDENTINT__2880(FSETTUPIDENTINT self) {
  6508.  FSETTUPIDENTINT noname2881;
  6509.  FSETTUPIDENTINT r_2882;
  6510.  FSETTUPIDENTINT noname2883;
  6511.  BOOL local0;
  6512.  INT local1;
  6513.  INT local2;
  6514.  INT local3;
  6515.  INT local4;
  6516.  INT local5;
  6517.  INT local6;
  6518.  TUPIDENTINT local7;
  6519.  if ((!((self==((FSETTUPIDENTINT) NULL))))) {
  6520.   local1 = self->hsize;
  6521.   local2 = (self->asize);
  6522.   local3 = (c_INT_minus_INT_INT_chk(local2,1));
  6523.   local0 = (local1<(c_INT_div_INT_INT_chk(local3,4)));
  6524.  } else {
  6525.   local0 = FALSE;
  6526.  }
  6527.  if (!(local0)) {
  6528.   fprintf(stderr,"Violation of precondition ../Library/fset.sa:180:21\n");
  6529.   exit(16);
  6530.  }
  6531.  local4 = (self->asize);
  6532.  local5 = (c_INT_minus_INT_INT_chk(local4,1));
  6533.  local6 = (c_INT_div_INT_INT_chk(local5,2));
  6534.  r_2882 = FSETTUPIDENTINT__2381(self, (c_INT_plus_INT_INT_chk(local6,1)));
  6535.  {
  6536.   struct FSETTUPIDENTINT__2370_frame_struct temp2884_0;
  6537.   FSETTUPIDENTINT__2370_frame 
  6538.   noname2885 = &temp2884_0;
  6539.   noname2885->state = 0;
  6540.   while (1) {
  6541.    if (noname2885->state == 0) {
  6542.     noname2883 = self;
  6543.     noname2885->arg0 = noname2883;
  6544.    }
  6545.    local7 = FSETTUPIDENTINT__2370(noname2885);
  6546.    if (noname2885->state == -1) goto after_loop;
  6547.    r_2882 = FSETTUPIDENTINT__2394(r_2882, local7);
  6548.   }
  6549.  }
  6550.  after_loop: ;
  6551.  return r_2882;
  6552. }
  6553.  
  6554.  
  6555. FSETTUPIDENTINT FSETTUPIDENTINT__2886(FSETTUPIDENTINT self, TUPIDENTINT e_2887) {
  6556.  FSETTUPIDENTINT noname2888;
  6557.  INT h = ((INT) 0);
  6558.  TUPIDENTINT te = TUPIDENTINT_zero;
  6559.  INT i = ((INT) 0);
  6560.  TUPIDENTINT te_2889 = TUPIDENTINT_zero;
  6561.  INT hsh = ((INT) 0);
  6562.  INT local0;
  6563.  INT local1;
  6564.  INT local2;
  6565.  INT local3;
  6566.  INT local4;
  6567.  INT local5;
  6568.  BOOL local6;
  6569.  BOOL local7;
  6570.  BOOL local8;
  6571.  INT local9;
  6572.  INT local10;
  6573.  INT local11;
  6574.  INT local12;
  6575.  if ((self==((FSETTUPIDENTINT) NULL))) {
  6576.   return ((FSETTUPIDENTINT) NULL);
  6577.  }
  6578.  local0 = FSETTUPIDENTINT_(self, e_2887);
  6579.  local1 = (self->asize);
  6580.  h = (local0&(c_INT_minus_INT_INT_chk(local1,2)));
  6581.  while (1) {
  6582.   te = FSETTUPIDENTINT__2336(self, h);
  6583.   if (FSETTUPIDENTINT__2341(self, te, FSETTUPIDENTINT__2345(self))) {
  6584.    return self;
  6585.   }
  6586.   else {
  6587.    if (FSETTUPIDENTINT__2341(self, te, e_2887)) {
  6588.     goto after_loop;
  6589.    }
  6590.   }
  6591.   local2 = (self->asize);
  6592.   if ((h==(c_INT_minus_INT_INT_chk(local2,2)))) {
  6593.    h = 0;
  6594.   }
  6595.   else {
  6596.    h = (c_INT_plus_INT_INT_chk(h,1));
  6597.   }
  6598.  }
  6599.  after_loop: ;
  6600.  FSETTUPIDENTINT__2395(self, h, FSETTUPIDENTINT__2345(self));
  6601.  self->hsize = (c_INT_minus_INT_INT_chk(self->hsize,1));
  6602.  i = h;
  6603.  while (1) {
  6604.   local3 = (self->asize);
  6605.   if ((i==(c_INT_minus_INT_INT_chk(local3,2)))) {
  6606.    i = 0;
  6607.   }
  6608.   else {
  6609.    i = (c_INT_plus_INT_INT_chk(i,1));
  6610.   }
  6611.   te_2889 = FSETTUPIDENTINT__2336(self, i);
  6612.   if (FSETTUPIDENTINT__2341(self, te_2889, FSETTUPIDENTINT__2345(self))) {
  6613.    goto after_loop_2891;
  6614.   }
  6615.   local4 = FSETTUPIDENTINT_(self, te_2889);
  6616.   local5 = (self->asize);
  6617.   hsh = (local4&(c_INT_minus_INT_INT_chk(local5,2)));
  6618.   if ((hsh<=i)) {
  6619.    if ((h<i)) {
  6620.     local6 = (h>=hsh);
  6621.    } else {
  6622.     local6 = FALSE;
  6623.    }
  6624.    if (local6) {
  6625.     FSETTUPIDENTINT__2395(self, h, FSETTUPIDENTINT__2336(self, i));
  6626.     h = i;
  6627.     FSETTUPIDENTINT__2395(self, i, FSETTUPIDENTINT__2345(self));
  6628.    }
  6629.   }
  6630.   else {
  6631.    if ((h>=hsh)) {
  6632.     local7 = TRUE;
  6633.    } else {
  6634.     local7 = (h<i);
  6635.    }
  6636.    if (local7) {
  6637.     FSETTUPIDENTINT__2395(self, h, FSETTUPIDENTINT__2336(self, i));
  6638.     h = i;
  6639.     FSETTUPIDENTINT__2395(self, i, FSETTUPIDENTINT__2345(self));
  6640.    }
  6641.   }
  6642.  }
  6643.  after_loop_2891: ;
  6644.  local9 = (self->asize);
  6645.  if ((local9>=33)) {
  6646.   local10 = self->hsize;
  6647.   local11 = (self->asize);
  6648.   local12 = (c_INT_minus_INT_INT_chk(local11,1));
  6649.   local8 = (local10<(c_INT_div_INT_INT_chk(local12,4)));
  6650.  } else {
  6651.   local8 = FALSE;
  6652.  }
  6653.  if (local8) {
  6654.   return FSETTUPIDENTINT__2880(self);
  6655.  }
  6656.  return self;
  6657.  if (!FSETTUPIDENTINT__2333(self)) {
  6658.   fprintf(stderr,"Failed invariant FSET{TUP{IDENT,INT}}::invariant:BOOL ../Library/fset.sa:188:9\n");
  6659.   exit(16);
  6660.  }
  6661. }
  6662.  
  6663.  
  6664. STR TP_ROUT_str_STR(TP_ROUT self) {
  6665.  STR noname2893;
  6666.  FSTR s_2894;
  6667.  ARRAYTP noname2895;
  6668.  STR noname2896;
  6669.  BOOL local0;
  6670.  FSTR local1;
  6671.  STR local2;
  6672.  TP local3;
  6673.  TP local4;
  6674.  FSTR local5;
  6675.  TP local6;
  6676.  if ((self==((TP_ROUT) NULL))) {
  6677.   return ((STR) &void_2897);
  6678.  }
  6679.  if ((!((self->str_cache==((STR) NULL))))) {
  6680.  }
  6681.  else {
  6682.   if ((self->args_7==((ARRAYTP) NULL))) {
  6683.    local0 = (self->ret==((TP) NULL));
  6684.   } else {
  6685.    local0 = FALSE;
  6686.   }
  6687.   if (local0) {
  6688.    self->str_cache = ((STR) &ROUT_2898);
  6689.   }
  6690.   else {
  6691.    local1 = FSTR_create_FSTR(((FSTR) NULL));
  6692.    s_2894 = FSTR_plus_STR_FSTR(local1, ((STR) &ROUT_2899));
  6693.    if ((!((self->args_7==((ARRAYTP) NULL))))) {
  6694.     s_2894 = FSTR_plus_CHAR_FSTR(s_2894, '{');
  6695.     {
  6696.      struct ARRAYTP_elt_TP_frame_struct temp2900_0;
  6697.      ARRAYTP_elt_TP_frame 
  6698.      noname2901 = &temp2900_0;
  6699.      struct STR_separate_STR_STR_frame_struct temp2900_1;
  6700.      STR_separate_STR_STR_frame 
  6701.      noname2902 = &temp2900_1;
  6702.      noname2901->state = 0;
  6703.      noname2902->state = 0;
  6704.      while (1) {
  6705.       if (noname2902->state == 0) {
  6706.        noname2896 = ((STR) &name_2903);
  6707.        noname2902->arg0 = noname2896;
  6708.       }
  6709.       if (noname2901->state == 0) {
  6710.        noname2895 = self->args_7;
  6711.        noname2901->arg0 = noname2895;
  6712.       }
  6713.       local3 = ARRAYTP_elt_TP(noname2901);
  6714.       if (noname2901->state == -1) goto after_loop;
  6715.       local4 = local3;
  6716.       noname2902->arg1 = (*TP_str_STR[local4->header.tag+TP_str_STR_offset])(local4);
  6717.       local2 = STR_separate_STR_STR(noname2902);
  6718.       if (noname2902->state == -1) goto after_loop;
  6719.       s_2894 = FSTR_plus_STR_FSTR(s_2894, local2);
  6720.      }
  6721.     }
  6722.     after_loop: ;
  6723.     s_2894 = FSTR_plus_CHAR_FSTR(s_2894, '}');
  6724.    }
  6725.    if ((!((self->ret==((TP) NULL))))) {
  6726.     local5 = FSTR_plus_CHAR_FSTR(s_2894, ':');
  6727.     local6 = self->ret;
  6728.     s_2894 = FSTR_plus_STR_FSTR(local5, (*TP_str_STR[local6->header.tag+TP_str_STR_offset])(local6));
  6729.    }
  6730.    self->str_cache = FSTR_str_STR(s_2894);
  6731.   }
  6732.  }
  6733.  return self->str_cache;
  6734. }
  6735.  
  6736.  
  6737. STR TP_ITER_str_STR(TP_ITER self) {
  6738.  STR noname2904;
  6739.  FSTR s_2905;
  6740.  ARRAYTP noname2906;
  6741.  STR noname2907;
  6742.  ARRAYBOOL noname2908;
  6743.  BOOL local0;
  6744.  FSTR local1;
  6745.  STR local2;
  6746.  TP local3;
  6747.  TP local4;
  6748.  BOOL local5;
  6749.  BOOL local6;
  6750.  FSTR local7;
  6751.  TP local8;
  6752.  if ((self==((TP_ITER) NULL))) {
  6753.   return ((STR) &void_2909);
  6754.  }
  6755.  if ((!((self->str_cache==((STR) NULL))))) {
  6756.  }
  6757.  else {
  6758.   if ((self->args_7==((ARRAYTP) NULL))) {
  6759.    local0 = (self->ret==((TP) NULL));
  6760.   } else {
  6761.    local0 = FALSE;
  6762.   }
  6763.   if (local0) {
  6764.    self->str_cache = ((STR) &ITER_2910);
  6765.   }
  6766.   else {
  6767.    local1 = FSTR_create_FSTR(((FSTR) NULL));
  6768.    s_2905 = FSTR_plus_STR_FSTR(local1, ((STR) &ITER_2911));
  6769.    if ((!((self->args_7==((ARRAYTP) NULL))))) {
  6770.     s_2905 = FSTR_plus_CHAR_FSTR(s_2905, '{');
  6771.     {
  6772.      struct ARRAYTP_elt_TP_frame_struct temp2912_0;
  6773.      ARRAYTP_elt_TP_frame 
  6774.      noname2913 = &temp2912_0;
  6775.      struct STR_separate_STR_STR_frame_struct temp2912_1;
  6776.      STR_separate_STR_STR_frame 
  6777.      noname2914 = &temp2912_1;
  6778.      struct ARRAYBOOL_elt_BOOL_frame_struct temp2912_2;
  6779.      ARRAYBOOL_elt_BOOL_frame 
  6780.      noname2915 = &temp2912_2;
  6781.      noname2913->state = 0;
  6782.      noname2914->state = 0;
  6783.      noname2915->state = 0;
  6784.      while (1) {
  6785.       if (noname2914->state == 0) {
  6786.        noname2907 = ((STR) &name_2916);
  6787.        noname2914->arg0 = noname2907;
  6788.       }
  6789.       if (noname2913->state == 0) {
  6790.        noname2906 = self->args_7;
  6791.        noname2913->arg0 = noname2906;
  6792.       }
  6793.       local3 = ARRAYTP_elt_TP(noname2913);
  6794.       if (noname2913->state == -1) goto after_loop;
  6795.       local4 = local3;
  6796.       noname2914->arg1 = (*TP_str_STR[local4->header.tag+TP_str_STR_offset])(local4);
  6797.       local2 = STR_separate_STR_STR(noname2914);
  6798.       if (noname2914->state == -1) goto after_loop;
  6799.       s_2905 = FSTR_plus_STR_FSTR(s_2905, local2);
  6800.       if ((!((self->hot==((ARRAYBOOL) NULL))))) {
  6801.        if (noname2915->state == 0) {
  6802.         noname2908 = self->hot;
  6803.         noname2915->arg0 = noname2908;
  6804.        }
  6805.        local6 = ARRAYBOOL_elt_BOOL(noname2915);
  6806.        if (noname2915->state == -1) goto after_loop;
  6807.        local5 = local6;
  6808.       } else {
  6809.        local5 = FALSE;
  6810.       }
  6811.       if (local5) {
  6812.        s_2905 = FSTR_plus_CHAR_FSTR(s_2905, '!');
  6813.       }
  6814.      }
  6815.     }
  6816.     after_loop: ;
  6817.     s_2905 = FSTR_plus_CHAR_FSTR(s_2905, '}');
  6818.    }
  6819.    if ((!((self->ret==((TP) NULL))))) {
  6820.     local7 = FSTR_plus_CHAR_FSTR(s_2905, ':');
  6821.     local8 = self->ret;
  6822.     s_2905 = FSTR_plus_STR_FSTR(local7, (*TP_str_STR[local8->header.tag+TP_str_STR_offset])(local8));
  6823.    }
  6824.    self->str_cache = FSTR_str_STR(s_2905);
  6825.   }
  6826.  }
  6827.  return self->str_cache;
  6828. }
  6829.  
  6830.  
  6831. IMPL IMPL_TBL_impl_of(IMPL_TBL self, TP t_2917) {
  6832.  IMPL noname2918;
  6833.  IMPL r_2919;
  6834.  PROG local0;
  6835.  STR local1;
  6836.  STR local2;
  6837.  FSETTUPIDENTINT local3;
  6838.  TUPIDENTINT local4;
  6839.  IDENT local5;
  6840.  FSETTUPIDENTINT local6;
  6841.  TUPIDENTINT local7;
  6842.  IDENT local8;
  6843.  FSETTUPIDENTINT local9;
  6844.  TUPIDENTINT local10;
  6845.  IDENT local11;
  6846.  PROG local12;
  6847.  STR local13;
  6848.  STR local14;
  6849.  PROG local15;
  6850.  STR local16;
  6851.  STR local17;
  6852.  if (!((!((t_2917==((TP) NULL)))))) {
  6853.   fprintf(stderr,"Violation of precondition ./impl.sa:182:10\n");
  6854.   exit(16);
  6855.  }
  6856.  r_2919 = FMAPTPIMPL_get_T(self->tbl, t_2917);
  6857.  if ((!((r_2919==((IMPL) NULL))))) {
  6858.   return r_2919;
  6859.  }
  6860.  if (t_2917==NULL) {
  6861.  } else
  6862.  switch (t_2917->header.tag) {
  6863.   case TP_CLASS_tag:
  6864.    if (TP_CLASS_is_abst(((TP_CLASS) t_2917))) {
  6865.     local0 = self->prog;
  6866.     local1 = ((STR) &CompilererrorIMP_2920);
  6867.     local2 = STR_plus_STR_STR(local1, TP_CLASS_str_STR(((TP_CLASS) t_2917)));
  6868.     PROG_err_STR(local0, STR_plus_STR_STR(local2, ((STR) &name_2921)));
  6869.     return ((IMPL) NULL);
  6870.    }
  6871.    local3 = self->cur;
  6872.    local4 = TUPIDENTINT_zero;
  6873.    local5 = ((TP_CLASS) t_2917)->name_19;
  6874.    if (FSETTUPIDENTINT__2348(local3, TUPIDENTINT_crea(local4, local5, ARRAYTP_size_INT(((TP_CLASS) t_2917)->params)))) {
  6875.     IMPL_TBL_cycle_err(self);
  6876.     self->cur = FSETTUPIDENTINT__2374(self->cur);
  6877.     return ((IMPL) NULL);
  6878.    }
  6879.    else {
  6880.     local6 = self->cur;
  6881.     local7 = TUPIDENTINT_zero;
  6882.     local8 = ((TP_CLASS) t_2917)->name_19;
  6883.     self->cur = FSETTUPIDENTINT__2394(local6, TUPIDENTINT_crea(local7, local8, ARRAYTP_size_INT(((TP_CLASS) t_2917)->params)));
  6884.     r_2919 = IMPL_create_for_(((IMPL) NULL), t_2917);
  6885.     self->tbl = FMAPTPIMPL_inser_2863(self->tbl, t_2917, r_2919);
  6886.     local9 = self->cur;
  6887.     local10 = TUPIDENTINT_zero;
  6888.     local11 = ((TP_CLASS) t_2917)->name_19;
  6889.     self->cur = FSETTUPIDENTINT__2886(local9, TUPIDENTINT_crea(local10, local11, ARRAYTP_size_INT(((TP_CLASS) t_2917)->params)));
  6890.     return r_2919;
  6891.    } break;
  6892.   case TP_ROUT_tag:
  6893.    local12 = self->prog;
  6894.    local13 = ((STR) &CompilererrorIMP_2922);
  6895.    local14 = STR_plus_STR_STR(local13, TP_ROUT_str_STR(((TP_ROUT) t_2917)));
  6896.    PROG_err_STR(local12, STR_plus_STR_STR(local14, ((STR) &name_2923)));
  6897.    return ((IMPL) NULL); break;
  6898.   case TP_ITER_tag:
  6899.    local15 = self->prog;
  6900.    local16 = ((STR) &CompilererrorIMP_2924);
  6901.    local17 = STR_plus_STR_STR(local16, TP_ITER_str_STR(((TP_ITER) t_2917)));
  6902.    PROG_err_STR(local15, STR_plus_STR_STR(local17, ((STR) &name_2925)));
  6903.    return ((IMPL) NULL); break;
  6904.   default: ;
  6905.    fprintf(stderr,"No applicable type in typecase ./impl.sa:187:14\n");
  6906.    exit(16);
  6907.  }
  6908.  return ((IMPL) NULL);
  6909. }
  6910.  
  6911.  
  6912. void PROG_FIND_TYPES__2926(PROG_FIND_TYPES self, IMPL im) {
  6913.  ELT e_2927;
  6914.  ELT_TBL noname2928;
  6915.  ELT local0;
  6916.  if ((im==((IMPL) NULL))) {
  6917.   return;
  6918.  }
  6919.  {
  6920.   struct ELT_TBL_elt_ELT_frame_struct temp2929_0;
  6921.   ELT_TBL_elt_ELT_frame 
  6922.   noname2930 = &temp2929_0;
  6923.   noname2930->state = 0;
  6924.   while (1) {
  6925.    if (noname2930->state == 0) {
  6926.     noname2928 = im->elts;
  6927.     noname2930->arg0 = noname2928;
  6928.    }
  6929.    local0 = ELT_TBL_elt_ELT(noname2930);
  6930.    if (noname2930->state == -1) goto after_loop;
  6931.    e_2927 = local0;
  6932.    self->con = e_2927->con;
  6933.    PROG_FIND_TYPES__2312(self, ((TR_NODE) e_2927->tr));
  6934.   }
  6935.  }
  6936.  after_loop: ;
  6937. }
  6938.  
  6939.  
  6940. TP FSETTP_first_elt_TP(FSETTP self) {
  6941.  TP noname2931;
  6942.  FSETTP noname2932;
  6943.  TP r_2933;
  6944.  TP local0;
  6945.  if ((!((self==((FSETTP) NULL))))) {
  6946.   {
  6947.    struct FSETTP_aelt_TP_frame_struct temp2934_0;
  6948.    FSETTP_aelt_TP_frame 
  6949.    noname2935 = &temp2934_0;
  6950.    noname2935->state = 0;
  6951.    while (1) {
  6952.     if (noname2935->state == 0) {
  6953.      noname2932 = self;
  6954.      noname2935->arg0 = noname2932;
  6955.     }
  6956.     local0 = FSETTP_aelt_TP(noname2935);
  6957.     if (noname2935->state == -1) goto after_loop;
  6958.     r_2933 = local0;
  6959.     if ((!(FSETTP_elt_eq_TP(self, r_2933, FSETTP_elt_nil_TP(self))))) {
  6960.      return r_2933;
  6961.     }
  6962.    }
  6963.   }
  6964.   after_loop: ;
  6965.  }
  6966.  return FSETTP_elt_nil_TP(self);
  6967.  if (!FSETTP_invariant(self)) {
  6968.   fprintf(stderr,"Failed invariant FSET{$TP}::invariant:BOOL ../Library/fset.sa:105:12\n");
  6969.   exit(16);
  6970.  }
  6971. }
  6972.  
  6973.  
  6974. FSETTP FSETTP_halve_siz(FSETTP self) {
  6975.  FSETTP noname2936;
  6976.  FSETTP r_2937;
  6977.  FSETTP noname2938;
  6978.  BOOL local0;
  6979.  INT local1;
  6980.  INT local2;
  6981.  INT local3;
  6982.  INT local4;
  6983.  INT local5;
  6984.  INT local6;
  6985.  TP local7;
  6986.  if ((!((self==((FSETTP) NULL))))) {
  6987.   local1 = self->hsize;
  6988.   local2 = (self->asize);
  6989.   local3 = (c_INT_minus_INT_INT_chk(local2,1));
  6990.   local0 = (local1<(c_INT_div_INT_INT_chk(local3,4)));
  6991.  } else {
  6992.   local0 = FALSE;
  6993.  }
  6994.  if (!(local0)) {
  6995.   fprintf(stderr,"Violation of precondition ../Library/fset.sa:180:21\n");
  6996.   exit(16);
  6997.  }
  6998.  local4 = (self->asize);
  6999.  local5 = (c_INT_minus_INT_INT_chk(local4,1));
  7000.  local6 = (c_INT_div_INT_INT_chk(local5,2));
  7001.  r_2937 = FSETTP_allocate_(self, (c_INT_plus_INT_INT_chk(local6,1)));
  7002.  {
  7003.   struct FSETTP_elt_TP_frame_struct temp2939_0;
  7004.   FSETTP_elt_TP_frame 
  7005.   noname2940 = &temp2939_0;
  7006.   noname2940->state = 0;
  7007.   while (1) {
  7008.    if (noname2940->state == 0) {
  7009.     noname2938 = self;
  7010.     noname2940->arg0 = noname2938;
  7011.    }
  7012.    local7 = FSETTP_elt_TP(noname2940);
  7013.    if (noname2940->state == -1) goto after_loop;
  7014.    r_2937 = FSETTP_insert_TP(r_2937, local7);
  7015.   }
  7016.  }
  7017.  after_loop: ;
  7018.  return r_2937;
  7019. }
  7020.  
  7021.  
  7022. FSETTP FSETTP_delete_TP(FSETTP self, TP e_2941) {
  7023.  FSETTP noname2942;
  7024.  INT h = ((INT) 0);
  7025.  TP te;
  7026.  INT i = ((INT) 0);
  7027.  TP te_2943;
  7028.  INT hsh = ((INT) 0);
  7029.  INT local0;
  7030.  INT local1;
  7031.  INT local2;
  7032.  INT local3;
  7033.  INT local4;
  7034.  INT local5;
  7035.  BOOL local6;
  7036.  BOOL local7;
  7037.  BOOL local8;
  7038.  INT local9;
  7039.  INT local10;
  7040.  INT local11;
  7041.  INT local12;
  7042.  if ((self==((FSETTP) NULL))) {
  7043.   return ((FSETTP) NULL);
  7044.  }
  7045.  local0 = FSETTP_elt_hash_(self, e_2941);
  7046.  local1 = (self->asize);
  7047.  h = (local0&(c_INT_minus_INT_INT_chk(local1,2)));
  7048.  while (1) {
  7049.   te = FSETTP_aget_INT_TP(self, h);
  7050.   if (FSETTP_elt_eq_TP(self, te, FSETTP_elt_nil_TP(self))) {
  7051.    return self;
  7052.   }
  7053.   else {
  7054.    if (FSETTP_elt_eq_TP(self, te, e_2941)) {
  7055.     goto after_loop;
  7056.    }
  7057.   }
  7058.   local2 = (self->asize);
  7059.   if ((h==(c_INT_minus_INT_INT_chk(local2,2)))) {
  7060.    h = 0;
  7061.   }
  7062.   else {
  7063.    h = (c_INT_plus_INT_INT_chk(h,1));
  7064.   }
  7065.  }
  7066.  after_loop: ;
  7067.  FSETTP_aset_INT_TP(self, h, FSETTP_elt_nil_TP(self));
  7068.  self->hsize = (c_INT_minus_INT_INT_chk(self->hsize,1));
  7069.  i = h;
  7070.  while (1) {
  7071.   local3 = (self->asize);
  7072.   if ((i==(c_INT_minus_INT_INT_chk(local3,2)))) {
  7073.    i = 0;
  7074.   }
  7075.   else {
  7076.    i = (c_INT_plus_INT_INT_chk(i,1));
  7077.   }
  7078.   te_2943 = FSETTP_aget_INT_TP(self, i);
  7079.   if (FSETTP_elt_eq_TP(self, te_2943, FSETTP_elt_nil_TP(self))) {
  7080.    goto after_loop_2945;
  7081.   }
  7082.   local4 = FSETTP_elt_hash_(self, te_2943);
  7083.   local5 = (self->asize);
  7084.   hsh = (local4&(c_INT_minus_INT_INT_chk(local5,2)));
  7085.   if ((hsh<=i)) {
  7086.    if ((h<i)) {
  7087.     local6 = (h>=hsh);
  7088.    } else {
  7089.     local6 = FALSE;
  7090.    }
  7091.    if (local6) {
  7092.     FSETTP_aset_INT_TP(self, h, FSETTP_aget_INT_TP(self, i));
  7093.     h = i;
  7094.     FSETTP_aset_INT_TP(self, i, FSETTP_elt_nil_TP(self));
  7095.    }
  7096.   }
  7097.   else {
  7098.    if ((h>=hsh)) {
  7099.     local7 = TRUE;
  7100.    } else {
  7101.     local7 = (h<i);
  7102.    }
  7103.    if (local7) {
  7104.     FSETTP_aset_INT_TP(self, h, FSETTP_aget_INT_TP(self, i));
  7105.     h = i;
  7106.     FSETTP_aset_INT_TP(self, i, FSETTP_elt_nil_TP(self));
  7107.    }
  7108.   }
  7109.  }
  7110.  after_loop_2945: ;
  7111.  local9 = (self->asize);
  7112.  if ((local9>=33)) {
  7113.   local10 = self->hsize;
  7114.   local11 = (self->asize);
  7115.   local12 = (c_INT_minus_INT_INT_chk(local11,1));
  7116.   local8 = (local10<(c_INT_div_INT_INT_chk(local12,4)));
  7117.  } else {
  7118.   local8 = FALSE;
  7119.  }
  7120.  if (local8) {
  7121.   return FSETTP_halve_siz(self);
  7122.  }
  7123.  return self;
  7124.  if (!FSETTP_invariant(self)) {
  7125.   fprintf(stderr,"Failed invariant FSET{$TP}::invariant:BOOL ../Library/fset.sa:188:9\n");
  7126.   exit(16);
  7127.  }
  7128. }
  7129.  
  7130.  
  7131. void PROG_FIND_TYPES__2947(PROG_FIND_TYPES self) {
  7132.  FSETTP noname2948;
  7133.  STR noname2949;
  7134.  OUT local0;
  7135.  OUT local1;
  7136.  STR local2;
  7137.  TP local3;
  7138.  TP local4;
  7139.  OUT local5;
  7140.  local0 = OUT_create_OUT(((OUT) NULL));
  7141.  OUT_plus_STR(local0, ((STR) &PROG_FIND_TYPES_2950));
  7142.  if ((!((self->tp_done==((FSETTP) NULL))))) {
  7143.   {
  7144.    struct FSETTP_elt_TP_frame_struct temp2951_0;
  7145.    FSETTP_elt_TP_frame 
  7146.    noname2952 = &temp2951_0;
  7147.    struct STR_separate_STR_STR_frame_struct temp2951_1;
  7148.    STR_separate_STR_STR_frame 
  7149.    noname2953 = &temp2951_1;
  7150.    noname2952->state = 0;
  7151.    noname2953->state = 0;
  7152.    while (1) {
  7153.     local1 = OUT_create_OUT(((OUT) NULL));
  7154.     if (noname2953->state == 0) {
  7155.      noname2949 = ((STR) &name_2954);
  7156.      noname2953->arg0 = noname2949;
  7157.     }
  7158.     if (noname2952->state == 0) {
  7159.      noname2948 = self->tp_done;
  7160.      noname2952->arg0 = noname2948;
  7161.     }
  7162.     local3 = FSETTP_elt_TP(noname2952);
  7163.     if (noname2952->state == -1) goto after_loop;
  7164.     local4 = local3;
  7165.     noname2953->arg1 = (*TP_str_STR[local4->header.tag+TP_str_STR_offset])(local4);
  7166.     local2 = STR_separate_STR_STR(noname2953);
  7167.     if (noname2953->state == -1) goto after_loop;
  7168.     OUT_plus_STR(local1, local2);
  7169.    }
  7170.   }
  7171.   after_loop: ;
  7172.  }
  7173.  local5 = OUT_create_OUT(((OUT) NULL));
  7174.  OUT_plus_STR(local5, ((STR) &name_2955));
  7175. }
  7176.  
  7177.  
  7178. void PROG_FIND_TYPES__2956(PROG_FIND_TYPES self) {
  7179.  BOOL got_all = ((BOOL) 0);
  7180.  TR_CLASS_DEF tcd;
  7181.  PROG_TR_TBL noname2957;
  7182.  TP_CLASS tp_2958;
  7183.  TP fe;
  7184.  TP_CLASS ctp = ((TP_CLASS) NULL);
  7185.  TR_CLASS_DEF tcd_2959;
  7186.  TR_CLASS_DEF local0;
  7187.  INT local1;
  7188.  IDENT local2;
  7189.  while (1) {
  7190.   got_all = TRUE;
  7191.   {
  7192.    struct PROG_TR_TBL_elt__2054_frame_struct temp2962_0;
  7193.    PROG_TR_TBL_elt__2054_frame 
  7194.    noname2963 = &temp2962_0;
  7195.    noname2963->state = 0;
  7196.    while (1) {
  7197.     if (noname2963->state == 0) {
  7198.      noname2957 = self->prog->prog_parse->tr_tbl;
  7199.      noname2963->arg0 = noname2957;
  7200.     }
  7201.     local0 = PROG_TR_TBL_elt__2054(noname2963);
  7202.     if (noname2963->state == -1) goto after_loop_2961;
  7203.     tcd = local0;
  7204.     local1 = TR_PARAM_DEC_siz(tcd->params);
  7205.     if ((local1==0)) {
  7206.      tp_2958 = TP_TBL_tp_class_(self->prog->tp_tbl, tcd->name_19, ((ARRAYTP) NULL));
  7207.      if ((!(FSETTP_test_TP_BOOL(self->tp_done, ((TP) tp_2958))))) {
  7208.       got_all = FALSE;
  7209.       self->con = PROG_tp_context_(self->prog, tp_2958);
  7210.       self->tp_done = FSETTP_insert_TP(self->tp_done, ((TP) tp_2958));
  7211.       PROG_FIND_TYPES__2312(self, ((TR_NODE) tcd));
  7212.       if (TP_CLASS_is_abst(tp_2958)) {
  7213.        PROG_FIND_TYPES__2316(self, tcd);
  7214.       }
  7215.       else {
  7216.        PROG_FIND_TYPES__2926(self, IMPL_TBL_impl_of(self->prog->impl_tbl, ((TP) tp_2958)));
  7217.       }
  7218.      }
  7219.     }
  7220.    }
  7221.   }
  7222.   after_loop_2961: ;
  7223.   if (got_all) {
  7224.    goto after_loop;
  7225.   }
  7226.  }
  7227.  after_loop: ;
  7228.  fe = FSETTP_first_elt_TP(self->tp_todo);
  7229.  while (1) {
  7230.   if ((!((fe==((TP) NULL))))) {
  7231.   }
  7232.   else {
  7233.    goto after_loop_2964;
  7234.   }
  7235.   self->tp_todo = FSETTP_delete_TP(self->tp_todo, fe);
  7236.   if ((!(FSETTP_test_TP_BOOL(self->tp_done, fe)))) {
  7237.    if (fe==NULL) {
  7238.    } else
  7239.    switch (fe->header.tag) {
  7240.     case TP_CLASS_tag:
  7241.      ctp = ((TP_CLASS) fe); break;
  7242.     default: ;
  7243.      fprintf(stderr,"No applicable type in typecase ./prog.sa:414:20\n");
  7244.      exit(16);
  7245.    }
  7246.    local2 = ctp->name_19;
  7247.    tcd_2959 = PROG_FIND_TYPES__2252(self, local2, ARRAYTP_size_INT(ctp->params));
  7248.    self->con = PROG_tp_context_(self->prog, ctp);
  7249.    self->tp_done = FSETTP_insert_TP(self->tp_done, ((TP) ctp));
  7250.    if ((!((tcd_2959==((TR_CLASS_DEF) NULL))))) {
  7251.     PROG_FIND_TYPES__2312(self, ((TR_NODE) tcd_2959));
  7252.     if (TP_CLASS_is_abst(ctp)) {
  7253.      PROG_FIND_TYPES__2316(self, tcd_2959);
  7254.     }
  7255.     else {
  7256.      PROG_FIND_TYPES__2926(self, IMPL_TBL_impl_of(self->prog->impl_tbl, ((TP) ctp)));
  7257.     }
  7258.    }
  7259.   }
  7260.   fe = FSETTP_first_elt_TP(self->tp_todo);
  7261.  }
  7262.  after_loop_2964: ;
  7263.  if (self->prog->show_types) {
  7264.   PROG_FIND_TYPES__2947(self);
  7265.  }
  7266. }
  7267.  
  7268.  
  7269. void PROG_do_find_typ(PROG self) {
  7270.  PROG_FIND_TYPES__2956(self->prog_find_types);
  7271. }
  7272.  
  7273.  
  7274. TP_CLASS FMAPTP_CLASSFSET_2966(FMAPTP_CLASSFSET self) {
  7275.  TP_CLASS noname2967;
  7276.  TP_CLASS k = ((TP_CLASS) NULL);
  7277.  return ((TP_CLASS) NULL);
  7278.  if (!FMAPTP_CLASSFSET_2968(self)) {
  7279.   fprintf(stderr,"Failed invariant FMAP{TP_CLASS,FSET{TP_CLASS}}::invariant:BOOL ../Library/fmap.sa:54:10\n");
  7280.   exit(16);
  7281.  }
  7282. }
  7283.  
  7284.  
  7285. TUPTP_CLASSFSETT TUPTP_CLASSFSETT_2969(TUPTP_CLASSFSETT self, TP_CLASS t1_2970) {
  7286.  TUPTP_CLASSFSETT local0;
  7287.  local0 = self;
  7288.  local0.t1 = t1_2970;
  7289.  return local0;
  7290. }
  7291.  
  7292.  
  7293. TUPTP_CLASSFSETT TUPTP_CLASSFSETT_2971(TUPTP_CLASSFSETT self, FSETTP_CLASS t2_2972) {
  7294.  TUPTP_CLASSFSETT local0;
  7295.  local0 = self;
  7296.  local0.t2 = t2_2972;
  7297.  return local0;
  7298. }
  7299.  
  7300.  
  7301. TUPTP_CLASSFSETT TUPTP_CLASSFSETT_2973(TUPTP_CLASSFSETT self, TP_CLASS at1, FSETTP_CLASS at2) {
  7302.  TUPTP_CLASSFSETT noname2974 = TUPTP_CLASSFSETT_zero;
  7303.  TUPTP_CLASSFSETT local0;
  7304.  local0 = TUPTP_CLASSFSETT_2969(self, at1);
  7305.  return TUPTP_CLASSFSETT_2971(local0, at2);
  7306. }
  7307.  
  7308.  
  7309. INT FMAPTP_CLASSFSET_2975(FMAPTP_CLASSFSET self, TP_CLASS k) {
  7310.  INT noname2976 = ((INT) 0);
  7311.  return (c_SYS_id_OB_INT(((SYS) NULL),((OB) k)));
  7312.  if (!FMAPTP_CLASSFSET_2968(self)) {
  7313.   fprintf(stderr,"Failed invariant FMAP{TP_CLASS,FSET{TP_CLASS}}::invariant:BOOL ../Library/fmap.sa:64:11\n");
  7314.   exit(16);
  7315.  }
  7316. }
  7317.  
  7318.  
  7319. INT FMAPTP_CLASSFSET_2977(FMAPTP_CLASSFSET self) {
  7320.  INT noname2978 = ((INT) 0);
  7321.   return self->asize;
  7322.  fprintf(stderr,"Last statement wasn't return ../Library/aref.sa:20:8\n");
  7323.  exit(16);
  7324. }
  7325.  
  7326.  
  7327. TUPTP_CLASSFSETT FMAPTP_CLASSFSET_2979(FMAPTP_CLASSFSET self, INT ind_2980) {
  7328.  TUPTP_CLASSFSETT noname2981 = TUPTP_CLASSFSETT_zero;
  7329.  BOOL local0;
  7330.  INT local1;
  7331.  INT local2;
  7332.  if ((!((self==((FMAPTP_CLASSFSET) NULL))))) {
  7333.   local1 = 0;
  7334.   local2 = (self->asize);
  7335.   local0 = INT_is_bet_INT_I(ind_2980, local1, (c_INT_minus_INT_INT_chk(local2,1)));
  7336.  } else {
  7337.   local0 = FALSE;
  7338.  }
  7339.  if (!(local0)) {
  7340.   fprintf(stderr,"Violation of precondition ../Library/aref.sa:33:7\n");
  7341.   exit(16);
  7342.  }
  7343.  if (ind_2980<0||ind_2980>=self->asize) {
  7344.   fprintf(stderr,"Index out of bounds ../Library/aref.sa:33:7\n");
  7345.   exit(16);
  7346.  }
  7347.  return self->arr_part[ind_2980];
  7348. }
  7349.  
  7350.  
  7351. BOOL FMAPTP_CLASSFSET_2982(FMAPTP_CLASSFSET self, TP_CLASS k1, TP_CLASS k2) {
  7352.  BOOL noname2983 = ((BOOL) 0);
  7353.  return c_SYS_ob_eq_OB_OB_BOOL(((OB) k1),((OB) k2));
  7354.  if (!FMAPTP_CLASSFSET_2968(self)) {
  7355.   fprintf(stderr,"Failed invariant FMAP{TP_CLASS,FSET{TP_CLASS}}::invariant:BOOL ../Library/fmap.sa:44:9\n");
  7356.   exit(16);
  7357.  }
  7358. }
  7359.  
  7360.  
  7361. TUPTP_CLASSFSETT FMAPTP_CLASSFSET_2984(FMAPTP_CLASSFSET self, TP_CLASS k) {
  7362.  TUPTP_CLASSFSETT noname2985 = TUPTP_CLASSFSETT_zero;
  7363.  INT h = ((INT) 0);
  7364.  TP_CLASS tk;
  7365.  TP_CLASS tk_2986;
  7366.  TUPTP_CLASSFSETT local0;
  7367.  TP_CLASS local1;
  7368.  INT local2;
  7369.  INT local3;
  7370.  INT local4;
  7371.  INT local5;
  7372.  TUPTP_CLASSFSETT local6;
  7373.  TP_CLASS local7;
  7374.  if ((self==((FMAPTP_CLASSFSET) NULL))) {
  7375.   local0 = TUPTP_CLASSFSETT_zero;
  7376.   local1 = FMAPTP_CLASSFSET_2966(self);
  7377.   return TUPTP_CLASSFSETT_2973(local0, local1, ((FSETTP_CLASS) NULL));
  7378.  }
  7379.  local2 = FMAPTP_CLASSFSET_2975(self, k);
  7380.  local3 = (self->asize);
  7381.  h = (local2&(c_INT_minus_INT_INT_chk(local3,2)));
  7382.  while (1) {
  7383.   tk = (TUPTP_CLASSFSETT_blob=FMAPTP_CLASSFSET_2979(self, h)).t1;
  7384.   if (FMAPTP_CLASSFSET_2982(self, tk, k)) {
  7385.    return FMAPTP_CLASSFSET_2979(self, h);
  7386.   }
  7387.   else {
  7388.    if (FMAPTP_CLASSFSET_2982(self, tk, FMAPTP_CLASSFSET_2966(self))) {
  7389.     goto after_loop;
  7390.    }
  7391.   }
  7392.   h = (c_INT_plus_INT_INT_chk(h,1));
  7393.  }
  7394.  after_loop: ;
  7395.  local4 = (self->asize);
  7396.  if ((h==(c_INT_minus_INT_INT_chk(local4,1)))) {
  7397.   h = 0;
  7398.   while (1) {
  7399.    tk_2986 = (TUPTP_CLASSFSETT_blob=FMAPTP_CLASSFSET_2979(self, h)).t1;
  7400.    if (FMAPTP_CLASSFSET_2982(self, tk_2986, k)) {
  7401.     return FMAPTP_CLASSFSET_2979(self, h);
  7402.    }
  7403.    else {
  7404.     if (FMAPTP_CLASSFSET_2982(self, tk_2986, FMAPTP_CLASSFSET_2966(self))) {
  7405.      goto after_loop_2988;
  7406.     }
  7407.    }
  7408.    h = (c_INT_plus_INT_INT_chk(h,1));
  7409.   }
  7410.   after_loop_2988: ;
  7411.   local5 = (self->asize);
  7412.   if (!((h!=(c_INT_minus_INT_INT_chk(local5,1))))) {
  7413.    fprintf(stderr,"Violation of assertion ../Library/fmap.sa:169:15\n");
  7414.    exit(16);
  7415.   }
  7416.  }
  7417.  local6 = TUPTP_CLASSFSETT_zero;
  7418.  local7 = FMAPTP_CLASSFSET_2966(self);
  7419.  return TUPTP_CLASSFSETT_2973(local6, local7, ((FSETTP_CLASS) NULL));
  7420.  if (!FMAPTP_CLASSFSET_2968(self)) {
  7421.   fprintf(stderr,"Failed invariant FMAP{TP_CLASS,FSET{TP_CLASS}}::invariant:BOOL ../Library/fmap.sa:153:11\n");
  7422.   exit(16);
  7423.  }
  7424. }
  7425.  
  7426.  
  7427. TR_CLASS_DEF PROG_tree_head_f(PROG self, IDENT nm_2990, INT num_2991) {
  7428.  TR_CLASS_DEF noname2992;
  7429.  return PROG_PARSE_tree_(self->prog_parse, nm_2990, num_2991);
  7430. }
  7431.  
  7432.  
  7433. TP_CLASS FSETTP_CLASS_elt(FSETTP_CLASS self) {
  7434.  TP_CLASS noname2993;
  7435.  TP_CLASS t_2994 = ((TP_CLASS) NULL);
  7436.  return ((TP_CLASS) NULL);
  7437.  if (!FSETTP_CLASS_inv(self)) {
  7438.   fprintf(stderr,"Failed invariant FSET{TP_CLASS}::invariant:BOOL ../Library/fset.sa:53:10\n");
  7439.   exit(16);
  7440.  }
  7441. }
  7442.  
  7443.  
  7444. FSETTP_CLASS FSETTP_CLASS_all(FSETTP_CLASS self, INT n_2995) {
  7445.  FSETTP_CLASS noname2996;
  7446.  FSETTP_CLASS r_2997;
  7447.  FSETTP_CLASS noname2998;
  7448.  FSETTP_CLASS local0;
  7449.  local0 = ((FSETTP_CLASS) sbi_arr_alloc(sizeof(struct FSETTP_CLASS_struct), FSETTP_CLASS_tag, sizeof(TP_CLASS) , n_2995));
  7450.  local0->asize = n_2995;
  7451.  r_2997 = local0;
  7452.  if ((!((FSETTP_CLASS_elt(self)==((TP_CLASS) NULL))))) {
  7453.   {
  7454.    struct FSETTP_CLASS_ase_frame_struct temp2999_0;
  7455.    FSETTP_CLASS_ase_frame 
  7456.    noname3000 = &temp2999_0;
  7457.    noname3000->state = 0;
  7458.    while (1) {
  7459.     if (noname3000->state == 0) {
  7460.      noname2998 = r_2997;
  7461.      noname3000->arg0 = noname2998;
  7462.     }
  7463.     noname3000->arg1 = FSETTP_CLASS_elt(self);
  7464.     FSETTP_CLASS_ase(noname3000);
  7465.     if (noname3000->state == -1) goto after_loop;
  7466.     0 /* No return value from iter call */;
  7467.    }
  7468.   }
  7469.   after_loop: ;
  7470.  }
  7471.  return r_2997;
  7472. }
  7473.  
  7474.  
  7475. INT FSETTP_CLASS_asi(FSETTP_CLASS self) {
  7476.  INT noname3001 = ((INT) 0);
  7477.   return self->asize;
  7478.  fprintf(stderr,"Last statement wasn't return ../Library/aref.sa:20:8\n");
  7479.  exit(16);
  7480. }
  7481.  
  7482.  
  7483. FSETTP_CLASS FSETTP_CLASS_dou(FSETTP_CLASS self) {
  7484.  FSETTP_CLASS noname3002;
  7485.  FSETTP_CLASS r_3003;
  7486.  FSETTP_CLASS noname3004;
  7487.  INT local0;
  7488.  INT local1;
  7489.  INT local2;
  7490.  TP_CLASS local3;
  7491.  if (!((!((self==((FSETTP_CLASS) NULL)))))) {
  7492.   fprintf(stderr,"Violation of precondition ../Library/fset.sa:150:22\n");
  7493.   exit(16);
  7494.  }
  7495.  local0 = (self->asize);
  7496.  local1 = (c_INT_minus_INT_INT_chk(local0,1));
  7497.  local2 = (c_INT_times_INT_INT_chk(local1,2));
  7498.  r_3003 = FSETTP_CLASS_all(self, (c_INT_plus_INT_INT_chk(local2,1)));
  7499.  {
  7500.   struct FSETTP_CLASS_elt_3006_frame_struct temp3005_0;
  7501.   FSETTP_CLASS_elt_3006_frame 
  7502.   noname3007 = &temp3005_0;
  7503.   noname3007->state = 0;
  7504.   while (1) {
  7505.    if (noname3007->state == 0) {
  7506.     noname3004 = self;
  7507.     noname3007->arg0 = noname3004;
  7508.    }
  7509.    local3 = FSETTP_CLASS_elt_3006(noname3007);
  7510.    if (noname3007->state == -1) goto after_loop;
  7511.    r_3003 = FSETTP_CLASS_ins(r_3003, local3);
  7512.   }
  7513.  }
  7514.  after_loop: ;
  7515.  return r_3003;
  7516. }
  7517.  
  7518.  
  7519. INT FSETTP_CLASS_elt_3008(FSETTP_CLASS self, TP_CLASS e_3009) {
  7520.  INT noname3010 = ((INT) 0);
  7521.  return (c_SYS_id_OB_INT(((SYS) NULL),((OB) e_3009)));
  7522.  if (!FSETTP_CLASS_inv(self)) {
  7523.   fprintf(stderr,"Failed invariant FSET{TP_CLASS}::invariant:BOOL ../Library/fset.sa:63:11\n");
  7524.   exit(16);
  7525.  }
  7526. }
  7527.  
  7528.  
  7529. TP_CLASS FSETTP_CLASS_age(FSETTP_CLASS self, INT ind_3011) {
  7530.  TP_CLASS noname3012;
  7531.  BOOL local0;
  7532.  INT local1;
  7533.  INT local2;
  7534.  if ((!((self==((FSETTP_CLASS) NULL))))) {
  7535.   local1 = 0;
  7536.   local2 = (self->asize);
  7537.   local0 = INT_is_bet_INT_I(ind_3011, local1, (c_INT_minus_INT_INT_chk(local2,1)));
  7538.  } else {
  7539.   local0 = FALSE;
  7540.  }
  7541.  if (!(local0)) {
  7542.   fprintf(stderr,"Violation of precondition ../Library/aref.sa:33:7\n");
  7543.   exit(16);
  7544.  }
  7545.  if (ind_3011<0||ind_3011>=self->asize) {
  7546.   fprintf(stderr,"Index out of bounds ../Library/aref.sa:33:7\n");
  7547.   exit(16);
  7548.  }
  7549.  return self->arr_part[ind_3011];
  7550.  if (!FSETTP_CLASS_inv(self)) {
  7551.   fprintf(stderr,"Failed invariant FSET{TP_CLASS}::invariant:BOOL ../Library/aref.sa:33:7\n");
  7552.   exit(16);
  7553.  }
  7554. }
  7555.  
  7556.  
  7557. BOOL FSETTP_CLASS_elt_3013(FSETTP_CLASS self, TP_CLASS e1_3014, TP_CLASS e2_3015) {
  7558.  BOOL noname3016 = ((BOOL) 0);
  7559.  return c_SYS_ob_eq_OB_OB_BOOL(((OB) e1_3014),((OB) e2_3015));
  7560.  if (!FSETTP_CLASS_inv(self)) {
  7561.   fprintf(stderr,"Failed invariant FSET{TP_CLASS}::invariant:BOOL ../Library/fset.sa:44:9\n");
  7562.   exit(16);
  7563.  }
  7564. }
  7565.  
  7566.  
  7567. void FSETTP_CLASS_ase_3017(FSETTP_CLASS self, INT ind_3018, TP_CLASS val_3019) {
  7568.  BOOL local0;
  7569.  INT local1;
  7570.  INT local2;
  7571.  if ((!((self==((FSETTP_CLASS) NULL))))) {
  7572.   local1 = 0;
  7573.   local2 = (self->asize);
  7574.   local0 = INT_is_bet_INT_I(ind_3018, local1, (c_INT_minus_INT_INT_chk(local2,1)));
  7575.  } else {
  7576.   local0 = FALSE;
  7577.  }
  7578.  if (!(local0)) {
  7579.   fprintf(stderr,"Violation of precondition ../Library/aref.sa:38:7\n");
  7580.   exit(16);
  7581.  }
  7582.  if (ind_3018<0||ind_3018>=self->asize) {
  7583.   fprintf(stderr,"Index out of bounds ../Library/aref.sa:38:7\n");
  7584.   exit(16);
  7585.  }
  7586.  self->arr_part[ind_3018] = val_3019;
  7587.  if (!FSETTP_CLASS_inv(self)) {
  7588.   fprintf(stderr,"Failed invariant FSET{TP_CLASS}::invariant:BOOL ../Library/aref.sa:38:7\n");
  7589.   exit(16);
  7590.  }
  7591. }
  7592.  
  7593.  
  7594. FSETTP_CLASS FSETTP_CLASS_ins(FSETTP_CLASS self, TP_CLASS e_3020) {
  7595.  FSETTP_CLASS noname3021;
  7596.  FSETTP_CLASS r_3022;
  7597.  INT asz_3023 = ((INT) 0);
  7598.  INT h = ((INT) 0);
  7599.  TP_CLASS te;
  7600.  TP_CLASS te_3024;
  7601.  INT local0;
  7602.  INT local1;
  7603.  INT local2;
  7604.  r_3022 = self;
  7605.  if ((r_3022==((FSETTP_CLASS) NULL))) {
  7606.   r_3022 = FSETTP_CLASS_all(self, 5);
  7607.  }
  7608.  else {
  7609.   local0 = (c_INT_plus_INT_INT_chk(self->hsize,1));
  7610.   local1 = (c_INT_times_INT_INT_chk(local0,2));
  7611.   if ((local1>(self->asize))) {
  7612.    r_3022 = FSETTP_CLASS_dou(self);
  7613.   }
  7614.  }
  7615.  asz_3023 = (r_3022->asize);
  7616.  local2 = FSETTP_CLASS_elt_3008(r_3022, e_3020);
  7617.  h = (local2&(c_INT_minus_INT_INT_chk(asz_3023,2)));
  7618.  while (1) {
  7619.   te = FSETTP_CLASS_age(r_3022, h);
  7620.   if (FSETTP_CLASS_elt_3013(self, te, FSETTP_CLASS_elt(self))) {
  7621.    goto after_loop;
  7622.   }
  7623.   else {
  7624.    if (FSETTP_CLASS_elt_3013(self, te, e_3020)) {
  7625.     FSETTP_CLASS_ase_3017(r_3022, h, e_3020);
  7626.     return r_3022;
  7627.    }
  7628.   }
  7629.   h = (c_INT_plus_INT_INT_chk(h,1));
  7630.  }
  7631.  after_loop: ;
  7632.  if ((h==(c_INT_minus_INT_INT_chk(asz_3023,1)))) {
  7633.   h = 0;
  7634.   while (1) {
  7635.    te_3024 = FSETTP_CLASS_age(r_3022, h);
  7636.    if (FSETTP_CLASS_elt_3013(self, te_3024, FSETTP_CLASS_elt(self))) {
  7637.     goto after_loop_3026;
  7638.    }
  7639.    else {
  7640.     if (FSETTP_CLASS_elt_3013(self, te_3024, e_3020)) {
  7641.      FSETTP_CLASS_ase_3017(r_3022, h, e_3020);
  7642.      return r_3022;
  7643.     }
  7644.    }
  7645.    h = (c_INT_plus_INT_INT_chk(h,1));
  7646.   }
  7647.   after_loop_3026: ;
  7648.   if (!((h!=(c_INT_minus_INT_INT_chk(asz_3023,1))))) {
  7649.    fprintf(stderr,"Violation of assertion ../Library/fset.sa:177:15\n");
  7650.    exit(16);
  7651.   }
  7652.  }
  7653.  FSETTP_CLASS_ase_3017(r_3022, h, e_3020);
  7654.  r_3022->hsize = (c_INT_plus_INT_INT_chk(r_3022->hsize,1));
  7655.  return r_3022;
  7656.  if (!FSETTP_CLASS_inv(self)) {
  7657.   fprintf(stderr,"Failed invariant FSET{TP_CLASS}::invariant:BOOL ../Library/fset.sa:158:9\n");
  7658.   exit(16);
  7659.  }
  7660. }
  7661.  
  7662.  
  7663. FMAPTP_CLASSFSET FMAPTP_CLASSFSET_3028(FMAPTP_CLASSFSET self, INT n_3029) {
  7664.  FMAPTP_CLASSFSET noname3030;
  7665.  FMAPTP_CLASSFSET r_3031;
  7666.  FMAPTP_CLASSFSET noname3032;
  7667.  FMAPTP_CLASSFSET local0;
  7668.  TUPTP_CLASSFSETT local1;
  7669.  TP_CLASS local2;
  7670.  local0 = ((FMAPTP_CLASSFSET) sbi_arr_alloc(sizeof(struct FMAPTP_CLASSFSET_struct), FMAPTP_CLASSFSET_tag, sizeof(TUPTP_CLASSFSETT) , n_3029));
  7671.  local0->asize = n_3029;
  7672.  r_3031 = local0;
  7673.  if ((!((FMAPTP_CLASSFSET_2966(self)==((TP_CLASS) NULL))))) {
  7674.   {
  7675.    struct FMAPTP_CLASSFSET_3034_frame_struct temp3033_0;
  7676.    FMAPTP_CLASSFSET_3034_frame 
  7677.    noname3035 = &temp3033_0;
  7678.    noname3035->state = 0;
  7679.    while (1) {
  7680.     if (noname3035->state == 0) {
  7681.      noname3032 = r_3031;
  7682.      noname3035->arg0 = noname3032;
  7683.     }
  7684.     local1 = TUPTP_CLASSFSETT_zero;
  7685.     local2 = FMAPTP_CLASSFSET_2966(self);
  7686.     noname3035->arg1 = TUPTP_CLASSFSETT_2973(local1, local2, ((FSETTP_CLASS) NULL));
  7687.     FMAPTP_CLASSFSET_3034(noname3035);
  7688.     if (noname3035->state == -1) goto after_loop;
  7689.     0 /* No return value from iter call */;
  7690.    }
  7691.   }
  7692.   after_loop: ;
  7693.  }
  7694.  return r_3031;
  7695. }
  7696.  
  7697.  
  7698. FMAPTP_CLASSFSET FMAPTP_CLASSFSET_3036(FMAPTP_CLASSFSET self, TUPTP_CLASSFSETT p) {
  7699.  FMAPTP_CLASSFSET noname3037;
  7700.  return FMAPTP_CLASSFSET_3038(self, p.t1, p.t2);
  7701.  if (!FMAPTP_CLASSFSET_2968(self)) {
  7702.   fprintf(stderr,"Failed invariant FMAP{TP_CLASS,FSET{TP_CLASS}}::invariant:BOOL ../Library/fmap.sa:202:14\n");
  7703.   exit(16);
  7704.  }
  7705. }
  7706.  
  7707.  
  7708. FMAPTP_CLASSFSET FMAPTP_CLASSFSET_3039(FMAPTP_CLASSFSET self) {
  7709.  FMAPTP_CLASSFSET noname3040;
  7710.  INT ns = ((INT) 0);
  7711.  FMAPTP_CLASSFSET r_3041;
  7712.  FMAPTP_CLASSFSET noname3042;
  7713.  INT local0;
  7714.  INT local1;
  7715.  INT local2;
  7716.  TUPTP_CLASSFSETT local3;
  7717.  if (!((!((self==((FMAPTP_CLASSFSET) NULL)))))) {
  7718.   fprintf(stderr,"Violation of precondition ../Library/fmap.sa:172:22\n");
  7719.   exit(16);
  7720.  }
  7721.  local0 = (self->asize);
  7722.  local1 = (c_INT_minus_INT_INT_chk(local0,1));
  7723.  local2 = (c_INT_times_INT_INT_chk(local1,2));
  7724.  ns = (c_INT_plus_INT_INT_chk(local2,1));
  7725.  r_3041 = FMAPTP_CLASSFSET_3028(self, ns);
  7726.  {
  7727.   struct FMAPTP_CLASSFSET_3044_frame_struct temp3043_0;
  7728.   FMAPTP_CLASSFSET_3044_frame 
  7729.   noname3045 = &temp3043_0;
  7730.   noname3045->state = 0;
  7731.   while (1) {
  7732.    if (noname3045->state == 0) {
  7733.     noname3042 = self;
  7734.     noname3045->arg0 = noname3042;
  7735.    }
  7736.    local3 = FMAPTP_CLASSFSET_3044(noname3045);
  7737.    if (noname3045->state == -1) goto after_loop;
  7738.    r_3041 = FMAPTP_CLASSFSET_3036(r_3041, local3);
  7739.   }
  7740.  }
  7741.  after_loop: ;
  7742.  return r_3041;
  7743. }
  7744.  
  7745.  
  7746. void FMAPTP_CLASSFSET_3046(FMAPTP_CLASSFSET self, INT ind_3047, TUPTP_CLASSFSETT val_3048) {
  7747.  BOOL local0;
  7748.  INT local1;
  7749.  INT local2;
  7750.  if ((!((self==((FMAPTP_CLASSFSET) NULL))))) {
  7751.   local1 = 0;
  7752.   local2 = (self->asize);
  7753.   local0 = INT_is_bet_INT_I(ind_3047, local1, (c_INT_minus_INT_INT_chk(local2,1)));
  7754.  } else {
  7755.   local0 = FALSE;
  7756.  }
  7757.  if (!(local0)) {
  7758.   fprintf(stderr,"Violation of precondition ../Library/aref.sa:38:7\n");
  7759.   exit(16);
  7760.  }
  7761.  if (ind_3047<0||ind_3047>=self->asize) {
  7762.   fprintf(stderr,"Index out of bounds ../Library/aref.sa:38:7\n");
  7763.   exit(16);
  7764.  }
  7765.  self->arr_part[ind_3047] = val_3048;
  7766. }
  7767.  
  7768.  
  7769. FMAPTP_CLASSFSET FMAPTP_CLASSFSET_3038(FMAPTP_CLASSFSET self, TP_CLASS k, FSETTP_CLASS t_3049) {
  7770.  FMAPTP_CLASSFSET noname3050;
  7771.  FMAPTP_CLASSFSET r_3051;
  7772.  INT h = ((INT) 0);
  7773.  INT asm_3052 = ((INT) 0);
  7774.  TP_CLASS tk;
  7775.  TP_CLASS tk_3053;
  7776.  INT local0;
  7777.  INT local1;
  7778.  INT local2;
  7779.  INT local3;
  7780.  INT local4;
  7781.  r_3051 = self;
  7782.  if ((r_3051==((FMAPTP_CLASSFSET) NULL))) {
  7783.   r_3051 = FMAPTP_CLASSFSET_3028(self, 5);
  7784.  }
  7785.  else {
  7786.   local0 = (c_INT_plus_INT_INT_chk(self->hsize,1));
  7787.   local1 = (c_INT_times_INT_INT_chk(local0,2));
  7788.   if ((local1>(self->asize))) {
  7789.    r_3051 = FMAPTP_CLASSFSET_3039(self);
  7790.   }
  7791.  }
  7792.  local2 = FMAPTP_CLASSFSET_2975(r_3051, k);
  7793.  local3 = (r_3051->asize);
  7794.  h = (local2&(c_INT_minus_INT_INT_chk(local3,2)));
  7795.  local4 = (r_3051->asize);
  7796.  asm_3052 = (c_INT_minus_INT_INT_chk(local4,1));
  7797.  while (1) {
  7798.   tk = (TUPTP_CLASSFSETT_blob=FMAPTP_CLASSFSET_2979(r_3051, h)).t1;
  7799.   if (FMAPTP_CLASSFSET_2982(self, tk, FMAPTP_CLASSFSET_2966(self))) {
  7800.    goto after_loop;
  7801.   }
  7802.   if (FMAPTP_CLASSFSET_2982(self, tk, k)) {
  7803.    FMAPTP_CLASSFSET_3046(r_3051, h, TUPTP_CLASSFSETT_2973(TUPTP_CLASSFSETT_zero, k, t_3049));
  7804.    return r_3051;
  7805.   }
  7806.   h = (c_INT_plus_INT_INT_chk(h,1));
  7807.  }
  7808.  after_loop: ;
  7809.  if ((h==asm_3052)) {
  7810.   h = 0;
  7811.   while (1) {
  7812.    tk_3053 = (TUPTP_CLASSFSETT_blob=FMAPTP_CLASSFSET_2979(r_3051, h)).t1;
  7813.    if (FMAPTP_CLASSFSET_2982(self, tk_3053, FMAPTP_CLASSFSET_2966(self))) {
  7814.     goto after_loop_3055;
  7815.    }
  7816.    if (FMAPTP_CLASSFSET_2982(self, tk_3053, k)) {
  7817.     FMAPTP_CLASSFSET_3046(r_3051, h, TUPTP_CLASSFSETT_2973(TUPTP_CLASSFSETT_zero, k, t_3049));
  7818.     return r_3051;
  7819.    }
  7820.    h = (c_INT_plus_INT_INT_chk(h,1));
  7821.   }
  7822.   after_loop_3055: ;
  7823.   if (!((h!=asm_3052))) {
  7824.    fprintf(stderr,"Violation of assertion ../Library/fmap.sa:199:15\n");
  7825.    exit(16);
  7826.   }
  7827.  }
  7828.  FMAPTP_CLASSFSET_3046(r_3051, h, TUPTP_CLASSFSETT_2973(TUPTP_CLASSFSETT_zero, k, t_3049));
  7829.  r_3051->hsize = (c_INT_plus_INT_INT_chk(r_3051->hsize,1));
  7830.  return r_3051;
  7831.  if (!FMAPTP_CLASSFSET_2968(self)) {
  7832.   fprintf(stderr,"Failed invariant FMAP{TP_CLASS,FSET{TP_CLASS}}::invariant:BOOL ../Library/fmap.sa:180:9\n");
  7833.   exit(16);
  7834.  }
  7835. }
  7836.  
  7837.  
  7838. FSETTP_CLASS TP_GRAPH_ANC_get(TP_GRAPH_ANC self, TP_CLASS t_3057) {
  7839.  FSETTP_CLASS noname3058;
  7840.  TUPTP_CLASSFSETT p = TUPTP_CLASSFSETT_zero;
  7841.  TR_CLASS_DEF tr_3059;
  7842.  TP_CONTEXT con_3060;
  7843.  FSETTP_CLASS r_3061 = ((FSETTP_CLASS) NULL);
  7844.  TR_TYPE_SPEC ts;
  7845.  TP tp_3062;
  7846.  PROG local0;
  7847.  IDENT local1;
  7848.  BOOL local2;
  7849.  PROG local3;
  7850.  STR local4;
  7851.  STR local5;
  7852.  STR local6;
  7853.  TP local7;
  7854.  STR local8;
  7855.  PROG local9;
  7856.  STR local10;
  7857.  STR local11;
  7858.  STR local12;
  7859.  STR local13;
  7860.  PROG local14;
  7861.  STR local15;
  7862.  STR local16;
  7863.  STR local17;
  7864.  TP local18;
  7865.  STR local19;
  7866.  p = FMAPTP_CLASSFSET_2984(self->par_tbl, t_3057);
  7867.  if ((!((p.t1==((TP_CLASS) NULL))))) {
  7868.   return p.t2;
  7869.  }
  7870.  local0 = self->prog;
  7871.  local1 = t_3057->name_19;
  7872.  tr_3059 = PROG_tree_head_f(local0, local1, ARRAYTP_size_INT(t_3057->params));
  7873.  if ((tr_3059==((TR_CLASS_DEF) NULL))) {
  7874.   local2 = TRUE;
  7875.  } else {
  7876.   local2 = (tr_3059->under==((TR_TYPE_SPEC) NULL));
  7877.  }
  7878.  if (local2) {
  7879.   return ((FSETTP_CLASS) NULL);
  7880.  }
  7881.  con_3060 = PROG_tp_context_(self->prog, t_3057);
  7882.  ts = tr_3059->under;
  7883.  while (1) {
  7884.   if ((ts==((TR_TYPE_SPEC) NULL))) {
  7885.    goto after_loop;
  7886.   }
  7887.   PROG_err_loc_PRO(self->prog, ((PROG_ERR) ts));
  7888.   tp_3062 = TP_CONTEXT_tp_of(con_3060, ts);
  7889.   if (tp_3062==NULL) {
  7890.    local3 = self->prog;
  7891.    local4 = ((STR) &Intype);
  7892.    local5 = STR_plus_STR_STR(local4, TP_CLASS_str_STR(t_3057));
  7893.    local6 = STR_plus_STR_STR(local5, ((STR) &thetype));
  7894.    local7 = tp_3062;
  7895.    local8 = STR_plus_STR_STR(local6, (*TP_str_STR[local7->header.tag+TP_str_STR_offset])(local7));
  7896.    PROG_err_STR(local3, STR_plus_STR_STR(local8, ((STR) &appearsinthesupe)));
  7897.   } else
  7898.   switch (tp_3062->header.tag) {
  7899.    case TP_CLASS_tag:
  7900.     if ((!(TP_CLASS_is_abst(((TP_CLASS) tp_3062))))) {
  7901.      local9 = self->prog;
  7902.      local10 = ((STR) &Intype_3064);
  7903.      local11 = STR_plus_STR_STR(local10, TP_CLASS_str_STR(t_3057));
  7904.      local12 = STR_plus_STR_STR(local11, ((STR) &thetype_3065));
  7905.      local13 = STR_plus_STR_STR(local12, TP_CLASS_str_STR(((TP_CLASS) tp_3062)));
  7906.      PROG_err_STR(local9, STR_plus_STR_STR(local13, ((STR) &appearsinthesupe_3066)));
  7907.     }
  7908.     else {
  7909.      r_3061 = FSETTP_CLASS_ins(r_3061, ((TP_CLASS) tp_3062));
  7910.     } break;
  7911.    default: ;
  7912.     local14 = self->prog;
  7913.     local15 = ((STR) &Intype_3067);
  7914.     local16 = STR_plus_STR_STR(local15, TP_CLASS_str_STR(t_3057));
  7915.     local17 = STR_plus_STR_STR(local16, ((STR) &thetype_3068));
  7916.     local18 = tp_3062;
  7917.     local19 = STR_plus_STR_STR(local17, (*TP_str_STR[local18->header.tag+TP_str_STR_offset])(local18));
  7918.     PROG_err_STR(local14, STR_plus_STR_STR(local19, ((STR) &appearsinthesupe_3069)));
  7919.   }
  7920.   ts = ts->next_8;
  7921.  }
  7922.  after_loop: ;
  7923.  self->par_tbl = FMAPTP_CLASSFSET_3038(self->par_tbl, t_3057, r_3061);
  7924.  return r_3061;
  7925. }
  7926.  
  7927.  
  7928. STR TP_GRAPH_ANC_tup(TP_GRAPH_ANC self, TUPIDENTINT t_3070) {
  7929.  STR noname3071;
  7930.  STR r_3072;
  7931.  INT noname3073 = ((INT) 0);
  7932.  STR noname3074;
  7933.  INT local0;
  7934.  INT noname3077t;
  7935.  STR local1;
  7936.  r_3072 = t_3070.t1.str_4;
  7937.  if ((t_3070.t2==0)) {
  7938.   return r_3072;
  7939.  }
  7940.  r_3072 = STR_plus_STR_STR(r_3072, ((STR) &name_3075));
  7941.  {
  7942.   BOOL noname3077 = TRUE;
  7943.   struct STR_separate_STR_STR_frame_struct temp3076_0;
  7944.   STR_separate_STR_STR_frame 
  7945.   noname3078 = &temp3076_0;
  7946.   noname3078->state = 0;
  7947.   while (1) {
  7948.    if (noname3077) {
  7949.     noname3077 = FALSE;
  7950.     noname3073 = t_3070.t2;
  7951.     local0 = noname3073;
  7952.     noname3077t = local0;
  7953.    } else {
  7954.     noname3077t--;
  7955.    }
  7956.    if (noname3077t<=0) goto after_loop;
  7957.    0 /* no return value from inlined iter */;
  7958.    if (noname3078->state == 0) {
  7959.     noname3074 = ((STR) &name_3079);
  7960.     noname3078->arg0 = noname3074;
  7961.    }
  7962.    noname3078->arg1 = ((STR) &S__3080);
  7963.    local1 = STR_separate_STR_STR(noname3078);
  7964.    if (noname3078->state == -1) goto after_loop;
  7965.    r_3072 = STR_plus_STR_STR(r_3072, local1);
  7966.   }
  7967.  }
  7968.  after_loop: ;
  7969.  r_3072 = STR_plus_STR_STR(r_3072, ((STR) &name_3081));
  7970.  return r_3072;
  7971. }
  7972.  
  7973.  
  7974. FSETTP_CLASS FSETTP_CLASS_to_(FSETTP_CLASS self, FSETTP_CLASS s_3082) {
  7975.  FSETTP_CLASS noname3083;
  7976.  FSETTP_CLASS r_3084;
  7977.  FSETTP_CLASS noname3085;
  7978.  TP_CLASS local0;
  7979.  r_3084 = self;
  7980.  {
  7981.   struct FSETTP_CLASS_elt_3006_frame_struct temp3086_0;
  7982.   FSETTP_CLASS_elt_3006_frame 
  7983.   noname3087 = &temp3086_0;
  7984.   noname3087->state = 0;
  7985.   while (1) {
  7986.    if (noname3087->state == 0) {
  7987.     noname3085 = s_3082;
  7988.     noname3087->arg0 = noname3085;
  7989.    }
  7990.    local0 = FSETTP_CLASS_elt_3006(noname3087);
  7991.    if (noname3087->state == -1) goto after_loop;
  7992.    r_3084 = FSETTP_CLASS_ins(r_3084, local0);
  7993.   }
  7994.  }
  7995.  after_loop: ;
  7996.  return r_3084;
  7997.  if (!FSETTP_CLASS_inv(self)) {
  7998.   fprintf(stderr,"Failed invariant FSET{TP_CLASS}::invariant:BOOL ../Library/fset.sa:252:11\n");
  7999.   exit(16);
  8000.  }
  8001. }
  8002.  
  8003.  
  8004. FSETTP_CLASS TP_GRAPH_ANC_get_3088(TP_GRAPH_ANC self, TP_CLASS t_3089) {
  8005.  FSETTP_CLASS noname3090;
  8006.  TUPTP_CLASSFSETT p = TUPTP_CLASSFSETT_zero;
  8007.  FSETTP_CLASS par;
  8008.  TUPIDENTINT cq = TUPIDENTINT_zero;
  8009.  TR_CLASS_DEF tr_3091;
  8010.  FSTR s_3092;
  8011.  FSETTUPIDENTINT noname3093;
  8012.  STR noname3094;
  8013.  FSETTP_CLASS r_3095 = ((FSETTP_CLASS) NULL);
  8014.  FSETTP_CLASS noname3096;
  8015.  TP_CLASS t2_3097;
  8016.  TUPIDENTINT local0;
  8017.  IDENT local1;
  8018.  PROG local2;
  8019.  IDENT local3;
  8020.  FSTR local4;
  8021.  STR local5;
  8022.  TUPIDENTINT local6;
  8023.  PROG local7;
  8024.  TP_CLASS local8;
  8025.  p = FMAPTP_CLASSFSET_2984(self->anc_tbl, t_3089);
  8026.  if ((!((p.t1==((TP_CLASS) NULL))))) {
  8027.   return p.t2;
  8028.  }
  8029.  par = TP_GRAPH_ANC_get(self, t_3089);
  8030.  if ((par==((FSETTP_CLASS) NULL))) {
  8031.   return ((FSETTP_CLASS) NULL);
  8032.  }
  8033.  local0 = TUPIDENTINT_zero;
  8034.  local1 = t_3089->name_19;
  8035.  cq = TUPIDENTINT_crea(local0, local1, ARRAYTP_size_INT(t_3089->params));
  8036.  if (FSETTUPIDENTINT__2348(self->cur, cq)) {
  8037.   local2 = self->prog;
  8038.   local3 = t_3089->name_19;
  8039.   tr_3091 = PROG_tree_head_f(local2, local3, ARRAYTP_size_INT(t_3089->params));
  8040.   PROG_err_loc_PRO(self->prog, ((PROG_ERR) tr_3091));
  8041.   local4 = FSTR_create_FSTR(((FSTR) NULL));
  8042.   s_3092 = FSTR_plus_STR_FSTR(local4, ((STR) &Subtypecycledete));
  8043.   {
  8044.    struct FSETTUPIDENTINT__2370_frame_struct temp3098_0;
  8045.    FSETTUPIDENTINT__2370_frame 
  8046.    noname3099 = &temp3098_0;
  8047.    struct STR_separate_STR_STR_frame_struct temp3098_1;
  8048.    STR_separate_STR_STR_frame 
  8049.    noname3100 = &temp3098_1;
  8050.    noname3099->state = 0;
  8051.    noname3100->state = 0;
  8052.    while (1) {
  8053.     if (noname3100->state == 0) {
  8054.      noname3094 = ((STR) &name_3101);
  8055.      noname3100->arg0 = noname3094;
  8056.     }
  8057.     if (noname3099->state == 0) {
  8058.      noname3093 = self->cur;
  8059.      noname3099->arg0 = noname3093;
  8060.     }
  8061.     local6 = FSETTUPIDENTINT__2370(noname3099);
  8062.     if (noname3099->state == -1) goto after_loop;
  8063.     noname3100->arg1 = TP_GRAPH_ANC_tup(self, local6);
  8064.     local5 = STR_separate_STR_STR(noname3100);
  8065.     if (noname3100->state == -1) goto after_loop;
  8066.     s_3092 = FSTR_plus_STR_FSTR(s_3092, local5);
  8067.    }
  8068.   }
  8069.   after_loop: ;
  8070.   local7 = self->prog;
  8071.   PROG_err_STR(local7, FSTR_str_STR(s_3092));
  8072.   self->anc_tbl = FMAPTP_CLASSFSET_3038(self->anc_tbl, t_3089, ((FSETTP_CLASS) NULL));
  8073.   self->cur = FSETTUPIDENTINT__2886(self->cur, cq);
  8074.   return ((FSETTP_CLASS) NULL);
  8075.  }
  8076.  self->cur = FSETTUPIDENTINT__2394(self->cur, cq);
  8077.  {
  8078.   struct FSETTP_CLASS_elt_3006_frame_struct temp3103_0;
  8079.   FSETTP_CLASS_elt_3006_frame 
  8080.   noname3104 = &temp3103_0;
  8081.   noname3104->state = 0;
  8082.   while (1) {
  8083.    if (noname3104->state == 0) {
  8084.     noname3096 = par;
  8085.     noname3104->arg0 = noname3096;
  8086.    }
  8087.    local8 = FSETTP_CLASS_elt_3006(noname3104);
  8088.    if (noname3104->state == -1) goto after_loop_3102;
  8089.    t2_3097 = local8;
  8090.    r_3095 = FSETTP_CLASS_ins(r_3095, t2_3097);
  8091.    r_3095 = FSETTP_CLASS_to_(r_3095, TP_GRAPH_ANC_get_3088(self, t2_3097));
  8092.   }
  8093.  }
  8094.  after_loop_3102: ;
  8095.  self->anc_tbl = FMAPTP_CLASSFSET_3038(self->anc_tbl, t_3089, r_3095);
  8096.  self->cur = FSETTUPIDENTINT__2886(self->cur, cq);
  8097.  return r_3095;
  8098. }
  8099.  
  8100.  
  8101. TP_CLASS FMAPTP_CLASSFSET_3105(FMAPTP_CLASSFSETTP self) {
  8102.  TP_CLASS noname3106;
  8103.  TP_CLASS k = ((TP_CLASS) NULL);
  8104.  return ((TP_CLASS) NULL);
  8105.  if (!FMAPTP_CLASSFSET_3107(self)) {
  8106.   fprintf(stderr,"Failed invariant FMAP{TP_CLASS,FSET{$TP}}::invariant:BOOL ../Library/fmap.sa:54:10\n");
  8107.   exit(16);
  8108.  }
  8109. }
  8110.  
  8111.  
  8112. TUPTP_CLASSFSETTP TUPTP_CLASSFSETT_3108(TUPTP_CLASSFSETTP self, TP_CLASS t1_3109) {
  8113.  TUPTP_CLASSFSETTP local0;
  8114.  local0 = self;
  8115.  local0.t1 = t1_3109;
  8116.  return local0;
  8117. }
  8118.  
  8119.  
  8120. TUPTP_CLASSFSETTP TUPTP_CLASSFSETT_3110(TUPTP_CLASSFSETTP self, FSETTP t2_3111) {
  8121.  TUPTP_CLASSFSETTP local0;
  8122.  local0 = self;
  8123.  local0.t2 = t2_3111;
  8124.  return local0;
  8125. }
  8126.  
  8127.  
  8128. TUPTP_CLASSFSETTP TUPTP_CLASSFSETT_3112(TUPTP_CLASSFSETTP self, TP_CLASS at1, FSETTP at2) {
  8129.  TUPTP_CLASSFSETTP noname3113 = TUPTP_CLASSFSETTP_zero;
  8130.  TUPTP_CLASSFSETTP local0;
  8131.  local0 = TUPTP_CLASSFSETT_3108(self, at1);
  8132.  return TUPTP_CLASSFSETT_3110(local0, at2);
  8133. }
  8134.  
  8135.  
  8136. INT FMAPTP_CLASSFSET_3114(FMAPTP_CLASSFSETTP self, TP_CLASS k) {
  8137.  INT noname3115 = ((INT) 0);
  8138.  return (c_SYS_id_OB_INT(((SYS) NULL),((OB) k)));
  8139.  if (!FMAPTP_CLASSFSET_3107(self)) {
  8140.   fprintf(stderr,"Failed invariant FMAP{TP_CLASS,FSET{$TP}}::invariant:BOOL ../Library/fmap.sa:64:11\n");
  8141.   exit(16);
  8142.  }
  8143. }
  8144.  
  8145.  
  8146. INT FMAPTP_CLASSFSET_3116(FMAPTP_CLASSFSETTP self) {
  8147.  INT noname3117 = ((INT) 0);
  8148.   return self->asize;
  8149.  fprintf(stderr,"Last statement wasn't return ../Library/aref.sa:20:8\n");
  8150.  exit(16);
  8151. }
  8152.  
  8153.  
  8154. TUPTP_CLASSFSETTP FMAPTP_CLASSFSET_3118(FMAPTP_CLASSFSETTP self, INT ind_3119) {
  8155.  TUPTP_CLASSFSETTP noname3120 = TUPTP_CLASSFSETTP_zero;
  8156.  BOOL local0;
  8157.  INT local1;
  8158.  INT local2;
  8159.  if ((!((self==((FMAPTP_CLASSFSETTP) NULL))))) {
  8160.   local1 = 0;
  8161.   local2 = (self->asize);
  8162.   local0 = INT_is_bet_INT_I(ind_3119, local1, (c_INT_minus_INT_INT_chk(local2,1)));
  8163.  } else {
  8164.   local0 = FALSE;
  8165.  }
  8166.  if (!(local0)) {
  8167.   fprintf(stderr,"Violation of precondition ../Library/aref.sa:33:7\n");
  8168.   exit(16);
  8169.  }
  8170.  if (ind_3119<0||ind_3119>=self->asize) {
  8171.   fprintf(stderr,"Index out of bounds ../Library/aref.sa:33:7\n");
  8172.   exit(16);
  8173.  }
  8174.  return self->arr_part[ind_3119];
  8175. }
  8176.  
  8177.  
  8178. BOOL FMAPTP_CLASSFSET_3121(FMAPTP_CLASSFSETTP self, TP_CLASS k1, TP_CLASS k2) {
  8179.  BOOL noname3122 = ((BOOL) 0);
  8180.  return c_SYS_ob_eq_OB_OB_BOOL(((OB) k1),((OB) k2));
  8181.  if (!FMAPTP_CLASSFSET_3107(self)) {
  8182.   fprintf(stderr,"Failed invariant FMAP{TP_CLASS,FSET{$TP}}::invariant:BOOL ../Library/fmap.sa:44:9\n");
  8183.   exit(16);
  8184.  }
  8185. }
  8186.  
  8187.  
  8188. TUPTP_CLASSFSETTP FMAPTP_CLASSFSET_3123(FMAPTP_CLASSFSETTP self, TP_CLASS k) {
  8189.  TUPTP_CLASSFSETTP noname3124 = TUPTP_CLASSFSETTP_zero;
  8190.  INT h = ((INT) 0);
  8191.  TP_CLASS tk;
  8192.  TP_CLASS tk_3125;
  8193.  TUPTP_CLASSFSETTP local0;
  8194.  TP_CLASS local1;
  8195.  INT local2;
  8196.  INT local3;
  8197.  INT local4;
  8198.  INT local5;
  8199.  TUPTP_CLASSFSETTP local6;
  8200.  TP_CLASS local7;
  8201.  if ((self==((FMAPTP_CLASSFSETTP) NULL))) {
  8202.   local0 = TUPTP_CLASSFSETTP_zero;
  8203.   local1 = FMAPTP_CLASSFSET_3105(self);
  8204.   return TUPTP_CLASSFSETT_3112(local0, local1, ((FSETTP) NULL));
  8205.  }
  8206.  local2 = FMAPTP_CLASSFSET_3114(self, k);
  8207.  local3 = (self->asize);
  8208.  h = (local2&(c_INT_minus_INT_INT_chk(local3,2)));
  8209.  while (1) {
  8210.   tk = (TUPTP_CLASSFSETTP_blob=FMAPTP_CLASSFSET_3118(self, h)).t1;
  8211.   if (FMAPTP_CLASSFSET_3121(self, tk, k)) {
  8212.    return FMAPTP_CLASSFSET_3118(self, h);
  8213.   }
  8214.   else {
  8215.    if (FMAPTP_CLASSFSET_3121(self, tk, FMAPTP_CLASSFSET_3105(self))) {
  8216.     goto after_loop;
  8217.    }
  8218.   }
  8219.   h = (c_INT_plus_INT_INT_chk(h,1));
  8220.  }
  8221.  after_loop: ;
  8222.  local4 = (self->asize);
  8223.  if ((h==(c_INT_minus_INT_INT_chk(local4,1)))) {
  8224.   h = 0;
  8225.   while (1) {
  8226.    tk_3125 = (TUPTP_CLASSFSETTP_blob=FMAPTP_CLASSFSET_3118(self, h)).t1;
  8227.    if (FMAPTP_CLASSFSET_3121(self, tk_3125, k)) {
  8228.     return FMAPTP_CLASSFSET_3118(self, h);
  8229.    }
  8230.    else {
  8231.     if (FMAPTP_CLASSFSET_3121(self, tk_3125, FMAPTP_CLASSFSET_3105(self))) {
  8232.      goto after_loop_3127;
  8233.     }
  8234.    }
  8235.    h = (c_INT_plus_INT_INT_chk(h,1));
  8236.   }
  8237.   after_loop_3127: ;
  8238.   local5 = (self->asize);
  8239.   if (!((h!=(c_INT_minus_INT_INT_chk(local5,1))))) {
  8240.    fprintf(stderr,"Violation of assertion ../Library/fmap.sa:169:15\n");
  8241.    exit(16);
  8242.   }
  8243.  }
  8244.  local6 = TUPTP_CLASSFSETTP_zero;
  8245.  local7 = FMAPTP_CLASSFSET_3105(self);
  8246.  return TUPTP_CLASSFSETT_3112(local6, local7, ((FSETTP) NULL));
  8247.  if (!FMAPTP_CLASSFSET_3107(self)) {
  8248.   fprintf(stderr,"Failed invariant FMAP{TP_CLASS,FSET{$TP}}::invariant:BOOL ../Library/fmap.sa:153:11\n");
  8249.   exit(16);
  8250.  }
  8251. }
  8252.  
  8253.  
  8254. FMAPTP_CLASSFSETTP FMAPTP_CLASSFSET_3129(FMAPTP_CLASSFSETTP self, INT n_3130) {
  8255.  FMAPTP_CLASSFSETTP noname3131;
  8256.  FMAPTP_CLASSFSETTP r_3132;
  8257.  FMAPTP_CLASSFSETTP noname3133;
  8258.  FMAPTP_CLASSFSETTP local0;
  8259.  TUPTP_CLASSFSETTP local1;
  8260.  TP_CLASS local2;
  8261.  local0 = ((FMAPTP_CLASSFSETTP) sbi_arr_alloc(sizeof(struct FMAPTP_CLASSFSETTP_struct), FMAPTP_CLASSFSETTP_tag, sizeof(TUPTP_CLASSFSETTP) , n_3130));
  8262.  local0->asize = n_3130;
  8263.  r_3132 = local0;
  8264.  if ((!((FMAPTP_CLASSFSET_3105(self)==((TP_CLASS) NULL))))) {
  8265.   {
  8266.    struct FMAPTP_CLASSFSET_3135_frame_struct temp3134_0;
  8267.    FMAPTP_CLASSFSET_3135_frame 
  8268.    noname3136 = &temp3134_0;
  8269.    noname3136->state = 0;
  8270.    while (1) {
  8271.     if (noname3136->state == 0) {
  8272.      noname3133 = r_3132;
  8273.      noname3136->arg0 = noname3133;
  8274.     }
  8275.     local1 = TUPTP_CLASSFSETTP_zero;
  8276.     local2 = FMAPTP_CLASSFSET_3105(self);
  8277.     noname3136->arg1 = TUPTP_CLASSFSETT_3112(local1, local2, ((FSETTP) NULL));
  8278.     FMAPTP_CLASSFSET_3135(noname3136);
  8279.     if (noname3136->state == -1) goto after_loop;
  8280.     0 /* No return value from iter call */;
  8281.    }
  8282.   }
  8283.   after_loop: ;
  8284.  }
  8285.  return r_3132;
  8286. }
  8287.  
  8288.  
  8289. FMAPTP_CLASSFSETTP FMAPTP_CLASSFSET_3137(FMAPTP_CLASSFSETTP self, TUPTP_CLASSFSETTP p) {
  8290.  FMAPTP_CLASSFSETTP noname3138;
  8291.  return FMAPTP_CLASSFSET_3139(self, p.t1, p.t2);
  8292.  if (!FMAPTP_CLASSFSET_3107(self)) {
  8293.   fprintf(stderr,"Failed invariant FMAP{TP_CLASS,FSET{$TP}}::invariant:BOOL ../Library/fmap.sa:202:14\n");
  8294.   exit(16);
  8295.  }
  8296. }
  8297.  
  8298.  
  8299. FMAPTP_CLASSFSETTP FMAPTP_CLASSFSET_3140(FMAPTP_CLASSFSETTP self) {
  8300.  FMAPTP_CLASSFSETTP noname3141;
  8301.  INT ns = ((INT) 0);
  8302.  FMAPTP_CLASSFSETTP r_3142;
  8303.  FMAPTP_CLASSFSETTP noname3143;
  8304.  INT local0;
  8305.  INT local1;
  8306.  INT local2;
  8307.  TUPTP_CLASSFSETTP local3;
  8308.  if (!((!((self==((FMAPTP_CLASSFSETTP) NULL)))))) {
  8309.   fprintf(stderr,"Violation of precondition ../Library/fmap.sa:172:22\n");
  8310.   exit(16);
  8311.  }
  8312.  local0 = (self->asize);
  8313.  local1 = (c_INT_minus_INT_INT_chk(local0,1));
  8314.  local2 = (c_INT_times_INT_INT_chk(local1,2));
  8315.  ns = (c_INT_plus_INT_INT_chk(local2,1));
  8316.  r_3142 = FMAPTP_CLASSFSET_3129(self, ns);
  8317.  {
  8318.   struct FMAPTP_CLASSFSET_3145_frame_struct temp3144_0;
  8319.   FMAPTP_CLASSFSET_3145_frame 
  8320.   noname3146 = &temp3144_0;
  8321.   noname3146->state = 0;
  8322.   while (1) {
  8323.    if (noname3146->state == 0) {
  8324.     noname3143 = self;
  8325.     noname3146->arg0 = noname3143;
  8326.    }
  8327.    local3 = FMAPTP_CLASSFSET_3145(noname3146);
  8328.    if (noname3146->state == -1) goto after_loop;
  8329.    r_3142 = FMAPTP_CLASSFSET_3137(r_3142, local3);
  8330.   }
  8331.  }
  8332.  after_loop: ;
  8333.  return r_3142;
  8334. }
  8335.  
  8336.  
  8337. void FMAPTP_CLASSFSET_3147(FMAPTP_CLASSFSETTP self, INT ind_3148, TUPTP_CLASSFSETTP val_3149) {
  8338.  BOOL local0;
  8339.  INT local1;
  8340.  INT local2;
  8341.  if ((!((self==((FMAPTP_CLASSFSETTP) NULL))))) {
  8342.   local1 = 0;
  8343.   local2 = (self->asize);
  8344.   local0 = INT_is_bet_INT_I(ind_3148, local1, (c_INT_minus_INT_INT_chk(local2,1)));
  8345.  } else {
  8346.   local0 = FALSE;
  8347.  }
  8348.  if (!(local0)) {
  8349.   fprintf(stderr,"Violation of precondition ../Library/aref.sa:38:7\n");
  8350.   exit(16);
  8351.  }
  8352.  if (ind_3148<0||ind_3148>=self->asize) {
  8353.   fprintf(stderr,"Index out of bounds ../Library/aref.sa:38:7\n");
  8354.   exit(16);
  8355.  }
  8356.  self->arr_part[ind_3148] = val_3149;
  8357. }
  8358.  
  8359.  
  8360. FMAPTP_CLASSFSETTP FMAPTP_CLASSFSET_3139(FMAPTP_CLASSFSETTP self, TP_CLASS k, FSETTP t_3150) {
  8361.  FMAPTP_CLASSFSETTP noname3151;
  8362.  FMAPTP_CLASSFSETTP r_3152;
  8363.  INT h = ((INT) 0);
  8364.  INT asm_3153 = ((INT) 0);
  8365.  TP_CLASS tk;
  8366.  TP_CLASS tk_3154;
  8367.  INT local0;
  8368.  INT local1;
  8369.  INT local2;
  8370.  INT local3;
  8371.  INT local4;
  8372.  r_3152 = self;
  8373.  if ((r_3152==((FMAPTP_CLASSFSETTP) NULL))) {
  8374.   r_3152 = FMAPTP_CLASSFSET_3129(self, 5);
  8375.  }
  8376.  else {
  8377.   local0 = (c_INT_plus_INT_INT_chk(self->hsize,1));
  8378.   local1 = (c_INT_times_INT_INT_chk(local0,2));
  8379.   if ((local1>(self->asize))) {
  8380.    r_3152 = FMAPTP_CLASSFSET_3140(self);
  8381.   }
  8382.  }
  8383.  local2 = FMAPTP_CLASSFSET_3114(r_3152, k);
  8384.  local3 = (r_3152->asize);
  8385.  h = (local2&(c_INT_minus_INT_INT_chk(local3,2)));
  8386.  local4 = (r_3152->asize);
  8387.  asm_3153 = (c_INT_minus_INT_INT_chk(local4,1));
  8388.  while (1) {
  8389.   tk = (TUPTP_CLASSFSETTP_blob=FMAPTP_CLASSFSET_3118(r_3152, h)).t1;
  8390.   if (FMAPTP_CLASSFSET_3121(self, tk, FMAPTP_CLASSFSET_3105(self))) {
  8391.    goto after_loop;
  8392.   }
  8393.   if (FMAPTP_CLASSFSET_3121(self, tk, k)) {
  8394.    FMAPTP_CLASSFSET_3147(r_3152, h, TUPTP_CLASSFSETT_3112(TUPTP_CLASSFSETTP_zero, k, t_3150));
  8395.    return r_3152;
  8396.   }
  8397.   h = (c_INT_plus_INT_INT_chk(h,1));
  8398.  }
  8399.  after_loop: ;
  8400.  if ((h==asm_3153)) {
  8401.   h = 0;
  8402.   while (1) {
  8403.    tk_3154 = (TUPTP_CLASSFSETTP_blob=FMAPTP_CLASSFSET_3118(r_3152, h)).t1;
  8404.    if (FMAPTP_CLASSFSET_3121(self, tk_3154, FMAPTP_CLASSFSET_3105(self))) {
  8405.     goto after_loop_3156;
  8406.    }
  8407.    if (FMAPTP_CLASSFSET_3121(self, tk_3154, k)) {
  8408.     FMAPTP_CLASSFSET_3147(r_3152, h, TUPTP_CLASSFSETT_3112(TUPTP_CLASSFSETTP_zero, k, t_3150));
  8409.     return r_3152;
  8410.    }
  8411.    h = (c_INT_plus_INT_INT_chk(h,1));
  8412.   }
  8413.   after_loop_3156: ;
  8414.   if (!((h!=asm_3153))) {
  8415.    fprintf(stderr,"Violation of assertion ../Library/fmap.sa:199:15\n");
  8416.    exit(16);
  8417.   }
  8418.  }
  8419.  FMAPTP_CLASSFSET_3147(r_3152, h, TUPTP_CLASSFSETT_3112(TUPTP_CLASSFSETTP_zero, k, t_3150));
  8420.  r_3152->hsize = (c_INT_plus_INT_INT_chk(r_3152->hsize,1));
  8421.  return r_3152;
  8422.  if (!FMAPTP_CLASSFSET_3107(self)) {
  8423.   fprintf(stderr,"Failed invariant FMAP{TP_CLASS,FSET{$TP}}::invariant:BOOL ../Library/fmap.sa:180:9\n");
  8424.   exit(16);
  8425.  }
  8426. }
  8427.  
  8428.  
  8429. FSETTP TP_GRAPH_DES_get(TP_GRAPH_DES self, TP_CLASS t_3158) {
  8430.  FSETTP noname3159;
  8431.  FSETTP r_3160 = ((FSETTP) NULL);
  8432.  TUPTP_CLASSFSETTP p = TUPTP_CLASSFSETTP_zero;
  8433.  TR_CLASS_DEF tr_3161;
  8434.  TP_CONTEXT con_3162;
  8435.  TR_TYPE_SPEC ts;
  8436.  TP tp_3163;
  8437.  PROG local0;
  8438.  IDENT local1;
  8439.  BOOL local2;
  8440.  INT local3;
  8441.  PROG local4;
  8442.  STR local5;
  8443.  STR local6;
  8444.  STR local7;
  8445.  STR local8;
  8446.  if ((!(TP_CLASS_is_abst(t_3158)))) {
  8447.   return ((FSETTP) NULL);
  8448.  }
  8449.  p = FMAPTP_CLASSFSET_3123(self->child_tbl, t_3158);
  8450.  if ((!((p.t1==((TP_CLASS) NULL))))) {
  8451.   return p.t2;
  8452.  }
  8453.  local0 = self->prog;
  8454.  local1 = t_3158->name_19;
  8455.  tr_3161 = PROG_tree_head_f(local0, local1, ARRAYTP_size_INT(t_3158->params));
  8456.  if ((tr_3161==((TR_CLASS_DEF) NULL))) {
  8457.   local2 = TRUE;
  8458.  } else {
  8459.   local2 = (tr_3161->over==((TR_TYPE_SPEC) NULL));
  8460.  }
  8461.  if (local2) {
  8462.   return ((FSETTP) NULL);
  8463.  }
  8464.  con_3162 = PROG_tp_context_(self->prog, t_3158);
  8465.  ts = tr_3161->over;
  8466.  while (1) {
  8467.   if ((ts==((TR_TYPE_SPEC) NULL))) {
  8468.    goto after_loop;
  8469.   }
  8470.   PROG_err_loc_PRO(self->prog, ((PROG_ERR) ts));
  8471.   tp_3163 = TP_CONTEXT_tp_of(con_3162, ts);
  8472.   if (tp_3163==NULL) {
  8473.    r_3160 = FSETTP_insert_TP(r_3160, tp_3163);
  8474.   } else
  8475.   switch (tp_3163->header.tag) {
  8476.    case TP_CLASS_tag:
  8477.     local3 = PROG_tp_kind_TP_INT(self->prog, tp_3163);
  8478.     if ((local3==shared_TP_KIND_e)) {
  8479.      local4 = self->prog;
  8480.      local5 = ((STR) &Thetype);
  8481.      local6 = STR_plus_STR_STR(local5, TP_CLASS_str_STR(t_3158));
  8482.      local7 = STR_plus_STR_STR(local6, ((STR) &liststheexternaltype));
  8483.      local8 = STR_plus_STR_STR(local7, TP_CLASS_str_STR(((TP_CLASS) tp_3163)));
  8484.      PROG_err_STR(local4, STR_plus_STR_STR(local8, ((STR) &initssubtypelist)));
  8485.     }
  8486.     else {
  8487.      r_3160 = FSETTP_insert_TP(r_3160, tp_3163);
  8488.     } break;
  8489.    default: ;
  8490.     r_3160 = FSETTP_insert_TP(r_3160, tp_3163);
  8491.   }
  8492.   ts = ts->next_8;
  8493.  }
  8494.  after_loop: ;
  8495.  self->child_tbl = FMAPTP_CLASSFSET_3139(self->child_tbl, t_3158, r_3160);
  8496.  return r_3160;
  8497. }
  8498.  
  8499.  
  8500. STR TP_GRAPH_DES_tup(TP_GRAPH_DES self, TUPIDENTINT t_3165) {
  8501.  STR noname3166;
  8502.  STR r_3167;
  8503.  INT noname3168 = ((INT) 0);
  8504.  STR noname3169;
  8505.  INT local0;
  8506.  INT noname3172t;
  8507.  STR local1;
  8508.  r_3167 = t_3165.t1.str_4;
  8509.  if ((t_3165.t2==0)) {
  8510.   return r_3167;
  8511.  }
  8512.  r_3167 = STR_plus_STR_STR(r_3167, ((STR) &name_3170));
  8513.  {
  8514.   BOOL noname3172 = TRUE;
  8515.   struct STR_separate_STR_STR_frame_struct temp3171_0;
  8516.   STR_separate_STR_STR_frame 
  8517.   noname3173 = &temp3171_0;
  8518.   noname3173->state = 0;
  8519.   while (1) {
  8520.    if (noname3172) {
  8521.     noname3172 = FALSE;
  8522.     noname3168 = t_3165.t2;
  8523.     local0 = noname3168;
  8524.     noname3172t = local0;
  8525.    } else {
  8526.     noname3172t--;
  8527.    }
  8528.    if (noname3172t<=0) goto after_loop;
  8529.    0 /* no return value from inlined iter */;
  8530.    if (noname3173->state == 0) {
  8531.     noname3169 = ((STR) &name_3174);
  8532.     noname3173->arg0 = noname3169;
  8533.    }
  8534.    noname3173->arg1 = ((STR) &S__3175);
  8535.    local1 = STR_separate_STR_STR(noname3173);
  8536.    if (noname3173->state == -1) goto after_loop;
  8537.    r_3167 = STR_plus_STR_STR(r_3167, local1);
  8538.   }
  8539.  }
  8540.  after_loop: ;
  8541.  r_3167 = STR_plus_STR_STR(r_3167, ((STR) &name_3176));
  8542.  return r_3167;
  8543. }
  8544.  
  8545.  
  8546. FSETTP FSETTP_to_union_(FSETTP self, FSETTP s_3177) {
  8547.  FSETTP noname3178;
  8548.  FSETTP r_3179;
  8549.  FSETTP noname3180;
  8550.  TP local0;
  8551.  r_3179 = self;
  8552.  {
  8553.   struct FSETTP_elt_TP_frame_struct temp3181_0;
  8554.   FSETTP_elt_TP_frame 
  8555.   noname3182 = &temp3181_0;
  8556.   noname3182->state = 0;
  8557.   while (1) {
  8558.    if (noname3182->state == 0) {
  8559.     noname3180 = s_3177;
  8560.     noname3182->arg0 = noname3180;
  8561.    }
  8562.    local0 = FSETTP_elt_TP(noname3182);
  8563.    if (noname3182->state == -1) goto after_loop;
  8564.    r_3179 = FSETTP_insert_TP(r_3179, local0);
  8565.   }
  8566.  }
  8567.  after_loop: ;
  8568.  return r_3179;
  8569.  if (!FSETTP_invariant(self)) {
  8570.   fprintf(stderr,"Failed invariant FSET{$TP}::invariant:BOOL ../Library/fset.sa:252:11\n");
  8571.   exit(16);
  8572.  }
  8573. }
  8574.  
  8575.  
  8576. FSETTP TP_GRAPH_DES_get_3183(TP_GRAPH_DES self, TP_CLASS t_3184) {
  8577.  FSETTP noname3185;
  8578.  TUPTP_CLASSFSETTP p = TUPTP_CLASSFSETTP_zero;
  8579.  FSETTP cld;
  8580.  TUPIDENTINT cq = TUPIDENTINT_zero;
  8581.  TR_CLASS_DEF tr_3186;
  8582.  FSTR s_3187;
  8583.  FSETTUPIDENTINT noname3188;
  8584.  STR noname3189;
  8585.  FSETTP r_3190 = ((FSETTP) NULL);
  8586.  FSETTP noname3191;
  8587.  TP t2_3192;
  8588.  TUPIDENTINT local0;
  8589.  IDENT local1;
  8590.  PROG local2;
  8591.  IDENT local3;
  8592.  FSTR local4;
  8593.  STR local5;
  8594.  TUPIDENTINT local6;
  8595.  PROG local7;
  8596.  TP local8;
  8597.  p = FMAPTP_CLASSFSET_3123(self->des_tbl, t_3184);
  8598.  if ((!((p.t1==((TP_CLASS) NULL))))) {
  8599.   return p.t2;
  8600.  }
  8601.  cld = TP_GRAPH_DES_get(self, t_3184);
  8602.  if ((cld==((FSETTP) NULL))) {
  8603.   return ((FSETTP) NULL);
  8604.  }
  8605.  local0 = TUPIDENTINT_zero;
  8606.  local1 = t_3184->name_19;
  8607.  cq = TUPIDENTINT_crea(local0, local1, ARRAYTP_size_INT(t_3184->params));
  8608.  if (FSETTUPIDENTINT__2348(self->cur, cq)) {
  8609.   local2 = self->prog;
  8610.   local3 = t_3184->name_19;
  8611.   tr_3186 = PROG_tree_head_f(local2, local3, ARRAYTP_size_INT(t_3184->params));
  8612.   PROG_err_loc_PRO(self->prog, ((PROG_ERR) tr_3186));
  8613.   local4 = FSTR_create_FSTR(((FSTR) NULL));
  8614.   s_3187 = FSTR_plus_STR_FSTR(local4, ((STR) &Supertypecyclede));
  8615.   {
  8616.    struct FSETTUPIDENTINT__2370_frame_struct temp3193_0;
  8617.    FSETTUPIDENTINT__2370_frame 
  8618.    noname3194 = &temp3193_0;
  8619.    struct STR_separate_STR_STR_frame_struct temp3193_1;
  8620.    STR_separate_STR_STR_frame 
  8621.    noname3195 = &temp3193_1;
  8622.    noname3194->state = 0;
  8623.    noname3195->state = 0;
  8624.    while (1) {
  8625.     if (noname3195->state == 0) {
  8626.      noname3189 = ((STR) &name_3196);
  8627.      noname3195->arg0 = noname3189;
  8628.     }
  8629.     if (noname3194->state == 0) {
  8630.      noname3188 = self->cur;
  8631.      noname3194->arg0 = noname3188;
  8632.     }
  8633.     local6 = FSETTUPIDENTINT__2370(noname3194);
  8634.     if (noname3194->state == -1) goto after_loop;
  8635.     noname3195->arg1 = TP_GRAPH_DES_tup(self, local6);
  8636.     local5 = STR_separate_STR_STR(noname3195);
  8637.     if (noname3195->state == -1) goto after_loop;
  8638.     s_3187 = FSTR_plus_STR_FSTR(s_3187, local5);
  8639.    }
  8640.   }
  8641.   after_loop: ;
  8642.   local7 = self->prog;
  8643.   PROG_err_STR(local7, FSTR_str_STR(s_3187));
  8644.   self->des_tbl = FMAPTP_CLASSFSET_3139(self->des_tbl, t_3184, ((FSETTP) NULL));
  8645.   self->cur = FSETTUPIDENTINT__2886(self->cur, cq);
  8646.   return ((FSETTP) NULL);
  8647.  }
  8648.  self->cur = FSETTUPIDENTINT__2394(self->cur, cq);
  8649.  {
  8650.   struct FSETTP_elt_TP_frame_struct temp3198_0;
  8651.   FSETTP_elt_TP_frame 
  8652.   noname3199 = &temp3198_0;
  8653.   noname3199->state = 0;
  8654.   while (1) {
  8655.    if (noname3199->state == 0) {
  8656.     noname3191 = cld;
  8657.     noname3199->arg0 = noname3191;
  8658.    }
  8659.    local8 = FSETTP_elt_TP(noname3199);
  8660.    if (noname3199->state == -1) goto after_loop_3197;
  8661.    t2_3192 = local8;
  8662.    r_3190 = FSETTP_insert_TP(r_3190, t2_3192);
  8663.    if (t2_3192==NULL) {
  8664.    } else
  8665.    switch (t2_3192->header.tag) {
  8666.     case TP_CLASS_tag:
  8667.      r_3190 = FSETTP_to_union_(r_3190, TP_GRAPH_DES_get_3183(self, ((TP_CLASS) t2_3192))); break;
  8668.     default: ;
  8669.    }
  8670.   }
  8671.  }
  8672.  after_loop_3197: ;
  8673.  self->des_tbl = FMAPTP_CLASSFSET_3139(self->des_tbl, t_3184, r_3190);
  8674.  self->cur = FSETTUPIDENTINT__2886(self->cur, cq);
  8675.  return r_3190;
  8676. }
  8677.  
  8678.  
  8679. FSETTP FMAPTP_CLASSFSET_3200(FMAPTP_CLASSFSETTP self, TP_CLASS k) {
  8680.  FSETTP noname3201;
  8681.  INT h = ((INT) 0);
  8682.  TP_CLASS tk;
  8683.  TP_CLASS tk_3202;
  8684.  INT local0;
  8685.  INT local1;
  8686.  INT local2;
  8687.  INT local3;
  8688.  if ((self==((FMAPTP_CLASSFSETTP) NULL))) {
  8689.   return ((FSETTP) NULL);
  8690.  }
  8691.  local0 = FMAPTP_CLASSFSET_3114(self, k);
  8692.  local1 = (self->asize);
  8693.  h = (local0&(c_INT_minus_INT_INT_chk(local1,2)));
  8694.  while (1) {
  8695.   tk = (TUPTP_CLASSFSETTP_blob=FMAPTP_CLASSFSET_3118(self, h)).t1;
  8696.   if (FMAPTP_CLASSFSET_3121(self, tk, k)) {
  8697.    return (TUPTP_CLASSFSETTP_blob=FMAPTP_CLASSFSET_3118(self, h)).t2;
  8698.   }
  8699.   else {
  8700.    if (FMAPTP_CLASSFSET_3121(self, tk, FMAPTP_CLASSFSET_3105(self))) {
  8701.     goto after_loop;
  8702.    }
  8703.   }
  8704.   h = (c_INT_plus_INT_INT_chk(h,1));
  8705.  }
  8706.  after_loop: ;
  8707.  local2 = (self->asize);
  8708.  if ((h==(c_INT_minus_INT_INT_chk(local2,1)))) {
  8709.   h = 0;
  8710.   while (1) {
  8711.    tk_3202 = (TUPTP_CLASSFSETTP_blob=FMAPTP_CLASSFSET_3118(self, h)).t1;
  8712.    if (FMAPTP_CLASSFSET_3121(self, tk_3202, k)) {
  8713.     return (TUPTP_CLASSFSETTP_blob=FMAPTP_CLASSFSET_3118(self, h)).t2;
  8714.    }
  8715.    else {
  8716.     if (FMAPTP_CLASSFSET_3121(self, tk_3202, FMAPTP_CLASSFSET_3105(self))) {
  8717.      goto after_loop_3204;
  8718.     }
  8719.    }
  8720.    h = (c_INT_plus_INT_INT_chk(h,1));
  8721.   }
  8722.   after_loop_3204: ;
  8723.   local3 = (self->asize);
  8724.   if (!((h!=(c_INT_minus_INT_INT_chk(local3,1))))) {
  8725.    fprintf(stderr,"Violation of assertion ../Library/fmap.sa:150:15\n");
  8726.    exit(16);
  8727.   }
  8728.  }
  8729.  return ((FSETTP) NULL);
  8730.  if (!FMAPTP_CLASSFSET_3107(self)) {
  8731.   fprintf(stderr,"Failed invariant FMAP{TP_CLASS,FSET{$TP}}::invariant:BOOL ../Library/fmap.sa:136:6\n");
  8732.   exit(16);
  8733.  }
  8734. }
  8735.  
  8736.  
  8737. void TP_GRAPH_ABS_DES_3206(TP_GRAPH_ABS_DES self, TP_CLASS at_3207, TP ct) {
  8738.  FSETTP s_3208;
  8739.  s_3208 = FMAPTP_CLASSFSET_3200(self->tbl, at_3207);
  8740.  s_3208 = FSETTP_insert_TP(s_3208, ct);
  8741.  self->tbl = FMAPTP_CLASSFSET_3139(self->tbl, at_3207, s_3208);
  8742. }
  8743.  
  8744.  
  8745. void TP_GRAPH_ABS_DES_3209(TP_GRAPH_ABS_DES self) {
  8746.  TP_CLASS dob;
  8747.  FSETTP tt;
  8748.  FSETTP noname3210;
  8749.  TP tp_3211;
  8750.  TP local0;
  8751.  TP local1;
  8752.  dob = self->prog->tp_builtin->dollar_ob;
  8753.  tt = self->prog->prog_find_types->tp_done;
  8754.  if ((tt==((FSETTP) NULL))) {
  8755.   return;
  8756.  }
  8757.  {
  8758.   struct FSETTP_elt_TP_frame_struct temp3212_0;
  8759.   FSETTP_elt_TP_frame 
  8760.   noname3213 = &temp3212_0;
  8761.   noname3213->state = 0;
  8762.   while (1) {
  8763.    if (noname3213->state == 0) {
  8764.     noname3210 = tt;
  8765.     noname3213->arg0 = noname3210;
  8766.    }
  8767.    local0 = FSETTP_elt_TP(noname3213);
  8768.    if (noname3213->state == -1) goto after_loop;
  8769.    tp_3211 = local0;
  8770.    local1 = tp_3211;
  8771.    if ((!((*TP_is_abstract_BOOL[local1->header.tag+TP_is_abstract_BOOL_offset])(local1)))) {
  8772.     TP_GRAPH_ABS_DES_3206(self, dob, tp_3211);
  8773.    }
  8774.   }
  8775.  }
  8776.  after_loop: ;
  8777. }
  8778.  
  8779.  
  8780. void TP_GRAPH_ABS_DES_3214(TP_GRAPH_ABS_DES self) {
  8781.  FMAPTP_CLASSFSET noname3215;
  8782.  TUPTP_CLASSFSETT p = TUPTP_CLASSFSETT_zero;
  8783.  FSETTP_CLASS noname3216;
  8784.  TUPTP_CLASSFSETT local0;
  8785.  TP_CLASS local1;
  8786.  TP_CLASS local2;
  8787.  {
  8788.   struct FMAPTP_CLASSFSET_3044_frame_struct temp3217_0;
  8789.   FMAPTP_CLASSFSET_3044_frame 
  8790.   noname3218 = &temp3217_0;
  8791.   noname3218->state = 0;
  8792.   while (1) {
  8793.    if (noname3218->state == 0) {
  8794.     noname3215 = self->prog->tp_graph->anc->anc_tbl;
  8795.     noname3218->arg0 = noname3215;
  8796.    }
  8797.    local0 = FMAPTP_CLASSFSET_3044(noname3218);
  8798.    if (noname3218->state == -1) goto after_loop;
  8799.    p = local0;
  8800.    if ((!(TP_CLASS_is_abst(p.t1)))) {
  8801.     {
  8802.      struct FSETTP_CLASS_elt_3006_frame_struct temp3220_0;
  8803.      FSETTP_CLASS_elt_3006_frame 
  8804.      noname3221 = &temp3220_0;
  8805.      noname3221->state = 0;
  8806.      while (1) {
  8807.       if (noname3221->state == 0) {
  8808.        noname3216 = p.t2;
  8809.        noname3221->arg0 = noname3216;
  8810.       }
  8811.       local1 = FSETTP_CLASS_elt_3006(noname3221);
  8812.       if (noname3221->state == -1) goto after_loop_3219;
  8813.       local2 = local1;
  8814.       TP_GRAPH_ABS_DES_3206(self, local2, ((TP) p.t1));
  8815.      }
  8816.     }
  8817.     after_loop_3219: ;
  8818.    }
  8819.   }
  8820.  }
  8821.  after_loop: ;
  8822. }
  8823.  
  8824.  
  8825. void TP_GRAPH_ABS_DES_3222(TP_GRAPH_ABS_DES self) {
  8826.  FMAPTP_CLASSFSETTP noname3223;
  8827.  TUPTP_CLASSFSETTP p = TUPTP_CLASSFSETTP_zero;
  8828.  FSETTP noname3224;
  8829.  TP ct;
  8830.  TUPTP_CLASSFSETTP local0;
  8831.  TP local1;
  8832.  TP local2;
  8833.  {
  8834.   struct FMAPTP_CLASSFSET_3145_frame_struct temp3225_0;
  8835.   FMAPTP_CLASSFSET_3145_frame 
  8836.   noname3226 = &temp3225_0;
  8837.   noname3226->state = 0;
  8838.   while (1) {
  8839.    if (noname3226->state == 0) {
  8840.     noname3223 = self->prog->tp_graph->des_15->des_tbl;
  8841.     noname3226->arg0 = noname3223;
  8842.    }
  8843.    local0 = FMAPTP_CLASSFSET_3145(noname3226);
  8844.    if (noname3226->state == -1) goto after_loop;
  8845.    p = local0;
  8846.    {
  8847.     struct FSETTP_elt_TP_frame_struct temp3228_0;
  8848.     FSETTP_elt_TP_frame 
  8849.     noname3229 = &temp3228_0;
  8850.     noname3229->state = 0;
  8851.     while (1) {
  8852.      if (noname3229->state == 0) {
  8853.       noname3224 = p.t2;
  8854.       noname3229->arg0 = noname3224;
  8855.      }
  8856.      local1 = FSETTP_elt_TP(noname3229);
  8857.      if (noname3229->state == -1) goto after_loop_3227;
  8858.      ct = local1;
  8859.      local2 = ct;
  8860.      if ((!((*TP_is_abstract_BOOL[local2->header.tag+TP_is_abstract_BOOL_offset])(local2)))) {
  8861.       TP_GRAPH_ABS_DES_3206(self, p.t1, ct);
  8862.      }
  8863.     }
  8864.    }
  8865.    after_loop_3227: ;
  8866.   }
  8867.  }
  8868.  after_loop: ;
  8869. }
  8870.  
  8871.  
  8872. void TP_GRAPH_ABS_DES_3230(TP_GRAPH_ABS_DES self) {
  8873.  TP_GRAPH_ABS_DES_3209(self);
  8874.  TP_GRAPH_ABS_DES_3214(self);
  8875.  TP_GRAPH_ABS_DES_3222(self);
  8876. }
  8877.  
  8878.  
  8879. void PROG_TYPE_GRAPH__3231(PROG_TYPE_GRAPH self) {
  8880.  TP tp_3232;
  8881.  FSETTP noname3233;
  8882.  FSETTP_CLASS at_3234;
  8883.  FSETTP_CLASS noname3235;
  8884.  STR noname3236;
  8885.  TP local0;
  8886.  OUT local1;
  8887.  OUT local2;
  8888.  TP local3;
  8889.  OUT local4;
  8890.  OUT local5;
  8891.  STR local6;
  8892.  TP_CLASS local7;
  8893.  OUT local8;
  8894.  OUT local9;
  8895.  {
  8896.   struct FSETTP_elt_TP_frame_struct temp3237_0;
  8897.   FSETTP_elt_TP_frame 
  8898.   noname3238 = &temp3237_0;
  8899.   noname3238->state = 0;
  8900.   while (1) {
  8901.    if (noname3238->state == 0) {
  8902.     noname3233 = self->prog->prog_find_types->tp_done;
  8903.     noname3238->arg0 = noname3233;
  8904.    }
  8905.    local0 = FSETTP_elt_TP(noname3238);
  8906.    if (noname3238->state == -1) goto after_loop;
  8907.    tp_3232 = local0;
  8908.    at_3234 = ((FSETTP_CLASS) NULL);
  8909.    if (tp_3232==NULL) {
  8910.    } else
  8911.    switch (tp_3232->header.tag) {
  8912.     case TP_CLASS_tag:
  8913.      at_3234 = TP_GRAPH_ANC_get_3088(self->prog->tp_graph->anc, ((TP_CLASS) tp_3232)); break;
  8914.     default: ;
  8915.    }
  8916.    if ((!((at_3234==((FSETTP_CLASS) NULL))))) {
  8917.     local1 = OUT_create_OUT(((OUT) NULL));
  8918.     local2 = OUT_plus_STR_OUT(local1, ((STR) &Ancestorsof));
  8919.     local3 = tp_3232;
  8920.     local4 = OUT_plus_STR_OUT(local2, (*TP_str_STR[local3->header.tag+TP_str_STR_offset])(local3));
  8921.     OUT_plus_STR(local4, ((STR) &name_3239));
  8922.     {
  8923.      struct FSETTP_CLASS_elt_3006_frame_struct temp3241_0;
  8924.      FSETTP_CLASS_elt_3006_frame 
  8925.      noname3242 = &temp3241_0;
  8926.      struct STR_separate_STR_STR_frame_struct temp3241_1;
  8927.      STR_separate_STR_STR_frame 
  8928.      noname3243 = &temp3241_1;
  8929.      noname3242->state = 0;
  8930.      noname3243->state = 0;
  8931.      while (1) {
  8932.       local5 = OUT_create_OUT(((OUT) NULL));
  8933.       if (noname3243->state == 0) {
  8934.        noname3236 = ((STR) &name_3244);
  8935.        noname3243->arg0 = noname3236;
  8936.       }
  8937.       if (noname3242->state == 0) {
  8938.        noname3235 = at_3234;
  8939.        noname3242->arg0 = noname3235;
  8940.       }
  8941.       local7 = FSETTP_CLASS_elt_3006(noname3242);
  8942.       if (noname3242->state == -1) goto after_loop_3240;
  8943.       noname3243->arg1 = TP_CLASS_str_STR(local7);
  8944.       local6 = STR_separate_STR_STR(noname3243);
  8945.       if (noname3243->state == -1) goto after_loop_3240;
  8946.       OUT_plus_STR(local5, local6);
  8947.      }
  8948.     }
  8949.     after_loop_3240: ;
  8950.     local8 = OUT_create_OUT(((OUT) NULL));
  8951.     OUT_plus_STR(local8, ((STR) &name_3245));
  8952.    }
  8953.   }
  8954.  }
  8955.  after_loop: ;
  8956.  local9 = OUT_create_OUT(((OUT) NULL));
  8957.  OUT_plus_STR(local9, ((STR) &name_3246));
  8958. }
  8959.  
  8960.  
  8961. void PROG_TYPE_GRAPH__3247(PROG_TYPE_GRAPH self) {
  8962.  TP tp_3248;
  8963.  FSETTP noname3249;
  8964.  FSETTP at_3250;
  8965.  FSETTP noname3251;
  8966.  STR noname3252;
  8967.  TP local0;
  8968.  OUT local1;
  8969.  OUT local2;
  8970.  TP local3;
  8971.  OUT local4;
  8972.  OUT local5;
  8973.  STR local6;
  8974.  TP local7;
  8975.  TP local8;
  8976.  OUT local9;
  8977.  OUT local10;
  8978.  {
  8979.   struct FSETTP_elt_TP_frame_struct temp3253_0;
  8980.   FSETTP_elt_TP_frame 
  8981.   noname3254 = &temp3253_0;
  8982.   noname3254->state = 0;
  8983.   while (1) {
  8984.    if (noname3254->state == 0) {
  8985.     noname3249 = self->prog->prog_find_types->tp_done;
  8986.     noname3254->arg0 = noname3249;
  8987.    }
  8988.    local0 = FSETTP_elt_TP(noname3254);
  8989.    if (noname3254->state == -1) goto after_loop;
  8990.    tp_3248 = local0;
  8991.    at_3250 = ((FSETTP) NULL);
  8992.    if (tp_3248==NULL) {
  8993.    } else
  8994.    switch (tp_3248->header.tag) {
  8995.     case TP_CLASS_tag:
  8996.      at_3250 = TP_GRAPH_DES_get_3183(self->prog->tp_graph->des_15, ((TP_CLASS) tp_3248)); break;
  8997.     default: ;
  8998.    }
  8999.    if ((!((at_3250==((FSETTP) NULL))))) {
  9000.     local1 = OUT_create_OUT(((OUT) NULL));
  9001.     local2 = OUT_plus_STR_OUT(local1, ((STR) &Descendantsof));
  9002.     local3 = tp_3248;
  9003.     local4 = OUT_plus_STR_OUT(local2, (*TP_str_STR[local3->header.tag+TP_str_STR_offset])(local3));
  9004.     OUT_plus_STR(local4, ((STR) &name_3255));
  9005.     {
  9006.      struct FSETTP_elt_TP_frame_struct temp3257_0;
  9007.      FSETTP_elt_TP_frame 
  9008.      noname3258 = &temp3257_0;
  9009.      struct STR_separate_STR_STR_frame_struct temp3257_1;
  9010.      STR_separate_STR_STR_frame 
  9011.      noname3259 = &temp3257_1;
  9012.      noname3258->state = 0;
  9013.      noname3259->state = 0;
  9014.      while (1) {
  9015.       local5 = OUT_create_OUT(((OUT) NULL));
  9016.       if (noname3259->state == 0) {
  9017.        noname3252 = ((STR) &name_3260);
  9018.        noname3259->arg0 = noname3252;
  9019.       }
  9020.       if (noname3258->state == 0) {
  9021.        noname3251 = at_3250;
  9022.        noname3258->arg0 = noname3251;
  9023.       }
  9024.       local7 = FSETTP_elt_TP(noname3258);
  9025.       if (noname3258->state == -1) goto after_loop_3256;
  9026.       local8 = local7;
  9027.       noname3259->arg1 = (*TP_str_STR[local8->header.tag+TP_str_STR_offset])(local8);
  9028.       local6 = STR_separate_STR_STR(noname3259);
  9029.       if (noname3259->state == -1) goto after_loop_3256;
  9030.       OUT_plus_STR(local5, local6);
  9031.      }
  9032.     }
  9033.     after_loop_3256: ;
  9034.     local9 = OUT_create_OUT(((OUT) NULL));
  9035.     OUT_plus_STR(local9, ((STR) &name_3261));
  9036.    }
  9037.   }
  9038.  }
  9039.  after_loop: ;
  9040.  local10 = OUT_create_OUT(((OUT) NULL));
  9041.  OUT_plus_STR(local10, ((STR) &name_3262));
  9042. }
  9043.  
  9044.  
  9045. void PROG_TYPE_GRAPH__3263(PROG_TYPE_GRAPH self) {
  9046.  FMAPTP_CLASSFSETTP noname3264;
  9047.  TUPTP_CLASSFSETTP p = TUPTP_CLASSFSETTP_zero;
  9048.  FSETTP noname3265;
  9049.  STR noname3266;
  9050.  TUPTP_CLASSFSETTP local0;
  9051.  OUT local1;
  9052.  OUT local2;
  9053.  OUT local3;
  9054.  OUT local4;
  9055.  STR local5;
  9056.  TP local6;
  9057.  TP local7;
  9058.  OUT local8;
  9059.  OUT local9;
  9060.  {
  9061.   struct FMAPTP_CLASSFSET_3145_frame_struct temp3267_0;
  9062.   FMAPTP_CLASSFSET_3145_frame 
  9063.   noname3268 = &temp3267_0;
  9064.   noname3268->state = 0;
  9065.   while (1) {
  9066.    if (noname3268->state == 0) {
  9067.     noname3264 = self->prog->tp_graph_abs_des->tbl;
  9068.     noname3268->arg0 = noname3264;
  9069.    }
  9070.    local0 = FMAPTP_CLASSFSET_3145(noname3268);
  9071.    if (noname3268->state == -1) goto after_loop;
  9072.    p = local0;
  9073.    local1 = OUT_create_OUT(((OUT) NULL));
  9074.    local2 = OUT_plus_STR_OUT(local1, ((STR) &Theabstracttype));
  9075.    local3 = OUT_plus_STR_OUT(local2, TP_CLASS_str_STR(p.t1));
  9076.    OUT_plus_STR(local3, ((STR) &hasconcretedesce));
  9077.    {
  9078.     struct FSETTP_elt_TP_frame_struct temp3270_0;
  9079.     FSETTP_elt_TP_frame 
  9080.     noname3271 = &temp3270_0;
  9081.     struct STR_separate_STR_STR_frame_struct temp3270_1;
  9082.     STR_separate_STR_STR_frame 
  9083.     noname3272 = &temp3270_1;
  9084.     noname3271->state = 0;
  9085.     noname3272->state = 0;
  9086.     while (1) {
  9087.      local4 = OUT_create_OUT(((OUT) NULL));
  9088.      if (noname3272->state == 0) {
  9089.       noname3266 = ((STR) &name_3273);
  9090.       noname3272->arg0 = noname3266;
  9091.      }
  9092.      if (noname3271->state == 0) {
  9093.       noname3265 = p.t2;
  9094.       noname3271->arg0 = noname3265;
  9095.      }
  9096.      local6 = FSETTP_elt_TP(noname3271);
  9097.      if (noname3271->state == -1) goto after_loop_3269;
  9098.      local7 = local6;
  9099.      noname3272->arg1 = (*TP_str_STR[local7->header.tag+TP_str_STR_offset])(local7);
  9100.      local5 = STR_separate_STR_STR(noname3272);
  9101.      if (noname3272->state == -1) goto after_loop_3269;
  9102.      OUT_plus_STR(local4, local5);
  9103.     }
  9104.    }
  9105.    after_loop_3269: ;
  9106.    local8 = OUT_create_OUT(((OUT) NULL));
  9107.    OUT_plus_STR(local8, ((STR) &name_3274));
  9108.   }
  9109.  }
  9110.  after_loop: ;
  9111.  local9 = OUT_create_OUT(((OUT) NULL));
  9112.  OUT_plus_STR(local9, ((STR) &name_3275));
  9113. }
  9114.  
  9115.  
  9116. void PROG_TYPE_GRAPH__3276(PROG_TYPE_GRAPH self) {
  9117.  TP tp_3277;
  9118.  FSETTP noname3278;
  9119.  FSETTP_CLASS ig1;
  9120.  FSETTP ig2;
  9121.  TP local0;
  9122.  {
  9123.   struct FSETTP_elt_TP_frame_struct temp3279_0;
  9124.   FSETTP_elt_TP_frame 
  9125.   noname3280 = &temp3279_0;
  9126.   noname3280->state = 0;
  9127.   while (1) {
  9128.    if (noname3280->state == 0) {
  9129.     noname3278 = self->prog->prog_find_types->tp_done;
  9130.     noname3280->arg0 = noname3278;
  9131.    }
  9132.    local0 = FSETTP_elt_TP(noname3280);
  9133.    if (noname3280->state == -1) goto after_loop;
  9134.    tp_3277 = local0;
  9135.    if (tp_3277==NULL) {
  9136.    } else
  9137.    switch (tp_3277->header.tag) {
  9138.     case TP_CLASS_tag:
  9139.      ig1 = TP_GRAPH_ANC_get_3088(self->prog->tp_graph->anc, ((TP_CLASS) tp_3277));
  9140.      ig2 = TP_GRAPH_DES_get_3183(self->prog->tp_graph->des_15, ((TP_CLASS) tp_3277)); break;
  9141.     default: ;
  9142.    }
  9143.   }
  9144.  }
  9145.  after_loop: ;
  9146.  TP_GRAPH_ABS_DES_3230(self->prog->tp_graph_abs_des);
  9147.  if (self->prog->show_graphs) {
  9148.   PROG_TYPE_GRAPH__3231(self);
  9149.   PROG_TYPE_GRAPH__3247(self);
  9150.   PROG_TYPE_GRAPH__3263(self);
  9151.  }
  9152. }
  9153.  
  9154.  
  9155. void PROG_do_type_gra(PROG self) {
  9156.  PROG_TYPE_GRAPH__3276(self->prog_type_graph);
  9157. }
  9158.  
  9159.  
  9160. INT FMAPTPIFC_key_ha(FMAPTPIFC self, TP k) {
  9161.  INT noname3281 = ((INT) 0);
  9162.  HASH local0;
  9163.  if (k==NULL) {
  9164.  } else
  9165.  switch (k->header.tag) {
  9166.   case TUPIMPL_INCLUDEI_tag:
  9167.   case TUPAM_BND_CREATE_tag:
  9168.   case TUPIFCIFC_tag:
  9169.   case TUPSTRITER_INLINE_tag:
  9170.   case TUPAM_GLOBAL_EXP_tag:
  9171.   case FSTR_tag:
  9172.   case TUPSIGSIG_tag:
  9173.   case CHAR_tag:
  9174.   case INT_tag:
  9175.   case TUPTP_CLASSFSETTP_tag:
  9176.   case TUPSTRSTR_tag:
  9177.   case TUPINTINTINT_tag:
  9178.   case STR_tag:
  9179.   case TUPSFILE_IDSFILE_ID_tag:
  9180.   case TUPAM_ITER_CALL__tag:
  9181.   case TUPTR_EXPRTR_EXPR_tag:
  9182.   case TUPTPFMAPIDENTAM_tag:
  9183.   case TUPARRAYTPTP_tag:
  9184.   case TUPAM_CONSTAM_CONST_tag:
  9185.   case TUPSTRTUPSTRSTR_tag:
  9186.   case TUPTPIMPL_tag:
  9187.   case TUPSIGAM_ROUT_DEF_tag:
  9188.   case TUPARRAYTPARRAYB_tag:
  9189.   case TUPIDENTAM_GLOBA_tag:
  9190.   case TUPAM_BND_ITER_C_tag:
  9191.   case TUPAM_LOCAL_EXPR_tag:
  9192.   case TUPSTRFSETSTR_tag:
  9193.   case TUPAM_ROUT_DEFAM_tag:
  9194.   case TUPTPTP_tag:
  9195.   case IDENT_tag:
  9196.   case TUPTPINT_tag:
  9197.   case TUPIDENTINT_tag:
  9198.   case TUPIDENTIDENT_tag:
  9199.   case TUPTP_CLASSFSETT_tag:
  9200.   case TUPCHARCHAR_tag:
  9201.   case TUPIDENTTP_tag:
  9202.   case TUPIDENTARRAYTP_tag:
  9203.   case TUPAM_EXPRAM_EXPR_tag:
  9204.   case TUPTPIFC_tag:
  9205.   case TUPTP_CLASSTP_CLASS_tag:
  9206.   case TUPAM_STMTAM_STMT_tag:
  9207.   case TUPINTINT_tag:
  9208.   case TUPOBSTR_tag:
  9209.   case TUPFLISTAM_CONST_tag:
  9210.   case TUPAM_EXPRTP_tag:
  9211.   case TUPBOOLINTIINTBOOL_tag:
  9212.    local0 = ((HASH) k);
  9213.    return (*HASH_hash_INT[local0->header.tag+HASH_hash_INT_offset])(local0); break;
  9214.   default: ;
  9215.  }
  9216.  return (c_SYS_id_OB_INT(((SYS) NULL),((OB) k)));
  9217.  if (!FMAPTPIFC_invari(self)) {
  9218.   fprintf(stderr,"Failed invariant FMAP{$TP,IFC}::invariant:BOOL ../Library/fmap.sa:64:11\n");
  9219.   exit(16);
  9220.  }
  9221. }
  9222.  
  9223.  
  9224. INT FMAPTPIFC_asize_INT(FMAPTPIFC self) {
  9225.  INT noname3282 = ((INT) 0);
  9226.   return self->asize;
  9227.  fprintf(stderr,"Last statement wasn't return ../Library/aref.sa:20:8\n");
  9228.  exit(16);
  9229. }
  9230.  
  9231.  
  9232. TUPTPIFC FMAPTPIFC_aget_I(FMAPTPIFC self, INT ind_3283) {
  9233.  TUPTPIFC noname3284 = TUPTPIFC_zero;
  9234.  BOOL local0;
  9235.  INT local1;
  9236.  INT local2;
  9237.  if ((!((self==((FMAPTPIFC) NULL))))) {
  9238.   local1 = 0;
  9239.   local2 = (self->asize);
  9240.   local0 = INT_is_bet_INT_I(ind_3283, local1, (c_INT_minus_INT_INT_chk(local2,1)));
  9241.  } else {
  9242.   local0 = FALSE;
  9243.  }
  9244.  if (!(local0)) {
  9245.   fprintf(stderr,"Violation of precondition ../Library/aref.sa:33:7\n");
  9246.   exit(16);
  9247.  }
  9248.  if (ind_3283<0||ind_3283>=self->asize) {
  9249.   fprintf(stderr,"Index out of bounds ../Library/aref.sa:33:7\n");
  9250.   exit(16);
  9251.  }
  9252.  return self->arr_part[ind_3283];
  9253. }
  9254.  
  9255.  
  9256. BOOL FMAPTPIFC_key_eq(FMAPTPIFC self, TP k1, TP k2) {
  9257.  BOOL noname3285 = ((BOOL) 0);
  9258.  if (k1==NULL) {
  9259.  } else
  9260.  switch (k1->header.tag) {
  9261.   default: ;
  9262.  }
  9263.  return c_SYS_ob_eq_OB_OB_BOOL(((OB) k1),((OB) k2));
  9264.  if (!FMAPTPIFC_invari(self)) {
  9265.   fprintf(stderr,"Failed invariant FMAP{$TP,IFC}::invariant:BOOL ../Library/fmap.sa:44:9\n");
  9266.   exit(16);
  9267.  }
  9268. }
  9269.  
  9270.  
  9271. TP FMAPTPIFC_key_nil_TP(FMAPTPIFC self) {
  9272.  TP noname3286;
  9273.  TP k = ((TP) NULL);
  9274.  if (k==NULL) {
  9275.  } else
  9276.  switch (k->header.tag) {
  9277.   default: ;
  9278.  }
  9279.  return ((TP) NULL);
  9280.  if (!FMAPTPIFC_invari(self)) {
  9281.   fprintf(stderr,"Failed invariant FMAP{$TP,IFC}::invariant:BOOL ../Library/fmap.sa:54:10\n");
  9282.   exit(16);
  9283.  }
  9284. }
  9285.  
  9286.  
  9287. IFC FMAPTPIFC_get_TP_IFC(FMAPTPIFC self, TP k) {
  9288.  IFC noname3287;
  9289.  INT h = ((INT) 0);
  9290.  TP tk;
  9291.  TP tk_3288;
  9292.  INT local0;
  9293.  INT local1;
  9294.  INT local2;
  9295.  INT local3;
  9296.  if ((self==((FMAPTPIFC) NULL))) {
  9297.   return ((IFC) NULL);
  9298.  }
  9299.  local0 = FMAPTPIFC_key_ha(self, k);
  9300.  local1 = (self->asize);
  9301.  h = (local0&(c_INT_minus_INT_INT_chk(local1,2)));
  9302.  while (1) {
  9303.   tk = (TUPTPIFC_blob=FMAPTPIFC_aget_I(self, h)).t1;
  9304.   if (FMAPTPIFC_key_eq(self, tk, k)) {
  9305.    return (TUPTPIFC_blob=FMAPTPIFC_aget_I(self, h)).t2;
  9306.   }
  9307.   else {
  9308.    if (FMAPTPIFC_key_eq(self, tk, FMAPTPIFC_key_nil_TP(self))) {
  9309.     goto after_loop;
  9310.    }
  9311.   }
  9312.   h = (c_INT_plus_INT_INT_chk(h,1));
  9313.  }
  9314.  after_loop: ;
  9315.  local2 = (self->asize);
  9316.  if ((h==(c_INT_minus_INT_INT_chk(local2,1)))) {
  9317.   h = 0;
  9318.   while (1) {
  9319.    tk_3288 = (TUPTPIFC_blob=FMAPTPIFC_aget_I(self, h)).t1;
  9320.    if (FMAPTPIFC_key_eq(self, tk_3288, k)) {
  9321.     return (TUPTPIFC_blob=FMAPTPIFC_aget_I(self, h)).t2;
  9322.    }
  9323.    else {
  9324.     if (FMAPTPIFC_key_eq(self, tk_3288, FMAPTPIFC_key_nil_TP(self))) {
  9325.      goto after_loop_3290;
  9326.     }
  9327.    }
  9328.    h = (c_INT_plus_INT_INT_chk(h,1));
  9329.   }
  9330.   after_loop_3290: ;
  9331.   local3 = (self->asize);
  9332.   if (!((h!=(c_INT_minus_INT_INT_chk(local3,1))))) {
  9333.    fprintf(stderr,"Violation of assertion ../Library/fmap.sa:150:15\n");
  9334.    exit(16);
  9335.   }
  9336.  }
  9337.  return ((IFC) NULL);
  9338.  if (!FMAPTPIFC_invari(self)) {
  9339.   fprintf(stderr,"Failed invariant FMAP{$TP,IFC}::invariant:BOOL ../Library/fmap.sa:136:6\n");
  9340.   exit(16);
  9341.  }
  9342. }
  9343.  
  9344.  
  9345. STR IFC_TBL_tup_str_(IFC_TBL self, TUPIDENTINT t_3292) {
  9346.  STR noname3293;
  9347.  STR r_3294;
  9348.  INT noname3295 = ((INT) 0);
  9349.  STR noname3296;
  9350.  INT local0;
  9351.  INT noname3299t;
  9352.  STR local1;
  9353.  r_3294 = t_3292.t1.str_4;
  9354.  if ((t_3292.t2==0)) {
  9355.   return r_3294;
  9356.  }
  9357.  r_3294 = STR_plus_STR_STR(r_3294, ((STR) &name_3297));
  9358.  {
  9359.   BOOL noname3299 = TRUE;
  9360.   struct STR_separate_STR_STR_frame_struct temp3298_0;
  9361.   STR_separate_STR_STR_frame 
  9362.   noname3300 = &temp3298_0;
  9363.   noname3300->state = 0;
  9364.   while (1) {
  9365.    if (noname3299) {
  9366.     noname3299 = FALSE;
  9367.     noname3295 = t_3292.t2;
  9368.     local0 = noname3295;
  9369.     noname3299t = local0;
  9370.    } else {
  9371.     noname3299t--;
  9372.    }
  9373.    if (noname3299t<=0) goto after_loop;
  9374.    0 /* no return value from inlined iter */;
  9375.    if (noname3300->state == 0) {
  9376.     noname3296 = ((STR) &name_3301);
  9377.     noname3300->arg0 = noname3296;
  9378.    }
  9379.    noname3300->arg1 = ((STR) &S__3302);
  9380.    local1 = STR_separate_STR_STR(noname3300);
  9381.    if (noname3300->state == -1) goto after_loop;
  9382.    r_3294 = STR_plus_STR_STR(r_3294, local1);
  9383.   }
  9384.  }
  9385.  after_loop: ;
  9386.  r_3294 = STR_plus_STR_STR(r_3294, ((STR) &name_3303));
  9387.  return r_3294;
  9388. }
  9389.  
  9390.  
  9391. void IFC_TBL_cycle_err(IFC_TBL self) {
  9392.  STR s_3304;
  9393.  FSETTUPIDENTINT noname3305;
  9394.  STR noname3306;
  9395.  STR local0;
  9396.  TUPIDENTINT local1;
  9397.  s_3304 = ((STR) &Cycledetectedins);
  9398.  {
  9399.   struct FSETTUPIDENTINT__2370_frame_struct temp3307_0;
  9400.   FSETTUPIDENTINT__2370_frame 
  9401.   noname3308 = &temp3307_0;
  9402.   struct STR_separate_STR_STR_frame_struct temp3307_1;
  9403.   STR_separate_STR_STR_frame 
  9404.   noname3309 = &temp3307_1;
  9405.   noname3308->state = 0;
  9406.   noname3309->state = 0;
  9407.   while (1) {
  9408.    if (noname3309->state == 0) {
  9409.     noname3306 = ((STR) &name_3310);
  9410.     noname3309->arg0 = noname3306;
  9411.    }
  9412.    if (noname3308->state == 0) {
  9413.     noname3305 = self->abs_cur;
  9414.     noname3308->arg0 = noname3305;
  9415.    }
  9416.    local1 = FSETTUPIDENTINT__2370(noname3308);
  9417.    if (noname3308->state == -1) goto after_loop;
  9418.    noname3309->arg1 = IFC_TBL_tup_str_(self, local1);
  9419.    local0 = STR_separate_STR_STR(noname3309);
  9420.    if (noname3309->state == -1) goto after_loop;
  9421.    s_3304 = STR_plus_STR_STR(s_3304, local0);
  9422.   }
  9423.  }
  9424.  after_loop: ;
  9425.  PROG_err_STR(self->prog, s_3304);
  9426. }
  9427.  
  9428.  
  9429. PROG IFC_ABS_CREATE_p(IFC_ABS_CREATE self) {
  9430.  PROG noname3311;
  9431.  return self->tp->prog;
  9432. }
  9433.  
  9434.  
  9435. SIG SIG_TBL_sig_conf(SIG_TBL self, SIG s_3312) {
  9436.  SIG noname3313;
  9437.  SIG_TBL noname3314;
  9438.  IDENT noname3315 = IDENT_zero;
  9439.  SIG r_3316;
  9440.  SIG local0;
  9441.  if (!((!((s_3312==((SIG) NULL)))))) {
  9442.   fprintf(stderr,"Violation of precondition ./sig.sa:409:23\n");
  9443.   exit(16);
  9444.  }
  9445.  {
  9446.   struct SIG_TBL_get_quer_frame_struct temp3317_0;
  9447.   SIG_TBL_get_quer_frame 
  9448.   noname3318 = &temp3317_0;
  9449.   noname3318->state = 0;
  9450.   while (1) {
  9451.    if (noname3318->state == 0) {
  9452.     noname3314 = self;
  9453.     noname3315 = s_3312->name_19;
  9454.     noname3318->arg0 = noname3314;
  9455.     noname3318->arg1 = noname3315;
  9456.    }
  9457.    local0 = SIG_TBL_get_quer(noname3318);
  9458.    if (noname3318->state == -1) goto after_loop;
  9459.    r_3316 = local0;
  9460.    if (SIG_conflicts_wi(r_3316, s_3312)) {
  9461.     return r_3316;
  9462.    }
  9463.   }
  9464.  }
  9465.  after_loop: ;
  9466.  return ((SIG) NULL);
  9467.  if (!SIG_TBL_invarian(self)) {
  9468.   fprintf(stderr,"Failed invariant SIG_TBL::invariant:BOOL ./sig.sa:409:23\n");
  9469.   exit(16);
  9470.  }
  9471. }
  9472.  
  9473.  
  9474. void IFC_ABS_CREATE_d(IFC_ABS_CREATE self) {
  9475.  TR_CLASS_ELT be;
  9476.  SIG ns;
  9477.  SIG cs;
  9478.  PROG local0;
  9479.  PROG local1;
  9480.  PROG local2;
  9481.  PROG local3;
  9482.  PROG local4;
  9483.  PROG local5;
  9484.  STR local6;
  9485.  STR local7;
  9486.  STR local8;
  9487.  STR local9;
  9488.  PROG local10;
  9489.  TR_CLASS_ELT local11;
  9490.  be = self->tr->body;
  9491.  while (1) {
  9492.   if ((be==((TR_CLASS_ELT) NULL))) {
  9493.    goto after_loop;
  9494.   }
  9495.   local0 = IFC_ABS_CREATE_p(self);
  9496.   PROG_err_loc_PRO(local0, ((PROG_ERR) be));
  9497.   if (be==NULL) {
  9498.   } else
  9499.   switch (be->header.tag) {
  9500.    case TR_CONST_DEF_tag:
  9501.     local1 = IFC_ABS_CREATE_p(self);
  9502.     PROG_err_STR(local1, ((STR) &Abstractclassesm)); break;
  9503.    case TR_SHARED_DEF_tag:
  9504.     local2 = IFC_ABS_CREATE_p(self);
  9505.     PROG_err_STR(local2, ((STR) &Abstractclassesm_3320)); break;
  9506.    case TR_ATTR_DEF_tag:
  9507.     local3 = IFC_ABS_CREATE_p(self);
  9508.     PROG_err_STR(local3, ((STR) &Abstractclassesm_3321)); break;
  9509.    case TR_ROUT_DEF_tag:
  9510.     if ((!(((TR_ROUT_DEF) be)->is_abstract))) {
  9511.      local4 = IFC_ABS_CREATE_p(self);
  9512.      PROG_err_STR(local4, ((STR) &Abstractclassesm_3322));
  9513.     }
  9514.     ns = SIG_rout_sig_TR_(((SIG) NULL), ((TR_ROUT_DEF) be), ((TR_ROUT_DEF) be)->name_19, self->con);
  9515.     cs = SIG_TBL_sig_conf(self->class_sigs, ns);
  9516.     if ((!((cs==((SIG) NULL))))) {
  9517.      local5 = IFC_ABS_CREATE_p(self);
  9518.      local6 = ((STR) &Thetwoexplicitly);
  9519.      local7 = STR_plus_STR_STR(local6, SIG_str_STR(ns));
  9520.      local8 = STR_plus_STR_STR(local7, ((STR) &and_3323));
  9521.      local9 = STR_plus_STR_STR(local8, SIG_str_STR(cs));
  9522.      PROG_err_STR(local5, STR_plus_STR_STR(local9, ((STR) &conflict)));
  9523.     }
  9524.     else {
  9525.      self->class_sigs = SIG_TBL_insert_S(self->class_sigs, ns);
  9526.     } break;
  9527.    case TR_INCLUDE_CLAUSE_tag:
  9528.     local10 = IFC_ABS_CREATE_p(self);
  9529.     PROG_err_STR(local10, ((STR) &Abstractclassesm_3324)); break;
  9530.    default: ;
  9531.     fprintf(stderr,"No applicable type in typecase ./ifc.sa:214:17\n");
  9532.     exit(16);
  9533.   }
  9534.   local11 = be;
  9535.   be = (*TR_CLASS_ELT_nex[local11->header.tag+TR_CLASS_ELT_nex_offset])(local11);
  9536.  }
  9537.  after_loop: ;
  9538. }
  9539.  
  9540.  
  9541. INT FLISTIFC_asize_INT(FLISTIFC self) {
  9542.  INT noname3325 = ((INT) 0);
  9543.   return self->asize;
  9544.  fprintf(stderr,"Last statement wasn't return ../Library/aref.sa:20:8\n");
  9545.  exit(16);
  9546. }
  9547.  
  9548.  
  9549. INT FLISTIFC_size_INT(FLISTIFC self) {
  9550.  INT noname3326 = ((INT) 0);
  9551.  if ((self==((FLISTIFC) NULL))) {
  9552.   return 0;
  9553.  }
  9554.  return self->loc_17;
  9555.  if (!FLISTIFC_invaria(self)) {
  9556.   fprintf(stderr,"Failed invariant FLIST{IFC}::invariant:BOOL ../Library/flist.sa:50:7\n");
  9557.   exit(16);
  9558.  }
  9559. }
  9560.  
  9561.  
  9562. BOOL FLISTIFC_is_empt(FLISTIFC self) {
  9563.  BOOL noname3327 = ((BOOL) 0);
  9564.  INT local0;
  9565.  local0 = FLISTIFC_size_INT(self);
  9566.  return (local0==0);
  9567.  if (!FLISTIFC_invaria(self)) {
  9568.   fprintf(stderr,"Failed invariant FLIST{IFC}::invariant:BOOL ../Library/flist.sa:113:11\n");
  9569.   exit(16);
  9570.  }
  9571. }
  9572.  
  9573.  
  9574. void FLISTIFC_aclear(FLISTIFC self) {
  9575.  IFC nil = ((IFC) NULL);
  9576.  FLISTIFC noname3328;
  9577.  if (!((!((self==((FLISTIFC) NULL)))))) {
  9578.   fprintf(stderr,"Violation of precondition ../Library/aref.sa:43:9\n");
  9579.   exit(16);
  9580.  }
  9581.  {
  9582.   struct FLISTIFC_aset_IFC_frame_struct temp3329_0;
  9583.   FLISTIFC_aset_IFC_frame 
  9584.   noname3330 = &temp3329_0;
  9585.   noname3330->state = 0;
  9586.   while (1) {
  9587.    if (noname3330->state == 0) {
  9588.     noname3328 = self;
  9589.     noname3330->arg0 = noname3328;
  9590.    }
  9591.    noname3330->arg1 = nil;
  9592.    FLISTIFC_aset_IFC(noname3330);
  9593.    if (noname3330->state == -1) goto after_loop;
  9594.    0 /* No return value from iter call */;
  9595.   }
  9596.  }
  9597.  after_loop: ;
  9598. }
  9599.  
  9600.  
  9601. void FLISTIFC_clear(FLISTIFC self) {
  9602.  if (FLISTIFC_is_empt(self)) {
  9603.   return;
  9604.  }
  9605.  else {
  9606.   FLISTIFC_aclear(self);
  9607.   self->loc_17 = 0;
  9608.  }
  9609.  if (!FLISTIFC_invaria(self)) {
  9610.   fprintf(stderr,"Failed invariant FLIST{IFC}::invariant:BOOL ../Library/flist.sa:117:8\n");
  9611.   exit(16);
  9612.  }
  9613. }
  9614.  
  9615.  
  9616. void FLISTIFC_aref_as(FLISTIFC self, INT ind_3331, IFC val_3332) {
  9617.  BOOL local0;
  9618.  INT local1;
  9619.  INT local2;
  9620.  if ((!((self==((FLISTIFC) NULL))))) {
  9621.   local1 = 0;
  9622.   local2 = (self->asize);
  9623.   local0 = INT_is_bet_INT_I(ind_3331, local1, (c_INT_minus_INT_INT_chk(local2,1)));
  9624.  } else {
  9625.   local0 = FALSE;
  9626.  }
  9627.  if (!(local0)) {
  9628.   fprintf(stderr,"Violation of precondition ../Library/aref.sa:38:7\n");
  9629.   exit(16);
  9630.  }
  9631.  if (ind_3331<0||ind_3331>=self->asize) {
  9632.   fprintf(stderr,"Index out of bounds ../Library/aref.sa:38:7\n");
  9633.   exit(16);
  9634.  }
  9635.  self->arr_part[ind_3331] = val_3332;
  9636. }
  9637.  
  9638.  
  9639. void FLISTIFC_aset_IN(FLISTIFC self, INT ind_3333, IFC val_3334) {
  9640.  BOOL local0;
  9641.  INT local1;
  9642.  if ((!((self==((FLISTIFC) NULL))))) {
  9643.   local1 = 0;
  9644.   local0 = INT_is_bet_INT_I(ind_3333, local1, (c_INT_minus_INT_INT_chk(self->loc_17,1)));
  9645.  } else {
  9646.   local0 = FALSE;
  9647.  }
  9648.  if (!(local0)) {
  9649.   fprintf(stderr,"Violation of precondition ../Library/flist.sa:73:7\n");
  9650.   exit(16);
  9651.  }
  9652.  FLISTIFC_aref_as(self, ind_3333, val_3334);
  9653.  if (!FLISTIFC_invaria(self)) {
  9654.   fprintf(stderr,"Failed invariant FLIST{IFC}::invariant:BOOL ../Library/flist.sa:73:7\n");
  9655.   exit(16);
  9656.  }
  9657. }
  9658.  
  9659.  
  9660. FLISTIFC FLISTIFC_push_IF(FLISTIFC self, IFC e_3335) {
  9661.  FLISTIFC noname3336;
  9662.  FLISTIFC r_3337 = ((FLISTIFC) NULL);
  9663.  FLISTIFC noname3338;
  9664.  FLISTIFC noname3339;
  9665.  FLISTIFC local0;
  9666.  INT local1;
  9667.  FLISTIFC local2;
  9668.  INT local3;
  9669.  IFC local4;
  9670.  INT local5;
  9671.  if ((self==((FLISTIFC) NULL))) {
  9672.   local0 = ((FLISTIFC) sbi_arr_alloc(sizeof(struct FLISTIFC_struct), FLISTIFC_tag, sizeof(IFC) , 5));
  9673.   local0->asize = 5;
  9674.   r_3337 = local0;
  9675.  }
  9676.  else {
  9677.   local1 = self->loc_17;
  9678.   if ((local1<(self->asize))) {
  9679.    r_3337 = self;
  9680.   }
  9681.   else {
  9682.    local3 = 2;
  9683.    local2 = ((FLISTIFC) sbi_arr_alloc(sizeof(struct FLISTIFC_struct), FLISTIFC_tag, sizeof(IFC) , (c_INT_times_INT_INT_chk(local3,(self->asize)))));
  9684.    local2->asize = (c_INT_times_INT_INT_chk(local3,(self->asize)));
  9685.    r_3337 = local2;
  9686.    r_3337->loc_17 = self->loc_17;
  9687.    {
  9688.     struct FLISTIFC_elt_IFC_frame_struct temp3340_0;
  9689.     FLISTIFC_elt_IFC_frame 
  9690.     noname3341 = &temp3340_0;
  9691.     struct FLISTIFC_aset_IFC_frame_struct temp3340_1;
  9692.     FLISTIFC_aset_IFC_frame 
  9693.     noname3342 = &temp3340_1;
  9694.     noname3341->state = 0;
  9695.     noname3342->state = 0;
  9696.     while (1) {
  9697.      if (noname3342->state == 0) {
  9698.       noname3339 = r_3337;
  9699.       noname3342->arg0 = noname3339;
  9700.      }
  9701.      if (noname3341->state == 0) {
  9702.       noname3338 = self;
  9703.       noname3341->arg0 = noname3338;
  9704.      }
  9705.      local4 = FLISTIFC_elt_IFC(noname3341);
  9706.      if (noname3341->state == -1) goto after_loop;
  9707.      noname3342->arg1 = local4;
  9708.      FLISTIFC_aset_IFC(noname3342);
  9709.      if (noname3342->state == -1) goto after_loop;
  9710.      0 /* No return value from iter call */;
  9711.     }
  9712.    }
  9713.    after_loop: ;
  9714.    FLISTIFC_clear(self);
  9715.   }
  9716.  }
  9717.  r_3337->loc_17 = (c_INT_plus_INT_INT_chk(r_3337->loc_17,1));
  9718.  local5 = (c_INT_minus_INT_INT_chk(r_3337->loc_17,1));
  9719.  FLISTIFC_aset_IN(r_3337, local5, e_3335);
  9720.  return r_3337;
  9721.  if (!FLISTIFC_invaria(self)) {
  9722.   fprintf(stderr,"Failed invariant FLIST{IFC}::invariant:BOOL ../Library/flist.sa:79:7\n");
  9723.   exit(16);
  9724.  }
  9725. }
  9726.  
  9727.  
  9728. void IFC_ABS_CREATE_d_3343(IFC_ABS_CREATE self) {
  9729.  TR_TYPE_SPEC ut;
  9730.  TP tp_3344;
  9731.  IFC itp_3345;
  9732.  PROG local0;
  9733.  PROG local1;
  9734.  PROG local2;
  9735.  PROG local3;
  9736.  ut = self->tr->under;
  9737.  while (1) {
  9738.   if ((ut==((TR_TYPE_SPEC) NULL))) {
  9739.    goto after_loop;
  9740.   }
  9741.   tp_3344 = TP_CONTEXT_tp_of(self->con, ut);
  9742.   local0 = IFC_ABS_CREATE_p(self);
  9743.   PROG_err_loc_PRO(local0, ((PROG_ERR) ut));
  9744.   if (tp_3344==NULL) {
  9745.    local1 = IFC_ABS_CREATE_p(self);
  9746.    PROG_err_STR(local1, ((STR) &Abstracttypesmus));
  9747.   } else
  9748.   switch (tp_3344->header.tag) {
  9749.    case TP_CLASS_tag:
  9750.     if ((!(TP_CLASS_is_abst(((TP_CLASS) tp_3344))))) {
  9751.      local2 = IFC_ABS_CREATE_p(self);
  9752.      PROG_err_STR(local2, ((STR) &Abstracttypesmus_3347));
  9753.     }
  9754.     else {
  9755.      itp_3345 = IFC_TBL_ifc_of_T(IFC_ABS_CREATE_p(self)->ifc_tbl, tp_3344);
  9756.      self->supers = FLISTIFC_push_IF(self->supers, itp_3345);
  9757.     } break;
  9758.    default: ;
  9759.     local3 = IFC_ABS_CREATE_p(self);
  9760.     PROG_err_STR(local3, ((STR) &Abstracttypesmus_3348));
  9761.   }
  9762.   ut = ut->next_8;
  9763.  }
  9764.  after_loop: ;
  9765. }
  9766.  
  9767.  
  9768. IFC FLISTIFC_aref_ag(FLISTIFC self, INT ind_3349) {
  9769.  IFC noname3350;
  9770.  BOOL local0;
  9771.  INT local1;
  9772.  INT local2;
  9773.  if ((!((self==((FLISTIFC) NULL))))) {
  9774.   local1 = 0;
  9775.   local2 = (self->asize);
  9776.   local0 = INT_is_bet_INT_I(ind_3349, local1, (c_INT_minus_INT_INT_chk(local2,1)));
  9777.  } else {
  9778.   local0 = FALSE;
  9779.  }
  9780.  if (!(local0)) {
  9781.   fprintf(stderr,"Violation of precondition ../Library/aref.sa:33:7\n");
  9782.   exit(16);
  9783.  }
  9784.  if (ind_3349<0||ind_3349>=self->asize) {
  9785.   fprintf(stderr,"Index out of bounds ../Library/aref.sa:33:7\n");
  9786.   exit(16);
  9787.  }
  9788.  return self->arr_part[ind_3349];
  9789. }
  9790.  
  9791.  
  9792. IFC FLISTIFC_aget_IN(FLISTIFC self, INT ind_3351) {
  9793.  IFC noname3352;
  9794.  BOOL local0;
  9795.  INT local1;
  9796.  if ((!((self==((FLISTIFC) NULL))))) {
  9797.   local1 = 0;
  9798.   local0 = INT_is_bet_INT_I(ind_3351, local1, (c_INT_minus_INT_INT_chk(self->loc_17,1)));
  9799.  } else {
  9800.   local0 = FALSE;
  9801.  }
  9802.  if (!(local0)) {
  9803.   fprintf(stderr,"Violation of precondition ../Library/flist.sa:68:7\n");
  9804.   exit(16);
  9805.  }
  9806.  return FLISTIFC_aref_ag(self, ind_3351);
  9807.  if (!FLISTIFC_invaria(self)) {
  9808.   fprintf(stderr,"Failed invariant FLIST{IFC}::invariant:BOOL ../Library/flist.sa:68:7\n");
  9809.   exit(16);
  9810.  }
  9811. }
  9812.  
  9813.  
  9814. IFC FLISTIFC_pop_IFC(FLISTIFC self) {
  9815.  IFC noname3353;
  9816.  IFC r_3354;
  9817.  INT local0;
  9818.  INT local1;
  9819.  local0 = FLISTIFC_size_INT(self);
  9820.  if ((local0==0)) {
  9821.   return ((IFC) NULL);
  9822.  }
  9823.  r_3354 = FLISTIFC_aget_IN(self, (c_INT_minus_INT_INT_chk(self->loc_17,1)));
  9824.  local1 = (c_INT_minus_INT_INT_chk(self->loc_17,1));
  9825.  FLISTIFC_aset_IN(self, local1, ((IFC) NULL));
  9826.  self->loc_17 = (c_INT_minus_INT_INT_chk(self->loc_17,1));
  9827.  return r_3354;
  9828.  if (!FLISTIFC_invaria(self)) {
  9829.   fprintf(stderr,"Failed invariant FLIST{IFC}::invariant:BOOL ../Library/flist.sa:90:6\n");
  9830.   exit(16);
  9831.  }
  9832. }
  9833.  
  9834.  
  9835. BOOL SIG_is_eq_but_tp(SIG self, SIG s_3355) {
  9836.  BOOL noname3356 = ((BOOL) 0);
  9837.  ARRAYTP noname3357;
  9838.  ARRAYTP noname3358;
  9839.  ARRAYBOOL noname3359;
  9840.  ARRAYBOOL noname3360;
  9841.  BOOL local0;
  9842.  BOOL local1;
  9843.  BOOL local2;
  9844.  INT local3;
  9845.  INT local4;
  9846.  BOOL local5;
  9847.  TP local6;
  9848.  TP local7;
  9849.  TP local8;
  9850.  TP local9;
  9851.  BOOL local10;
  9852.  BOOL local11;
  9853.  BOOL local12;
  9854.  BOOL local13;
  9855.  TP local14;
  9856.  if ((self==((SIG) NULL))) {
  9857.   return (s_3355==((SIG) NULL));
  9858.  }
  9859.  else {
  9860.   if ((s_3355==((SIG) NULL))) {
  9861.    return FALSE;
  9862.   }
  9863.  }
  9864.  if (c_SYS_ob_eq_OB_OB_BOOL(((OB) self),((OB) s_3355))) {
  9865.   return TRUE;
  9866.  }
  9867.  if (IDENT_is_neq_IDE(self->name_19, s_3355->name_19)) {
  9868.   local2 = TRUE;
  9869.  } else {
  9870.   local3 = ARRAYTP_size_INT(self->args_7);
  9871.   local2 = (local3!=ARRAYTP_size_INT(s_3355->args_7));
  9872.  }
  9873.  if (local2) {
  9874.   local1 = TRUE;
  9875.  } else {
  9876.   local4 = ARRAYBOOL_size_INT(self->hot);
  9877.   local1 = (local4!=ARRAYBOOL_size_INT(s_3355->hot));
  9878.  }
  9879.  if (local1) {
  9880.   local0 = TRUE;
  9881.  } else {
  9882.   local5 = SIG_has_ret_BOOL(self);
  9883.   local0 = ((local5)!=(SIG_has_ret_BOOL(s_3355)));
  9884.  }
  9885.  if (local0) {
  9886.   return FALSE;
  9887.  }
  9888.  {
  9889.   struct ARRAYTP_elt_TP_frame_struct temp3361_0;
  9890.   ARRAYTP_elt_TP_frame 
  9891.   noname3362 = &temp3361_0;
  9892.   struct ARRAYTP_elt_TP_frame_struct temp3361_1;
  9893.   ARRAYTP_elt_TP_frame 
  9894.   noname3363 = &temp3361_1;
  9895.   noname3362->state = 0;
  9896.   noname3363->state = 0;
  9897.   while (1) {
  9898.    if (noname3362->state == 0) {
  9899.     noname3357 = self->args_7;
  9900.     noname3362->arg0 = noname3357;
  9901.    }
  9902.    local6 = ARRAYTP_elt_TP(noname3362);
  9903.    if (noname3362->state == -1) goto after_loop;
  9904.    local7 = local6;
  9905.    if (noname3363->state == 0) {
  9906.     noname3358 = s_3355->args_7;
  9907.     noname3363->arg0 = noname3358;
  9908.    }
  9909.    local8 = ARRAYTP_elt_TP(noname3363);
  9910.    if (noname3363->state == -1) goto after_loop;
  9911.    local9 = local7;
  9912.    if ((*TP_is_neq_TP_BOOL[local9->header.tag+TP_is_neq_TP_BOOL_offset])(local9, local8)) {
  9913.     return FALSE;
  9914.    }
  9915.   }
  9916.  }
  9917.  after_loop: ;
  9918.  {
  9919.   struct ARRAYBOOL_elt_BOOL_frame_struct temp3365_0;
  9920.   ARRAYBOOL_elt_BOOL_frame 
  9921.   noname3366 = &temp3365_0;
  9922.   struct ARRAYBOOL_elt_BOOL_frame_struct temp3365_1;
  9923.   ARRAYBOOL_elt_BOOL_frame 
  9924.   noname3367 = &temp3365_1;
  9925.   noname3366->state = 0;
  9926.   noname3367->state = 0;
  9927.   while (1) {
  9928.    if (noname3366->state == 0) {
  9929.     noname3359 = self->hot;
  9930.     noname3366->arg0 = noname3359;
  9931.    }
  9932.    local10 = ARRAYBOOL_elt_BOOL(noname3366);
  9933.    if (noname3366->state == -1) goto after_loop_3364;
  9934.    local11 = local10;
  9935.    if (noname3367->state == 0) {
  9936.     noname3360 = s_3355->hot;
  9937.     noname3367->arg0 = noname3360;
  9938.    }
  9939.    local12 = ARRAYBOOL_elt_BOOL(noname3367);
  9940.    if (noname3367->state == -1) goto after_loop_3364;
  9941.    if (((local11)!=(local12))) {
  9942.     return FALSE;
  9943.    }
  9944.   }
  9945.  }
  9946.  after_loop_3364: ;
  9947.  if (SIG_has_ret_BOOL(self)) {
  9948.   local14 = self->ret;
  9949.   local13 = (*TP_is_neq_TP_BOOL[local14->header.tag+TP_is_neq_TP_BOOL_offset])(local14, s_3355->ret);
  9950.  } else {
  9951.   local13 = FALSE;
  9952.  }
  9953.  if (local13) {
  9954.   return FALSE;
  9955.  }
  9956.  return TRUE;
  9957. }
  9958.  
  9959.  
  9960. SIG SIG_with_new_typ(SIG self, TP t_3368) {
  9961.  SIG noname3369;
  9962.  SIG r_3370;
  9963.  BOOL local0;
  9964.  SIG local1;
  9965.  if ((!((self==((SIG) NULL))))) {
  9966.   local0 = (!((t_3368==((TP) NULL))));
  9967.  } else {
  9968.   local0 = FALSE;
  9969.  }
  9970.  if (!(local0)) {
  9971.   fprintf(stderr,"Violation of precondition ./sig.sa:270:16\n");
  9972.   exit(16);
  9973.  }
  9974.  local1 = ((SIG) sbi_alloc(sizeof(struct SIG_struct), SIG_tag));
  9975.  r_3370 = local1;
  9976.  r_3370->tp = t_3368;
  9977.  r_3370->name_19 = self->name_19;
  9978.  r_3370->args_7 = self->args_7;
  9979.  r_3370->hot = self->hot;
  9980.  r_3370->ret = self->ret;
  9981.  SIG_do_is_builtin(r_3370);
  9982.  return r_3370;
  9983. }
  9984.  
  9985.  
  9986. SIG_TBL IFC_ABS_CREATE_d_3371(IFC_ABS_CREATE self) {
  9987.  SIG_TBL noname3372;
  9988.  SIG_TBL r_3373 = ((SIG_TBL) NULL);
  9989.  SIG_TBL noname3374;
  9990.  IFC si;
  9991.  SIG_TBL noname3375;
  9992.  SIG sig_3376;
  9993.  INT i = ((INT) 0);
  9994.  SIG cs;
  9995.  SIG local0;
  9996.  SIG local1;
  9997.  PROG local2;
  9998.  PROG local3;
  9999.  STR local4;
  10000.  STR local5;
  10001.  STR local6;
  10002.  STR local7;
  10003.  {
  10004.   struct SIG_TBL_elt_SIG_frame_struct temp3377_0;
  10005.   SIG_TBL_elt_SIG_frame 
  10006.   noname3378 = &temp3377_0;
  10007.   noname3378->state = 0;
  10008.   while (1) {
  10009.    if (noname3378->state == 0) {
  10010.     noname3374 = self->class_sigs;
  10011.     noname3378->arg0 = noname3374;
  10012.    }
  10013.    local0 = SIG_TBL_elt_SIG(noname3378);
  10014.    if (noname3378->state == -1) goto after_loop;
  10015.    r_3373 = SIG_TBL_insert_S(r_3373, local0);
  10016.   }
  10017.  }
  10018.  after_loop: ;
  10019.  while (1) {
  10020.   if (FLISTIFC_is_empt(self->supers)) {
  10021.    goto after_loop_3379;
  10022.   }
  10023.   else {
  10024.    si = FLISTIFC_pop_IFC(self->supers);
  10025.    {
  10026.     struct SIG_TBL_elt_SIG_frame_struct temp3382_0;
  10027.     SIG_TBL_elt_SIG_frame 
  10028.     noname3383 = &temp3382_0;
  10029.     noname3383->state = 0;
  10030.     while (1) {
  10031.      if (noname3383->state == 0) {
  10032.       noname3375 = si->sigs;
  10033.       noname3383->arg0 = noname3375;
  10034.      }
  10035.      local1 = SIG_TBL_elt_SIG(noname3383);
  10036.      if (noname3383->state == -1) goto after_loop_3381;
  10037.      sig_3376 = local1;
  10038.      if ((!((SIG_TBL_sig_conf(r_3373, sig_3376)==((SIG) NULL))))) {
  10039.      }
  10040.      else {
  10041.       i = 0;
  10042.       while (1) {
  10043.        if ((i<FLISTIFC_size_INT(self->supers))) {
  10044.        }
  10045.        else {
  10046.         goto after_loop_3384;
  10047.        }
  10048.        cs = SIG_TBL_sig_conf(FLISTIFC_aget_IN(self->supers, i)->sigs, sig_3376);
  10049.        if ((!((cs==((SIG) NULL))))) {
  10050.         if ((!(SIG_is_eq_but_tp(cs, sig_3376)))) {
  10051.          local2 = IFC_ABS_CREATE_p(self);
  10052.          PROG_err_loc_PRO(local2, ((PROG_ERR) self->tr));
  10053.          local3 = IFC_ABS_CREATE_p(self);
  10054.          local4 = ((STR) &Thesignatures);
  10055.          local5 = STR_plus_STR_STR(local4, SIG_str_STR(sig_3376));
  10056.          local6 = STR_plus_STR_STR(local5, ((STR) &and_3386));
  10057.          local7 = STR_plus_STR_STR(local6, SIG_str_STR(cs));
  10058.          PROG_err_STR(local3, STR_plus_STR_STR(local7, ((STR) &mustbedisambigua)));
  10059.         }
  10060.        }
  10061.        i = (c_INT_plus_INT_INT_chk(i,1));
  10062.       }
  10063.       after_loop_3384: ;
  10064.       r_3373 = SIG_TBL_insert_S(r_3373, SIG_with_new_typ(sig_3376, ((TP) self->tp)));
  10065.      }
  10066.     }
  10067.    }
  10068.    after_loop_3381: ;
  10069.   }
  10070.  }
  10071.  after_loop_3379: ;
  10072.  return r_3373;
  10073. }
  10074.  
  10075.  
  10076. IFC IFC_ABS_CREATE_i(IFC_ABS_CREATE self, TP_CLASS t_3387) {
  10077.  IFC noname3388;
  10078.  IFC_ABS_CREATE ic;
  10079.  OUT local0;
  10080.  OUT local1;
  10081.  OUT local2;
  10082.  IFC_ABS_CREATE local3;
  10083.  PROG local4;
  10084.  PROG local5;
  10085.  IDENT local6;
  10086.  PROG local7;
  10087.  STR local8;
  10088.  STR local9;
  10089.  IFC local10;
  10090.  SIG_TBL local11;
  10091.  if (!((!((t_3387==((TP_CLASS) NULL)))))) {
  10092.   fprintf(stderr,"Violation of precondition ./ifc.sa:190:9\n");
  10093.   exit(16);
  10094.  }
  10095.  if (t_3387->prog->show_ifc_abs_create) {
  10096.   local0 = OUT_create_OUT(((OUT) NULL));
  10097.   local1 = OUT_plus_STR_OUT(local0, ((STR) &Abstractifccreate));
  10098.   local2 = OUT_plus_STR_OUT(local1, TP_CLASS_str_STR(t_3387));
  10099.   OUT_plus_STR(local2, ((STR) &name_3389));
  10100.  }
  10101.  local3 = ((IFC_ABS_CREATE) sbi_alloc(sizeof(struct IFC_ABS_CREATE_struct), IFC_ABS_CREATE_tag));
  10102.  ic = local3;
  10103.  ic->tp = t_3387;
  10104.  local4 = IFC_ABS_CREATE_p(ic);
  10105.  ic->con = PROG_tp_context_(local4, t_3387);
  10106.  if ((ic->con==((TP_CONTEXT) NULL))) {
  10107.   return ((IFC) NULL);
  10108.  }
  10109.  local5 = IFC_ABS_CREATE_p(ic);
  10110.  local6 = t_3387->name_19;
  10111.  ic->tr = PROG_tree_for_ID(local5, local6, ARRAYTP_size_INT(t_3387->params));
  10112.  if ((ic->tr==((TR_CLASS_DEF) NULL))) {
  10113.   local7 = t_3387->prog;
  10114.   local8 = ((STR) &CompilererrorIFC);
  10115.   local9 = STR_plus_STR_STR(local8, TP_CLASS_str_STR(t_3387));
  10116.   PROG_err_STR(local7, STR_plus_STR_STR(local9, ((STR) &name_3390)));
  10117.   return ((IFC) NULL);
  10118.  }
  10119.  IFC_ABS_CREATE_d(ic);
  10120.  IFC_ABS_CREATE_d_3343(ic);
  10121.  local10 = ((IFC) NULL);
  10122.  local11 = IFC_ABS_CREATE_d_3371(ic);
  10123.  return IFC_create_SIG_T(local10, local11, ((TP) t_3387));
  10124. }
  10125.  
  10126.  
  10127. SIG SIG_bound_routin(SIG self, TP_ROUT tp_3391) {
  10128.  SIG noname3392;
  10129.  SIG r_3393;
  10130.  SIG local0;
  10131.  if (!((!((tp_3391==((TP_ROUT) NULL)))))) {
  10132.   fprintf(stderr,"Violation of precondition ./sig.sa:254:21\n");
  10133.   exit(16);
  10134.  }
  10135.  local0 = ((SIG) sbi_alloc(sizeof(struct SIG_struct), SIG_tag));
  10136.  r_3393 = local0;
  10137.  r_3393->tp = ((TP) tp_3391);
  10138.  r_3393->name_19 = PROG_ident_for_S(tp_3391->prog, ((STR) &call_3394));
  10139.  r_3393->args_7 = tp_3391->args_7;
  10140.  r_3393->ret = tp_3391->ret;
  10141.  SIG_do_is_builtin(r_3393);
  10142.  return r_3393;
  10143. }
  10144.  
  10145.  
  10146. IFC IFC_ifc_for_rout(IFC self, TP_ROUT t_3395) {
  10147.  IFC noname3396;
  10148.  IFC r_3397;
  10149.  IFC local0;
  10150.  SIG_TBL local1;
  10151.  if (!((!((t_3395==((TP_ROUT) NULL)))))) {
  10152.   fprintf(stderr,"Violation of precondition ./ifc.sa:96:15\n");
  10153.   exit(16);
  10154.  }
  10155.  local0 = ((IFC) sbi_alloc(sizeof(struct IFC_struct), IFC_tag));
  10156.  r_3397 = local0;
  10157.  r_3397->tp = ((TP) t_3395);
  10158.  local1 = r_3397->sigs;
  10159.  r_3397->sigs = SIG_TBL_insert_S(local1, SIG_bound_routin(((SIG) NULL), t_3395));
  10160.  return r_3397;
  10161. }
  10162.