LLM4Binary/decompile-bench-makefile huggingface dataset:
// File: /workspace/github_c_makefile_star2_O0/genometools[P]genometools/src/extended/gff3_escaping.c
// Function: gt_gff3_escape_hex2prnchar
static int gt_gff3_escape_hex2prnchar(const char* str, char *out)
{
  unsigned char d;
  gt_assert(str && out);
  if (!(GtIsHexChar[(int) *(str+1)] & 2)
        || !(GtIsHexChar[(int) *(str+2)] & 1)
        || !strncmp(str, "%7F", 3 * (sizeof (char)))) {
    return -1;
  }
  d = (GtHexToDec[(int) *(str+1)] << 4) | (GtHexToDec[(int) *(str+2)]);
  *out = (char) d;
  return 0;
}

// Assembly:
subq $0x28, %rsp
movq %rdi, 0x18(%rsp)
movq %rsi, 0x10(%rsp)
cmpq $0x0, 0x18(%rsp)
je 0xa744e
cmpq $0x0, 0x10(%rsp)
jne 0xa7486
movq 0x10cb83(%rip), %rax    # 0x1b3fd8
movq (%rax), %rdi
leaq 0xb6c07(%rip), %rsi     # 0x15e066
leaq 0xcb648(%rip), %rdx     # 0x172aae
leaq 0xcb64c(%rip), %rcx     # 0x172ab9
leaq 0xcb508(%rip), %r8      # 0x17297c
movl $0x41, %r9d
movb $0x0, %al
callq 0xb890
callq 0xb2e0
jmp 0xa7488
movq 0x18(%rsp), %rax
movsbl 0x1(%rax), %eax
movslq %eax, %rcx
leaq 0x10d7a5(%rip), %rax    # 0x1b4c40
movsbl (%rax,%rcx), %eax
andl $0x2, %eax
cmpl $0x0, %eax
je 0xa74e1
movq 0x18(%rsp), %rax
movsbl 0x2(%rax), %eax
movslq %eax, %rcx
leaq 0x10d786(%rip), %rax    # 0x1b4c40
movsbl (%rax,%rcx), %eax
andl $0x1, %eax
cmpl $0x0, %eax
je 0xa74e1
movq 0x18(%rsp), %rdi
leaq 0xcb602(%rip), %rsi     # 0x172ad4
movl $0x3, %edx
callq 0xb280
cmpl $0x0, %eax
jne 0xa74eb
movl $0xffffffff, 0x24(%rsp) # imm = 0xFFFFFFFF
jmp 0xa7535
movq 0x18(%rsp), %rax
movsbl 0x1(%rax), %eax
movslq %eax, %rcx
leaq 0x10d6d2(%rip), %rax    # 0x1b4bd0
movsbl (%rax,%rcx), %eax
shll $0x4, %eax
movq 0x18(%rsp), %rcx
movsbl 0x2(%rcx), %ecx
movslq %ecx, %rdx
leaq 0x10d6b8(%rip), %rcx    # 0x1b4bd0
movsbl (%rcx,%rdx), %ecx
orl %ecx, %eax
movb %al, 0xf(%rsp)
movb 0xf(%rsp), %cl
movq 0x10(%rsp), %rax
movb %cl, (%rax)
movl $0x0, 0x24(%rsp)
movl 0x24(%rsp), %eax
addq $0x28, %rsp
retq
nop
// File: /workspace/github_c_makefile_star2_O0/genometools[P]genometools/src/extended/gff3_output.c
// Function: gt_gff3_output_leading
void gt_gff3_output_leading(GtFeatureNode *fn, GtFile *outfp)
{
  GtGenomeNode *gn;
  gt_assert(fn);
  gn = (GtGenomeNode*) fn;
  gt_file_xprintf(outfp, "%s\t%s\t%s\t"GT_WU"\t"GT_WU"\t",
                     gt_str_get(gt_genome_node_get_seqid(gn)),
                     gt_feature_node_get_source(fn),
                     gt_feature_node_get_type(fn),
                     gt_genome_node_get_start(gn),
                     gt_genome_node_get_end(gn));
  if (gt_feature_node_score_is_defined(fn))
    gt_file_xprintf(outfp, "%.3g", gt_feature_node_get_score(fn));
  else
    gt_file_xfputc('.', outfp);
  gt_file_xprintf(outfp, "\t%c\t%c\t",
                     GT_STRAND_CHARS[gt_feature_node_get_strand(fn)],
                     GT_PHASE_CHARS[gt_feature_node_get_phase(fn)]);
}

// Assembly:
subq $0x68, %rsp
movq %rdi, 0x60(%rsp)
movq %rsi, 0x58(%rsp)
cmpq $0x0, 0x60(%rsp)
jne 0xa7b9e
movq 0x10c46b(%rip), %rax    # 0x1b3fd8
movq (%rax), %rdi
leaq 0xb64ef(%rip), %rsi     # 0x15e066
leaq 0xcaa03(%rip), %rdx     # 0x172581
leaq 0xcafe2(%rip), %rcx     # 0x172b67
leaq 0xcaff2(%rip), %r8      # 0x172b7e
movl $0x1a, %r9d
movb $0x0, %al
callq 0xb890
callq 0xb2e0
jmp 0xa7ba0
movq 0x60(%rsp), %rax
movq %rax, 0x50(%rsp)
movq 0x58(%rsp), %rax
movq %rax, 0x28(%rsp)
movq 0x50(%rsp), %rdi
callq 0x258a0
movq %rax, %rdi
callq 0x19940
movq %rax, 0x30(%rsp)
movq 0x60(%rsp), %rdi
callq 0x215a0
movq %rax, 0x38(%rsp)
movq 0x60(%rsp), %rdi
callq 0x211d0
movq %rax, 0x40(%rsp)
movq 0x50(%rsp), %rdi
callq 0x259c0
movq %rax, 0x48(%rsp)
movq 0x50(%rsp), %rdi
callq 0x25a80
movq 0x28(%rsp), %rdi
movq 0x30(%rsp), %rdx
movq 0x38(%rsp), %rcx
movq 0x40(%rsp), %r8
movq 0x48(%rsp), %r9
leaq 0xcaf77(%rip), %rsi     # 0x172b99
movq %rax, (%rsp)
movb $0x0, %al
callq 0x837b0
movq 0x60(%rsp), %rdi
callq 0x212b0
testb $0x1, %al
jne 0xa7c3d
jmp 0xa7c6a
movq 0x58(%rsp), %rax
movq %rax, 0x20(%rsp)
movq 0x60(%rsp), %rdi
callq 0x21d30
movq 0x20(%rsp), %rdi
cvtss2sd %xmm0, %xmm0
leaq 0xcaf4a(%rip), %rsi     # 0x172bab
movb $0x1, %al
callq 0x837b0
jmp 0xa7c79
movq 0x58(%rsp), %rsi
movl $0x2e, %edi
callq 0x83a70
movq 0x58(%rsp), %rax
movq %rax, 0x10(%rsp)
movq 0x60(%rsp), %rdi
callq 0x20a10
movl %eax, %eax
movl %eax, %ecx
leaq 0xb7e9c(%rip), %rax     # 0x15fb34
movsbl (%rax,%rcx), %eax
movl %eax, 0x1c(%rsp)
movq 0x60(%rsp), %rdi
callq 0x21f60
movq 0x10(%rsp), %rdi
movl 0x1c(%rsp), %edx
movl %eax, %eax
movl %eax, %ecx
leaq 0xb7f22(%rip), %rax     # 0x15fbe0
movsbl (%rax,%rcx), %ecx
leaq 0xcaee7(%rip), %rsi     # 0x172bb0
movb $0x0, %al
callq 0x837b0
addq $0x68, %rsp
retq
nopw %cs:(%rax,%rax)
// File: /workspace/github_c_makefile_star2_O0/genometools[P]genometools/src/extended/luaserialize.c
// Function: gt_lua_table_to_str
int gt_lua_table_to_str(lua_State *L, GtStr *out, int index, GtError *err)
{
  int had_err;
#ifndef NDEBUG
  int stack_size = lua_gettop(L);
#endif
  gt_error_check(err);
  gt_assert(L && out && lua_istable(L, index));
  had_err = parse_table(L, out, index, 1, err);
  gt_assert(lua_gettop(L) == stack_size); /* make sure the stack doesn't grow */
  return had_err;
}

