monoeg_g_markup_parse_context_new (const struct GMarkupParser * parser, GMarkupParseFlags flags, void * user_data, void (*GDestroyNotify) (void *) user_data_dnotify)
{
  struct GMarkupParseContext * D.5157;
  struct GMarkupParseContext * context;

  context = monoeg_malloc0 (80);
  context->parser = *parser;
  context->user_data = user_data;
  context->user_data_dnotify = user_data_dnotify;
  D.5157 = context;
  return D.5157;
}


monoeg_g_markup_parse_context_free (struct GMarkupParseContext * context)
{
  void (*<Tc2e>) (void *) D.5161;
  void * D.5164;
  struct GString * D.5165;
  void * D.5168;
  struct GSList * D.5169;
  struct GSList * l;

  if (context == 0B) goto <D.5159>; else goto <D.5160>;
  <D.5159>:
  monoeg_g_log (0B, 8, "%s:%d: assertion \'%s\' failed", "gmarkup.c", 90, "context != NULL");
  return;
  <D.5160>:
  D.5161 = context->user_data_dnotify;
  if (D.5161 != 0B) goto <D.5162>; else goto <D.5163>;
  <D.5162>:
  D.5161 = context->user_data_dnotify;
  D.5164 = context->user_data;
  D.5161 (D.5164);
  <D.5163>:
  D.5165 = context->text;
  if (D.5165 != 0B) goto <D.5166>; else goto <D.5167>;
  <D.5166>:
  D.5165 = context->text;
  monoeg_g_string_free (D.5165, 1);
  <D.5167>:
  l = context->level;
  goto <D.5050>;
  <D.5049>:
  D.5168 = l->data;
  monoeg_g_free (D.5168);
  l = l->next;
  <D.5050>:
  if (l != 0B) goto <D.5049>; else goto <D.5051>;
  <D.5051>:
  D.5169 = context->level;
  monoeg_g_slist_free (D.5169);
  monoeg_g_free (context);
}


