// File: /workspace/github_c_makefile_star2_O0/genometools[P]genometools/src/extended/gff3_parser.c
// Function: process_parent_attr
static int process_parent_attr(char *parent_attr, GtGenomeNode *feature_node,
                               const char *id, bool *is_child,
                               GtGFF3Parser *parser, GtQueue *genome_nodes,
                               const char *filename, unsigned int line_number,
                               GtError *err)
{
  GtSplitter *parent_splitter;
  GtStrArray *missing_parents = NULL;
  bool orphaned_parent = false;
  GtGenomeNode* parent_gf;
  const char *parent;
  GtUword i;
  int had_err = 0;

  gt_error_check(err);
  gt_assert(parent_attr);

  parent_splitter = gt_splitter_new();
  gt_splitter_split(parent_splitter, parent_attr, strlen(parent_attr), ',');
  gt_assert(gt_splitter_size(parent_splitter));

  for (i = 0; i < gt_splitter_size(parent_splitter); i++) {
    parent = gt_splitter_get_token(parent_splitter, i);
    parent_gf = (GtGenomeNode*) gt_feature_info_get(parser->feature_info,
                                                    parent);
    if (!parent_gf) {
      if (parser->strict) {
        gt_error_set(err, "%s \"%s\" on line %u in file \"%s\" was not "
                     "previously defined (via \"%s=\")", GT_GFF_PARENT, parent,
                     line_number, filename, GT_GFF_ID);
        had_err = -1;
      }
      else {
        if (!missing_parents)
          missing_parents = gt_str_array_new();
        gt_str_array_add_cstr(missing_parents, parent);
      }
    }
    else if (!parser->strict &&
             gt_orphanage_is_orphan(parser->orphanage, parent)) {
      /* children of orphaned parents are orphans themselves */
      orphaned_parent = true;
    }
  }

  if (!had_err) {
    if (!missing_parents && !orphaned_parent) {
      had_err = process_child(feature_node, parent_splitter,
                              parser->feature_info, parser->strict,
                              parser->last_terminator, parser->type_checker,
                              genome_nodes, err);
    }
    else {
      gt_assert(!parser->strict);
      gt_orphanage_add(parser->orphanage, feature_node, id, missing_parents);
      parser->incomplete_node = true;
    }
    *is_child = true;
  }

  gt_splitter_delete(parent_splitter);
  gt_str_array_delete(missing_parents);

  return had_err;
}

