mono_internal_hash_table_init (struct MonoInternalHashTable * table, guint (*GHashFunc) (const void *) hash_func, void * (*MonoInternalHashKeyExtractFunc) (void *) key_extract, void * * (*MonoInternalHashNextValueFunc) (void *) next_value)
{
  int D.5510;
  long unsigned int D.5511;
  long unsigned int D.5512;
  void * D.5513;

  table->hash_func = hash_func;
  table->key_extract = key_extract;
  table->next_value = next_value;
  table->size = 11;
  table->num_entries = 0;
  D.5510 = table->size;
  D.5511 = (long unsigned int) D.5510;
  D.5512 = D.5511 * 8;
  D.5513 = monoeg_malloc0 (D.5512);
  table->table = D.5513;
}


mono_internal_hash_table_destroy (struct MonoInternalHashTable * table)
{
  void * * D.5514;

  D.5514 = table->table;
  monoeg_g_free (D.5514);
  table->table = 0B;
}


mono_internal_hash_table_lookup (struct MonoInternalHashTable * table, void * key)
{
  void * * D.5515;
  _Bool D.5516;
  long int D.5517;
  long int D.5518;
  guint (*<Tcb5>) (const void *) D.5521;
  unsigned int D.5522;
  int D.5523;
  unsigned int D.5524;
  unsigned int D.5525;
  long unsigned int D.5526;
  long unsigned int D.5527;
  void * * D.5528;
  void * (*<Tebd>) (void *) D.5529;
  void * D.5530;
  void * D.5533;
  void * * (*<Tec2>) (void *) D.5534;
  void * * D.5535;
  void * value;

  D.5515 = table->table;
  D.5516 = D.5515 == 0B;
  D.5517 = (long int) D.5516;
  D.5518 = __builtin_expect (D.5517, 0);
  if (D.5518 != 0) goto <D.5519>; else goto <D.5520>;
  <D.5519>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mono-internal-hash.c", 46, "table->table != NULL");
  <D.5520>:
  D.5515 = table->table;
  D.5521 = table->hash_func;
  D.5522 = D.5521 (key);
  D.5523 = table->size;
  D.5524 = (unsigned int) D.5523;
  D.5525 = D.5522 % D.5524;
  D.5526 = (long unsigned int) D.5525;
  D.5527 = D.5526 * 8;
  D.5528 = D.5515 + D.5527;
  value = *D.5528;
  goto <D.5478>;
  <D.5477>:
  D.5529 = table->key_extract;
  D.5530 = D.5529 (value);
  if (D.5530 == key) goto <D.5531>; else goto <D.5532>;
  <D.5531>:
  D.5533 = value;
  return D.5533;
  <D.5532>:
  D.5534 = table->next_value;
  D.5535 = D.5534 (value);
  value = *D.5535;
  <D.5478>:
  if (value != 0B) goto <D.5477>; else goto <D.5479>;
  <D.5479>:
  D.5533 = 0B;
  return D.5533;
}