monoeg_g_markup_parse_context_parse (struct GMarkupParseContext * context, const gchar * text, gssize text_len, struct GError * * error)
{
  gboolean D.5173;
  sizetype text_len.0;
  <unnamed type> D.5179;
  signed char c.1;
  const char * D.5191;
  char D.5193;
  struct GError * D.5197;
  char D.5199;
  int D.5200;
  struct GError * D.5205;
  const char * D.5208;
  char D.5213;
  int D.5216;
  struct GError * D.5221;
  int D.5223;
  struct GError * D.5229;
  int D.5231;
  struct GError * D.5236;
  int D.5237;
  gchar * * names.2;
  gchar * * values.3;
  struct GError * D.5246;
  struct GError * D.5251;
  long int element_end.4;
  long int element_start.5;
  long int D.5254;
  int D.5255;
  long unsigned int D.5256;
  long unsigned int D.5258;
  sizetype D.5259;
  char * D.5260;
  void (*<Te93>) (struct GMarkupParseContext *, const gchar *, const gchar * *, const gchar * *, void *, struct GError * *) D.5263;
  void * D.5266;
  int full_stop.6;
  void (*<Te97>) (struct GMarkupParseContext *, const gchar *, void *, struct GError * *) D.5276;
  struct GSList * D.5286;
  struct GSList * D.5287;
  void (*<Te9b>) (struct GMarkupParseContext *, const gchar *, gsize, void *, struct GError * *) D.5290;
  struct GString * D.5293;
  struct GString * D.5296;
  char * D.5308;
  long unsigned int D.5309;
  struct GError * D.5320;
  struct GSList * D.5328;
  void (*<Tea1>) (struct GMarkupParseContext *, struct GError *, void *) D.5330;
  const char * p;
  const char * end;
  void fail = <<< error >>>;

  if (context == 0B) goto <D.5171>; else goto <D.5172>;
  <D.5171>:
  monoeg_g_log (0B, 8, "%s:%d: assertion \'%s\' failed", "gmarkup.c", 268, "context != NULL");
  D.5173 = 0;
  return D.5173;
  <D.5172>:
  if (text == 0B) goto <D.5174>; else goto <D.5175>;
  <D.5174>:
  monoeg_g_log (0B, 8, "%s:%d: assertion \'%s\' failed", "gmarkup.c", 269, "text != NULL");
  D.5173 = 0;
  return D.5173;
  <D.5175>:
  if (text_len < 0) goto <D.5176>; else goto <D.5177>;
  <D.5176>:
  monoeg_g_log (0B, 8, "%s:%d: assertion \'%s\' failed", "gmarkup.c", 270, "text_len >= 0");
  D.5173 = 0;
  return D.5173;
  <D.5177>:
  text_len.0 = (sizetype) text_len;
  end = text + text_len.0;
  p = text;
  goto <D.5150>;
  <D.5149>:
  {
    char c;

    c = *p;
    D.5179 = context->state;
    switch (D.5179) <default: <D.5329>, case 0: <D.5118>, case 1: <D.5122>, case 2: <D.5140>, case 3: <D.5142>, case 4: <D.5143>, case 5: <D.5141>, case 6: <D.5121>>
    <D.5118>:
    if (c == 32) goto <D.5180>; else goto <D.5182>;
    <D.5182>:
    if (c == 9) goto <D.5180>; else goto <D.5183>;
    <D.5183>:
    if (c == 12) goto <D.5180>; else goto <D.5184>;
    <D.5184>:
    if (c == 10) goto <D.5180>; else goto <D.5185>;
    <D.5185>:
    c.1 = (signed char) c;
    if (c.1 < 0) goto <D.5180>; else goto <D.5181>;
    <D.5180>:
    // predicted unlikely by continue predictor.
    goto <D.5119>;
    <D.5181>:
    if (c == 60) goto <D.5187>; else goto <D.5188>;
    <D.5187>:
    D.5191 = p + 1;
    if (D.5191 < end) goto <D.5192>; else goto <D.5189>;
    <D.5192>:
    D.5191 = p + 1;
    D.5193 = *D.5191;
    if (D.5193 == 63) goto <D.5194>; else goto <D.5189>;
    <D.5194>:
    context->state = 6;
    p = p + 1;
    goto <D.5190>;
    <D.5189>:
    context->state = 1;
    <D.5190>:
    // predicted unlikely by continue predictor.
    goto <D.5119>;
    <D.5188>:
    if (error != 0B) goto <D.5195>; else goto <D.5196>;
    <D.5195>:
    D.5197 = monoeg_g_error_new (1B, 1, "%s", "Expected < to start the document");
    *error = D.5197;
    <D.5196>:
    goto fail;
    <D.5121>:
    <D.5122>:
    {
      const char * element_start;
      const char * element_end;
      char * ename;
      int full_stop;
      int l;
      gchar * * names;
      gchar * * values;

      try
        {
          element_start = p;
          ename = 0B;
          full_stop = 0;
          names = 0B;
          values = 0B;
          goto <D.5131>;
          <D.5130>:
          p = p + 1;
          <D.5131>:
          if (p < end) goto <D.5198>; else goto <D.5132>;
          <D.5198>:
          D.5199 = *p;
          D.5200 = my_isspace (D.5199);
          if (D.5200 != 0) goto <D.5130>; else goto <D.5132>;
          <D.5132>:
          if (p == end) goto <D.5201>; else goto <D.5202>;
          <D.5201>:
          if (error != 0B) goto <D.5203>; else goto <D.5204>;
          <D.5203>:
          D.5205 = monoeg_g_error_new (1B, 1, "%s", "Unfinished element");
          *error = D.5205;
          <D.5204>:
          goto fail;
          <D.5202>:
          D.5199 = *p;
          if (D.5199 == 33) goto <D.5206>; else goto <D.5207>;
          <D.5206>:
          D.5208 = p + 2;
          if (D.5208 < end) goto <D.5209>; else goto <D.5210>;
          <D.5209>:
          D.5191 = p + 1;
          D.5193 = *D.5191;
          if (D.5193 == 45) goto <D.5211>; else goto <D.5212>;
          <D.5211>:
          D.5208 = p + 2;
          D.5213 = *D.5208;
          if (D.5213 == 45) goto <D.5214>; else goto <D.5215>;
          <D.5214>:
          context->state = 5;
          p = p + 2;
          goto <D.5133>;
          <D.5215>:
          <D.5212>:
          <D.5210>:
          <D.5207>:
          D.5199 = *p;
          D.5216 = my_isalpha (D.5199);
          if (D.5216 == 0) goto <D.5217>; else goto <D.5218>;
          <D.5217>:
          if (error != 0B) goto <D.5219>; else goto <D.5220>;
          <D.5219>:
          D.5221 = monoeg_g_error_new (1B, 1, "%s", "Expected an element name");
          *error = D.5221;
          <D.5220>:
          goto fail;
          <D.5218>:
          p = p + 1;
          goto <D.5135>;
          <D.5134>:
          p = p + 1;
          <D.5135>:
          if (p < end) goto <D.5222>; else goto <D.5136>;
          <D.5222>:
          D.5199 = *p;
          D.5223 = my_isalnum (D.5199);
          if (D.5223 != 0) goto <D.5134>; else goto <D.5224>;
          <D.5224>:
          D.5199 = *p;
          if (D.5199 == 46) goto <D.5134>; else goto <D.5136>;
          <D.5136>:
          if (p == end) goto <D.5225>; else goto <D.5226>;
          <D.5225>:
          if (error != 0B) goto <D.5227>; else goto <D.5228>;
          <D.5227>:
          D.5229 = monoeg_g_error_new (1B, 1, "%s", "Expected an element");
          *error = D.5229;
          <D.5228>:
          goto fail;
          <D.5226>:
          element_end = p;
          goto <D.5138>;
          <D.5137>:
          p = p + 1;
          <D.5138>:
          if (p < end) goto <D.5230>; else goto <D.5139>;
          <D.5230>:
          D.5199 = *p;
          D.5231 = my_isspace (D.5199);
          if (D.5231 != 0) goto <D.5137>; else goto <D.5139>;
          <D.5139>:
          if (p == end) goto <D.5232>; else goto <D.5233>;
          <D.5232>:
          if (error != 0B) goto <D.5234>; else goto <D.5235>;
          <D.5234>:
          D.5236 = monoeg_g_error_new (1B, 1, "%s", "Unfinished element");
          *error = D.5236;
          <D.5235>:
          goto fail;
          <D.5233>:
          D.5179 = context->state;
          D.5237 = (int) D.5179;
          p = parse_attributes (p, end, &names, &values, error, &full_stop, D.5237);
          if (p == end) goto <D.5238>; else goto <D.5239>;
          <D.5238>:
          names.2 = names;
          if (names.2 != 0B) goto <D.5241>; else goto <D.5242>;
          <D.5241>:
          names.2 = names;
          monoeg_g_strfreev (names.2);
          values.3 = values;
          monoeg_g_strfreev (values.3);
          <D.5242>:
          if (error != 0B) goto <D.5244>; else goto <D.5245>;
          <D.5244>:
          D.5246 = *error;
          if (D.5246 == 0B) goto <D.5247>; else goto <D.5248>;
          <D.5247>:
          if (error != 0B) goto <D.5249>; else goto <D.5250>;
          <D.5249>:
          D.5251 = monoeg_g_error_new (1B, 1, "%s", "Unfinished sequence");
          *error = D.5251;
          <D.5250>:
          <D.5248>:
          <D.5245>:
          goto fail;
          <D.5239>:
          element_end.4 = (long int) element_end;
          element_start.5 = (long int) element_start;
          D.5254 = element_end.4 - element_start.5;
          l = (int) D.5254;
          D.5255 = l + 1;
          D.5256 = (long unsigned int) D.5255;
          ename = monoeg_malloc (D.5256);
          if (ename == 0B) goto fail; else goto <D.5257>;
          <D.5257>:
          D.5258 = (long unsigned int) l;
          strncpy (ename, element_start, D.5258);
          D.5259 = (sizetype) l;
          D.5260 = ename + D.5259;
          *D.5260 = 0;
          D.5179 = context->state;
          if (D.5179 == 1) goto <D.5261>; else goto <D.5262>;
          <D.5261>:
          D.5263 = context->parser.start_element;
          if (D.5263 != 0B) goto <D.5264>; else goto <D.5265>;
          <D.5264>:
          D.5263 = context->parser.start_element;
          names.2 = names;
          values.3 = values;
          D.5266 = context->user_data;
          D.5263 (context, ename, names.2, values.3, D.5266, error);
          <D.5265>:
          <D.5262>:
          names.2 = names;
          if (names.2 != 0B) goto <D.5267>; else goto <D.5268>;
          <D.5267>:
          names.2 = names;
          monoeg_g_strfreev (names.2);
          values.3 = values;
          monoeg_g_strfreev (values.3);
          <D.5268>:
          if (error != 0B) goto <D.5269>; else goto <D.5270>;
          <D.5269>:
          D.5246 = *error;
          if (D.5246 != 0B) goto <D.5271>; else goto <D.5272>;
          <D.5271>:
          monoeg_g_free (ename);
          goto fail;
          <D.5272>:
          <D.5270>:
          full_stop.6 = full_stop;
          if (full_stop.6 != 0) goto <D.5274>; else goto <D.5275>;
          <D.5274>:
          D.5276 = context->parser.end_element;
          if (D.5276 != 0B) goto <D.5277>; else goto <D.5278>;
          <D.5277>:
          D.5179 = context->state;
          if (D.5179 == 1) goto <D.5279>; else goto <D.5280>;
          <D.5279>:
          D.5276 = context->parser.end_element;
          D.5266 = context->user_data;
          D.5276 (context, ename, D.5266, error);
          if (error != 0B) goto <D.5281>; else goto <D.5282>;
          <D.5281>:
          D.5246 = *error;
          if (D.5246 != 0B) goto <D.5283>; else goto <D.5284>;
          <D.5283>:
          free (ename);
          goto fail;
          <D.5284>:
          <D.5282>:
          <D.5280>:
          <D.5278>:
          monoeg_g_free (ename);
          goto <D.5285>;
          <D.5275>:
          D.5286 = context->level;
          D.5287 = monoeg_g_slist_prepend (D.5286, ename);
          context->level = D.5287;
          <D.5285>:
          context->state = 2;
          goto <D.5133>;
        }
      finally
        {
          full_stop = {CLOBBER};
          names = {CLOBBER};
          values = {CLOBBER};
        }
    }
    <D.5140>:
    if (c == 60) goto <D.5288>; else goto <D.5289>;
    <D.5288>:
    context->state = 3;
    goto <D.5133>;
    <D.5289>:
    D.5290 = context->parser.text;
    if (D.5290 != 0B) goto <D.5291>; else goto <D.5292>;
    <D.5291>:
    D.5293 = context->text;
    if (D.5293 == 0B) goto <D.5294>; else goto <D.5295>;
    <D.5294>:
    D.5296 = monoeg_g_string_new ("");
    context->text = D.5296;
    <D.5295>:
    D.5293 = context->text;
    monoeg_g_string_append_c (D.5293, c);
    <D.5292>:
    goto <D.5133>;
    <D.5141>:
    D.5199 = *p;
    if (D.5199 != 45) goto <D.5133>; else goto <D.5297>;
    <D.5297>:
    D.5208 = p + 2;
    if (D.5208 < end) goto <D.5298>; else goto <D.5299>;
    <D.5298>:
    D.5191 = p + 1;
    D.5193 = *D.5191;
    if (D.5193 == 45) goto <D.5300>; else goto <D.5301>;
    <D.5300>:
    D.5208 = p + 2;
    D.5213 = *D.5208;
    if (D.5213 == 62) goto <D.5302>; else goto <D.5303>;
    <D.5302>:
    context->state = 2;
    p = p + 2;
    goto <D.5133>;
    <D.5303>:
    <D.5301>:
    <D.5299>:
    goto <D.5133>;
    <D.5142>:
    D.5290 = context->parser.text;
    if (D.5290 != 0B) goto <D.5304>; else goto <D.5305>;
    <D.5304>:
    D.5293 = context->text;
    if (D.5293 != 0B) goto <D.5306>; else goto <D.5307>;
    <D.5306>:
    D.5290 = context->parser.text;
    D.5293 = context->text;
    D.5308 = D.5293->str;
    D.5293 = context->text;
    D.5309 = D.5293->len;
    D.5266 = context->user_data;
    D.5290 (context, D.5308, D.5309, D.5266, error);
    if (error != 0B) goto <D.5310>; else goto <D.5311>;
    <D.5310>:
    D.5246 = *error;
    if (D.5246 != 0B) goto fail; else goto <D.5312>;
    <D.5312>:
    <D.5311>:
    <D.5307>:
    <D.5305>:
    if (c == 47) goto <D.5313>; else goto <D.5314>;
    <D.5313>:
    context->state = 4;
    goto <D.5315>;
    <D.5314>:
    p = p + 18446744073709551615;
    context->state = 1;
    <D.5315>:
    goto <D.5133>;
    <D.5143>:
    {
      struct GSList * current;
      char * text;

      current = context->level;
      D.5286 = context->level;
      if (D.5286 == 0B) goto <D.5316>; else goto <D.5317>;
      <D.5316>:
      if (error != 0B) goto <D.5318>; else goto <D.5319>;
      <D.5318>:
      D.5320 = monoeg_g_error_new (1B, 1, "%s", "Too many closing tags, not enough open tags");
      *error = D.5320;
      <D.5319>:
      goto fail;
      <D.5317>:
      text = current->data;
      D.5276 = context->parser.end_element;
      if (D.5276 != 0B) goto <D.5321>; else goto <D.5322>;
      <D.5321>:
      D.5276 = context->parser.end_element;
      D.5266 = context->user_data;
      D.5276 (context, text, D.5266, error);
      if (error != 0B) goto <D.5323>; else goto <D.5324>;
      <D.5323>:
      D.5246 = *error;
      if (D.5246 != 0B) goto <D.5325>; else goto <D.5326>;
      <D.5325>:
      monoeg_g_free (text);
      goto fail;
      <D.5326>:
      <D.5324>:
      <D.5322>:
      monoeg_g_free (text);
      goto <D.5147>;
      <D.5146>:
      p = p + 1;
      <D.5147>:
      if (p < end) goto <D.5327>; else goto <D.5148>;
      <D.5327>:
      D.5199 = *p;
      if (D.5199 != 62) goto <D.5146>; else goto <D.5148>;
      <D.5148>:
      D.5286 = context->level;
      D.5328 = D.5286->next;
      context->level = D.5328;
      monoeg_g_slist_free_1 (current);
      context->state = 2;
      goto <D.5133>;
    }
    <D.5329>:
    <D.5133>:
  }
  <D.5119>:
  p = p + 1;
  <D.5150>:
  if (p < end) goto <D.5149>; else goto <D.5151>;
  <D.5151>:
  D.5173 = 1;
  return D.5173;
  fail:
  D.5330 = context->parser.error;
  if (D.5330 != 0B) goto <D.5331>; else goto <D.5332>;
  <D.5331>:
  if (error != 0B) goto <D.5333>; else goto <D.5334>;
  <D.5333>:
  D.5246 = *error;
  if (D.5246 != 0B) goto <D.5335>; else goto <D.5336>;
  <D.5335>:
  D.5330 = context->parser.error;
  D.5246 = *error;
  D.5266 = context->user_data;
  D.5330 (context, D.5246, D.5266);
  <D.5336>:
  <D.5334>:
  <D.5332>:
  destroy_parse_state (context);
  D.5173 = 0;
  return D.5173;
}