// Assembly:
subq $0x28, %rsp
movq %rdi, 0x20(%rsp)
movq %rsi, 0x18(%rsp)
movl %edx, 0x14(%rsp)
movq %rcx, 0x8(%rsp)
movq 0x20(%rsp), %rdi
callq 0x4f0e0
movl %eax, (%rsp)
cmpq $0x0, 0x8(%rsp)
je 0xa8004
movq 0x8(%rsp), %rdi
callq 0xc270
testb $0x1, %al
jne 0xa7fcc
jmp 0xa8004
movq 0x10c005(%rip), %rax    # 0x1b3fd8
movq (%rax), %rdi
leaq 0xb6089(%rip), %rsi     # 0x15e066
leaq 0xb6664(%rip), %rdx     # 0x15e648
leaq 0xcabf5(%rip), %rcx     # 0x172be0
leaq 0xcac02(%rip), %r8      # 0x172bf4
movl $0x75, %r9d
movb $0x0, %al
callq 0xb890
callq 0xb2e0
jmp 0xa8006
jmp 0xa8008
cmpq $0x0, 0x20(%rsp)
je 0xa802b
cmpq $0x0, 0x18(%rsp)
je 0xa802b
movq 0x20(%rsp), %rdi
movl 0x14(%rsp), %esi
callq 0x4f800
cmpl $0x5, %eax
je 0xa8063
movq 0x10bfa6(%rip), %rax    # 0x1b3fd8
movq (%rax), %rdi
leaq 0xb602a(%rip), %rsi     # 0x15e066
leaq 0xcabcd(%rip), %rdx     # 0x172c10
leaq 0xcab96(%rip), %rcx     # 0x172be0
leaq 0xcaba3(%rip), %r8      # 0x172bf4
movl $0x76, %r9d
movb $0x0, %al
callq 0xb890
callq 0xb2e0
jmp 0xa8065
movq 0x20(%rsp), %rdi
movq 0x18(%rsp), %rsi
movl 0x14(%rsp), %edx
movq 0x8(%rsp), %r8
movl $0x1, %ecx
callq 0xa80e0
movl %eax, 0x4(%rsp)
movq 0x20(%rsp), %rdi
callq 0x4f0e0
cmpl (%rsp), %eax
je 0xa80cd
movq 0x10bf3c(%rip), %rax    # 0x1b3fd8
movq (%rax), %rdi
leaq 0xb5fc0(%rip), %rsi     # 0x15e066
leaq 0xcab85(%rip), %rdx     # 0x172c32
leaq 0xcab2c(%rip), %rcx     # 0x172be0
leaq 0xcab39(%rip), %r8      # 0x172bf4
movl $0x78, %r9d
movb $0x0, %al
callq 0xb890
callq 0xb2e0
jmp 0xa80cf
movl 0x4(%rsp), %eax
addq $0x28, %rsp
retq
nopl (%rax,%rax)
// File: /workspace/github_c_makefile_star2_O0/genometools[P]genometools/src/extended/xrf_abbr_entry.c
// Function: gt_xrf_abbr_entry_new
GtXRFAbbrEntry* gt_xrf_abbr_entry_new(GtUword line,
                                      GtStr *filename)
{
  GtXRFAbbrEntry *abbr_entry = gt_malloc(sizeof *abbr_entry);
  abbr_entry->content = gt_hashmap_new(GT_HASH_STRING, gt_free_func,
                                       (GtFree) gt_str_delete);
  abbr_entry->line = line;
  abbr_entry->filename = gt_str_ref(filename);
  return abbr_entry;
}

// Assembly:
subq $0x18, %rsp
movq %rdi, 0x10(%rsp)
movq %rsi, 0x8(%rsp)
movl $0x18, %edi
leaq 0xca14d(%rip), %rsi     # 0x173057
movl $0x21, %edx
callq 0xd2e0
movq %rax, (%rsp)
movl $0x1, %edi
leaq -0x9b304(%rip), %rsi    # 0xdc20
leaq -0x8df6b(%rip), %rdx    # 0x1afc0
callq 0x86190
movq %rax, %rcx
movq (%rsp), %rax
movq %rcx, (%rax)
movq 0x10(%rsp), %rcx
movq (%rsp), %rax
movq %rcx, 0x8(%rax)
movq 0x8(%rsp), %rdi
callq 0x19dc0
movq %rax, %rcx
movq (%rsp), %rax
movq %rcx, 0x10(%rax)
movq (%rsp), %rax
addq $0x18, %rsp
retq
nopw %cs:(%rax,%rax)
// File: /workspace/github_c_makefile_star2_O0/genometools[P]genometools/src/extended/xrf_abbr_entry.c
// Function: gt_xrf_abbr_entry_delete
void gt_xrf_abbr_entry_delete(GtXRFAbbrEntry *abbr_entry)
{
  if (!abbr_entry) return;
  gt_str_delete(abbr_entry->filename);
  gt_hashmap_delete(abbr_entry->content);
  gt_free(abbr_entry);
}

// Assembly:
pushq %rax
movq %rdi, (%rsp)
cmpq $0x0, (%rsp)
jne 0xa8f7e
jmp 0xa8fac
movq (%rsp), %rax
movq 0x10(%rax), %rdi
callq 0x1afc0
movq (%rsp), %rax
movq (%rax), %rdi
callq 0x86cc0
movq (%rsp), %rdi
leaq 0xca0b5(%rip), %rsi     # 0x173057
movl $0x2e, %edx
callq 0xdab0
popq %rax
retq
nop
// File: /workspace/github_c_makefile_star2_O0/genometools[P]genometools/src/extended/xrf_abbr_entry.c
// Function: gt_xrf_abbr_entry_add
void gt_xrf_abbr_entry_add(GtXRFAbbrEntry *abbr_entry, const char *tag,
                           const char *value)
{
  GtStr *s;
  gt_assert(abbr_entry && tag && value);
  if (!(s = gt_hashmap_get(abbr_entry->content, tag))) {
    s = gt_str_new_cstr(value);
    gt_hashmap_add(abbr_entry->content, gt_cstr_dup(tag), s);
  }
}

// Assembly:
subq $0x28, %rsp
movq %rdi, 0x20(%rsp)
movq %rsi, 0x18(%rsp)
movq %rdx, 0x10(%rsp)
cmpq $0x0, 0x20(%rsp)
je 0xa8fdb
cmpq $0x0, 0x18(%rsp)
je 0xa8fdb
cmpq $0x0, 0x10(%rsp)
jne 0xa9013
movq 0x10aff6(%rip), %rax    # 0x1b3fd8
movq (%rax), %rdi
leaq 0xb507a(%rip), %rsi     # 0x15e066
leaq 0xca082(%rip), %rdx     # 0x173075
leaq 0xca096(%rip), %rcx     # 0x173090
leaq 0xca056(%rip), %r8      # 0x173057
movl $0x35, %r9d
movb $0x0, %al
callq 0xb890
callq 0xb2e0
jmp 0xa9015
movq 0x20(%rsp), %rax
movq (%rax), %rdi
movq 0x18(%rsp), %rsi
callq 0x86470
movq %rax, 0x8(%rsp)
cmpq $0x0, %rax
jne 0xa9068
movq 0x10(%rsp), %rdi
callq 0x18f70
movq %rax, 0x8(%rsp)
movq 0x20(%rsp), %rax
movq (%rax), %rax
movq %rax, (%rsp)
movq 0x18(%rsp), %rdi
callq 0x7c400
movq (%rsp), %rdi
movq %rax, %rsi
movq 0x8(%rsp), %rdx
callq 0x86510
addq $0x28, %rsp
retq
nopl (%rax)
// File: /workspace/github_c_makefile_star2_O0/genometools[P]genometools/src/extended/xrf_abbr_entry.c
// Function: gt_xrf_abbr_entry_get_value
const char* gt_xrf_abbr_entry_get_value(const GtXRFAbbrEntry *abbr_entry,
                                        const char *entry_key)
{
  GtStr *s;
  gt_assert(abbr_entry);
  if ((s = gt_hashmap_get(abbr_entry->content, entry_key)))
    return gt_str_get(s);
  return NULL;
}

// Assembly:
subq $0x28, %rsp
movq %rdi, 0x18(%rsp)
movq %rsi, 0x10(%rsp)
cmpq $0x0, 0x18(%rsp)
jne 0xa90be
movq 0x10af4b(%rip), %rax    # 0x1b3fd8
movq (%rax), %rdi
leaq 0xb4fcf(%rip), %rsi     # 0x15e066
leaq 0xca272(%rip), %rdx     # 0x173310
leaq 0xca001(%rip), %rcx     # 0x1730a6
leaq 0xc9fab(%rip), %r8      # 0x173057
movl $0x40, %r9d
movb $0x0, %al
callq 0xb890
callq 0xb2e0
jmp 0xa90c0
movq 0x18(%rsp), %rax
movq (%rax), %rdi
movq 0x10(%rsp), %rsi
callq 0x86470
movq %rax, 0x8(%rsp)
cmpq $0x0, %rax
je 0xa90ee
movq 0x8(%rsp), %rdi
callq 0x19940
movq %rax, 0x20(%rsp)
jmp 0xa90f7
movq $0x0, 0x20(%rsp)
movq 0x20(%rsp), %rax
addq $0x28, %rsp
retq
nopw %cs:(%rax,%rax)
// File: /workspace/github_c_makefile_star2_O0/genometools[P]genometools/src/extended/xrf_abbr_parse_tree.c
// Function: gt_xrf_abbr_parse_tree_new
GtXRFAbbrParseTree* gt_xrf_abbr_parse_tree_new(const char *xrf_abbr_file_path,
                                               GtError *err)
{
  GtXRFAbbrParseTree *xrf_abbr_parse_tree;
  GtIO *xrf_abbr_file;
  gt_error_check(err);
  gt_assert(xrf_abbr_file_path);
  xrf_abbr_file = gt_io_new(xrf_abbr_file_path, "r");
  xrf_abbr_parse_tree = gt_malloc(sizeof *xrf_abbr_parse_tree);
  xrf_abbr_parse_tree->entries = gt_array_new(sizeof (GtXRFAbbrEntry*));
  if (parse_xrf_abbr_file(xrf_abbr_parse_tree, xrf_abbr_file, err)) {
    gt_xrf_abbr_parse_tree_delete(xrf_abbr_parse_tree);
    gt_io_delete(xrf_abbr_file);
    return NULL;
  }
  gt_io_delete(xrf_abbr_file);
  return xrf_abbr_parse_tree;
}