mono_internal_hash_table_insert (struct MonoInternalHashTable * table, void * key, void * value)
{
  guint (*<Tcb5>) (const void *) D.5537;
  unsigned int D.5538;
  int D.5539;
  unsigned int D.5540;
  unsigned int D.5541;
  void * (*<Tebd>) (void *) D.5542;
  void * D.5543;
  _Bool D.5544;
  long int D.5545;
  long int D.5546;
  void * * (*<Tec2>) (void *) D.5549;
  void * * D.5550;
  void * D.5551;
  _Bool D.5552;
  long int D.5553;
  long int D.5554;
  void * D.5557;
  _Bool D.5558;
  long int D.5559;
  long int D.5560;
  void * * D.5563;
  void * * D.5564;
  long unsigned int D.5565;
  long unsigned int D.5566;
  void * * D.5567;
  void * D.5568;
  int D.5569;
  int D.5570;
  gint hash;

  D.5537 = table->hash_func;
  D.5538 = D.5537 (key);
  D.5539 = table->size;
  D.5540 = (unsigned int) D.5539;
  D.5541 = D.5538 % D.5540;
  hash = (gint) D.5541;
  D.5542 = table->key_extract;
  D.5543 = D.5542 (value);
  D.5544 = D.5543 != key;
  D.5545 = (long int) D.5544;
  D.5546 = __builtin_expect (D.5545, 0);
  if (D.5546 != 0) goto <D.5547>; else goto <D.5548>;
  <D.5547>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mono-internal-hash.c", 96, "table->key_extract(value) == key");
  <D.5548>:
  D.5549 = table->next_value;
  D.5550 = D.5549 (value);
  D.5551 = *D.5550;
  D.5552 = D.5551 != 0B;
  D.5553 = (long int) D.5552;
  D.5554 = __builtin_expect (D.5553, 0);
  if (D.5554 != 0) goto <D.5555>; else goto <D.5556>;
  <D.5555>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mono-internal-hash.c", 97, "*(table->next_value (value)) == NULL");
  <D.5556>:
  D.5557 = mono_internal_hash_table_lookup (table, key);
  D.5558 = D.5557 != 0B;
  D.5559 = (long int) D.5558;
  D.5560 = __builtin_expect (D.5559, 0);
  if (D.5560 != 0) goto <D.5561>; else goto <D.5562>;
  <D.5561>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mono-internal-hash.c", 98, "mono_internal_hash_table_lookup (table, key) == NULL");
  <D.5562>:
  D.5549 = table->next_value;
  D.5563 = D.5549 (value);
  D.5564 = table->table;
  D.5565 = (long unsigned int) hash;
  D.5566 = D.5565 * 8;
  D.5567 = D.5564 + D.5566;
  D.5568 = *D.5567;
  *D.5563 = D.5568;
  D.5564 = table->table;
  D.5565 = (long unsigned int) hash;
  D.5566 = D.5565 * 8;
  D.5567 = D.5564 + D.5566;
  *D.5567 = value;
  D.5569 = table->num_entries;
  D.5570 = D.5569 + 1;
  table->num_entries = D.5570;
  resize_if_needed (table);
}