my_isalpha (char c)
{
  char D.5342;
  char D.5344;
  gboolean D.5345;

  D.5342 = c + 159;
  if (D.5342 <= 25) goto <D.5340>; else goto <D.5343>;
  <D.5343>:
  D.5344 = c + 191;
  if (D.5344 <= 25) goto <D.5340>; else goto <D.5341>;
  <D.5340>:
  D.5345 = 1;
  return D.5345;
  <D.5341>:
  D.5345 = 0;
  return D.5345;
}


my_isalnum (char c)
{
  char D.5349;
  char D.5351;
  gboolean D.5352;
  char D.5353;

  D.5349 = c + 159;
  if (D.5349 <= 25) goto <D.5347>; else goto <D.5350>;
  <D.5350>:
  D.5351 = c + 191;
  if (D.5351 <= 25) goto <D.5347>; else goto <D.5348>;
  <D.5347>:
  D.5352 = 1;
  return D.5352;
  <D.5348>:
  D.5353 = c + 208;
  if (D.5353 <= 9) goto <D.5354>; else goto <D.5355>;
  <D.5354>:
  D.5352 = 1;
  return D.5352;
  <D.5355>:
  D.5352 = 0;
  return D.5352;
}


my_isspace (char c)
{
  gboolean D.5363;

  if (c == 32) goto <D.5357>; else goto <D.5359>;
  <D.5359>:
  if (c == 9) goto <D.5357>; else goto <D.5360>;
  <D.5360>:
  if (c == 13) goto <D.5357>; else goto <D.5361>;
  <D.5361>:
  if (c == 10) goto <D.5357>; else goto <D.5362>;
  <D.5362>:
  if (c == 11) goto <D.5357>; else goto <D.5358>;
  <D.5357>:
  D.5363 = 1;
  return D.5363;
  <D.5358>:
  D.5363 = 0;
  return D.5363;
}


