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.7255;
  unsigned int D.7256;
  unsigned int D.7257;
  void * D.7258;

  table->hash_func = hash_func;
  table->key_extract = key_extract;
  table->next_value = next_value;
  table->size = 11;
  table->num_entries = 0;
  D.7255 = table->size;
  D.7256 = (unsigned int) D.7255;
  D.7257 = D.7256 * 4;
  D.7258 = monoeg_malloc0 (D.7257);
  table->table = D.7258;
}


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

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


mono_internal_hash_table_lookup (struct MonoInternalHashTable * table, void * key)
{
  void * * D.7260;
  _Bool D.7261;
  long int D.7262;
  long int D.7263;
  guint (*<T166c>) (const void *) D.7266;
  unsigned int D.7267;
  int D.7268;
  unsigned int D.7269;
  unsigned int D.7270;
  unsigned int D.7271;
  void * * D.7272;
  void * (*<T1872>) (void *) D.7273;
  void * D.7274;
  void * D.7277;
  void * * (*<T1877>) (void *) D.7278;
  void * * D.7279;
  void * value;

  D.7260 = table->table;
  D.7261 = D.7260 == 0B;
  D.7262 = (long int) D.7261;
  D.7263 = __builtin_expect (D.7262, 0);
  if (D.7263 != 0) goto <D.7264>; else goto <D.7265>;
  <D.7264>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mono-internal-hash.c", 46, "table->table != NULL");
  <D.7265>:
  D.7260 = table->table;
  D.7266 = table->hash_func;
  D.7267 = D.7266 (key);
  D.7268 = table->size;
  D.7269 = (unsigned int) D.7268;
  D.7270 = D.7267 % D.7269;
  D.7271 = D.7270 * 4;
  D.7272 = D.7260 + D.7271;
  value = *D.7272;
  goto <D.7221>;
  <D.7220>:
  D.7273 = table->key_extract;
  D.7274 = D.7273 (value);
  if (D.7274 == key) goto <D.7275>; else goto <D.7276>;
  <D.7275>:
  D.7277 = value;
  return D.7277;
  <D.7276>:
  D.7278 = table->next_value;
  D.7279 = D.7278 (value);
  value = *D.7279;
  <D.7221>:
  if (value != 0B) goto <D.7220>; else goto <D.7222>;
  <D.7222>:
  D.7277 = 0B;
  return D.7277;
}


mono_internal_hash_table_insert (struct MonoInternalHashTable * table, void * key, void * value)
{
  guint (*<T166c>) (const void *) D.7281;
  unsigned int D.7282;
  int D.7283;
  unsigned int D.7284;
  unsigned int D.7285;
  void * (*<T1872>) (void *) D.7286;
  void * D.7287;
  _Bool D.7288;
  long int D.7289;
  long int D.7290;
  void * * (*<T1877>) (void *) D.7293;
  void * * D.7294;
  void * D.7295;
  _Bool D.7296;
  long int D.7297;
  long int D.7298;
  void * D.7301;
  _Bool D.7302;
  long int D.7303;
  long int D.7304;
  void * * D.7307;
  void * * D.7308;
  unsigned int hash.0;
  unsigned int D.7310;
  void * * D.7311;
  void * D.7312;
  int D.7313;
  int D.7314;
  gint hash;

  D.7281 = table->hash_func;
  D.7282 = D.7281 (key);
  D.7283 = table->size;
  D.7284 = (unsigned int) D.7283;
  D.7285 = D.7282 % D.7284;
  hash = (gint) D.7285;
  D.7286 = table->key_extract;
  D.7287 = D.7286 (value);
  D.7288 = D.7287 != key;
  D.7289 = (long int) D.7288;
  D.7290 = __builtin_expect (D.7289, 0);
  if (D.7290 != 0) goto <D.7291>; else goto <D.7292>;
  <D.7291>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mono-internal-hash.c", 96, "table->key_extract(value) == key");
  <D.7292>:
  D.7293 = table->next_value;
  D.7294 = D.7293 (value);
  D.7295 = *D.7294;
  D.7296 = D.7295 != 0B;
  D.7297 = (long int) D.7296;
  D.7298 = __builtin_expect (D.7297, 0);
  if (D.7298 != 0) goto <D.7299>; else goto <D.7300>;
  <D.7299>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mono-internal-hash.c", 97, "*(table->next_value (value)) == NULL");
  <D.7300>:
  D.7301 = mono_internal_hash_table_lookup (table, key);
  D.7302 = D.7301 != 0B;
  D.7303 = (long int) D.7302;
  D.7304 = __builtin_expect (D.7303, 0);
  if (D.7304 != 0) goto <D.7305>; else goto <D.7306>;
  <D.7305>:
  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.7306>:
  D.7293 = table->next_value;
  D.7307 = D.7293 (value);
  D.7308 = table->table;
  hash.0 = (unsigned int) hash;
  D.7310 = hash.0 * 4;
  D.7311 = D.7308 + D.7310;
  D.7312 = *D.7311;
  *D.7307 = D.7312;
  D.7308 = table->table;
  hash.0 = (unsigned int) hash;
  D.7310 = hash.0 * 4;
  D.7311 = D.7308 + D.7310;
  *D.7311 = value;
  D.7313 = table->num_entries;
  D.7314 = D.7313 + 1;
  table->num_entries = D.7314;
  resize_if_needed (table);
}


