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

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


monoeg_g_markup_parse_context_free (struct GMarkupParseContext * context)
{
  void (*<Tbc1>) (void *) D.5058;
  void * D.5061;
  struct GString * D.5062;
  void * D.5065;
  struct GSList * D.5066;
  struct GSList * l;

  if (context == 0B) goto <D.5056>; else goto <D.5057>;
  <D.5056>:
  monoeg_g_log (0B, 8, "%s:%d: assertion \'%s\' failed", "gmarkup.c", 90, "context != NULL");
  return;
  <D.5057>:
  D.5058 = context->user_data_dnotify;
  if (D.5058 != 0B) goto <D.5059>; else goto <D.5060>;
  <D.5059>:
  D.5058 = context->user_data_dnotify;
  D.5061 = context->user_data;
  D.5058 (D.5061);
  <D.5060>:
  D.5062 = context->text;
  if (D.5062 != 0B) goto <D.5063>; else goto <D.5064>;
  <D.5063>:
  D.5062 = context->text;
  monoeg_g_string_free (D.5062, 1);
  <D.5064>:
  l = context->level;
  goto <D.4947>;
  <D.4946>:
  D.5065 = l->data;
  monoeg_g_free (D.5065);
  l = l->next;
  <D.4947>:
  if (l != 0B) goto <D.4946>; else goto <D.4948>;
  <D.4948>:
  D.5066 = context->level;
  monoeg_g_slist_free (D.5066);
  monoeg_g_free (context);
}