parse_attributes (const char * p, const char * end, char * * * names, char * * * values, struct GError * * error, int * full_stop, int state)
{
  const char * D.5367;
  char D.5368;
  const char * D.5375;
  char D.5378;
  char * name.7;
  struct GError * D.5394;
  char * * D.5399;
  int D.5400;
  long unsigned int D.5401;
  long unsigned int D.5402;
  void * D.5403;
  char * * D.5404;
  void * D.5405;
  long unsigned int D.5406;
  long unsigned int D.5407;
  sizetype D.5408;
  char * * D.5409;
  char * * D.5410;
  char * value.8;
  char * * D.5412;
  char * * D.5413;
  int nnames;

  nnames = 0;
  <D.5101>:
  p = skip_space (p, end);
  if (p == end) goto <D.5365>; else goto <D.5366>;
  <D.5365>:
  D.5367 = end;
  return D.5367;
  <D.5366>:
  D.5368 = *p;
  if (D.5368 == 62) goto <D.5369>; else goto <D.5370>;
  <D.5369>:
  *full_stop = 0;
  D.5367 = p;
  return D.5367;
  <D.5370>:
  if (state == 6) goto <D.5371>; else goto <D.5372>;
  <D.5371>:
  D.5368 = *p;
  if (D.5368 == 63) goto <D.5373>; else goto <D.5374>;
  <D.5373>:
  D.5375 = p + 1;
  if (D.5375 < end) goto <D.5376>; else goto <D.5377>;
  <D.5376>:
  D.5375 = p + 1;
  D.5378 = *D.5375;
  if (D.5378 == 62) goto <D.5379>; else goto <D.5380>;
  <D.5379>:
  *full_stop = 0;
  D.5367 = p + 1;
  return D.5367;
  <D.5380>:
  <D.5377>:
  <D.5374>:
  <D.5372>:
  D.5368 = *p;
  if (D.5368 == 47) goto <D.5382>; else goto <D.5381>;
  <D.5382>:
  D.5375 = p + 1;
  if (D.5375 < end) goto <D.5383>; else goto <D.5381>;
  <D.5383>:
  D.5375 = p + 1;
  D.5378 = *D.5375;
  if (D.5378 == 62) goto <D.5384>; else goto <D.5381>;
  <D.5384>:
  *full_stop = 1;
  D.5367 = p + 1;
  return D.5367;
  <D.5381>:
  {
    char * name;
    char * value;

    try
      {
        p = parse_name (p, end, &name);
        if (p == end) goto <D.5385>; else goto <D.5386>;
        <D.5385>:
        D.5367 = p;
        return D.5367;
        <D.5386>:
        p = skip_space (p, end);
        if (p == end) goto <D.5387>; else goto <D.5388>;
        <D.5387>:
        name.7 = name;
        monoeg_g_free (name.7);
        D.5367 = p;
        return D.5367;
        <D.5388>:
        D.5368 = *p;
        if (D.5368 != 61) goto <D.5390>; else goto <D.5391>;
        <D.5390>:
        if (error != 0B) goto <D.5392>; else goto <D.5393>;
        <D.5392>:
        name.7 = name;
        D.5394 = monoeg_g_error_new (1B, 1, "Expected an = after the attribute name `%s\'", name.7);
        *error = D.5394;
        <D.5393>:
        name.7 = name;
        monoeg_g_free (name.7);
        D.5367 = end;
        return D.5367;
        <D.5391>:
        p = p + 1;
        p = skip_space (p, end);
        if (p == end) goto <D.5395>; else goto <D.5396>;
        <D.5395>:
        name.7 = name;
        monoeg_g_free (name.7);
        D.5367 = end;
        return D.5367;
        <D.5396>:
        p = parse_value (p, end, &value, error);
        if (p == end) goto <D.5397>; else goto <D.5398>;
        <D.5397>:
        name.7 = name;
        monoeg_g_free (name.7);
        D.5367 = p;
        return D.5367;
        <D.5398>:
        nnames = nnames + 1;
        D.5399 = *names;
        D.5400 = nnames + 1;
        D.5401 = (long unsigned int) D.5400;
        D.5402 = D.5401 * 8;
        D.5403 = monoeg_realloc (D.5399, D.5402);
        *names = D.5403;
        D.5404 = *values;
        D.5400 = nnames + 1;
        D.5401 = (long unsigned int) D.5400;
        D.5402 = D.5401 * 8;
        D.5405 = monoeg_realloc (D.5404, D.5402);
        *values = D.5405;
        D.5399 = *names;
        D.5406 = (long unsigned int) nnames;
        D.5407 = D.5406 * 8;
        D.5408 = D.5407 + 18446744073709551608;
        D.5409 = D.5399 + D.5408;
        name.7 = name;
        *D.5409 = name.7;
        D.5404 = *values;
        D.5406 = (long unsigned int) nnames;
        D.5407 = D.5406 * 8;
        D.5408 = D.5407 + 18446744073709551608;
        D.5410 = D.5404 + D.5408;
        value.8 = value;
        *D.5410 = value.8;
        D.5399 = *names;
        D.5406 = (long unsigned int) nnames;
        D.5407 = D.5406 * 8;
        D.5412 = D.5399 + D.5407;
        *D.5412 = 0B;
        D.5404 = *values;
        D.5406 = (long unsigned int) nnames;
        D.5407 = D.5406 * 8;
        D.5413 = D.5404 + D.5407;
        *D.5413 = 0B;
      }
    finally
      {
        name = {CLOBBER};
        value = {CLOBBER};
      }
  }
  goto <D.5101>;
}