resize_if_needed (struct MonoInternalHashTable * table)
{
  int D.7315;
  int D.7316;
  int D.7317;
  unsigned int D.7320;
  unsigned int D.7321;
  unsigned int new_size.1;
  unsigned int D.7323;
  void * * D.7324;
  unsigned int i.2;
  unsigned int D.7326;
  void * * D.7327;
  void * * (*<T1877>) (void *) D.7328;
  void * * D.7329;
  void * D.7330;
  guint (*<T166c>) (const void *) D.7331;
  void * (*<T1872>) (void *) D.7332;
  void * D.7333;
  unsigned int D.7334;
  unsigned int new_size.3;
  unsigned int D.7336;
  void * * D.7337;
  unsigned int hash.4;
  unsigned int D.7339;
  void * * D.7340;
  void * D.7341;
  void * D.7342;
  void * * new_table;
  gint new_size;
  gint i;

  D.7315 = table->num_entries;
  D.7316 = table->size;
  D.7317 = D.7316 * 3;
  if (D.7315 < D.7317) goto <D.7318>; else goto <D.7319>;
  <D.7318>:
  return;
  <D.7319>:
  D.7315 = table->num_entries;
  D.7320 = (unsigned int) D.7315;
  D.7321 = monoeg_g_spaced_primes_closest (D.7320);
  new_size = (gint) D.7321;
  new_size.1 = (unsigned int) new_size;
  D.7323 = new_size.1 * 4;
  new_table = monoeg_malloc0 (D.7323);
  i = 0;
  goto <D.7235>;
  <D.7234>:
  goto <D.7232>;
  <D.7231>:
  {
    void * value;
    gint hash;

    D.7324 = table->table;
    i.2 = (unsigned int) i;
    D.7326 = i.2 * 4;
    D.7327 = D.7324 + D.7326;
    value = *D.7327;
    D.7324 = table->table;
    i.2 = (unsigned int) i;
    D.7326 = i.2 * 4;
    D.7327 = D.7324 + D.7326;
    D.7328 = table->next_value;
    D.7329 = D.7328 (value);
    D.7330 = *D.7329;
    *D.7327 = D.7330;
    D.7331 = table->hash_func;
    D.7332 = table->key_extract;
    D.7333 = D.7332 (value);
    D.7334 = D.7331 (D.7333);
    new_size.3 = (unsigned int) new_size;
    D.7336 = D.7334 % new_size.3;
    hash = (gint) D.7336;
    D.7328 = table->next_value;
    D.7337 = D.7328 (value);
    hash.4 = (unsigned int) hash;
    D.7339 = hash.4 * 4;
    D.7340 = new_table + D.7339;
    D.7341 = *D.7340;
    *D.7337 = D.7341;
    hash.4 = (unsigned int) hash;
    D.7339 = hash.4 * 4;
    D.7340 = new_table + D.7339;
    *D.7340 = value;
  }
  <D.7232>:
  D.7324 = table->table;
  i.2 = (unsigned int) i;
  D.7326 = i.2 * 4;
  D.7327 = D.7324 + D.7326;
  D.7342 = *D.7327;
  if (D.7342 != 0B) goto <D.7231>; else goto <D.7233>;
  <D.7233>:
  i = i + 1;
  <D.7235>:
  D.7316 = table->size;
  if (D.7316 > i) goto <D.7234>; else goto <D.7236>;
  <D.7236>:
  D.7324 = table->table;
  monoeg_g_free (D.7324);
  table->size = new_size;
  table->table = new_table;
}


mono_internal_hash_table_remove (struct MonoInternalHashTable * table, void * key)
{
  guint (*<T166c>) (const void *) D.7344;
  unsigned int D.7345;
  int D.7346;
  unsigned int D.7347;
  unsigned int D.7348;
  void * * D.7349;
  unsigned int hash.5;
  unsigned int D.7351;
  void * (*<T1872>) (void *) D.7352;
  void * D.7353;
  void * D.7354;
  void * * (*<T1877>) (void *) D.7357;
  void * * D.7358;
  void * D.7359;
  int D.7360;
  int D.7361;
  gint hash;
  void * * value;

  D.7344 = table->hash_func;
  D.7345 = D.7344 (key);
  D.7346 = table->size;
  D.7347 = (unsigned int) D.7346;
  D.7348 = D.7345 % D.7347;
  hash = (gint) D.7348;
  D.7349 = table->table;
  hash.5 = (unsigned int) hash;
  D.7351 = hash.5 * 4;
  value = D.7349 + D.7351;
  goto <D.7250>;
  <D.7249>:
  D.7352 = table->key_extract;
  D.7353 = *value;
  D.7354 = D.7352 (D.7353);
  if (D.7354 == key) goto <D.7355>; else goto <D.7356>;
  <D.7355>:
  D.7357 = table->next_value;
  D.7353 = *value;
  D.7358 = D.7357 (D.7353);
  D.7359 = *D.7358;
  *value = D.7359;
  D.7360 = table->num_entries;
  D.7361 = D.7360 + -1;
  table->num_entries = D.7361;
  return;
  <D.7356>:
  D.7357 = table->next_value;
  D.7353 = *value;
  value = D.7357 (D.7353);
  <D.7250>:
  D.7353 = *value;
  if (D.7353 != 0B) goto <D.7249>; else goto <D.7251>;
  <D.7251>:
  if (1 != 0) goto <D.7362>; else goto <D.7363>;
  <D.7362>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mono-internal-hash.c", 125, "0");
  <D.7363>:
}


