// File: /workspace/github_c_makefile_star2_O2/genometools[P]genometools/src/extended/spec_visitor.c
// Function: gt_spec_visitor_new
GtNodeVisitor* gt_spec_visitor_new(const char *specfile, GtSpecResults *res,
                                   GtError *err)
{
  GtNodeVisitor *nv;
  GtSpecVisitor *sv;
  int had_err = 0;
  gt_assert(specfile);
  nv = gt_node_visitor_create(gt_spec_visitor_class());
  sv = spec_visitor_cast(nv);
  sv->L = luaL_newstate();
  if (!sv->L) {
    gt_error_set(err, "cannot create new Lua state");
    gt_node_visitor_delete(nv);
    return NULL;
  }
  spec_luaL_opencustomlibs(sv->L, spec_luasecurelibs);
  spec_luaL_opencustomlibs(sv->L, spec_luainsecurelibs);
  sv->filename = gt_str_new_cstr(specfile);
  sv->res = res;
  sv->type_checker = NULL;
  sv->type_specs = gt_hashmap_new(GT_HASH_STRING, gt_free_func, gt_free_func);
  sv->graph_context = gt_array_new(sizeof (GtFeatureNode*));
  sv->runtime_fail_hard = false;

  had_err = spec_init_lua_env(sv, gt_error_get_progname(err), err);
  if (!had_err) {
    if (luaL_loadfile(sv->L, specfile) || lua_pcall(sv->L, 0, 0, 0)) {
      gt_error_set(err, "%s", lua_tostring(sv->L, -1));
      gt_node_visitor_delete(nv);
      return NULL;
    }
  } else {
    gt_node_visitor_delete(nv);
    return NULL;
  }
  return nv;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
testq %rdi, %rdi
je 0x11c693
movq %rdx, %r14
movq %rsi, %r13
movq %rdi, %r12
callq 0x11ba14
movq %rax, %rdi
callq 0x102da0
movq %rax, %rbx
callq 0x11ba14
movq %rax, %rdi
movq %rbx, %rsi
callq 0x102dfe
movq %rax, %r15
callq 0x1df5e2
movq %rax, 0x10(%r15)
testq %rax, %rax
je 0x11c5de
leaq 0x316de3(%rip), %rsi    # 0x432f60
movq %rax, %rdi
callq 0x11c6cb
movq 0x10(%r15), %rdi
leaq 0x316e30(%rip), %rsi    # 0x432fc0
callq 0x11c6cb
movq %r12, %rdi
callq 0xacbd1
movq %rax, 0x18(%r15)
movq %r13, 0x68(%r15)
andq $0x0, 0x28(%r15)
leaq -0x88972(%rip), %rdx    # 0x9383f
pushq $0x1
popq %rdi
movq %rdx, %rsi
callq 0x8f330
movq %rax, 0x20(%r15)
pushq $0x8
popq %rdi
callq 0x5809c
movq %rax, 0x60(%r15)
movb $0x0, 0x70(%r15)
movq %r14, %rdi
callq 0x8a001
movq %rax, %r13
movq 0x10(%r15), %rdi
leaq 0x217b81(%rip), %rdx    # 0x333d68
movl $0xffffd8f0, %esi       # imm = 0xFFFFD8F0
callq 0x1dc63b
movq 0x10(%r15), %rdi
leaq 0x217b84(%rip), %rsi    # 0x333d80
callq 0x1dc009
movq 0x10(%r15), %rdi
leaq 0x66e(%rip), %rsi       # 0x11c87a
xorl %edx, %edx
callq 0x1dc3ec
movq 0x10(%r15), %rdi
pushq $-0x3
popq %rbp
movl %ebp, %esi
callq 0x1dcb75
movq 0x10(%r15), %rdi
leaq 0x217b6d(%rip), %rsi    # 0x333d99
callq 0x1dc009
movq 0x10(%r15), %rdi
leaq 0x645(%rip), %rsi       # 0x11c881
xorl %edx, %edx
callq 0x1dc3ec
movq 0x10(%r15), %rdi
movl %ebp, %esi
callq 0x1dcb75
movq 0x10(%r15), %rdi
leaq 0x217c79(%rip), %rsi    # 0x333ed2
callq 0x1dc009
movq 0x10(%r15), %rdi
leaq 0x620(%rip), %rsi       # 0x11c889
xorl %edx, %edx
callq 0x1dc3ec
movq 0x10(%r15), %rdi
movl %ebp, %esi
callq 0x1dcb75
movq 0x10(%r15), %rdi
leaq 0x217cc8(%rip), %rsi    # 0x333f4e
callq 0x1dc009
movq 0x10(%r15), %rdi
leaq 0x6ad(%rip), %rsi       # 0x11c943
xorl %edx, %edx
callq 0x1dc3ec
movq 0x10(%r15), %rdi
movl %ebp, %esi
callq 0x1dcb75
movq 0x10(%r15), %rdi
leaq 0x217cc4(%rip), %rsi    # 0x333f77
callq 0x1dc009
movq 0x10(%r15), %rdi
leaq 0x83b(%rip), %rsi       # 0x11cafe
xorl %edx, %edx
callq 0x1dc3ec
movq 0x10(%r15), %rdi
movl %ebp, %esi
callq 0x1dcb75
movq 0x10(%r15), %rdi
leaq 0x1f54ce(%rip), %rdx    # 0x3117ae
movl $0xffffd8ee, %esi       # imm = 0xFFFFD8EE
callq 0x1dc63b
movq 0x10(%r15), %rdi
leaq 0x21b397(%rip), %rsi    # 0x33768c
callq 0x1dc009
movq 0x10(%r15), %rdi
leaq 0x934(%rip), %rsi       # 0x11cc39
xorl %edx, %edx
callq 0x1dc3ec
movq 0x10(%r15), %rdi
movl %ebp, %esi
callq 0x1dcb75
movq 0x10(%r15), %rdi
leaq 0x217ca2(%rip), %rsi    # 0x333fc4
callq 0x1dc009
movq 0x10(%r15), %rdi
leaq 0xa56(%rip), %rsi       # 0x11cd88
xorl %edx, %edx
callq 0x1dc3ec
movq 0x10(%r15), %rdi
movl %ebp, %esi
callq 0x1dcb75
movq 0x10(%r15), %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x1dc7bd
movq 0x10(%r15), %rdi
leaq 0x20485b(%rip), %rsi    # 0x320bb7
callq 0x1dc009
movq 0x10(%r15), %rdi
leaq 0xb6b(%rip), %rsi       # 0x11ced7
xorl %edx, %edx
callq 0x1dc3ec
movq 0x10(%r15), %rdi
movl %ebp, %esi
callq 0x1dcb75
movq 0x10(%r15), %rdi
leaq 0x1f35ec(%rip), %rsi    # 0x30f975
callq 0x1dc009
movq 0x10(%r15), %rdi
leaq 0xc47(%rip), %rsi       # 0x11cfe0
xorl %edx, %edx
callq 0x1dc3ec
movq 0x10(%r15), %rdi
movl %ebp, %esi
callq 0x1dcb75
movq 0x10(%r15), %rdi
leaq 0x221ae8(%rip), %rsi    # 0x33de9e
callq 0x1dc009
movq 0x10(%r15), %rdi
leaq 0xcf8(%rip), %rsi       # 0x11d0be
xorl %edx, %edx
callq 0x1dc3ec
movq 0x10(%r15), %rdi
movl %ebp, %esi
callq 0x1dcb75
movq 0x10(%r15), %rdi
leaq 0x24c030(%rip), %rsi    # 0x368413
callq 0x1dc009
movq 0x10(%r15), %rdi
leaq 0xda9(%rip), %rsi       # 0x11d19c
xorl %edx, %edx
callq 0x1dc3ec
movq 0x10(%r15), %rdi
movl %ebp, %esi
callq 0x1dcb75
movq 0x10(%r15), %rdi
leaq 0x216cff(%rip), %rsi    # 0x33310f
callq 0x1dc009
movq 0x10(%r15), %rdi
leaq 0xe5a(%rip), %rsi       # 0x11d27a
xorl %edx, %edx
callq 0x1dc3ec
movq 0x10(%r15), %rdi
movl %ebp, %esi
callq 0x1dcb75
movq 0x10(%r15), %rdi
leaq 0x21797a(%rip), %rdx    # 0x333db7
movl $0xffffd8ee, %esi       # imm = 0xFFFFD8EE
callq 0x1dcb19
movq 0x10(%r15), %rdi
leaq 0xf06(%rip), %rsi       # 0x11d358
xorl %edx, %edx
callq 0x1dc3ec
movq 0x10(%r15), %rdi
leaq 0x1f17bd(%rip), %rdx    # 0x30dc21
movl $0xffffd8ee, %esi       # imm = 0xFFFFD8EE
callq 0x1dcb19
movq 0x10(%r15), %rdi
leaq 0xf92(%rip), %rsi       # 0x11d40b
xorl %edx, %edx
callq 0x1dc3ec
movq 0x10(%r15), %rdi
leaq 0x1eefe8(%rip), %rdx    # 0x30b473
movl $0xffffd8ee, %esi       # imm = 0xFFFFD8EE
callq 0x1dcb19
movq 0x10(%r15), %rdi
leaq 0x217920(%rip), %rsi    # 0x333dc0
callq 0x1de9ee
movq 0x10(%r15), %rdi
leaq 0x217927(%rip), %rsi    # 0x333dd7
callq 0x1dc009
movq 0x10(%r15), %rdi
leaq 0x101a(%rip), %rsi      # 0x11d4da
xorl %edx, %edx
callq 0x1dc3ec
movq 0x10(%r15), %rdi
movl %ebp, %esi
callq 0x1dc936
movq 0x10(%r15), %rdi
leaq 0x217902(%rip), %rsi    # 0x333ddf
callq 0x1dc009
movq 0x10(%r15), %rdi
leaq 0x1ce533(%rip), %rsi    # 0x2eaa20
callq 0x1dc009
movq 0x10(%r15), %rdi
movl %ebp, %esi
callq 0x1dc936
callq 0xacb84
movq %rax, %rbp
pushq $0x20
popq %rsi
movq %r13, %rdi
callq 0x6c46d
movq %rbp, %rdi
movq %r13, %rsi
movq %rax, %rdx
callq 0xacd9e
movq %rbp, %rdi
callq 0xad1fa
movq %rax, %rdi
xorl %esi, %esi
callq 0x8f124
movq %rax, %r13
movq %rbp, %rdi
callq 0xae103
leaq 0x2178a4(%rip), %rsi    # 0x333de6
movq %r13, %rdi
callq 0xacbfb
movq 0x10(%r15), %rbp
movq %r13, %rdi
callq 0xad1fa
movq %rbp, %rdi
movq %rax, %rsi
callq 0x1df308
testl %eax, %eax
jne 0x11c57c
movq 0x10(%r15), %rdi
xorl %esi, %esi
xorl %edx, %edx
xorl %ecx, %ecx
callq 0x1dcedd
testl %eax, %eax
je 0x11c60b
movq 0x10(%r15), %rdi
pushq $-0x1
popq %rsi
xorl %edx, %edx
callq 0x1dbb73
leaq 0x24c918(%rip), %rsi    # 0x368ea9
movq %r14, %rdi
movq %rax, %rdx
xorl %eax, %eax
callq 0x89dbb
movq %r13, %rdi
callq 0xae103
movq 0x10(%r15), %rdi
leaq 0x31cbf7(%rip), %rsi    # 0x4391a8
callq 0x1dc4ec
movq 0x10(%r15), %rdi
movq %r15, %rsi
callq 0x1dc4ec
movq 0x10(%r15), %rdi
movl $0xffffd8f0, %esi       # imm = 0xFFFFD8F0
callq 0x1dc936
movaps 0x2175d9(%rip), %xmm0   # 0x333bb0
movups %xmm0, 0x30(%r15)
jmp 0x11c5ef
leaq 0x21741c(%rip), %rsi    # 0x333a01
movq %r14, %rdi
xorl %eax, %eax
callq 0x89dbb
movq %rbx, %rdi
callq 0x10327a
xorl %ebx, %ebx
movq %rbx, %rax
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %r13, %rdi
callq 0xae103
movq 0x10(%r15), %rdi
leaq 0x31cb8a(%rip), %rsi    # 0x4391a8
callq 0x1dc4ec
movq 0x10(%r15), %rdi
movq %r15, %rsi
callq 0x1dc4ec
movq 0x10(%r15), %rdi
movl $0xffffd8f0, %esi       # imm = 0xFFFFD8F0
callq 0x1dc936
movaps 0x21756c(%rip), %xmm0   # 0x333bb0
movups %xmm0, 0x30(%r15)
movq 0x10(%r15), %rdi
movq %r12, %rsi
callq 0x1df308
testl %eax, %eax
jne 0x11c66c
movq 0x10(%r15), %rdi
xorl %esi, %esi
xorl %edx, %edx
xorl %ecx, %ecx
callq 0x1dcedd
testl %eax, %eax
je 0x11c5f9
movq 0x10(%r15), %rdi
pushq $-0x1
popq %rsi
xorl %edx, %edx
callq 0x1dbb73
leaq 0x24c828(%rip), %rsi    # 0x368ea9
movq %r14, %rdi
movq %rax, %rdx
xorl %eax, %eax
callq 0x89dbb
jmp 0x11c5ef
movq 0x31b8ce(%rip), %rax    # 0x437f68
movq (%rax), %rdi
leaq 0x1c896f(%rip), %rsi    # 0x2e5013
leaq 0x1df204(%rip), %rdx    # 0x2fb8af
leaq 0x217609(%rip), %rcx    # 0x333cbb
leaq 0x21752d(%rip), %r8     # 0x333be6
movl $0x3b0, %r9d            # imm = 0x3B0
xorl %eax, %eax
callq 0x17a50
callq 0x17390