parse_name (const char * p, const char * end, char * * value)
{
  char D.5418;
  int D.5419;
  const char * D.5422;
  long int p.9;
  long int start.10;
  long int D.5425;
  int D.5426;
  long unsigned int D.5427;
  void * D.5428;
  char * D.5429;
  long unsigned int D.5432;
  sizetype D.5433;
  char * D.5434;
  const char * start;
  int l;

  start = p;
  goto <D.5087>;
  <D.5086>:
  p = p + 1;
  <D.5087>:
  if (p < end) goto <D.5417>; else goto <D.5088>;
  <D.5417>:
  D.5418 = *p;
  D.5419 = my_isalnum (D.5418);
  if (D.5419 != 0) goto <D.5086>; else goto <D.5088>;
  <D.5088>:
  if (p == end) goto <D.5420>; else goto <D.5421>;
  <D.5420>:
  D.5422 = end;
  return D.5422;
  <D.5421>:
  p.9 = (long int) p;
  start.10 = (long int) start;
  D.5425 = p.9 - start.10;
  l = (int) D.5425;
  D.5426 = l + 1;
  D.5427 = (long unsigned int) D.5426;
  D.5428 = monoeg_malloc (D.5427);
  *value = D.5428;
  D.5429 = *value;
  if (D.5429 == 0B) goto <D.5430>; else goto <D.5431>;
  <D.5430>:
  D.5422 = end;
  return D.5422;
  <D.5431>:
  D.5429 = *value;
  D.5432 = (long unsigned int) l;
  strncpy (D.5429, start, D.5432);
  D.5429 = *value;
  D.5433 = (sizetype) l;
  D.5434 = D.5429 + D.5433;
  *D.5434 = 0;
  D.5422 = p;
  return D.5422;
}


