// File: /workspace/github_c_makefile_star2_O2/genometools[P]genometools/src/extended/gff3_visitor.c
// Function: gff3_visitor_feature_node
static int gff3_visitor_feature_node(GtNodeVisitor *nv, GtFeatureNode *fn,
                                     GtError *err)
{
  GtGFF3Visitor *gff3_visitor;
  int had_err;
  gt_error_check(err);
  gff3_visitor = gff3_visitor_cast(nv);

  gff3_version_string(nv);

  had_err = gt_feature_node_traverse_children(fn, gff3_visitor, store_ids, true,
                                              err);
  if (!had_err) {
    if (gt_feature_node_is_tree(fn)) {
      had_err = gt_feature_node_traverse_children(fn, gff3_visitor,
                                                  gff3_show_feature_node, true,
                                                  err);
    }
    else {
      /* got a DAG -> traverse in topologically sorted depth first fashion to
         make sure that the 'Parent' attributes are shown in correct order */
      had_err =
        gt_feature_node_traverse_children_top(fn, gff3_visitor,
                                              gff3_show_feature_node, err);
    }
  }

  /* reset hashmaps */
  gt_hashmap_reset(gff3_visitor->feature_node_to_id_array);
  gt_hashmap_reset(gff3_visitor->feature_node_to_unique_id_str);

  /* show terminator, if the feature has children (otherwise it is clear that
     the feature is complete, because no ID attribute has been shown) */
  if (gt_feature_node_has_children(fn) ||
      (gff3_visitor->retain_ids && gt_feature_node_get_attribute(fn, "ID"))) {
    if (!gff3_visitor->outstr)
      gt_file_xprintf(gff3_visitor->outfp, "%s\n", GT_GFF_TERMINATOR);
    else {
      gt_str_append_cstr(gff3_visitor->outstr, GT_GFF_TERMINATOR);
      gt_str_append_char(gff3_visitor->outstr, '\n');
    }
  }

  return had_err;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
movq %rdx, %r15
movq %rsi, %rbx
movq %rdi, %r12
testq %rdx, %rdx
je 0x23aec
movq %r15, %rdi
callq 0xc103
testb %al, %al
jne 0x23bdb
callq 0x238d4
movq %rax, %rdi
movq %r12, %rsi
callq 0x2603e
movq %rax, %r14
movq %r12, %rdi
callq 0x24334
leaq 0x8df(%rip), %rdx       # 0x243ed
pushq $0x1
popq %rcx
movq %rbx, %rdi
movq %r14, %rsi
movq %r15, %r8
callq 0x19e82
movl %eax, %ebp
testl %eax, %eax
jne 0x23b5b
movq %rbx, %rdi
callq 0x1b501
leaq 0xa77(%rip), %rdx       # 0x245ab
testb %al, %al
je 0x23b4b
pushq $0x1
popq %rcx
movq %rbx, %rdi
movq %r14, %rsi
movq %r15, %r8
callq 0x19e82
jmp 0x23b59
movq %rbx, %rdi
movq %r14, %rsi
movq %r15, %rcx
callq 0x1ac66
movl %eax, %ebp
movq 0x20(%r14), %rdi
callq 0x56030
movq 0x28(%r14), %rdi
callq 0x56030
movq %rbx, %rdi
callq 0x194d0
testb %al, %al
jne 0x23b94
cmpb $0x1, 0x11(%r14)
jne 0x23bd0
leaq 0xacb8c(%rip), %rsi     # 0xd0713
movq %rbx, %rdi
callq 0x18818
testq %rax, %rax
je 0x23bd0
movq 0x40(%r14), %rdi
testq %rdi, %rdi
je 0x23bb7
leaq 0xac137(%rip), %rsi     # 0xcfcdb
callq 0x13dd3
movq 0x40(%r14), %rdi
pushq $0xa
popq %rsi
callq 0x140b1
jmp 0x23bd0
movq 0x38(%r14), %rdi
leaq 0xa916e(%rip), %rsi     # 0xccd30
leaq 0xac112(%rip), %rdx     # 0xcfcdb
xorl %eax, %eax
callq 0x542da
movl %ebp, %eax
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
movq 0x10a3d6(%rip), %rax    # 0x12dfb8
movq (%rax), %rdi
leaq 0xa647a(%rip), %rsi     # 0xca066
leaq 0xa6a66(%rip), %rdx     # 0xca659
leaq 0xadc6a(%rip), %rcx     # 0xd1864
leaq 0xadbb3(%rip), %r8      # 0xd17b4
movl $0x162, %r9d            # imm = 0x162
xorl %eax, %eax
callq 0xb8c0
callq 0xb300