monoeg_g_markup_parse_context_parse (struct GMarkupParseContext * context, const gchar * text, gssize text_len, struct GError * * error)
{
  gboolean D.5070;
  sizetype text_len.0;
  <unnamed type> D.5076;
  _Bool D.5079;
  _Bool D.5080;
  _Bool D.5081;
  _Bool D.5083;
  _Bool D.5084;
  _Bool D.5085;
  const char * D.5091;
  char D.5093;
  struct GError * D.5097;
  char D.5099;
  int D.5100;
  int D.5101;
  struct GError * D.5106;
  const char * D.5109;
  char D.5114;
  int D.5117;
  struct GError * D.5122;
  int D.5124;
  struct GError * D.5130;
  int D.5132;
  struct GError * D.5137;
  int D.5138;
  gchar * * names.1;
  gchar * * values.2;
  struct GError * D.5147;
  struct GError * D.5152;
  long int element_end.3;
  long int element_start.4;
  long int D.5155;
  int D.5156;
  long unsigned int D.5157;
  long unsigned int D.5159;
  sizetype D.5160;
  char * D.5161;
  void (*<Te2a>) (struct GMarkupParseContext *, const gchar *, const gchar * *, const gchar * *, void *, struct GError * *) D.5164;
  void * D.5167;
  int full_stop.5;
  void (*<Te2e>) (struct GMarkupParseContext *, const gchar *, void *, struct GError * *) D.5177;
  struct GSList * D.5187;
  struct GSList * D.5188;
  void (*<Te32>) (struct GMarkupParseContext *, const gchar *, gsize, void *, struct GError * *) D.5191;
  struct GString * D.5194;
  struct GString * D.5197;
  int D.5198;
  long unsigned int D.5210;
  char * D.5211;
  struct GError * D.5222;
  struct GSList * D.5230;
  void (*<Te38>) (struct GMarkupParseContext *, struct GError *, void *) D.5232;
  const char * p;
  const char * end;
  void fail = <<< error >>>;

  if (context == 0B) goto <D.5068>; else goto <D.5069>;
  <D.5068>:
  monoeg_g_log (0B, 8, "%s:%d: assertion \'%s\' failed", "gmarkup.c", 268, "context != NULL");
  D.5070 = 0;
  return D.5070;
  <D.5069>:
  if (text == 0B) goto <D.5071>; else goto <D.5072>;
  <D.5071>:
  monoeg_g_log (0B, 8, "%s:%d: assertion \'%s\' failed", "gmarkup.c", 269, "text != NULL");
  D.5070 = 0;
  return D.5070;
  <D.5072>:
  if (text_len < 0) goto <D.5073>; else goto <D.5074>;
  <D.5073>:
  monoeg_g_log (0B, 8, "%s:%d: assertion \'%s\' failed", "gmarkup.c", 270, "text_len >= 0");
  D.5070 = 0;
  return D.5070;
  <D.5074>:
  text_len.0 = (sizetype) text_len;
  end = text + text_len.0;
  p = text;
  goto <D.5047>;
  <D.5046>:
  {
    char c;

    c = *p;
    D.5076 = context->state;
    switch (D.5076) <default: <D.5231>, case 0: <D.5015>, case 1: <D.5019>, case 2: <D.5037>, case 3: <D.5039>, case 4: <D.5040>, case 5: <D.5038>, case 6: <D.5018>>
    <D.5015>:
    D.5079 = c == 32;
    D.5080 = c == 9;
    D.5081 = D.5079 | D.5080;
    if (D.5081 != 0) goto <D.5077>; else goto <D.5082>;
    <D.5082>:
    D.5083 = c == 12;
    D.5084 = c == 10;
    D.5085 = D.5083 | D.5084;
    if (D.5085 != 0) goto <D.5077>; else goto <D.5086>;
    <D.5086>:
    if (c < 0) goto <D.5077>; else goto <D.5078>;
    <D.5077>:
    // predicted unlikely by continue predictor.
    goto <D.5016>;
    <D.5078>:
    if (c == 60) goto <D.5087>; else goto <D.5088>;
    <D.5087>:
    D.5091 = p + 1;
    if (D.5091 < end) goto <D.5092>; else goto <D.5089>;
    <D.5092>:
    D.5091 = p + 1;
    D.5093 = *D.5091;
    if (D.5093 == 63) goto <D.5094>; else goto <D.5089>;
    <D.5094>:
    context->state = 6;
    p = p + 1;
    goto <D.5090>;
    <D.5089>:
    context->state = 1;
    <D.5090>:
    // predicted unlikely by continue predictor.
    goto <D.5016>;
    <D.5088>:
    if (error != 0B) goto <D.5095>; else goto <D.5096>;
    <D.5095>:
    D.5097 = monoeg_g_error_new (1B, 1, "%s", "Expected < to start the document");
    *error = D.5097;
    <D.5096>:
    goto fail;
    <D.5018>:
    <D.5019>:
    {
      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.5028>;
          <D.5027>:
          p = p + 1;
          <D.5028>:
          if (p < end) goto <D.5098>; else goto <D.5029>;
          <D.5098>:
          D.5099 = *p;
          D.5100 = (int) D.5099;
          D.5101 = my_isspace (D.5100);
          if (D.5101 != 0) goto <D.5027>; else goto <D.5029>;
          <D.5029>:
          if (p == end) goto <D.5102>; else goto <D.5103>;
          <D.5102>:
          if (error != 0B) goto <D.5104>; else goto <D.5105>;
          <D.5104>:
          D.5106 = monoeg_g_error_new (1B, 1, "%s", "Unfinished element");
          *error = D.5106;
          <D.5105>:
          goto fail;
          <D.5103>:
          D.5099 = *p;
          if (D.5099 == 33) goto <D.5107>; else goto <D.5108>;
          <D.5107>:
          D.5109 = p + 2;
          if (D.5109 < end) goto <D.5110>; else goto <D.5111>;
          <D.5110>:
          D.5091 = p + 1;
          D.5093 = *D.5091;
          if (D.5093 == 45) goto <D.5112>; else goto <D.5113>;
          <D.5112>:
          D.5109 = p + 2;
          D.5114 = *D.5109;
          if (D.5114 == 45) goto <D.5115>; else goto <D.5116>;
          <D.5115>:
          context->state = 5;
          p = p + 2;
          goto <D.5030>;
          <D.5116>:
          <D.5113>:
          <D.5111>:
          <D.5108>:
          D.5099 = *p;
          D.5100 = (int) D.5099;
          D.5117 = my_isalpha (D.5100);
          if (D.5117 == 0) goto <D.5118>; else goto <D.5119>;
          <D.5118>:
          if (error != 0B) goto <D.5120>; else goto <D.5121>;
          <D.5120>:
          D.5122 = monoeg_g_error_new (1B, 1, "%s", "Expected an element name");
          *error = D.5122;
          <D.5121>:
          goto fail;
          <D.5119>:
          p = p + 1;
          goto <D.5032>;
          <D.5031>:
          p = p + 1;
          <D.5032>:
          if (p < end) goto <D.5123>; else goto <D.5033>;
          <D.5123>:
          D.5099 = *p;
          D.5100 = (int) D.5099;
          D.5124 = my_isalnum (D.5100);
          if (D.5124 != 0) goto <D.5031>; else goto <D.5125>;
          <D.5125>:
          D.5099 = *p;
          if (D.5099 == 46) goto <D.5031>; else goto <D.5033>;
          <D.5033>:
          if (p == end) goto <D.5126>; else goto <D.5127>;
          <D.5126>:
          if (error != 0B) goto <D.5128>; else goto <D.5129>;
          <D.5128>:
          D.5130 = monoeg_g_error_new (1B, 1, "%s", "Expected an element");
          *error = D.5130;
          <D.5129>:
          goto fail;
          <D.5127>:
          element_end = p;
          goto <D.5035>;
          <D.5034>:
          p = p + 1;
          <D.5035>:
          if (p < end) goto <D.5131>; else goto <D.5036>;
          <D.5131>:
          D.5099 = *p;
          D.5100 = (int) D.5099;
          D.5132 = my_isspace (D.5100);
          if (D.5132 != 0) goto <D.5034>; else goto <D.5036>;
          <D.5036>:
          if (p == end) goto <D.5133>; else goto <D.5134>;
          <D.5133>:
          if (error != 0B) goto <D.5135>; else goto <D.5136>;
          <D.5135>:
          D.5137 = monoeg_g_error_new (1B, 1, "%s", "Unfinished element");
          *error = D.5137;
          <D.5136>:
          goto fail;
          <D.5134>:
          D.5076 = context->state;
          D.5138 = (int) D.5076;
          p = parse_attributes (p, end, &names, &values, error, &full_stop, D.5138);
          if (p == end) goto <D.5139>; else goto <D.5140>;
          <D.5139>:
          names.1 = names;
          if (names.1 != 0B) goto <D.5142>; else goto <D.5143>;
          <D.5142>:
          names.1 = names;
          monoeg_g_strfreev (names.1);
          values.2 = values;
          monoeg_g_strfreev (values.2);
          <D.5143>:
          if (error != 0B) goto <D.5145>; else goto <D.5146>;
          <D.5145>:
          D.5147 = *error;
          if (D.5147 == 0B) goto <D.5148>; else goto <D.5149>;
          <D.5148>:
          if (error != 0B) goto <D.5150>; else goto <D.5151>;
          <D.5150>:
          D.5152 = monoeg_g_error_new (1B, 1, "%s", "Unfinished sequence");
          *error = D.5152;
          <D.5151>:
          <D.5149>:
          <D.5146>:
          goto fail;
          <D.5140>:
          element_end.3 = (long int) element_end;
          element_start.4 = (long int) element_start;
          D.5155 = element_end.3 - element_start.4;
          l = (int) D.5155;
          D.5156 = l + 1;
          D.5157 = (long unsigned int) D.5156;
          ename = monoeg_malloc (D.5157);
          if (ename == 0B) goto fail; else goto <D.5158>;
          <D.5158>:
          D.5159 = (long unsigned int) l;
          strncpy (ename, element_start, D.5159);
          D.5160 = (sizetype) l;
          D.5161 = ename + D.5160;
          *D.5161 = 0;
          D.5076 = context->state;
          if (D.5076 == 1) goto <D.5162>; else goto <D.5163>;
          <D.5162>:
          D.5164 = context->parser.start_element;
          if (D.5164 != 0B) goto <D.5165>; else goto <D.5166>;
          <D.5165>:
          D.5164 = context->parser.start_element;
          D.5167 = context->user_data;
          values.2 = values;
          names.1 = names;
          D.5164 (context, ename, names.1, values.2, D.5167, error);
          <D.5166>:
          <D.5163>:
          names.1 = names;
          if (names.1 != 0B) goto <D.5168>; else goto <D.5169>;
          <D.5168>:
          names.1 = names;
          monoeg_g_strfreev (names.1);
          values.2 = values;
          monoeg_g_strfreev (values.2);
          <D.5169>:
          if (error != 0B) goto <D.5170>; else goto <D.5171>;
          <D.5170>:
          D.5147 = *error;
          if (D.5147 != 0B) goto <D.5172>; else goto <D.5173>;
          <D.5172>:
          monoeg_g_free (ename);
          goto fail;
          <D.5173>:
          <D.5171>:
          full_stop.5 = full_stop;
          if (full_stop.5 != 0) goto <D.5175>; else goto <D.5176>;
          <D.5175>:
          D.5177 = context->parser.end_element;
          if (D.5177 != 0B) goto <D.5178>; else goto <D.5179>;
          <D.5178>:
          D.5076 = context->state;
          if (D.5076 == 1) goto <D.5180>; else goto <D.5181>;
          <D.5180>:
          D.5177 = context->parser.end_element;
          D.5167 = context->user_data;
          D.5177 (context, ename, D.5167, error);
          if (error != 0B) goto <D.5182>; else goto <D.5183>;
          <D.5182>:
          D.5147 = *error;
          if (D.5147 != 0B) goto <D.5184>; else goto <D.5185>;
          <D.5184>:
          free (ename);
          goto fail;
          <D.5185>:
          <D.5183>:
          <D.5181>:
          <D.5179>:
          monoeg_g_free (ename);
          goto <D.5186>;
          <D.5176>:
          D.5187 = context->level;
          D.5188 = monoeg_g_slist_prepend (D.5187, ename);
          context->level = D.5188;
          <D.5186>:
          context->state = 2;
          goto <D.5030>;
        }
      finally
        {
          full_stop = {CLOBBER};
          names = {CLOBBER};
          values = {CLOBBER};
        }
    }
    <D.5037>:
    if (c == 60) goto <D.5189>; else goto <D.5190>;
    <D.5189>:
    context->state = 3;
    goto <D.5030>;
    <D.5190>:
    D.5191 = context->parser.text;
    if (D.5191 != 0B) goto <D.5192>; else goto <D.5193>;
    <D.5192>:
    D.5194 = context->text;
    if (D.5194 == 0B) goto <D.5195>; else goto <D.5196>;
    <D.5195>:
    D.5197 = monoeg_g_string_new ("");
    context->text = D.5197;
    <D.5196>:
    D.5198 = (int) c;
    D.5194 = context->text;
    monoeg_g_string_append_c (D.5194, D.5198);
    <D.5193>:
    goto <D.5030>;
    <D.5038>:
    D.5099 = *p;
    if (D.5099 != 45) goto <D.5030>; else goto <D.5199>;
    <D.5199>:
    D.5109 = p + 2;
    if (D.5109 < end) goto <D.5200>; else goto <D.5201>;
    <D.5200>:
    D.5091 = p + 1;
    D.5093 = *D.5091;
    if (D.5093 == 45) goto <D.5202>; else goto <D.5203>;
    <D.5202>:
    D.5109 = p + 2;
    D.5114 = *D.5109;
    if (D.5114 == 62) goto <D.5204>; else goto <D.5205>;
    <D.5204>:
    context->state = 2;
    p = p + 2;
    goto <D.5030>;
    <D.5205>:
    <D.5203>:
    <D.5201>:
    goto <D.5030>;
    <D.5039>:
    D.5191 = context->parser.text;
    if (D.5191 != 0B) goto <D.5206>; else goto <D.5207>;
    <D.5206>:
    D.5194 = context->text;
    if (D.5194 != 0B) goto <D.5208>; else goto <D.5209>;
    <D.5208>:
    D.5191 = context->parser.text;
    D.5167 = context->user_data;
    D.5194 = context->text;
    D.5210 = D.5194->len;
    D.5194 = context->text;
    D.5211 = D.5194->str;
    D.5191 (context, D.5211, D.5210, D.5167, error);
    if (error != 0B) goto <D.5212>; else goto <D.5213>;
    <D.5212>:
    D.5147 = *error;
    if (D.5147 != 0B) goto fail; else goto <D.5214>;
    <D.5214>:
    <D.5213>:
    <D.5209>:
    <D.5207>:
    if (c == 47) goto <D.5215>; else goto <D.5216>;
    <D.5215>:
    context->state = 4;
    goto <D.5217>;
    <D.5216>:
    p = p + 18446744073709551615;
    context->state = 1;
    <D.5217>:
    goto <D.5030>;
    <D.5040>:
    {
      struct GSList * current;
      char * text;

      current = context->level;
      D.5187 = context->level;
      if (D.5187 == 0B) goto <D.5218>; else goto <D.5219>;
      <D.5218>:
      if (error != 0B) goto <D.5220>; else goto <D.5221>;
      <D.5220>:
      D.5222 = monoeg_g_error_new (1B, 1, "%s", "Too many closing tags, not enough open tags");
      *error = D.5222;
      <D.5221>:
      goto fail;
      <D.5219>:
      text = current->data;
      D.5177 = context->parser.end_element;
      if (D.5177 != 0B) goto <D.5223>; else goto <D.5224>;
      <D.5223>:
      D.5177 = context->parser.end_element;
      D.5167 = context->user_data;
      D.5177 (context, text, D.5167, error);
      if (error != 0B) goto <D.5225>; else goto <D.5226>;
      <D.5225>:
      D.5147 = *error;
      if (D.5147 != 0B) goto <D.5227>; else goto <D.5228>;
      <D.5227>:
      monoeg_g_free (text);
      goto fail;
      <D.5228>:
      <D.5226>:
      <D.5224>:
      monoeg_g_free (text);
      goto <D.5044>;
      <D.5043>:
      p = p + 1;
      <D.5044>:
      if (p < end) goto <D.5229>; else goto <D.5045>;
      <D.5229>:
      D.5099 = *p;
      if (D.5099 != 62) goto <D.5043>; else goto <D.5045>;
      <D.5045>:
      D.5187 = context->level;
      D.5230 = D.5187->next;
      context->level = D.5230;
      monoeg_g_slist_free_1 (current);
      context->state = 2;
      goto <D.5030>;
    }
    <D.5231>:
    <D.5030>:
  }
  <D.5016>:
  p = p + 1;
  <D.5047>:
  if (p < end) goto <D.5046>; else goto <D.5048>;
  <D.5048>:
  D.5070 = 1;
  return D.5070;
  fail:
  D.5232 = context->parser.error;
  if (D.5232 != 0B) goto <D.5233>; else goto <D.5234>;
  <D.5233>:
  if (error != 0B) goto <D.5235>; else goto <D.5236>;
  <D.5235>:
  D.5147 = *error;
  if (D.5147 != 0B) goto <D.5237>; else goto <D.5238>;
  <D.5237>:
  D.5232 = context->parser.error;
  D.5167 = context->user_data;
  D.5147 = *error;
  D.5232 (context, D.5147, D.5167);
  <D.5238>:
  <D.5236>:
  <D.5234>:
  destroy_parse_state (context);
  D.5070 = 0;
  return D.5070;
}


