hash (char * name)
{
  char D.3988;
  char D.3989;
  int D.3990;
  int D.3991;
  int D.3992;
  register char * s;
  register int c;
  register int k;
  static const char __PRETTY_FUNCTION__[5] = "hash";

  if (name == 0B) goto <D.3985>; else goto <D.3987>;
  <D.3987>:
  D.3988 = *name;
  if (D.3988 == 0) goto <D.3985>; else goto <D.3986>;
  <D.3985>:
  __assert_fail ("name && *name", "symtab.c", 61, &__PRETTY_FUNCTION__);
  <D.3986>:
  s = name;
  D.3989 = *s;
  k = (int) D.3989;
  goto <D.3941>;
  <D.3940>:
  D.3990 = k * 31;
  D.3991 = D.3990 + c;
  k = D.3991 & 1023;
  <D.3941>:
  s = s + 1;
  D.3989 = *s;
  c = (int) D.3989;
  if (c != 0) goto <D.3940>; else goto <D.3942>;
  <D.3942>:
  D.3992 = k;
  return D.3992;
}


make_bucket (char * name)
{
  long unsigned int D.3998;
  unsigned int D.3999;
  unsigned int D.4000;
  long unsigned int D.4001;
  void * D.4002;
  char * D.4003;
  struct bucket * D.4008;
  register struct bucket * bp;
  static const char __PRETTY_FUNCTION__[12] = "make_bucket";
  extern int no_space ();

  if (name == 0B) goto <D.3994>; else goto <D.3995>;
  <D.3994>:
  __assert_fail ("name", "symtab.c", 77, &__PRETTY_FUNCTION__);
  <D.3995>:
  bp = malloc (40);
  if (bp == 0B) goto <D.3996>; else goto <D.3997>;
  <D.3996>:
  no_space ();
  <D.3997>:
  bp->link = 0B;
  bp->next = 0B;
  D.3998 = strlen (name);
  D.3999 = (unsigned int) D.3998;
  D.4000 = D.3999 + 1;
  D.4001 = (long unsigned int) D.4000;
  D.4002 = malloc (D.4001);
  bp->name = D.4002;
  D.4003 = bp->name;
  if (D.4003 == 0B) goto <D.4004>; else goto <D.4005>;
  <D.4004>:
  no_space ();
  <D.4005>:
  bp->tag = 0B;
  bp->value = -1;
  bp->index = 0;
  bp->prec = 0;
  bp->class = 0;
  bp->assoc = 0;
  D.4003 = bp->name;
  if (D.4003 == 0B) goto <D.4006>; else goto <D.4007>;
  <D.4006>:
  no_space ();
  <D.4007>:
  D.4003 = bp->name;
  strcpy (D.4003, name);
  D.4008 = bp;
  return D.4008;
}


strcpy (char * restrict __dest, const char * restrict __src)
{
  char * D.4010;
  long unsigned int D.4011;

  D.4011 = __builtin_object_size (__dest, 1);
  D.4010 = __builtin___strcpy_chk (__dest, __src, D.4011);
  return D.4010;
}


lookup (char * name)
{
  struct bucket * * symbol_table.0;
  int D.4014;
  long unsigned int D.4015;
  long unsigned int D.4016;
  int D.3963;
  char * D.4017;
  struct bucket * D.4020;
  struct bucket * last_symbol.1;
  register struct bucket * bp;
  register struct bucket * * bpp;

  symbol_table.0 = symbol_table;
  D.4014 = hash (name);
  D.4015 = (long unsigned int) D.4014;
  D.4016 = D.4015 * 8;
  bpp = symbol_table.0 + D.4016;
  bp = *bpp;
  goto <D.3965>;
  <D.3964>:
  {
    size_t __s1_len;
    size_t __s2_len;

    D.4017 = bp->name;
    D.3963 = __builtin_strcmp (name, D.4017);
  }
  if (D.3963 == 0) goto <D.4018>; else goto <D.4019>;
  <D.4018>:
  D.4020 = bp;
  return D.4020;
  <D.4019>:
  bpp = &bp->link;
  bp = *bpp;
  <D.3965>:
  if (bp != 0B) goto <D.3964>; else goto <D.3966>;
  <D.3966>:
  bp = make_bucket (name);
  *bpp = bp;
  last_symbol.1 = last_symbol;
  last_symbol.1->next = bp;
  last_symbol = bp;
  D.4020 = bp;
  return D.4020;
}


create_symbol_table ()
{
  void * symbol_table.2;
  struct bucket * * symbol_table.3;
  long unsigned int D.4027;
  long unsigned int D.4028;
  struct bucket * * D.4029;
  int D.4030;
  long unsigned int D.4031;
  long unsigned int D.4032;
  struct bucket * * D.4033;
  register int i;
  register struct bucket * bp;
  extern int no_space ();

  symbol_table.2 = malloc (8192);
  symbol_table = symbol_table.2;
  symbol_table.3 = symbol_table;
  if (symbol_table.3 == 0B) goto <D.4025>; else goto <D.4026>;
  <D.4025>:
  no_space ();
  <D.4026>:
  i = 0;
  goto <D.3972>;
  <D.3971>:
  symbol_table.3 = symbol_table;
  D.4027 = (long unsigned int) i;
  D.4028 = D.4027 * 8;
  D.4029 = symbol_table.3 + D.4028;
  *D.4029 = 0B;
  i = i + 1;
  <D.3972>:
  if (i <= 1023) goto <D.3971>; else goto <D.3973>;
  <D.3973>:
  bp = make_bucket ("error");
  bp->index = 1;
  bp->class = 1;
  first_symbol = bp;
  last_symbol = bp;
  symbol_table.3 = symbol_table;
  D.4030 = hash ("error");
  D.4031 = (long unsigned int) D.4030;
  D.4032 = D.4031 * 8;
  D.4033 = symbol_table.3 + D.4032;
  *D.4033 = bp;
}


free_symbol_table ()
{
  struct bucket * * symbol_table.4;

  symbol_table.4 = symbol_table;
  free (symbol_table.4);
  symbol_table = 0B;
}


free_symbols ()
{
  register struct bucket * p;
  register struct bucket * q;

  p = first_symbol;
  goto <D.3982>;
  <D.3981>:
  q = p->next;
  free (p);
  p = q;
  <D.3982>:
  if (p != 0B) goto <D.3981>; else goto <D.3983>;
  <D.3983>:
}