resize_if_needed (struct MonoInternalHashTable * table)
{
  int D.5571;
  int D.5572;
  int D.5573;
  unsigned int D.5576;
  unsigned int D.5577;
  long unsigned int D.5578;
  long unsigned int D.5579;
  void * * D.5580;
  long unsigned int D.5581;
  long unsigned int D.5582;
  void * * D.5583;
  void * * (*<Tec2>) (void *) D.5584;
  void * * D.5585;
  void * D.5586;
  guint (*<Tcb5>) (const void *) D.5587;
  void * (*<Tebd>) (void *) D.5588;
  void * D.5589;
  unsigned int D.5590;
  unsigned int new_size.0;
  unsigned int D.5592;
  void * * D.5593;
  long unsigned int D.5594;
  long unsigned int D.5595;
  void * * D.5596;
  void * D.5597;
  void * D.5598;
  void * * new_table;
  gint new_size;
  gint i;

  D.5571 = table->num_entries;
  D.5572 = table->size;
  D.5573 = D.5572 * 3;
  if (D.5571 < D.5573) goto <D.5574>; else goto <D.5575>;
  <D.5574>:
  return;
  <D.5575>:
  D.5571 = table->num_entries;
  D.5576 = (unsigned int) D.5571;
  D.5577 = monoeg_g_spaced_primes_closest (D.5576);
  new_size = (gint) D.5577;
  D.5578 = (long unsigned int) new_size;
  D.5579 = D.5578 * 8;
  new_table = monoeg_malloc0 (D.5579);
  i = 0;
  goto <D.5492>;
  <D.5491>:
  goto <D.5489>;
  <D.5488>:
  {
    void * value;
    gint hash;

    D.5580 = table->table;
    D.5581 = (long unsigned int) i;
    D.5582 = D.5581 * 8;
    D.5583 = D.5580 + D.5582;
    value = *D.5583;
    D.5580 = table->table;
    D.5581 = (long unsigned int) i;
    D.5582 = D.5581 * 8;
    D.5583 = D.5580 + D.5582;
    D.5584 = table->next_value;
    D.5585 = D.5584 (value);
    D.5586 = *D.5585;
    *D.5583 = D.5586;
    D.5587 = table->hash_func;
    D.5588 = table->key_extract;
    D.5589 = D.5588 (value);
    D.5590 = D.5587 (D.5589);
    new_size.0 = (unsigned int) new_size;
    D.5592 = D.5590 % new_size.0;
    hash = (gint) D.5592;
    D.5584 = table->next_value;
    D.5593 = D.5584 (value);
    D.5594 = (long unsigned int) hash;
    D.5595 = D.5594 * 8;
    D.5596 = new_table + D.5595;
    D.5597 = *D.5596;
    *D.5593 = D.5597;
    D.5594 = (long unsigned int) hash;
    D.5595 = D.5594 * 8;
    D.5596 = new_table + D.5595;
    *D.5596 = value;
  }
  <D.5489>:
  D.5580 = table->table;
  D.5581 = (long unsigned int) i;
  D.5582 = D.5581 * 8;
  D.5583 = D.5580 + D.5582;
  D.5598 = *D.5583;
  if (D.5598 != 0B) goto <D.5488>; else goto <D.5490>;
  <D.5490>:
  i = i + 1;
  <D.5492>:
  D.5572 = table->size;
  if (D.5572 > i) goto <D.5491>; else goto <D.5493>;
  <D.5493>:
  D.5580 = table->table;
  monoeg_g_free (D.5580);
  table->size = new_size;
  table->table = new_table;
}


mono_internal_hash_table_remove (struct MonoInternalHashTable * table, void * key)
{
  guint (*<Tcb5>) (const void *) D.5600;
  unsigned int D.5601;
  int D.5602;
  unsigned int D.5603;
  unsigned int D.5604;
  void * * D.5605;
  long unsigned int D.5606;
  long unsigned int D.5607;
  void * (*<Tebd>) (void *) D.5608;
  void * D.5609;
  void * D.5610;
  void * * (*<Tec2>) (void *) D.5613;
  void * * D.5614;
  void * D.5615;
  int D.5616;
  int D.5617;
  gint hash;
  void * * value;

  D.5600 = table->hash_func;
  D.5601 = D.5600 (key);
  D.5602 = table->size;
  D.5603 = (unsigned int) D.5602;
  D.5604 = D.5601 % D.5603;
  hash = (gint) D.5604;
  D.5605 = table->table;
  D.5606 = (long unsigned int) hash;
  D.5607 = D.5606 * 8;
  value = D.5605 + D.5607;
  goto <D.5507>;
  <D.5506>:
  D.5608 = table->key_extract;
  D.5609 = *value;
  D.5610 = D.5608 (D.5609);
  if (D.5610 == key) goto <D.5611>; else goto <D.5612>;
  <D.5611>:
  D.5613 = table->next_value;
  D.5609 = *value;
  D.5614 = D.5613 (D.5609);
  D.5615 = *D.5614;
  *value = D.5615;
  D.5616 = table->num_entries;
  D.5617 = D.5616 + -1;
  table->num_entries = D.5617;
  return;
  <D.5612>:
  D.5613 = table->next_value;
  D.5609 = *value;
  value = D.5613 (D.5609);
  <D.5507>:
  D.5609 = *value;
  if (D.5609 != 0B) goto <D.5506>; else goto <D.5508>;
  <D.5508>:
  if (1 != 0) goto <D.5618>; else goto <D.5619>;
  <D.5618>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mono-internal-hash.c", 125, "0");
  <D.5619>:
}