my_isalpha (char c)
{
  unsigned char c.6;
  unsigned char D.5243;
  _Bool D.5244;
  unsigned char D.5245;
  _Bool D.5246;
  _Bool D.5247;
  gboolean D.5250;

  c.6 = (unsigned char) c;
  D.5243 = c.6 + 159;
  D.5244 = D.5243 <= 25;
  c.6 = (unsigned char) c;
  D.5245 = c.6 + 191;
  D.5246 = D.5245 <= 25;
  D.5247 = D.5244 | D.5246;
  if (D.5247 != 0) goto <D.5248>; else goto <D.5249>;
  <D.5248>:
  D.5250 = 1;
  return D.5250;
  <D.5249>:
  D.5250 = 0;
  return D.5250;
}


my_isalnum (char c)
{
  unsigned char c.7;
  unsigned char D.5253;
  _Bool D.5254;
  unsigned char D.5255;
  _Bool D.5256;
  _Bool D.5257;
  gboolean D.5260;
  unsigned char D.5261;

  c.7 = (unsigned char) c;
  D.5253 = c.7 + 159;
  D.5254 = D.5253 <= 25;
  c.7 = (unsigned char) c;
  D.5255 = c.7 + 191;
  D.5256 = D.5255 <= 25;
  D.5257 = D.5254 | D.5256;
  if (D.5257 != 0) goto <D.5258>; else goto <D.5259>;
  <D.5258>:
  D.5260 = 1;
  return D.5260;
  <D.5259>:
  c.7 = (unsigned char) c;
  D.5261 = c.7 + 208;
  if (D.5261 <= 9) goto <D.5262>; else goto <D.5263>;
  <D.5262>:
  D.5260 = 1;
  return D.5260;
  <D.5263>:
  D.5260 = 0;
  return D.5260;
}


