hash (char * name)
{
  char D.3369;
  char D.3370;
  int D.3371;
  int D.3372;
  int D.3373;
  register char * s;
  register int c;
  register int k;
  static const char __PRETTY_FUNCTION__[5] = "hash";

  if (name == 0B) goto <D.3366>; else goto <D.3368>;
  <D.3368>:
  D.3369 = *name;
  if (D.3369 == 0) goto <D.3366>; else goto <D.3367>;
  <D.3366>:
  __assert_fail ("name && *name", "symtab.c", 61, &__PRETTY_FUNCTION__);
  <D.3367>:
  s = name;
  D.3370 = *s;
  k = (int) D.3370;
  goto <D.3322>;
  <D.3321>:
  D.3371 = k * 31;
  D.3372 = D.3371 + c;
  k = D.3372 & 1023;
  <D.3322>:
  s = s + 1;
  D.3370 = *s;
  c = (int) D.3370;
  if (c != 0) goto <D.3321>; else goto <D.3323>;
  <D.3323>:
  D.3373 = k;
  return D.3373;
}


make_bucket (char * name)
{
  unsigned int D.3379;
  unsigned int D.3380;
  void * D.3381;
  char * D.3382;
  struct bucket * D.3387;
  register struct bucket * bp;
  static const char __PRETTY_FUNCTION__[12] = "make_bucket";
  extern int no_space ();

  if (name == 0B) goto <D.3375>; else goto <D.3376>;
  <D.3375>:
  __assert_fail ("name", "symtab.c", 77, &__PRETTY_FUNCTION__);
  <D.3376>:
  bp = malloc (24);
  if (bp == 0B) goto <D.3377>; else goto <D.3378>;
  <D.3377>:
  no_space ();
  <D.3378>:
  bp->link = 0B;
  bp->next = 0B;
  D.3379 = strlen (name);
  D.3380 = D.3379 + 1;
  D.3381 = malloc (D.3380);
  bp->name = D.3381;
  D.3382 = bp->name;
  if (D.3382 == 0B) goto <D.3383>; else goto <D.3384>;
  <D.3383>:
  no_space ();
  <D.3384>:
  bp->tag = 0B;
  bp->value = -1;
  bp->index = 0;
  bp->prec = 0;
  bp->class = 0;
  bp->assoc = 0;
  D.3382 = bp->name;
  if (D.3382 == 0B) goto <D.3385>; else goto <D.3386>;
  <D.3385>:
  no_space ();
  <D.3386>:
  D.3382 = bp->name;
  strcpy (D.3382, name);
  D.3387 = bp;
  return D.3387;
}


strcpy (char * restrict __dest, const char * restrict __src)
{
  char * D.3389;
  unsigned int D.3390;

  D.3390 = __builtin_object_size (__dest, 1);
  D.3389 = __builtin___strcpy_chk (__dest, __src, D.3390);
  return D.3389;
}


lookup (char * name)
{
  struct bucket * * symbol_table.0;
  int D.3393;
  unsigned int D.3394;
  unsigned int D.3395;
  int D.3344;
  char * D.3396;
  struct bucket * D.3399;
  struct bucket * last_symbol.1;
  register struct bucket * bp;
  register struct bucket * * bpp;

  symbol_table.0 = symbol_table;
  D.3393 = hash (name);
  D.3394 = (unsigned int) D.3393;
  D.3395 = D.3394 * 4;
  bpp = symbol_table.0 + D.3395;
  bp = *bpp;
  goto <D.3346>;
  <D.3345>:
  {
    size_t __s1_len;
    size_t __s2_len;

    D.3396 = bp->name;
    D.3344 = __builtin_strcmp (name, D.3396);
  }
  if (D.3344 == 0) goto <D.3397>; else goto <D.3398>;
  <D.3397>:
  D.3399 = bp;
  return D.3399;
  <D.3398>:
  bpp = &bp->link;
  bp = *bpp;
  <D.3346>:
  if (bp != 0B) goto <D.3345>; else goto <D.3347>;
  <D.3347>:
  bp = make_bucket (name);
  *bpp = bp;
  last_symbol.1 = last_symbol;
  last_symbol.1->next = bp;
  last_symbol = bp;
  D.3399 = bp;
  return D.3399;
}


create_symbol_table ()
{
  void * symbol_table.2;
  struct bucket * * symbol_table.3;
  unsigned int i.4;
  unsigned int D.3407;
  struct bucket * * D.3408;
  int D.3409;
  unsigned int D.3410;
  unsigned int D.3411;
  struct bucket * * D.3412;
  register int i;
  register struct bucket * bp;
  extern int no_space ();

  symbol_table.2 = malloc (4096);
  symbol_table = symbol_table.2;
  symbol_table.3 = symbol_table;
  if (symbol_table.3 == 0B) goto <D.3404>; else goto <D.3405>;
  <D.3404>:
  no_space ();
  <D.3405>:
  i = 0;
  goto <D.3353>;
  <D.3352>:
  symbol_table.3 = symbol_table;
  i.4 = (unsigned int) i;
  D.3407 = i.4 * 4;
  D.3408 = symbol_table.3 + D.3407;
  *D.3408 = 0B;
  i = i + 1;
  <D.3353>:
  if (i <= 1023) goto <D.3352>; else goto <D.3354>;
  <D.3354>:
  bp = make_bucket ("error");
  bp->index = 1;
  bp->class = 1;
  first_symbol = bp;
  last_symbol = bp;
  symbol_table.3 = symbol_table;
  D.3409 = hash ("error");
  D.3410 = (unsigned int) D.3409;
  D.3411 = D.3410 * 4;
  D.3412 = symbol_table.3 + D.3411;
  *D.3412 = bp;
}


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

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


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

  p = first_symbol;
  goto <D.3363>;
  <D.3362>:
  q = p->next;
  free (p);
  p = q;
  <D.3363>:
  if (p != 0B) goto <D.3362>; else goto <D.3364>;
  <D.3364>:
}