// Assembly:
subq $0x28, %rsp
movq %rdi, 0x18(%rsp)
movq %rsi, 0x10(%rsp)
cmpq $0x0, 0x10(%rsp)
je 0xa921e
movq 0x10(%rsp), %rdi
callq 0xc270
testb $0x1, %al
jne 0xa91e6
jmp 0xa921e
movq 0x10adeb(%rip), %rax    # 0x1b3fd8
movq (%rax), %rdi
leaq 0xb4e6f(%rip), %rsi     # 0x15e066
leaq 0xb544a(%rip), %rdx     # 0x15e648
leaq 0xc9f4f(%rip), %rcx     # 0x173154
leaq 0xc9f63(%rip), %r8      # 0x17316f
movl $0x181, %r9d            # imm = 0x181
movb $0x0, %al
callq 0xb890
callq 0xb2e0
jmp 0xa9220
jmp 0xa9222
cmpq $0x0, 0x18(%rsp)
jne 0xa9262
movq 0x10ada7(%rip), %rax    # 0x1b3fd8
movq (%rax), %rdi
leaq 0xb4e2b(%rip), %rsi     # 0x15e066
leaq 0xc9f50(%rip), %rdx     # 0x173192
leaq 0xc9f0b(%rip), %rcx     # 0x173154
leaq 0xc9f1f(%rip), %r8      # 0x17316f
movl $0x182, %r9d            # imm = 0x182
movb $0x0, %al
callq 0xb890
callq 0xb2e0
jmp 0xa9264
movq 0x18(%rsp), %rdi
leaq 0xc2f9c(%rip), %rsi     # 0x16c20c
callq 0xe16f0
movq %rax, (%rsp)
movl $0x8, %edi
leaq 0xc9eea(%rip), %rsi     # 0x17316f
movl $0x184, %edx            # imm = 0x184
callq 0xd2e0
movq %rax, 0x8(%rsp)
movl $0x8, %edi
callq 0x75ab0
movq %rax, %rcx
movq 0x8(%rsp), %rax
movq %rcx, (%rax)
movq 0x8(%rsp), %rdi
movq (%rsp), %rsi
movq 0x10(%rsp), %rdx
callq 0xa9300
cmpl $0x0, %eax
je 0xa92df
movq 0x8(%rsp), %rdi
callq 0xa9510
movq (%rsp), %rdi
callq 0xe1820
movq $0x0, 0x20(%rsp)
jmp 0xa92f2
movq (%rsp), %rdi
callq 0xe1820
movq 0x8(%rsp), %rax
movq %rax, 0x20(%rsp)
movq 0x20(%rsp), %rax
addq $0x28, %rsp
retq
nopl (%rax)
// File: /workspace/github_c_makefile_star2_O0/genometools[P]genometools/src/extended/xrf_abbr_parse_tree.c
// Function: gt_xrf_abbr_parse_tree_delete
void gt_xrf_abbr_parse_tree_delete(GtXRFAbbrParseTree *xrf_abbr_parse_tree)
{
  GtUword i;
  if (!xrf_abbr_parse_tree) return;
  for (i = 0; i < gt_array_size(xrf_abbr_parse_tree->entries); i++) {
    gt_xrf_abbr_entry_delete(*(GtXRFAbbrEntry**)
                         gt_array_get(xrf_abbr_parse_tree->entries, i));
  }
  gt_array_delete(xrf_abbr_parse_tree->entries);
  gt_free(xrf_abbr_parse_tree);
}

