mono_property_hash_new ()
{
  struct GHashTable * D.5155;
  struct MonoPropertyHash * D.5156;
  struct MonoPropertyHash * hash;

  hash = monoeg_malloc0 (8);
  D.5155 = monoeg_g_hash_table_new (0B, 0B);
  hash->hashes = D.5155;
  D.5156 = hash;
  return D.5156;
}


mono_property_hash_destroy (struct MonoPropertyHash * hash)
{
  struct GHashTable * D.5158;

  D.5158 = hash->hashes;
  monoeg_g_hash_table_foreach (D.5158, free_hash, 0B);
  D.5158 = hash->hashes;
  monoeg_g_hash_table_destroy (D.5158);
  monoeg_g_free (hash);
}


free_hash (void * key, void * value, void * user_data)
{
  struct GHashTable * hash;

  hash = value;
  monoeg_g_hash_table_destroy (hash);
}


mono_property_hash_insert (struct MonoPropertyHash * hash, void * object, guint32 property, void * value)
{
  struct GHashTable * D.5159;
  long unsigned int D.5160;
  const void * D.5161;
  void * D.5164;
  struct GHashTable * prop_hash;

  D.5159 = hash->hashes;
  D.5160 = (long unsigned int) property;
  D.5161 = (const void *) D.5160;
  prop_hash = monoeg_g_hash_table_lookup (D.5159, D.5161);
  if (prop_hash == 0B) goto <D.5162>; else goto <D.5163>;
  <D.5162>:
  prop_hash = monoeg_g_hash_table_new (0B, 0B);
  D.5159 = hash->hashes;
  D.5160 = (long unsigned int) property;
  D.5164 = (void *) D.5160;
  monoeg_g_hash_table_insert_replace (D.5159, D.5164, prop_hash, 0);
  <D.5163>:
  monoeg_g_hash_table_insert_replace (prop_hash, object, value, 0);
}


mono_property_hash_remove_object (struct MonoPropertyHash * hash, void * object)
{
  struct GHashTable * D.5165;

  D.5165 = hash->hashes;
  monoeg_g_hash_table_foreach (D.5165, remove_object, object);
}


remove_object (void * key, void * value, void * user_data)
{
  struct GHashTable * prop_hash;

  prop_hash = value;
  monoeg_g_hash_table_remove (prop_hash, user_data);
}


mono_property_hash_lookup (struct MonoPropertyHash * hash, void * object, guint32 property)
{
  struct GHashTable * D.5166;
  long unsigned int D.5167;
  const void * D.5168;
  void * D.5171;
  struct GHashTable * prop_hash;

  D.5166 = hash->hashes;
  D.5167 = (long unsigned int) property;
  D.5168 = (const void *) D.5167;
  prop_hash = monoeg_g_hash_table_lookup (D.5166, D.5168);
  if (prop_hash == 0B) goto <D.5169>; else goto <D.5170>;
  <D.5169>:
  D.5171 = 0B;
  return D.5171;
  <D.5170>:
  D.5171 = monoeg_g_hash_table_lookup (prop_hash, object);
  return D.5171;
}