my_isspace (char c)
{
  _Bool D.5267;
  _Bool D.5268;
  _Bool D.5269;
  _Bool D.5271;
  _Bool D.5272;
  _Bool D.5273;
  gboolean D.5275;

  D.5267 = c == 32;
  D.5268 = c == 9;
  D.5269 = D.5267 | D.5268;
  if (D.5269 != 0) goto <D.5265>; else goto <D.5270>;
  <D.5270>:
  D.5271 = c == 13;
  D.5272 = c == 10;
  D.5273 = D.5271 | D.5272;
  if (D.5273 != 0) goto <D.5265>; else goto <D.5274>;
  <D.5274>:
  if (c == 11) goto <D.5265>; else goto <D.5266>;
  <D.5265>:
  D.5275 = 1;
  return D.5275;
  <D.5266>:
  D.5275 = 0;
  return D.5275;
}


parse_attributes (const char * p, const char * end, char * * * names, char * * * values, struct GError * * error, int * full_stop, int state)
{
  const char * D.5279;
  char D.5280;
  const char * D.5287;
  char D.5290;
  char * name.8;
  struct GError * D.5306;
  int D.5311;
  long unsigned int D.5312;
  long unsigned int D.5313;
  char * * D.5314;
  void * D.5315;
  char * * D.5316;
  void * D.5317;
  long unsigned int D.5318;
  long unsigned int D.5319;
  sizetype D.5320;
  char * * D.5321;
  char * * D.5322;
  char * value.9;
  char * * D.5324;
  char * * D.5325;
  int nnames;

  nnames = 0;
  <D.4998>:
  p = skip_space (p, end);
  if (p == end) goto <D.5277>; else goto <D.5278>;
  <D.5277>:
  D.5279 = end;
  return D.5279;
  <D.5278>:
  D.5280 = *p;
  if (D.5280 == 62) goto <D.5281>; else goto <D.5282>;
  <D.5281>:
  *full_stop = 0;
  D.5279 = p;
  return D.5279;
  <D.5282>:
  if (state == 6) goto <D.5283>; else goto <D.5284>;
  <D.5283>:
  D.5280 = *p;
  if (D.5280 == 63) goto <D.5285>; else goto <D.5286>;
  <D.5285>:
  D.5287 = p + 1;
  if (D.5287 < end) goto <D.5288>; else goto <D.5289>;
  <D.5288>:
  D.5287 = p + 1;
  D.5290 = *D.5287;
  if (D.5290 == 62) goto <D.5291>; else goto <D.5292>;
  <D.5291>:
  *full_stop = 0;
  D.5279 = p + 1;
  return D.5279;
  <D.5292>:
  <D.5289>:
  <D.5286>:
  <D.5284>:
  D.5280 = *p;
  if (D.5280 == 47) goto <D.5294>; else goto <D.5293>;
  <D.5294>:
  D.5287 = p + 1;
  if (D.5287 < end) goto <D.5295>; else goto <D.5293>;
  <D.5295>:
  D.5287 = p + 1;
  D.5290 = *D.5287;
  if (D.5290 == 62) goto <D.5296>; else goto <D.5293>;
  <D.5296>:
  *full_stop = 1;
  D.5279 = p + 1;
  return D.5279;
  <D.5293>:
  {
    char * name;
    char * value;

    try
      {
        p = parse_name (p, end, &name);
        if (p == end) goto <D.5297>; else goto <D.5298>;
        <D.5297>:
        D.5279 = p;
        return D.5279;
        <D.5298>:
        p = skip_space (p, end);
        if (p == end) goto <D.5299>; else goto <D.5300>;
        <D.5299>:
        name.8 = name;
        monoeg_g_free (name.8);
        D.5279 = p;
        return D.5279;
        <D.5300>:
        D.5280 = *p;
        if (D.5280 != 61) goto <D.5302>; else goto <D.5303>;
        <D.5302>:
        if (error != 0B) goto <D.5304>; else goto <D.5305>;
        <D.5304>:
        name.8 = name;
        D.5306 = monoeg_g_error_new (1B, 1, "Expected an = after the attribute name `%s\'", name.8);
        *error = D.5306;
        <D.5305>:
        name.8 = name;
        monoeg_g_free (name.8);
        D.5279 = end;
        return D.5279;
        <D.5303>:
        p = p + 1;
        p = skip_space (p, end);
        if (p == end) goto <D.5307>; else goto <D.5308>;
        <D.5307>:
        name.8 = name;
        monoeg_g_free (name.8);
        D.5279 = end;
        return D.5279;
        <D.5308>:
        p = parse_value (p, end, &value, error);
        if (p == end) goto <D.5309>; else goto <D.5310>;
        <D.5309>:
        name.8 = name;
        monoeg_g_free (name.8);
        D.5279 = p;
        return D.5279;
        <D.5310>:
        nnames = nnames + 1;
        D.5311 = nnames + 1;
        D.5312 = (long unsigned int) D.5311;
        D.5313 = D.5312 * 8;
        D.5314 = *names;
        D.5315 = monoeg_realloc (D.5314, D.5313);
        *names = D.5315;
        D.5311 = nnames + 1;
        D.5312 = (long unsigned int) D.5311;
        D.5313 = D.5312 * 8;
        D.5316 = *values;
        D.5317 = monoeg_realloc (D.5316, D.5313);
        *values = D.5317;
        D.5314 = *names;
        D.5318 = (long unsigned int) nnames;
        D.5319 = D.5318 * 8;
        D.5320 = D.5319 + 18446744073709551608;
        D.5321 = D.5314 + D.5320;
        name.8 = name;
        *D.5321 = name.8;
        D.5316 = *values;
        D.5318 = (long unsigned int) nnames;
        D.5319 = D.5318 * 8;
        D.5320 = D.5319 + 18446744073709551608;
        D.5322 = D.5316 + D.5320;
        value.9 = value;
        *D.5322 = value.9;
        D.5314 = *names;
        D.5318 = (long unsigned int) nnames;
        D.5319 = D.5318 * 8;
        D.5324 = D.5314 + D.5319;
        *D.5324 = 0B;
        D.5316 = *values;
        D.5318 = (long unsigned int) nnames;
        D.5319 = D.5318 * 8;
        D.5325 = D.5316 + D.5319;
        *D.5325 = 0B;
      }
    finally
      {
        name = {CLOBBER};
        value = {CLOBBER};
      }
  }
  goto <D.4998>;
}