// Assembly:
subq $0x18, %rsp
movq %rdi, 0x10(%rsp)
cmpq $0x0, 0x10(%rsp)
jne 0xa9523
jmp 0xa959b
movq $0x0, 0x8(%rsp)
movq 0x8(%rsp), %rax
movq %rax, (%rsp)
movq 0x10(%rsp), %rax
movq (%rax), %rdi
callq 0x76490
movq %rax, %rcx
movq (%rsp), %rax
cmpq %rcx, %rax
jae 0xa9578
movq 0x10(%rsp), %rax
movq (%rax), %rdi
movq 0x8(%rsp), %rsi
callq 0x75c80
movq (%rax), %rdi
callq 0xa8f70
movq 0x8(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x8(%rsp)
jmp 0xa952c
movq 0x10(%rsp), %rax
movq (%rax), %rdi
callq 0x770a0
movq 0x10(%rsp), %rdi
leaq 0xc9bde(%rip), %rsi     # 0x17316f
movl $0x198, %edx            # imm = 0x198
callq 0xdab0
addq $0x18, %rsp
retq
// File: /workspace/github_c_makefile_star2_O0/genometools[P]genometools/src/extended/xrf_abbr_parse_tree.c
// Function: gt_xrf_abbr_parse_tree_get_entry_value
const char* gt_xrf_abbr_parse_tree_get_entry_value(const GtXRFAbbrParseTree
                                                           *xrf_abbr_parse_tree,
                                                   GtUword entry_num,
                                                   const char *entry_key)
{
  gt_assert(xrf_abbr_parse_tree);
  return gt_xrf_abbr_entry_get_value(*(GtXRFAbbrEntry**)
                                      gt_array_get(xrf_abbr_parse_tree->entries,
                                                   entry_num), entry_key);
}

// Assembly:
subq $0x18, %rsp
movq %rdi, 0x10(%rsp)
movq %rsi, 0x8(%rsp)
movq %rdx, (%rsp)
cmpq $0x0, 0x10(%rsp)
jne 0xa95f2
movq 0x10aa17(%rip), %rax    # 0x1b3fd8
movq (%rax), %rdi
leaq 0xb4a9b(%rip), %rsi     # 0x15e066
leaq 0xc9bd3(%rip), %rdx     # 0x1731a5
leaq 0xc9be0(%rip), %rcx     # 0x1731b9
leaq 0xc9b8f(%rip), %r8      # 0x17316f
movl $0x1a0, %r9d            # imm = 0x1A0
movb $0x0, %al
callq 0xb890
callq 0xb2e0
jmp 0xa95f4
movq 0x10(%rsp), %rax
movq (%rax), %rdi
movq 0x8(%rsp), %rsi
callq 0x75c80
movq (%rax), %rdi
movq (%rsp), %rsi
callq 0xa9070
addq $0x18, %rsp
retq
nopw (%rax,%rax)
// File: /workspace/github_c_makefile_star2_O0/genometools[P]genometools/src/extended/xrf_abbr_parse_tree.c
// Function: gt_xrf_abbr_parse_tree_ignored_char
static bool gt_xrf_abbr_parse_tree_ignored_char(GtIO *xrf_abbr_file)
{
  char cc = gt_io_peek(xrf_abbr_file);
  if ((cc == XRF_BLANK_CHAR) || (cc == XRF_COMMENT_CHAR) ||
      (cc == GT_CARRIAGE_RETURN) || (cc == GT_END_OF_LINE))
    return true;
  return false;
}

// Assembly:
subq $0x18, %rsp
movq %rdi, 0x8(%rsp)
movq 0x8(%rsp), %rdi
callq 0xe1a90
movb %al, 0x7(%rsp)
movsbl 0x7(%rsp), %eax
cmpl $0x20, %eax
je 0xa972f
movsbl 0x7(%rsp), %eax
cmpl $0x21, %eax
je 0xa972f
movsbl 0x7(%rsp), %eax
cmpl $0xd, %eax
je 0xa972f
movsbl 0x7(%rsp), %eax
cmpl $0xa, %eax
jne 0xa9736
movb $0x1, 0x17(%rsp)
jmp 0xa973b
movb $0x0, 0x17(%rsp)
movb 0x17(%rsp), %al
andb $0x1, %al
addq $0x18, %rsp
retq
nopw %cs:(%rax,%rax)
// File: /workspace/github_c_makefile_star2_O0/genometools[P]genometools/src/extended/xrf_abbr_parse_tree.c
// Function: gt_xrf_abbr_parse_tree_ignored_line
static bool gt_xrf_abbr_parse_tree_ignored_line(GtIO *xrf_abbr_file,
                                                GtError *err)
{
  gt_error_check(err);
    gt_log_log("ignored");
  if (gt_io_peek(xrf_abbr_file) == XRF_BLANK_CHAR)
    return gt_xrf_abbr_parse_tree_blank_line(xrf_abbr_file, err);
  if (gt_io_peek(xrf_abbr_file) == XRF_COMMENT_CHAR)
    return gt_xrf_abbr_parse_tree_comment_line(xrf_abbr_file, err);
  gt_io_next(xrf_abbr_file);
  return false;
}

// Assembly:
subq $0x18, %rsp
movq %rdi, 0x8(%rsp)
movq %rsi, (%rsp)
cmpq $0x0, (%rsp)
je 0xa97ab
movq (%rsp), %rdi
callq 0xc270
testb $0x1, %al
jne 0xa9773
jmp 0xa97ab
movq 0x10a85e(%rip), %rax    # 0x1b3fd8
movq (%rax), %rdi
leaq 0xb48e2(%rip), %rsi     # 0x15e066
leaq 0xb4ebd(%rip), %rdx     # 0x15e648
leaq 0xc9ace(%rip), %rcx     # 0x173260
leaq 0xc99d6(%rip), %r8      # 0x17316f
movl $0xe4, %r9d
movb $0x0, %al
callq 0xb890
callq 0xb2e0
jmp 0xa97ad
leaq 0xc9ad0(%rip), %rdi     # 0x173284
movb $0x0, %al
callq 0xc930
movq 0x8(%rsp), %rdi
callq 0xe1a90
movsbl %al, %eax
cmpl $0x20, %eax
jne 0xa97e9
movq 0x8(%rsp), %rdi
movq (%rsp), %rsi
callq 0xa9840
cmpl $0x0, %eax
setne %al
andb $0x1, %al
movb %al, 0x17(%rsp)
jmp 0xa9826
movq 0x8(%rsp), %rdi
callq 0xe1a90
movsbl %al, %eax
cmpl $0x21, %eax
jne 0xa9817
movq 0x8(%rsp), %rdi
movq (%rsp), %rsi
callq 0xa9990
cmpl $0x0, %eax
setne %al
andb $0x1, %al
movb %al, 0x17(%rsp)
jmp 0xa9826
movq 0x8(%rsp), %rdi
callq 0xe1b10
movb $0x0, 0x17(%rsp)
movb 0x17(%rsp), %al
andb $0x1, %al
addq $0x18, %rsp
retq
nopw %cs:(%rax,%rax)
// File: /workspace/github_c_makefile_star2_O0/genometools[P]genometools/src/extended/xrf_abbr_parse_tree.c
// Function: gt_xrf_abbr_parse_tree_blank_line
static int gt_xrf_abbr_parse_tree_blank_line(GtIO *xrf_abbr_file, GtError *err)
{
  int had_err;
  gt_error_check(err);
  gt_log_log("blank");
  had_err = gt_io_expect(xrf_abbr_file, XRF_BLANK_CHAR, err);
  while (!had_err) {
    char cc = gt_io_peek(xrf_abbr_file);
    if (cc == XRF_COMMENT_CHAR)
      return gt_xrf_abbr_parse_tree_comment_line(xrf_abbr_file, err);
    else if (cc == GT_CARRIAGE_RETURN) {
      gt_io_next(xrf_abbr_file);
      if (gt_io_peek(xrf_abbr_file) == GT_END_OF_LINE)
        gt_io_next(xrf_abbr_file);
      break;
    }
    else if ((cc == GT_END_OF_LINE) || (cc == GT_END_OF_FILE)) {
      gt_io_next(xrf_abbr_file);
      break;
    }
    else
      had_err = gt_io_expect(xrf_abbr_file, XRF_BLANK_CHAR, err);
  }
  return had_err;
}

// Assembly:
subq $0x28, %rsp
movq %rdi, 0x18(%rsp)
movq %rsi, 0x10(%rsp)
cmpq $0x0, 0x10(%rsp)
je 0xa989e
movq 0x10(%rsp), %rdi
callq 0xc270
testb $0x1, %al
jne 0xa9866
jmp 0xa989e
movq 0x10a76b(%rip), %rax    # 0x1b3fd8
movq (%rax), %rdi
leaq 0xb47ef(%rip), %rsi     # 0x15e066
leaq 0xb4dca(%rip), %rdx     # 0x15e648
leaq 0xc9a07(%rip), %rcx     # 0x17328c
leaq 0xc98e3(%rip), %r8      # 0x17316f
movl $0xca, %r9d
movb $0x0, %al
callq 0xb890
callq 0xb2e0
jmp 0xa98a0
leaq 0xc9a07(%rip), %rdi     # 0x1732ae
movb $0x0, %al
callq 0xc930
movq 0x18(%rsp), %rdi
movq 0x10(%rsp), %rdx
movl $0x20, %esi
callq 0xe1c90
movl %eax, 0xc(%rsp)
cmpl $0x0, 0xc(%rsp)
setne %al
xorb $-0x1, %al
testb $0x1, %al
jne 0xa98d9
jmp 0xa9979
movq 0x18(%rsp), %rdi
callq 0xe1a90
movb %al, 0xb(%rsp)
movsbl 0xb(%rsp), %eax
cmpl $0x21, %eax
jne 0xa9906
movq 0x18(%rsp), %rdi
movq 0x10(%rsp), %rsi
callq 0xa9990
movl %eax, 0x24(%rsp)
jmp 0xa9981
movsbl 0xb(%rsp), %eax
cmpl $0xd, %eax
jne 0xa9938
movq 0x18(%rsp), %rdi
callq 0xe1b10
movq 0x18(%rsp), %rdi
callq 0xe1a90
movsbl %al, %eax
cmpl $0xa, %eax
jne 0xa9936
movq 0x18(%rsp), %rdi
callq 0xe1b10
jmp 0xa9979
movsbl 0xb(%rsp), %eax
cmpl $0xa, %eax
je 0xa994c
movsbl 0xb(%rsp), %eax
cmpl $-0x1, %eax
jne 0xa9958
movq 0x18(%rsp), %rdi
callq 0xe1b10
jmp 0xa9979
movq 0x18(%rsp), %rdi
movq 0x10(%rsp), %rdx
movl $0x20, %esi
callq 0xe1c90
movl %eax, 0xc(%rsp)
jmp 0xa9972
jmp 0xa9974
jmp 0xa98c6
movl 0xc(%rsp), %eax
movl %eax, 0x24(%rsp)
movl 0x24(%rsp), %eax
addq $0x28, %rsp
retq
nopw (%rax,%rax)
// File: /workspace/github_c_makefile_star2_O0/genometools[P]genometools/src/extended/xrf_abbr_parse_tree.c
// Function: gt_xrf_abbr_parse_tree_comment_line
static int gt_xrf_abbr_parse_tree_comment_line(GtIO *xrf_abbr_file,
                                               GtError *err)
{
  int had_err;
  gt_error_check(err);
  gt_log_log("comment");
  had_err = gt_io_expect(xrf_abbr_file, XRF_COMMENT_CHAR, err);
  while (!had_err) {
    switch (gt_io_peek(xrf_abbr_file)) {
      case GT_CARRIAGE_RETURN:
        gt_io_next(xrf_abbr_file);
        if (gt_io_peek(xrf_abbr_file) == GT_END_OF_LINE)
          gt_io_next(xrf_abbr_file);
        return had_err;
      case GT_END_OF_LINE:
        gt_io_next(xrf_abbr_file);
        /*@fallthrough@*/
      case GT_END_OF_FILE:
        return had_err;
      default:
        gt_io_next(xrf_abbr_file);
    }
  }
  return had_err;
}

// Assembly:
subq $0x28, %rsp
movq %rdi, 0x18(%rsp)
movq %rsi, 0x10(%rsp)
cmpq $0x0, 0x10(%rsp)
je 0xa99ee
movq 0x10(%rsp), %rdi
callq 0xc270
testb $0x1, %al
jne 0xa99b6
jmp 0xa99ee
movq 0x10a61b(%rip), %rax    # 0x1b3fd8
movq (%rax), %rdi
leaq 0xb469f(%rip), %rsi     # 0x15e066
leaq 0xb4c7a(%rip), %rdx     # 0x15e648
leaq 0xc98df(%rip), %rcx     # 0x1732b4
leaq 0xc9793(%rip), %r8      # 0x17316f
movl $0xb1, %r9d
movb $0x0, %al
callq 0xb890
callq 0xb2e0
jmp 0xa99f0
leaq 0xc196d(%rip), %rdi     # 0x16b364
movb $0x0, %al
callq 0xc930
movq 0x18(%rsp), %rdi
movq 0x10(%rsp), %rdx
movl $0x21, %esi
callq 0xe1c90
movl %eax, 0xc(%rsp)
cmpl $0x0, 0xc(%rsp)
setne %al
xorb $-0x1, %al
testb $0x1, %al
jne 0xa9a29
jmp 0xa9aaa
movq 0x18(%rsp), %rdi
callq 0xe1a90
movsbl %al, %eax
movl %eax, 0x8(%rsp)
subl $-0x1, %eax
je 0xa9a91
jmp 0xa9a41
movl 0x8(%rsp), %eax
subl $0xa, %eax
je 0xa9a87
jmp 0xa9a4c
movl 0x8(%rsp), %eax
subl $0xd, %eax
jne 0xa9a9b
jmp 0xa9a57
movq 0x18(%rsp), %rdi
callq 0xe1b10
movq 0x18(%rsp), %rdi
callq 0xe1a90
movsbl %al, %eax
cmpl $0xa, %eax
jne 0xa9a7d
movq 0x18(%rsp), %rdi
callq 0xe1b10
movl 0xc(%rsp), %eax
movl %eax, 0x24(%rsp)
jmp 0xa9ab2
movq 0x18(%rsp), %rdi
callq 0xe1b10
movl 0xc(%rsp), %eax
movl %eax, 0x24(%rsp)
jmp 0xa9ab2
movq 0x18(%rsp), %rdi
callq 0xe1b10
jmp 0xa9a16
movl 0xc(%rsp), %eax
movl %eax, 0x24(%rsp)
movl 0x24(%rsp), %eax
addq $0x28, %rsp
retq
nopl (%rax,%rax)
// File: /workspace/github_c_makefile_star2_O0/genometools[P]genometools/src/extended/xrf_abbr_parse_tree.c
// Function: gt_xrf_abbr_parse_tree_any_char
static bool gt_xrf_abbr_parse_tree_any_char(GtIO *xrf_abbr_file,
                                            bool be_permissive)
{
  switch (gt_io_peek(xrf_abbr_file)) {
    case XRF_BLANK_CHAR:
    case XRF_SEPARATOR_CHAR:
      if (be_permissive)
        return true;
    case XRF_COMMENT_CHAR:
    case GT_CARRIAGE_RETURN:
    case GT_END_OF_LINE:
    case GT_END_OF_FILE:
      return false;
  }
  return true;
}

// Assembly:
subq $0x18, %rsp
movb %sil, %al
movq %rdi, 0x8(%rsp)
andb $0x1, %al
movb %al, 0x7(%rsp)
movq 0x8(%rsp), %rdi
callq 0xe1a90
movsbl %al, %eax
movl %eax, (%rsp)
subl $-0x1, %eax
je 0xaa1fb
jmp 0xaa1b9
movl (%rsp), %eax
subl $0xa, %eax
je 0xaa1fb
jmp 0xaa1c3
movl (%rsp), %eax
subl $0xd, %eax
je 0xaa1fb
jmp 0xaa1cd
movl (%rsp), %eax
subl $0x20, %eax
je 0xaa1eb
jmp 0xaa1d7
movl (%rsp), %eax
subl $0x21, %eax
je 0xaa1fb
jmp 0xaa1e1
movl (%rsp), %eax
subl $0x3a, %eax
jne 0xaa202
jmp 0xaa1eb
testb $0x1, 0x7(%rsp)
je 0xaa1f9
movb $0x1, 0x17(%rsp)
jmp 0xaa207
jmp 0xaa1fb
movb $0x0, 0x17(%rsp)
jmp 0xaa207
movb $0x1, 0x17(%rsp)
movb 0x17(%rsp), %al
andb $0x1, %al
addq $0x18, %rsp
retq
nopw %cs:(%rax,%rax)
// File: /workspace/github_c_makefile_star2_O0/genometools[P]genometools/src/extended/xrf_abbr_parse_tree.c
// Function: gt_xrf_abbr_parse_tree_valid_label
static bool gt_xrf_abbr_parse_tree_valid_label(const char *label)
{
  if (strcmp(label, XRF_LABEL_ABBREVIATION) == 0
        || strcmp(label, XRF_LABEL_SHORTHAND_NAME) == 0
        || strcmp(label, XRF_LABEL_DATABASE) == 0
        || strcmp(label, XRF_LABEL_OBJECT) == 0
        || strcmp(label, XRF_LABEL_SYNONYM) == 0
        || strcmp(label, XRF_LABEL_EXAMPLE_ID) == 0
        || strcmp(label, XRF_LABEL_LOCAL_ID_SYNTAX) == 0
        || strcmp(label, XRF_LABEL_GENERIC_URL) == 0
        || strcmp(label, XRF_LABEL_URL_SYNTAX) == 0
        || strcmp(label, XRF_LABEL_URL_EXAMPLE) == 0
        || strcmp(label, XRF_LABEL_IS_OBSOLETE) == 0
        || strcmp(label, XRF_LABEL_CONSIDER) == 0
        || strcmp(label, XRF_LABEL_REPLACED_BY) == 0)
    return true;
  return false;
}

// Assembly:
subq $0x18, %rsp
movq %rdi, 0x8(%rsp)
movq 0x8(%rsp), %rdi
leaq 0xbce8c(%rip), %rsi     # 0x167581
callq 0xb850
cmpl $0x0, %eax
je 0xaa823
movq 0x8(%rsp), %rdi
leaq 0xc8d66(%rip), %rsi     # 0x173475
callq 0xb850
cmpl $0x0, %eax
je 0xaa823
movq 0x8(%rsp), %rdi
leaq 0xbce3c(%rip), %rsi     # 0x167565
callq 0xb850
cmpl $0x0, %eax
je 0xaa823
movq 0x8(%rsp), %rdi
leaq 0xd1178(%rip), %rsi     # 0x17b8bb
callq 0xb850
cmpl $0x0, %eax
je 0xaa823
movq 0x8(%rsp), %rdi
leaq 0xbce31(%rip), %rsi     # 0x16758e
callq 0xb850
cmpl $0x0, %eax
je 0xaa823
movq 0x8(%rsp), %rdi
leaq 0xc8d0d(%rip), %rsi     # 0x173484
callq 0xb850
cmpl $0x0, %eax
je 0xaa823
movq 0x8(%rsp), %rdi
leaq 0xbcd80(%rip), %rsi     # 0x167511
callq 0xb850
cmpl $0x0, %eax
je 0xaa823
movq 0x8(%rsp), %rdi
leaq 0xc8ce4(%rip), %rsi     # 0x17348f
callq 0xb850
cmpl $0x0, %eax
je 0xaa823
movq 0x8(%rsp), %rdi
leaq 0xc8cda(%rip), %rsi     # 0x17349b
callq 0xb850
cmpl $0x0, %eax
je 0xaa823
movq 0x8(%rsp), %rdi
leaq 0xc8ccf(%rip), %rsi     # 0x1734a6
callq 0xb850
cmpl $0x0, %eax
je 0xaa823
movq 0x8(%rsp), %rdi
leaq 0xc8cc5(%rip), %rsi     # 0x1734b2
callq 0xb850
cmpl $0x0, %eax
je 0xaa823
movq 0x8(%rsp), %rdi
leaq 0xc8cbb(%rip), %rsi     # 0x1734be
callq 0xb850
cmpl $0x0, %eax
je 0xaa823
movq 0x8(%rsp), %rdi
leaq 0xc8cae(%rip), %rsi     # 0x1734c7
callq 0xb850
cmpl $0x0, %eax
jne 0xaa82a
movb $0x1, 0x17(%rsp)
jmp 0xaa82f
movb $0x0, 0x17(%rsp)
movb 0x17(%rsp), %al
andb $0x1, %al
addq $0x18, %rsp
retq
nopw (%rax,%rax)
// File: /workspace/github_c_makefile_star2_O0/genometools[P]genometools/src/gtlua/genome_node_lua.c
// Function: genome_node_lua_tostring
static int genome_node_lua_tostring (lua_State *L)
{
  GtGenomeNode **gn;
  char buf[BUFSIZ];
  gn = check_genome_node(L, 1);
  if (gt_feature_node_try_cast(*gn)) {
    GtFeatureNode *fn = gt_feature_node_try_cast(*gn);
    (void) snprintf(buf, BUFSIZ, "feature: %s "GT_WU"-"GT_WU" %c",
                    gt_feature_node_get_type(fn),
                    gt_genome_node_get_start(*gn),
                    gt_genome_node_get_end(*gn),
                    GT_STRAND_CHARS[gt_feature_node_get_strand(fn)]);
  } else if (gt_region_node_try_cast(*gn)) {
    GtRange rng = gt_genome_node_get_range(*gn);
    (void) snprintf(buf, BUFSIZ, "region: %s "GT_WU"-"GT_WU,
                    gt_str_get(gt_genome_node_get_seqid(*gn)),
                    rng.start, rng.end);
  }
  lua_pushfstring(L, "%s", buf);
  return 1;
}

// Assembly:
subq $0x2068, %rsp           # imm = 0x2068
movq %rdi, 0x2060(%rsp)
movq 0x2060(%rsp), %rdi
movl $0x1, %esi
leaq 0xc8b34(%rip), %rdx     # 0x173637
callq 0x559c0
movq %rax, 0x2058(%rsp)
movq 0x2058(%rsp), %rax
movq (%rax), %rdi
callq 0x241f0
cmpq $0x0, %rax
je 0xaabc7
movq 0x2058(%rsp), %rax
movq (%rax), %rdi
callq 0x241f0
movq %rax, 0x48(%rsp)
leaq 0x50(%rsp), %rax
movq %rax, 0x18(%rsp)
movq 0x48(%rsp), %rdi
callq 0x211d0
movq %rax, 0x20(%rsp)
movq 0x2058(%rsp), %rax
movq (%rax), %rdi
callq 0x259c0
movq %rax, 0x28(%rsp)
movq 0x2058(%rsp), %rax
movq (%rax), %rdi
callq 0x25a80
movq %rax, 0x30(%rsp)
movq 0x48(%rsp), %rdi
callq 0x20a10
movq 0x18(%rsp), %rdi
movq 0x20(%rsp), %rcx
movq 0x28(%rsp), %r8
movq 0x30(%rsp), %r9
movl %eax, %eax
movl %eax, %edx
leaq 0xb4f89(%rip), %rax     # 0x15fb34
movsbl (%rax,%rdx), %eax
movl $0x2000, %esi           # imm = 0x2000
leaq 0xc8ae5(%rip), %rdx     # 0x1736a0
movl %eax, (%rsp)
movb $0x0, %al
callq 0xb9d0
jmp 0xaac40
movq 0x2058(%rsp), %rax
movq (%rax), %rdi
callq 0x35ee0
cmpq $0x0, %rax
je 0xaac3e
movq 0x2058(%rsp), %rax
movq (%rax), %rdi
callq 0x259f0
movq %rax, 0x38(%rsp)
movq %rdx, 0x40(%rsp)
leaq 0x50(%rsp), %rax
movq %rax, 0x10(%rsp)
movq 0x2058(%rsp), %rax
movq (%rax), %rdi
callq 0x258a0
movq %rax, %rdi
callq 0x19940
movq 0x10(%rsp), %rdi
movq %rax, %rcx
movq 0x38(%rsp), %r8
movq 0x40(%rsp), %r9
movl $0x2000, %esi           # imm = 0x2000
leaq 0xc8a80(%rip), %rdx     # 0x1736b7
movb $0x0, %al
callq 0xb9d0
jmp 0xaac40
movq 0x2060(%rsp), %rdi
leaq 0x50(%rsp), %rdx
leaq 0xc1259(%rip), %rsi     # 0x16bead
movb $0x0, %al
callq 0x51020
movl $0x1, %eax
addq $0x2068, %rsp           # imm = 0x2068
retq
nopl (%rax,%rax)
// File: /workspace/github_c_makefile_star2_O0/genometools[P]genometools/src/gtlua/genome_node_lua.c
// Function: genome_node_lua_eq
static int genome_node_lua_eq(lua_State *L)
{
  GtGenomeNode **gn1, **gn2;
  bool ret = false;
  gt_assert(L);
  gn1 = check_genome_node(L, 1);
  gn2 = check_genome_node(L, 2);
  if (*gn1 == *gn2)
    ret = true;
  lua_pushboolean(L, ret);
  return 1;
}

// Assembly:
subq $0x28, %rsp
movq %rdi, 0x20(%rsp)
movb $0x0, 0xf(%rsp)
cmpq $0x0, 0x20(%rsp)
jne 0xaacbe
movq 0x10934b(%rip), %rax    # 0x1b3fd8
movq (%rax), %rdi
leaq 0xb33cf(%rip), %rsi     # 0x15e066
leaq 0xc0160(%rip), %rdx     # 0x16adfe
leaq 0xc8a25(%rip), %rcx     # 0x1736ca
leaq 0xc896f(%rip), %r8      # 0x17361b
movl $0x337, %r9d            # imm = 0x337
movb $0x0, %al
callq 0xb890
callq 0xb2e0
jmp 0xaacc0
movq 0x20(%rsp), %rdi
movl $0x1, %esi
leaq 0xc8966(%rip), %rdx     # 0x173637
callq 0x559c0
movq %rax, 0x18(%rsp)
movq 0x20(%rsp), %rdi
movl $0x2, %esi
leaq 0xc894b(%rip), %rdx     # 0x173637
callq 0x559c0
movq %rax, 0x10(%rsp)
movq 0x18(%rsp), %rax
movq (%rax), %rax
movq 0x10(%rsp), %rcx
cmpq (%rcx), %rax
jne 0xaad0d
movb $0x1, 0xf(%rsp)
movq 0x20(%rsp), %rdi
movb 0xf(%rsp), %al
andb $0x1, %al
movzbl %al, %esi
callq 0x51340
movl $0x1, %eax
addq $0x28, %rsp
retq
nopw (%rax,%rax)
// File: /workspace/github_c_makefile_star2_O0/genometools[P]genometools/src/gtlua/genome_node_lua.c
// Function: feature_node_lua_get_children_gc
static int feature_node_lua_get_children_gc(lua_State *L)
{
  GtFeatureNodeIterator *it;
  it = *(GtFeatureNodeIterator**) lua_touserdata(L, 1);
  if (it)
    gt_feature_node_iterator_delete(it);
  return 0;
}

// Assembly:
subq $0x18, %rsp
movq %rdi, 0x10(%rsp)
movq 0x10(%rsp), %rdi
movl $0x1, %esi
callq 0x50530
movq (%rax), %rax
movq %rax, 0x8(%rsp)
cmpq $0x0, 0x8(%rsp)
je 0xaad62
movq 0x8(%rsp), %rdi
callq 0x24cf0
xorl %eax, %eax
addq $0x18, %rsp
retq
nopl (%rax)
// File: /workspace/github_c_makefile_star2_O0/genometools[P]genometools/src/gtlua/genome_node_lua.c
// Function: feature_node_lua_each_attribute_gc
static int feature_node_lua_each_attribute_gc(lua_State *L) {
  GtFeatureNodeLuaEachAttribInfo *info;
  info = *(GtFeatureNodeLuaEachAttribInfo**) lua_touserdata(L, 1);
  if (info) {
    gt_str_array_delete(info->attribs);
    gt_genome_node_delete((GtGenomeNode*) info->fn);
    gt_free(info);
  }
  return 0;
}

// Assembly:
subq $0x18, %rsp
movq %rdi, 0x10(%rsp)
movq 0x10(%rsp), %rdi
movl $0x1, %esi
callq 0x50530
movq (%rax), %rax
movq %rax, 0x8(%rsp)
cmpq $0x0, 0x8(%rsp)
je 0xaadca
movq 0x8(%rsp), %rax
movq 0x8(%rax), %rdi
callq 0x1b780
movq 0x8(%rsp), %rax
movq 0x10(%rax), %rdi
callq 0x26eb0
movq 0x8(%rsp), %rdi
leaq 0xc885b(%rip), %rsi     # 0x17361b
movl $0x1d9, %edx            # imm = 0x1D9
callq 0xdab0
xorl %eax, %eax
addq $0x18, %rsp
retq
nopw %cs:(%rax,%rax)
// File: /workspace/github_c_makefile_star2_O0/genometools[P]genometools/src/gtlua/genome_node_lua.c
// Function: gt_lua_genome_node_push
void gt_lua_genome_node_push(lua_State *L, GtGenomeNode *gn)
{
  GtGenomeNode **gn_lua;
  gt_assert(L && gn);
  gn_lua = lua_newuserdata(L, sizeof (GtGenomeNode**));
  *gn_lua = gn;
  luaL_getmetatable(L, GENOME_NODE_METATABLE);
  lua_setmetatable(L, -2);
}

// Assembly:
subq $0x18, %rsp
movq %rdi, 0x10(%rsp)
movq %rsi, 0x8(%rsp)
cmpq $0x0, 0x10(%rsp)
je 0xaadfe
cmpq $0x0, 0x8(%rsp)
jne 0xaae36
movq 0x1091d3(%rip), %rax    # 0x1b3fd8
movq (%rax), %rdi
leaq 0xb3257(%rip), %rsi     # 0x15e066
leaq 0xc886a(%rip), %rdx     # 0x173680
leaq 0xc886b(%rip), %rcx     # 0x173688
leaq 0xc87f7(%rip), %r8      # 0x17361b
movl $0x3af, %r9d            # imm = 0x3AF
movb $0x0, %al
callq 0xb890
callq 0xb2e0
jmp 0xaae38
movq 0x10(%rsp), %rdi
movl $0x8, %esi
callq 0x53950
movq %rax, (%rsp)
movq 0x8(%rsp), %rcx
movq (%rsp), %rax
movq %rcx, (%rax)
movq 0x10(%rsp), %rdi
movl $0xffffd8f0, %esi       # imm = 0xFFFFD8F0
leaq 0xc87cf(%rip), %rdx     # 0x173637
callq 0x51640
movq 0x10(%rsp), %rdi
movl $0xfffffffe, %esi       # imm = 0xFFFFFFFE
callq 0x523f0
addq $0x18, %rsp
retq
nopw %cs:(%rax,%rax)
// File: /workspace/github_c_makefile_star2_O0/genometools[P]genometools/src/gtlua/genome_node_lua.c
// Function: genome_node_lua_set_range
static int genome_node_lua_set_range(lua_State *L)
{
  GtRange *rng;
  GtGenomeNode **gn = check_genome_node(L, 1);
  rng = check_range(L, 2);
  gt_genome_node_set_range(*gn, rng);
  return 0;
}

// Assembly:
subq $0x18, %rsp
movq %rdi, 0x10(%rsp)
movq 0x10(%rsp), %rdi
movl $0x1, %esi
leaq 0xc867d(%rip), %rdx     # 0x173637
callq 0x559c0
movq %rax, (%rsp)
movq 0x10(%rsp), %rdi
movl $0x2, %esi
leaq 0xc875d(%rip), %rdx     # 0x173731
callq 0x559c0
movq %rax, 0x8(%rsp)
movq (%rsp), %rax
movq (%rax), %rdi
movq 0x8(%rsp), %rsi
callq 0x25b50
xorl %eax, %eax
addq $0x18, %rsp
retq
nopw %cs:(%rax,%rax)
// File: /workspace/github_c_makefile_star2_O0/genometools[P]genometools/src/gtlua/genome_node_lua.c
// Function: genome_node_lua_get_seqid
static int genome_node_lua_get_seqid(lua_State *L)
{
  GtStr *seqid;
  GtGenomeNode **gn = check_genome_node(L, 1);
  if ((seqid = gt_genome_node_get_seqid(*gn)))
    lua_pushstring(L, gt_str_get(seqid));
  else
    lua_pushnil(L);
  return 1;
}

// Assembly:
subq $0x28, %rsp
movq %rdi, 0x20(%rsp)
movq 0x20(%rsp), %rdi
movl $0x1, %esi
leaq 0xc861d(%rip), %rdx     # 0x173637
callq 0x559c0
movq %rax, 0x10(%rsp)
movq 0x10(%rsp), %rax
movq (%rax), %rdi
callq 0x258a0
movq %rax, 0x18(%rsp)
cmpq $0x0, %rax
je 0xab05f
movq 0x20(%rsp), %rax
movq %rax, 0x8(%rsp)
movq 0x18(%rsp), %rdi
callq 0x19940
movq 0x8(%rsp), %rdi
movq %rax, %rsi
callq 0x50970
jmp 0xab069
movq 0x20(%rsp), %rdi
callq 0x506a0
movl $0x1, %eax
addq $0x28, %rsp
retq
nopw %cs:(%rax,%rax)
// File: /workspace/github_c_makefile_star2_O0/genometools[P]genometools/src/gtlua/genome_node_lua.c
// Function: genome_node_lua_change_seqid
static int genome_node_lua_change_seqid(lua_State *L)
{
  const char *seqid;
  GtStr *seqid_str;
  GtGenomeNode **gn = check_genome_node(L, 1);
  seqid = luaL_checkstring(L, 2);
  seqid_str = gt_str_new_cstr(seqid);
  gt_genome_node_change_seqid(*gn, seqid_str);
  gt_str_delete(seqid_str);
  return 0;
}

// Assembly:
subq $0x28, %rsp
movq %rdi, 0x20(%rsp)
movq 0x20(%rsp), %rdi
movl $0x1, %esi
leaq 0xc859d(%rip), %rdx     # 0x173637
callq 0x559c0
movq %rax, 0x8(%rsp)
movq 0x20(%rsp), %rdi
movl $0x2, %esi
xorl %eax, %eax
movl %eax, %edx
callq 0x558e0
movq %rax, 0x18(%rsp)
movq 0x18(%rsp), %rdi
callq 0x18f70
movq %rax, 0x10(%rsp)
movq 0x8(%rsp), %rax
movq (%rax), %rdi
movq 0x10(%rsp), %rsi
callq 0x25c30
movq 0x10(%rsp), %rdi
callq 0x1afc0
xorl %eax, %eax
addq $0x28, %rsp
retq
nop
// File: /workspace/github_c_makefile_star2_O0/genometools[P]genometools/src/gtlua/genome_node_lua.c
// Function: feature_node_lua_get_strand
static int feature_node_lua_get_strand(lua_State *L)
{
  GtGenomeNode **gn = check_genome_node(L, 1);
  GtFeatureNode *fn;
  char strand_char[2];
  /* make sure we get a feature node */
  fn = gt_feature_node_try_cast(*gn);
  luaL_argcheck(L, fn, 1, "not a feature node");
  strand_char[0] = GT_STRAND_CHARS[gt_feature_node_get_strand(fn)];
  strand_char[1] = '\0';
  lua_pushstring(L, strand_char);
  return 1;
}

// Assembly:
subq $0x28, %rsp
movq %rdi, 0x20(%rsp)
movq 0x20(%rsp), %rdi
movl $0x1, %esi
leaq 0xc852d(%rip), %rdx     # 0x173637
callq 0x559c0
movq %rax, 0x18(%rsp)
movq 0x18(%rsp), %rax
movq (%rax), %rdi
callq 0x241f0
movq %rax, 0x10(%rsp)
movb $0x1, %al
cmpq $0x0, 0x10(%rsp)
movb %al, 0xd(%rsp)
jne 0xab154
movq 0x20(%rsp), %rdi
movl $0x1, %esi
leaq 0xc85fe(%rip), %rdx     # 0x173743
callq 0x55420
cmpl $0x0, %eax
setne %al
movb %al, 0xd(%rsp)
movb 0xd(%rsp), %al
movq 0x10(%rsp), %rdi
callq 0x20a10
movl %eax, %eax
movl %eax, %ecx
leaq 0xb49c7(%rip), %rax     # 0x15fb34
movb (%rax,%rcx), %al
movb %al, 0xe(%rsp)
movb $0x0, 0xf(%rsp)
movq 0x20(%rsp), %rdi
leaq 0xe(%rsp), %rsi
callq 0x50970
movl $0x1, %eax
addq $0x28, %rsp
retq
nopw %cs:(%rax,%rax)
// File: /workspace/github_c_makefile_star2_O0/genometools[P]genometools/src/gtlua/genome_node_lua.c
// Function: feature_node_lua_set_strand
static int feature_node_lua_set_strand(lua_State *L)
{
  const char *str;
  GtGenomeNode **gn = check_genome_node(L, 1);
  GtFeatureNode *fn;
  /* make sure we get a feature node */
  fn = gt_feature_node_try_cast(*gn);
  luaL_argcheck(L, fn, 1, "not a feature node");
  str = luaL_checkstring(L, 2);
  luaL_argcheck(L, strlen(str) == 1 && strchr(GT_STRAND_CHARS, str[0]),
                2, "must be one of '" GT_STRAND_CHARS "'");
  gt_feature_node_set_strand(fn, gt_strand_get(str[0]));
  return 0;
}

// Assembly:
subq $0x38, %rsp
movq %rdi, 0x30(%rsp)
movq 0x30(%rsp), %rdi
movl $0x1, %esi
leaq 0xc847d(%rip), %rdx     # 0x173637
callq 0x559c0
movq %rax, 0x20(%rsp)
movq 0x20(%rsp), %rax
movq (%rax), %rdi
callq 0x241f0
movq %rax, 0x18(%rsp)
movb $0x1, %al
cmpq $0x0, 0x18(%rsp)
movb %al, 0x17(%rsp)
jne 0xab204
movq 0x30(%rsp), %rdi
movl $0x1, %esi
leaq 0xc854e(%rip), %rdx     # 0x173743
callq 0x55420
cmpl $0x0, %eax
setne %al
movb %al, 0x17(%rsp)
movb 0x17(%rsp), %al
movq 0x30(%rsp), %rdi
movl $0x2, %esi
xorl %eax, %eax
movl %eax, %edx
callq 0x558e0
movq %rax, 0x28(%rsp)
movq 0x28(%rsp), %rdi
callq 0xb240
cmpq $0x1, %rax
jne 0xab253
movq 0x28(%rsp), %rax
movsbl (%rax), %esi
leaq 0xb48f5(%rip), %rdi     # 0x15fb34
callq 0xb1f0
movq %rax, %rcx
movb $0x1, %al
cmpq $0x0, %rcx
movb %al, 0x16(%rsp)
jne 0xab273
movq 0x30(%rsp), %rdi
movl $0x2, %esi
leaq 0xc84f2(%rip), %rdx     # 0x173756
callq 0x55420
cmpl $0x0, %eax
setne %al
movb %al, 0x16(%rsp)
movb 0x16(%rsp), %al
movq 0x18(%rsp), %rax
movq %rax, 0x8(%rsp)
movq 0x28(%rsp), %rax
movsbl (%rax), %edi
callq 0x1b830
movq 0x8(%rsp), %rdi
movl %eax, %esi
callq 0x21e90
xorl %eax, %eax
addq $0x38, %rsp
retq
nopw %cs:(%rax,%rax)
// File: /workspace/github_c_makefile_star2_O0/genometools[P]genometools/src/gtlua/genome_node_lua.c
// Function: feature_node_lua_get_source
static int feature_node_lua_get_source(lua_State *L)
{
  GtGenomeNode **gn = check_genome_node(L, 1);
  GtFeatureNode *fn;
  /* make sure we get a feature node */
  fn = gt_feature_node_try_cast(*gn);
  luaL_argcheck(L, fn, 1, "not a feature node");
  lua_pushstring(L, gt_feature_node_get_source(fn));
  return 1;
}

// Assembly:
subq $0x28, %rsp
movq %rdi, 0x20(%rsp)
movq 0x20(%rsp), %rdi
movl $0x1, %esi
leaq 0xc836d(%rip), %rdx     # 0x173637
callq 0x559c0
movq %rax, 0x18(%rsp)
movq 0x18(%rsp), %rax
movq (%rax), %rdi
callq 0x241f0
movq %rax, 0x10(%rsp)
movb $0x1, %al
cmpq $0x0, 0x10(%rsp)
movb %al, 0xf(%rsp)
jne 0xab314
movq 0x20(%rsp), %rdi
movl $0x1, %esi
leaq 0xc843e(%rip), %rdx     # 0x173743
callq 0x55420
cmpl $0x0, %eax
setne %al
movb %al, 0xf(%rsp)
movb 0xf(%rsp), %al
movq 0x20(%rsp), %rax
movq %rax, (%rsp)
movq 0x10(%rsp), %rdi
callq 0x215a0
movq (%rsp), %rdi
movq %rax, %rsi
callq 0x50970
movl $0x1, %eax
addq $0x28, %rsp
retq
nopw %cs:(%rax,%rax)
// File: /workspace/github_c_makefile_star2_O0/genometools[P]genometools/src/gtlua/genome_node_lua.c
// Function: feature_node_lua_set_source
static int feature_node_lua_set_source(lua_State *L)
{
  const char *source;
  GtStr *source_str;
  GtGenomeNode **gn = check_genome_node(L, 1);
  GtFeatureNode *fn;
  /* make sure we get a feature node */
  fn = gt_feature_node_try_cast(*gn);
  luaL_argcheck(L, fn, 1, "not a feature node");
  source = luaL_checkstring(L, 2);
  source_str = gt_str_new_cstr(source);
  gt_feature_node_set_source(fn, source_str);
  gt_str_delete(source_str);
  return 0;
}

// Assembly:
subq $0x38, %rsp
movq %rdi, 0x30(%rsp)
movq 0x30(%rsp), %rdi
movl $0x1, %esi
leaq 0xc82cd(%rip), %rdx     # 0x173637
callq 0x559c0
movq %rax, 0x18(%rsp)
movq 0x18(%rsp), %rax
movq (%rax), %rdi
callq 0x241f0
movq %rax, 0x10(%rsp)
movb $0x1, %al
cmpq $0x0, 0x10(%rsp)
movb %al, 0xf(%rsp)
jne 0xab3b4
movq 0x30(%rsp), %rdi
movl $0x1, %esi
leaq 0xc839e(%rip), %rdx     # 0x173743
callq 0x55420
cmpl $0x0, %eax
setne %al
movb %al, 0xf(%rsp)
movb 0xf(%rsp), %al
movq 0x30(%rsp), %rdi
movl $0x2, %esi
xorl %eax, %eax
movl %eax, %edx
callq 0x558e0
movq %rax, 0x28(%rsp)
movq 0x28(%rsp), %rdi
callq 0x18f70
movq %rax, 0x20(%rsp)
movq 0x10(%rsp), %rdi
movq 0x20(%rsp), %rsi
callq 0x1ff10
movq 0x20(%rsp), %rdi
callq 0x1afc0
xorl %eax, %eax
addq $0x38, %rsp
retq
nop
// File: /workspace/github_c_makefile_star2_O0/genometools[P]genometools/src/gtlua/genome_node_lua.c
// Function: feature_node_lua_get_score
static int feature_node_lua_get_score(lua_State *L)
{
  GtGenomeNode **gn = check_genome_node(L, 1);
  GtFeatureNode *fn;
  /* make sure we get a feature node */
  fn = gt_feature_node_try_cast(*gn);
  luaL_argcheck(L, fn, 1, "not a feature node");
  if (gt_feature_node_score_is_defined(fn))
    lua_pushnumber(L, gt_feature_node_get_score(fn));
  else
    lua_pushnil(L);
  return 1;
}

// Assembly:
subq $0x28, %rsp
movq %rdi, 0x20(%rsp)
movq 0x20(%rsp), %rdi
movl $0x1, %esi
leaq 0xc821d(%rip), %rdx     # 0x173637
callq 0x559c0
movq %rax, 0x18(%rsp)
movq 0x18(%rsp), %rax
movq (%rax), %rdi
callq 0x241f0
movq %rax, 0x10(%rsp)
movb $0x1, %al
cmpq $0x0, 0x10(%rsp)
movb %al, 0xf(%rsp)
jne 0xab464
movq 0x20(%rsp), %rdi
movl $0x1, %esi
leaq 0xc82ee(%rip), %rdx     # 0x173743
callq 0x55420
cmpl $0x0, %eax
setne %al
movb %al, 0xf(%rsp)
movb 0xf(%rsp), %al
movq 0x10(%rsp), %rdi
callq 0x212b0
testb $0x1, %al
jne 0xab478
jmp 0xab49a
movq 0x20(%rsp), %rax
movq %rax, (%rsp)
movq 0x10(%rsp), %rdi
callq 0x21d30
movq (%rsp), %rdi
cvtss2sd %xmm0, %xmm0
callq 0x506d0
jmp 0xab4a4
movq 0x20(%rsp), %rdi
callq 0x506a0
movl $0x1, %eax
addq $0x28, %rsp
retq
nop
// File: /workspace/github_c_makefile_star2_O0/genometools[P]genometools/src/gtlua/genome_node_lua.c
// Function: feature_node_lua_set_score
static int feature_node_lua_set_score(lua_State *L)
{
  float sc;
  GtGenomeNode **gn = check_genome_node(L, 1);
  GtFeatureNode *fn;
  /* make sure we get a feature node */
  fn = gt_feature_node_try_cast(*gn);
  luaL_argcheck(L, fn, 1, "not a feature node");
  sc = luaL_checknumber(L, 2);
  gt_feature_node_set_score(fn, sc);
  return 0;
}

// Assembly:
subq $0x28, %rsp
movq %rdi, 0x20(%rsp)
movq 0x20(%rsp), %rdi
movl $0x1, %esi
leaq 0xc816d(%rip), %rdx     # 0x173637
callq 0x559c0
movq %rax, 0x10(%rsp)
movq 0x10(%rsp), %rax
movq (%rax), %rdi
callq 0x241f0
movq %rax, 0x8(%rsp)
movb $0x1, %al
cmpq $0x0, 0x8(%rsp)
movb %al, 0x7(%rsp)
jne 0xab514
movq 0x20(%rsp), %rdi
movl $0x1, %esi
leaq 0xc823e(%rip), %rdx     # 0x173743
callq 0x55420
cmpl $0x0, %eax
setne %al
movb %al, 0x7(%rsp)
movb 0x7(%rsp), %al
movq 0x20(%rsp), %rdi
movl $0x2, %esi
callq 0x55b80
cvtsd2ss %xmm0, %xmm0
movss %xmm0, 0x1c(%rsp)
movq 0x8(%rsp), %rdi
movss 0x1c(%rsp), %xmm0
callq 0x21330
xorl %eax, %eax
addq $0x28, %rsp
retq
nopl (%rax,%rax)
// File: /workspace/github_c_makefile_star2_O0/genometools[P]genometools/src/gtlua/genome_node_lua.c
// Function: feature_node_lua_get_phase
static int feature_node_lua_get_phase(lua_State *L)
{
  GtGenomeNode **gn = check_genome_node(L, 1);
  GtFeatureNode *fn;
  GtPhase phase;
  char phasebuf[2];
  /* make sure we get a feature node */
  fn = gt_feature_node_try_cast(*gn);
  luaL_argcheck(L, fn, 1, "not a feature node");
  phase = gt_feature_node_get_phase(fn);
  phasebuf[0] = GT_PHASE_CHARS[(int) phase];
  phasebuf[1] = '\0';
  lua_pushstring(L, phasebuf);
  return 1;
}

// Assembly:
subq $0x28, %rsp
movq %rdi, 0x20(%rsp)
movq 0x20(%rsp), %rdi
movl $0x1, %esi
leaq 0xc80cd(%rip), %rdx     # 0x173637
callq 0x559c0
movq %rax, 0x18(%rsp)
movq 0x18(%rsp), %rax
movq (%rax), %rdi
callq 0x241f0
movq %rax, 0x10(%rsp)
movb $0x1, %al
cmpq $0x0, 0x10(%rsp)
movb %al, 0x9(%rsp)
jne 0xab5b4
movq 0x20(%rsp), %rdi
movl $0x1, %esi
leaq 0xc819e(%rip), %rdx     # 0x173743
callq 0x55420
cmpl $0x0, %eax
setne %al
movb %al, 0x9(%rsp)
movb 0x9(%rsp), %al
movq 0x10(%rsp), %rdi
callq 0x21f60
movl %eax, 0xc(%rsp)
movslq 0xc(%rsp), %rcx
leaq 0xb460e(%rip), %rax     # 0x15fbe0
movb (%rax,%rcx), %al
movb %al, 0xa(%rsp)
movb $0x0, 0xb(%rsp)
movq 0x20(%rsp), %rdi
leaq 0xa(%rsp), %rsi
callq 0x50970
movl $0x1, %eax
addq $0x28, %rsp
retq
nopw (%rax,%rax)
// File: /workspace/github_c_makefile_star2_O0/genometools[P]genometools/src/gtlua/genome_node_lua.c
// Function: feature_node_lua_set_phase
static int feature_node_lua_set_phase(lua_State *L)
{
  const char *p;
  GtGenomeNode **gn = check_genome_node(L, 1);
  GtFeatureNode *fn;
  /* make sure we get a feature node */
  fn = gt_feature_node_try_cast(*gn);
  luaL_argcheck(L, fn, 1, "not a feature node");
  p = luaL_checkstring(L, 2);
  luaL_argcheck(L, strlen(p) == 1 && strchr(GT_PHASE_CHARS, p[0]),
                2, "must be one of '" GT_PHASE_CHARS "'");
  gt_feature_node_set_phase(fn, gt_phase_get(p[0]));
  return 0;
}

// Assembly:
subq $0x38, %rsp
movq %rdi, 0x30(%rsp)
movq 0x30(%rsp), %rdi
movl $0x1, %esi
leaq 0xc801d(%rip), %rdx     # 0x173637
callq 0x559c0
movq %rax, 0x20(%rsp)
movq 0x20(%rsp), %rax
movq (%rax), %rdi
callq 0x241f0
movq %rax, 0x18(%rsp)
movb $0x1, %al
cmpq $0x0, 0x18(%rsp)
movb %al, 0x17(%rsp)
jne 0xab664
movq 0x30(%rsp), %rdi
movl $0x1, %esi
leaq 0xc80ee(%rip), %rdx     # 0x173743
callq 0x55420
cmpl $0x0, %eax
setne %al
movb %al, 0x17(%rsp)
movb 0x17(%rsp), %al
movq 0x30(%rsp), %rdi
movl $0x2, %esi
xorl %eax, %eax
movl %eax, %edx
callq 0x558e0
movq %rax, 0x28(%rsp)
movq 0x28(%rsp), %rdi
callq 0xb240
cmpq $0x1, %rax
jne 0xab6b3
movq 0x28(%rsp), %rax
movsbl (%rax), %esi
leaq 0xb4541(%rip), %rdi     # 0x15fbe0
callq 0xb1f0
movq %rax, %rcx
movb $0x1, %al
cmpq $0x0, %rcx
movb %al, 0x16(%rsp)
jne 0xab6d3
movq 0x30(%rsp), %rdi
movl $0x2, %esi
leaq 0xc80a8(%rip), %rdx     # 0x17376c
callq 0x55420
cmpl $0x0, %eax
setne %al
movb %al, 0x16(%rsp)
movb 0x16(%rsp), %al
movq 0x18(%rsp), %rax
movq %rax, 0x8(%rsp)
movq 0x28(%rsp), %rax
movsbl (%rax), %edi
callq 0x165f0
movq 0x8(%rsp), %rdi
movl %eax, %esi
callq 0x1fff0
xorl %eax, %eax
addq $0x38, %rsp
retq
nopw %cs:(%rax,%rax)
// File: /workspace/github_c_makefile_star2_O0/genometools[P]genometools/src/gtlua/genome_node_lua.c
// Function: feature_node_lua_get_attribute
static int feature_node_lua_get_attribute(lua_State *L)
{
  GtGenomeNode **gn = check_genome_node(L, 1);
  const char *attr = NULL, *attrval = NULL;
  attr = luaL_checkstring(L, 2);
  GtFeatureNode *fn;
  /* make sure we get a feature node */
  fn = gt_feature_node_try_cast(*gn);
  luaL_argcheck(L, fn, 1, "not a feature node");
  attrval = gt_feature_node_get_attribute(fn, attr);
  if (attrval)
    lua_pushstring(L, attrval);
  else
    lua_pushnil(L);
  return 1;
}

// Assembly:
subq $0x38, %rsp
movq %rdi, 0x30(%rsp)
movq 0x30(%rsp), %rdi
movl $0x1, %esi
leaq 0xc7f0d(%rip), %rdx     # 0x173637
callq 0x559c0
movq %rax, 0x28(%rsp)
movq $0x0, 0x20(%rsp)
movq $0x0, 0x18(%rsp)
movq 0x30(%rsp), %rdi
movl $0x2, %esi
xorl %eax, %eax
movl %eax, %edx
callq 0x558e0
movq %rax, 0x20(%rsp)
movq 0x28(%rsp), %rax
movq (%rax), %rdi
callq 0x241f0
movq %rax, 0x10(%rsp)
movb $0x1, %al
cmpq $0x0, 0x10(%rsp)
movb %al, 0xf(%rsp)
jne 0xab79e
movq 0x30(%rsp), %rdi
movl $0x1, %esi
leaq 0xc7fb4(%rip), %rdx     # 0x173743
callq 0x55420
cmpl $0x0, %eax
setne %al
movb %al, 0xf(%rsp)
movb 0xf(%rsp), %al
movq 0x10(%rsp), %rdi
movq 0x20(%rsp), %rsi
callq 0x1fde0
movq %rax, 0x18(%rsp)
cmpq $0x0, 0x18(%rsp)
je 0xab7cf
movq 0x30(%rsp), %rdi
movq 0x18(%rsp), %rsi
callq 0x50970
jmp 0xab7d9
movq 0x30(%rsp), %rdi
callq 0x506a0
movl $0x1, %eax
addq $0x38, %rsp
retq
nopw %cs:(%rax,%rax)