skip_space (const char * p, const char * end)
{
  char D.5437;
  int D.5438;
  const char * D.5439;

  goto <D.5066>;
  <D.5065>:
  p = p + 1;
  <D.5066>:
  if (p < end) goto <D.5436>; else goto <D.5067>;
  <D.5436>:
  D.5437 = *p;
  D.5438 = my_isspace (D.5437);
  if (D.5438 != 0) goto <D.5065>; else goto <D.5067>;
  <D.5067>:
  D.5439 = p;
  return D.5439;
}


parse_value (const char * p, const char * end, char * * value, struct GError * * error)
{
  char D.5441;
  struct GError * D.5446;
  const char * D.5447;
  long int p.11;
  long int start.12;
  long int D.5453;
  int D.5454;
  long unsigned int D.5455;
  void * D.5456;
  char * D.5457;
  long unsigned int D.5460;
  sizetype D.5461;
  char * D.5462;
  const char * start;
  int l;

  D.5441 = *p;
  if (D.5441 != 34) goto <D.5442>; else goto <D.5443>;
  <D.5442>:
  if (error != 0B) goto <D.5444>; else goto <D.5445>;
  <D.5444>:
  D.5446 = monoeg_g_error_new (1B, 1, "%s", "Expected the attribute value to start with a quote");
  *error = D.5446;
  <D.5445>:
  D.5447 = end;
  return D.5447;
  <D.5443>:
  p = p + 1;
  start = p;
  goto <D.5077>;
  <D.5076>:
  p = p + 1;
  <D.5077>:
  if (p < end) goto <D.5448>; else goto <D.5078>;
  <D.5448>:
  D.5441 = *p;
  if (D.5441 != 34) goto <D.5076>; else goto <D.5078>;
  <D.5078>:
  if (p == end) goto <D.5449>; else goto <D.5450>;
  <D.5449>:
  D.5447 = end;
  return D.5447;
  <D.5450>:
  p.11 = (long int) p;
  start.12 = (long int) start;
  D.5453 = p.11 - start.12;
  l = (int) D.5453;
  p = p + 1;
  D.5454 = l + 1;
  D.5455 = (long unsigned int) D.5454;
  D.5456 = monoeg_malloc (D.5455);
  *value = D.5456;
  D.5457 = *value;
  if (D.5457 == 0B) goto <D.5458>; else goto <D.5459>;
  <D.5458>:
  D.5447 = end;
  return D.5447;
  <D.5459>:
  D.5457 = *value;
  D.5460 = (long unsigned int) l;
  strncpy (D.5457, start, D.5460);
  D.5457 = *value;
  D.5461 = (sizetype) l;
  D.5462 = D.5457 + D.5461;
  *D.5462 = 0;
  D.5447 = p;
  return D.5447;
}