parse_name (const char * p, const char * end, char * * value)
{
  char D.5330;
  int D.5331;
  int D.5332;
  const char * D.5335;
  long int p.10;
  long int start.11;
  long int D.5338;
  int D.5339;
  long unsigned int D.5340;
  void * D.5341;
  char * D.5342;
  long unsigned int D.5345;
  sizetype D.5346;
  char * D.5347;
  const char * start;
  int l;

  start = p;
  goto <D.4984>;
  <D.4983>:
  p = p + 1;
  <D.4984>:
  if (p < end) goto <D.5329>; else goto <D.4985>;
  <D.5329>:
  D.5330 = *p;
  D.5331 = (int) D.5330;
  D.5332 = my_isalnum (D.5331);
  if (D.5332 != 0) goto <D.4983>; else goto <D.4985>;
  <D.4985>:
  if (p == end) goto <D.5333>; else goto <D.5334>;
  <D.5333>:
  D.5335 = end;
  return D.5335;
  <D.5334>:
  p.10 = (long int) p;
  start.11 = (long int) start;
  D.5338 = p.10 - start.11;
  l = (int) D.5338;
  D.5339 = l + 1;
  D.5340 = (long unsigned int) D.5339;
  D.5341 = monoeg_malloc (D.5340);
  *value = D.5341;
  D.5342 = *value;
  if (D.5342 == 0B) goto <D.5343>; else goto <D.5344>;
  <D.5343>:
  D.5335 = end;
  return D.5335;
  <D.5344>:
  D.5345 = (long unsigned int) l;
  D.5342 = *value;
  strncpy (D.5342, start, D.5345);
  D.5342 = *value;
  D.5346 = (sizetype) l;
  D.5347 = D.5342 + D.5346;
  *D.5347 = 0;
  D.5335 = p;
  return D.5335;
}