// Assembly:
subq $0x98, %rsp
movq 0xb0(%rsp), %rax
movl 0xa8(%rsp), %eax
movq 0xa0(%rsp), %rax
movq %rdi, 0x90(%rsp)
movq %rsi, 0x88(%rsp)
movq %rdx, 0x80(%rsp)
movq %rcx, 0x78(%rsp)
movq %r8, 0x70(%rsp)
movq %r9, 0x68(%rsp)
movq $0x0, 0x58(%rsp)
movb $0x0, 0x57(%rsp)
movl $0x0, 0x34(%rsp)
cmpq $0x0, 0xb0(%rsp)
je 0x2ee31
movq 0xb0(%rsp), %rdi
callq 0xc270
testb $0x1, %al
jne 0x2edf9
jmp 0x2ee31
movq 0x1851d8(%rip), %rax    # 0x1b3fd8
movq (%rax), %rdi
leaq 0x12f25c(%rip), %rsi    # 0x15e066
leaq 0x12f837(%rip), %rdx    # 0x15e648
leaq 0x13653f(%rip), %rcx    # 0x165357
leaq 0x13478c(%rip), %r8     # 0x1635ab
movl $0x35f, %r9d            # imm = 0x35F
movb $0x0, %al
callq 0xb890
callq 0xb2e0
jmp 0x2ee33
jmp 0x2ee35
cmpq $0x0, 0x90(%rsp)
jne 0x2ee78
movq 0x185191(%rip), %rax    # 0x1b3fd8
movq (%rax), %rdi
leaq 0x12f215(%rip), %rsi    # 0x15e066
leaq 0x136507(%rip), %rdx    # 0x16535f
leaq 0x1364f8(%rip), %rcx    # 0x165357
leaq 0x134745(%rip), %r8     # 0x1635ab
movl $0x360, %r9d            # imm = 0x360
movb $0x0, %al
callq 0xb890
callq 0xb2e0
jmp 0x2ee7a
callq 0x16a10
movq %rax, 0x60(%rsp)
movq 0x60(%rsp), %rax
movq %rax, 0x20(%rsp)
movq 0x90(%rsp), %rax
movq %rax, 0x28(%rsp)
movq 0x90(%rsp), %rdi
callq 0xb240
movq 0x20(%rsp), %rdi
movq 0x28(%rsp), %rsi
movq %rax, %rdx
movl $0x2c, %ecx
callq 0x16a30
movq 0x60(%rsp), %rdi
callq 0x17010
cmpq $0x0, %rax
jne 0x2ef07
movq 0x185102(%rip), %rax    # 0x1b3fd8
movq (%rax), %rdi
leaq 0x12f186(%rip), %rsi    # 0x15e066
leaq 0x136484(%rip), %rdx    # 0x16536b
leaq 0x136469(%rip), %rcx    # 0x165357
leaq 0x1346b6(%rip), %r8     # 0x1635ab
movl $0x364, %r9d            # imm = 0x364
movb $0x0, %al
callq 0xb890
callq 0xb2e0
jmp 0x2ef09
movq $0x0, 0x38(%rsp)
movq 0x38(%rsp), %rax
movq %rax, 0x18(%rsp)
movq 0x60(%rsp), %rdi
callq 0x17010
movq %rax, %rcx
movq 0x18(%rsp), %rax
cmpq %rcx, %rax
jae 0x2f01f
movq 0x60(%rsp), %rdi
movq 0x38(%rsp), %rsi
callq 0x16f20
movq %rax, 0x40(%rsp)
movq 0x70(%rsp), %rax
movq (%rax), %rdi
movq 0x40(%rsp), %rsi
callq 0xa6220
movq %rax, 0x48(%rsp)
cmpq $0x0, 0x48(%rsp)
jne 0x2efdf
movq 0x70(%rsp), %rax
testb $0x1, 0x1b(%rax)
je 0x2efbc
movq 0xb0(%rsp), %rdi
movq 0x40(%rsp), %rcx
movl 0xa8(%rsp), %r8d
movq 0xa0(%rsp), %r9
leaq 0x1363f4(%rip), %rsi    # 0x16538d
leaq 0x1358a3(%rip), %rdx    # 0x164843
leaq 0x135899(%rip), %rax    # 0x164840
movq %rax, (%rsp)
movb $0x0, %al
callq 0xc0d0
movl $0xffffffff, 0x34(%rsp) # imm = 0xFFFFFFFF
jmp 0x2efdd
cmpq $0x0, 0x58(%rsp)
jne 0x2efce
callq 0x1b020
movq %rax, 0x58(%rsp)
movq 0x58(%rsp), %rdi
movq 0x40(%rsp), %rsi
callq 0x1b180
jmp 0x2f00a
movq 0x70(%rsp), %rax
testb $0x1, 0x1b(%rax)
jne 0x2f008
movq 0x70(%rsp), %rax
movq 0x38(%rax), %rdi
movq 0x40(%rsp), %rsi
callq 0x358e0
testb $0x1, %al
jne 0x2f003
jmp 0x2f008
movb $0x1, 0x57(%rsp)
jmp 0x2f00a
jmp 0x2f00c
movq 0x38(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x38(%rsp)
jmp 0x2ef12
cmpl $0x0, 0x34(%rsp)
jne 0x2f10a
cmpq $0x0, 0x58(%rsp)
jne 0x2f08f
testb $0x1, 0x57(%rsp)
jne 0x2f08f
movq 0x88(%rsp), %rdi
movq 0x60(%rsp), %rsi
movq 0x70(%rsp), %rax
movq (%rax), %rdx
movq 0x70(%rsp), %rax
movb 0x1b(%rax), %cl
movq 0x70(%rsp), %rax
movl 0x50(%rax), %r8d
movq 0x70(%rsp), %rax
movq 0x40(%rax), %r9
movq 0x68(%rsp), %r10
movq 0xb0(%rsp), %rax
andb $0x1, %cl
movzbl %cl, %ecx
movq %r10, (%rsp)
movq %rax, 0x8(%rsp)
callq 0x300d0
movl %eax, 0x34(%rsp)
jmp 0x2f102
jmp 0x2f091
movq 0x70(%rsp), %rax
testb $0x1, 0x1b(%rax)
je 0x2f0d4
movq 0x184f35(%rip), %rax    # 0x1b3fd8
movq (%rax), %rdi
leaq 0x12efb9(%rip), %rsi    # 0x15e066
leaq 0x1346b2(%rip), %rdx    # 0x163766
leaq 0x13629c(%rip), %rcx    # 0x165357
leaq 0x1344e9(%rip), %r8     # 0x1635ab
movl $0x386, %r9d            # imm = 0x386
movb $0x0, %al
callq 0xb890
callq 0xb2e0
jmp 0x2f0d6
movq 0x70(%rsp), %rax
movq 0x38(%rax), %rdi
movq 0x88(%rsp), %rsi
movq 0x80(%rsp), %rdx
movq 0x58(%rsp), %rcx
callq 0x355c0
movq 0x70(%rsp), %rax
movb $0x1, 0x18(%rax)
movq 0x78(%rsp), %rax
movb $0x1, (%rax)
movq 0x60(%rsp), %rdi
callq 0x17060
movq 0x58(%rsp), %rdi
callq 0x1b780
movl 0x34(%rsp), %eax
addq $0x98, %rsp
retq
nopw (%rax,%rax)