__attribute__((__artificial__, __gnu_inline__, __always_inline__, __nothrow__, __leaf__))
strncpy (char * restrict __dest, const char * restrict __src, size_t __len)
{
  char * D.5464;
  long unsigned int D.5465;

  D.5465 = __builtin_object_size (__dest, 1);
  D.5464 = __builtin___strncpy_chk (__dest, __src, __len, D.5465);
  return D.5464;
}


destroy_parse_state (struct GMarkupParseContext * context)
{
  void * D.5467;
  struct GSList * D.5468;
  struct GString * D.5469;
  struct GSList * p;

  p = context->level;
  goto <D.5107>;
  <D.5106>:
  D.5467 = p->data;
  monoeg_g_free (D.5467);
  p = p->next;
  <D.5107>:
  if (p != 0B) goto <D.5106>; else goto <D.5108>;
  <D.5108>:
  D.5468 = context->level;
  monoeg_g_slist_free (D.5468);
  D.5469 = context->text;
  if (D.5469 != 0B) goto <D.5470>; else goto <D.5471>;
  <D.5470>:
  D.5469 = context->text;
  monoeg_g_string_free (D.5469, 1);
  <D.5471>:
  context->text = 0B;
  context->level = 0B;
}


monoeg_g_markup_parse_context_end_parse (struct GMarkupParseContext * context, struct GError * * error)
{
  gboolean D.5474;

  if (context == 0B) goto <D.5472>; else goto <D.5473>;
  <D.5472>:
  monoeg_g_log (0B, 8, "%s:%d: assertion \'%s\' failed", "gmarkup.c", 466, "context != NULL");
  D.5474 = 0;
  return D.5474;
  <D.5473>:
  D.5474 = 1;
  return D.5474;
}