skip_space (const char * p, const char * end)
{
  char D.5350;
  int D.5351;
  int D.5352;
  const char * D.5353;

  goto <D.4963>;
  <D.4962>:
  p = p + 1;
  <D.4963>:
  if (p < end) goto <D.5349>; else goto <D.4964>;
  <D.5349>:
  D.5350 = *p;
  D.5351 = (int) D.5350;
  D.5352 = my_isspace (D.5351);
  if (D.5352 != 0) goto <D.4962>; else goto <D.4964>;
  <D.4964>:
  D.5353 = p;
  return D.5353;
}


parse_value (const char * p, const char * end, char * * value, struct GError * * error)
{
  char D.5355;
  struct GError * D.5360;
  const char * D.5361;
  long int p.12;
  long int start.13;
  long int D.5367;
  int D.5368;
  long unsigned int D.5369;
  void * D.5370;
  char * D.5371;
  long unsigned int D.5374;
  sizetype D.5375;
  char * D.5376;
  const char * start;
  int l;

  D.5355 = *p;
  if (D.5355 != 34) goto <D.5356>; else goto <D.5357>;
  <D.5356>:
  if (error != 0B) goto <D.5358>; else goto <D.5359>;
  <D.5358>:
  D.5360 = monoeg_g_error_new (1B, 1, "%s", "Expected the attribute value to start with a quote");
  *error = D.5360;
  <D.5359>:
  D.5361 = end;
  return D.5361;
  <D.5357>:
  p = p + 1;
  start = p;
  goto <D.4974>;
  <D.4973>:
  p = p + 1;
  <D.4974>:
  if (p < end) goto <D.5362>; else goto <D.4975>;
  <D.5362>:
  D.5355 = *p;
  if (D.5355 != 34) goto <D.4973>; else goto <D.4975>;
  <D.4975>:
  if (p == end) goto <D.5363>; else goto <D.5364>;
  <D.5363>:
  D.5361 = end;
  return D.5361;
  <D.5364>:
  p.12 = (long int) p;
  start.13 = (long int) start;
  D.5367 = p.12 - start.13;
  l = (int) D.5367;
  p = p + 1;
  D.5368 = l + 1;
  D.5369 = (long unsigned int) D.5368;
  D.5370 = monoeg_malloc (D.5369);
  *value = D.5370;
  D.5371 = *value;
  if (D.5371 == 0B) goto <D.5372>; else goto <D.5373>;
  <D.5372>:
  D.5361 = end;
  return D.5361;
  <D.5373>:
  D.5374 = (long unsigned int) l;
  D.5371 = *value;
  strncpy (D.5371, start, D.5374);
  D.5371 = *value;
  D.5375 = (sizetype) l;
  D.5376 = D.5371 + D.5375;
  *D.5376 = 0;
  D.5361 = p;
  return D.5361;
}


strncpy (char * restrict __dest, const char * restrict __src, size_t __len)
{
  char * D.5378;
  long unsigned int D.5379;

  D.5379 = __builtin_object_size (__dest, 1);
  D.5378 = __builtin___strncpy_chk (__dest, __src, __len, D.5379);
  return D.5378;
}


destroy_parse_state (struct GMarkupParseContext * context)
{
  void * D.5381;
  struct GSList * D.5382;
  struct GString * D.5383;
  struct GSList * p;

  p = context->level;
  goto <D.5004>;
  <D.5003>:
  D.5381 = p->data;
  monoeg_g_free (D.5381);
  p = p->next;
  <D.5004>:
  if (p != 0B) goto <D.5003>; else goto <D.5005>;
  <D.5005>:
  D.5382 = context->level;
  monoeg_g_slist_free (D.5382);
  D.5383 = context->text;
  if (D.5383 != 0B) goto <D.5384>; else goto <D.5385>;
  <D.5384>:
  D.5383 = context->text;
  monoeg_g_string_free (D.5383, 1);
  <D.5385>:
  context->text = 0B;
  context->level = 0B;
}


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

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


